json_encodeによる出力データの整形

jsonデータを生成する時には、確認し易くするため上記の方法で整形しているのだが、今回は何故かJSON_PRETTY_PRINTが有効にならず、一行の長~いテキストとして出力されてしまうのです。
オンライン json validator でチェックしても、フォーマットとしては全く問題がないにも拘わらず整形してくれないように見えます。
なぜか?
ググってみると回答がありました。
以下の通りにせよと。

‘Content-type: Application/JSON’ がないと、ブラウザにより’Content-type: Application/HTML’ と解釈されてしまい、1行の長~いテキストとして表示されるの原因だそうです。

SQLilte3のUPDATEに大いにはまる

とあるデータを入手したのだが、それには名称としてカナ名しか設定されていないので、次のような漢字名をDB(SQLite3)に追加するだけの単純なDB更新プログラムを作成してみた。

しかし、処理は正常に終了するものの、DBは更新されないのである。
原因不明なまま、悩まされること約1日。
漸くわかった、その原因。

bindParam の指定順番

 

の部分を

とすることで、更新が正常に行われるようになった。
何とも解せないのは、プレースホルダに “?” を使った次のような場合、

その指定順序は出現順に nameKanji、rkey としなければならないのは当然としても、名前(:name)を用いた場合は順序には関係なく指定できると考えていたのだが、どうもそうではないらということだ。

PDO のバグのような気はするのだが。。。私の PHP のバージョンが 7.2 と古いのでその所為かもしれないし、V8.0 以降はそんなバグっぽい現象はとっくに解消しているのかもしれないので、これ以上とやかく言うのはやめ現行の仕様に則り使って行くしかないでしょうな(くっ)。

それにしても無駄な時間を費やしたものだ。とほほ・・・

GoogleMapsと山(2)

やまがた百名山

最近、youtube を見る機会が増えてきたが、中でも故郷山形の酷道・険道と称した動画が面白い。
車に積んだカメラで撮影しただけの動画ではあるが、故郷とは言え全く見たくことのない道路沿いの風景を見るのは楽しいものである。
特に、道路沿いの山々に興味を覚える。綺麗なオムスビ型の山や、奇妙な形の山、岩が露出した山などなど。
これを見ると、つい Google Map で位置を特定し、地理院地図でその山の名前を調べてしまうのである。

そのようなことを暫く行っていると、「やまがた百名山」というものがあることが分かってきた。どんな山が百名山に指定されているのかそのリストが欲しかったのだが、残念ながら「やまがた山」から一つ一つ調べるしかないらしい。
どうしても一覧表が欲しかったので、自分で作ったのが「やまがた百名山一覧」で、その位置を Google Map に示したのが「やまがた百名山の位置」である。
この百名山は、県内の山全体から登山家とか登山愛好者が厳選したものではなく、山形県を村山、最上、置賜、庄内の4地域に分け、その中から地元住民に親しまれている山を100座選んだものらしい。そのためか、鳥海、飯豊のような2000m を超える山もあれば、柏木山(飛島、58m)のような果たしてこれが山かと疑いたくなるようなものまで含まれている。しかし、国内には標高3mの山(日和山、宮城県仙台市)があって、人々がそれを「山」と呼べば高さに関係なく山になるらしいので、56mもありその地域で山と呼んでいればもう立派な山なのだろう。
生まれ育った寒河江市からは、1座のみ葉山(村山葉山、1462m)がエントリされている。身近に慣れ親しんできた長岡山(160m)、高瀬山(123m)は選外。名山かどうかはさておき、一番の思い出になる山なので一覧には、「番外」として記載しておくことにした。

DataTables

「やまがた百名山一覧」を作成する過程において、前回のブログで述べた「日本の主な山岳」も山名(漢字)と山名(かな)にそれぞれ地理院地と Google Map にリンクを張った「日本の主な山岳一覧」を作成した。
データ件数が1000件を超えると、さすがにこのままでは扱い難い。
Excelのようなフィルタリング機能、例えば、山形県のみを表示できるような機能を実現できるライブラリがないか探ってみた次第である。
そこで探し当てたのがこの「DataTables」で、HTMLテーブルに様々な機能を設定するjQuery ライブラリである。
これを使用すると、先程の「日本の主な山岳一覧」がどのように変化するかこちらを見て戴きたい。ちょっとプロっぽい体裁になっていると思う。
テーブル右上に「検索」という入力ボックスが配置されているが、ここに、例えば「山形県」とすると山形県を含むデータだけに絞ることができるので、フィルタリングとして使うことのできるものである。さらに、1ページ当たりの表示件数変更や、列ごとに昇順(▲)・降順(▼)に並べ替えることなども可能である。
この DataTables の機能については、DataTablesのサイトに詳細な説明があるのでそちらを参考に願いたい。
以上

GoogleMapsと山(1)

1990年代の後半だったろうか、インターネットも普及し、Yahooなどのサイトで地図を表示できた。
不慣れな場所への出張する場合など、駅からのルートを調べるのに良く使用したものだ。
当時の地図は現在のものとは異なり、書籍の「区分地図」のようなもので、ある場所から上下左右、斜め方向にページ単位でしか移動できないものであった。
これで困るのは、地図の周辺部分の地域を調べるような場合、上に移動したり、右に移動したり、元の位置に戻したり、現在よりは遥かに低速な回線のもとページを行ったり来たりしなければならないことにあった。「この地点を地図中央にできたらなぁ」と何度思ったことか。

そこに登場したのが Google マップであった。
調べたい地点を中央に配置することも、目的地までのルートをドラッグすることでどこまでも辿って行ける、夢のような地図であった。
これにより、かつてのYahoo地図のような紙芝居型地図は淘汰され、Google Map 型の地図に置き変わり現在に至っている。

Google Map には文句の言いようがないくらい満足しているのだが、唯一不満な点は、「山」に関する情報が欠落している点だ。
富士山や蔵王山など名だたる山の位置は地図上に記載されているものの、本当に知りたい標高の記載がないのである。
これは、登山家でも愛好家でもないのに、標高だけは知りたいという個人の単なる嗜好によるものである。

そこで、無いものは無いと諦め、自分で作ってしまうことを考えた。
必要なデータは「山名とその位置、標高」であるが、幸に、国土地理院の「日本の主な山岳一覧」に1060程の山がリストされている。
(後日、やまがた百名山を「日本の主な山岳一覧」と照合したところマッチしたものは10件程だったので、実際の山の数は10,000を超えるのかもしれない。)
これを基に作ったのが「山情報の表示」である。デフォルトの表示位置が山形県になっているのは、「山」に因んでそうしたのではなく、単に私の生まれ故郷の山形県に対する郷土愛によるものであることを敢て申し上げておく。

Windows11 仮想マシンプラットホーム下におけるVirtualBoxへのLinuxインストール

漸く、Windos11にアップグレードした。
早速 VirtualBoxのLinux Mint (Mate) の動作確認。
残念ながら「セッションを開けませんでした」とのエラーで動作せず。
一旦、Linux Mint (Mate) を「除去」し、再インストールを試みるも
同じエラーでインストールさえもできない状態。

藁にもすがる思いでググってみると、有力な情報が一件。
プロセッサー数」を変更するというもの。
これがビンゴ!
インストールも動作も完璧で、windows10 では動作しなかった Ubuntu も動作するようになった。

同じようなエラーで悩んでいる方は、是非、これを試してみる価値があると思ので
プロセッサ数の変更手順を以下に示しておく。

1. VirtualBox を起動し、「設定」を選択する。

2. 左サイドメニューから「システム」を選択する。

3. 上側のタブの「プロセッサー」を選択して、「プロセッサー数」を1 から 2 に変更する。

4. 「OK」をクリックして「設定」を終了する。

(注意事項)
インターネト上には様々な対策が投稿されているが、WSL2上にもUbuntu をインストールしている場合
絶対にしてはならない対策は、
仮想マシンプラットホームのチェックを外す
こと。
WSL2が動かなくなるので要注意だ!

Chromebook – ローカルネットワークゲートウェイにアクセスできません

環境

– 機種:Lenovo ChromeOS
– 発生日時:2022/07/30 19:00~2022/07/31 19:00

現象

7/30 19:00 頃、Wi-Fi とは接続できているのに「ローカルネットワークゲートウェイにアクセスできません」と言うエラーが発生しインターネットに接続できない。

対策

インターネット上に公開されている様々な対策を参考に、以下のような対策を試みた。

  1. 他のデバイス(windows10、iPhone)のインターネット接続確認:問題なし。
  2. 電源 ON/OFF による再起動(数回):状態に変化なし
  3. Wi-Fi 通信タイプ A/G 切り替え:状態に変化なし
  4. 最終手段 Powerwash:状態悪化
  5. 暫く時間を置いた 7/31 19:00 頃に再度電源投入:完全復旧

結論

結局、何が原因かも分からず、何の対策も効果がないままに復旧してしまった。
強いて言うなら、行って効果のあった対策は、もう捨てようと諦めて時間を少し空けたことのみ。

対策が行き詰まり期待を込めて行った Powerwash は、ネットに接続できない状態では再インストールが出来ないため、状況としては、改善どころか悪化する結果になってしまった。

以上から、私からのアドバイスは、「この現象に対する処置は、余り焦らず暫く時間を置くこと以外にはない」ということである。

最後に

このPCでインターネットに接続できなくなったのはこれが初めてではない。過去の場合においても、採った対策に効果は全くなく、時間が解決してくれたものばかりである。この不安定さが気になる。
これでは、メインとして使用するのは無理で、サブ機として使って行くしかないのだろう

Jupyter Notebookで仮想環境はどうやって指定するの?

PythonでPostgreSQLとの接続テストをするため、
‘psql’ という仮想環境を作成した。
でも、この環境を Jupyter Notebook ではどう指定するの?

これには、以下のような手続きが必要になる。

設定済みのpsql 仮想環境を例にとる。

1. CLIによる操作

コマンドプロンプト、PowerShell、Windowsターミナル などを使用する。

(1) 仮想環境に入る

(2) ipykernelのインストール

(3) Jupyter へカーネル追加

※**psql_env**の部分は好きな名称でよい。

(4) Juypter Notebookの起動

Juypter Notebook を起動する。

2. Jupyter Notebook での操作

表示された先頭画面で設定した仮想環境psql_envを選択する。

WSL2とVM VirtualBoxの共存

Windows 内にWSL2をインストールし、それにUbuntuをインストールすれば、あえて VM VirtualBox(以下「VM」)をインストールする必要はないのかもしてない。

しかし、systemctl コマンドをどうしても使わなけばならないような場面に遭遇してみると、VM 上の Linux もやはり必要になってくる。

Windows10 Home において、WSL2とVM の共存に関する情報は様々目にする。

VMのバージョンの問題とか、「Windowsの機能の有効化または無効化」の「Windowsハイパーバイザープラットホーム」を有効化するとか。ほぼ同じような内容のものばかりだ。

だが、私が知りたいことと、この対策内容の間にはギャップがあるような気がしてならない。

私が知りたいのは、「VM 上にインストールした Ubuntu」を動かす方法についてだ。

インストールには問題なくできるし、インストールした「Ubuntu」を起動するとログイン画面までは表示できる。

しかし、パスワードを入力して送信した段階で動作は完全停止。

VMの機能はパスワード入力まで。

後は Ubuntu の問題。

とすれば、確かにWSL2とVMの共存は出来ているのだろう。

が、残念ながら Ubuntu は動かない

これが、私のPC環境での結論である。

しかし、捨てる神あれば拾う神あり!

それは、Linux Mint の Mate 版

Cinnamon はダメ。インストール直後は問題なく動作したものの

ソフトウェアをアップデートした途端、キーボードの接続が切れ

全く操作不能になってしまうという問題が発生してしまう。

何度もチャレンジしたが、結果は同じ。

Mateでは、これまでのところ当該事象は発生していないので、これを使うべきだろう。

PostgreSQL接続時に「authentication requires libpq version 10 or above」が発生

1. 事象

PHPからPostgreSQLに接続しようとすると、pg_connect(): Unable to connect to PostgreSQL server: SCRAM authentication requires libpq version 10 or above.というエラーが発生する。

2. 環境

– windows10
– xampp
– PHP 7.2
– PostgresSQL 14.4

3. 原因

PostgreSQLの認証方式SCRAM-SHA-256に基づいたエラー。
具体的には、「この認証方式にはlibpq 10以降が必要だが、使用中のバージョンは libpq 9以前のものである」というもの。

3.1 libpq のバージョン確認方法

xamppの場合。
– エクスプローラで C:\xampp\php に移動
libpq を、右クリック→プロパティを選択
– プロパティ画面の詳細タブを選択

<div style=”clear:both;”></div>

4. 対策

PHP を、バージョン8以降に更新すればlibpq 10がインストールされるとのこと(未確認)。
PHPを何らかの事情でバージョンアップできない場合は、認証方式を以下の通り変更する。(stackoverflow から)

  1. Step 1: C:\Program Files\PostgreSQL\14\data から postgresql.confを探し、password_encryption = md5を設定する(96行目付近)。
  2. Step 2: 同じ C:\Program Files\PostgreSQL\14\data から pg_hba.conf を探し、METHOD 列の scram-sha-256 を全て md5 に変更する。(85行目付近から最後まで)
    (上では、scram-sha-256をコメントアウトし、md5の行を追加している。)
  3. Step 3: windowsターミナル(または、コマンドプロンプトやPoweshee)を開き、 ‘psql -U postgres’ を実行して、インストール時のパスワードを入力する(パスワードは不要かもしれない)。
  4. Step 4: 次に、パスワードを再設定する(同じもので良い)。
  5. 最後に: PostgreSQLとApacheを再起動する。

5. 参考

参考に、PHP 接続確認用のプログラムを添付する。

6. その他

Ruby Rails でも同様のエラーが発生するとのこと。
対策は、こちらを参考のこと。

(追記)この対策以前、R からも接続できなかったが、今日再度実行したら接続できたことからすると、原因はこの認証方式にあったものと思考される。
実行例を以下に示す。

なお、dvdrental データベースの作成方法は、こちらを参考。

Windows10 VirtualBox への Ubuntu 22.04 インストール対策

以前の投稿で、Windows10 VirtualBox への Ubuntu 22.04 インストールに関する問題点を書いた。

Ubuntu 22.04 インストールできず

その解決策が「4. Changing the window resolution」に記載されている。
余分な操作も書いてあるので、それを省いたのが以下の操作である。

(1)「設定」を選択




VitualBox マネージャー画面から、
① インストール対象のOSを選択
② 「設定」アイコンをクリック

(2)ディスプレイの設定


① 左メニューから「ディスプレイ」を選択
② グラフィックスコントローラ(G)選択ボックスの値を「VMSVGA」から「VBoxSVGA」に変更
③ {OK」をクリック

これで設定は完了。Ubuntu のインストールを開始する。

日本語インストールで、画面下部がいまだカットされている場合は、マウスを使って画面を拡大すれば非表示部分が表示されるようになる(この操作は最初の1回のみで、以降はこの画面サイズとなる)。

【重要】
グラフィックスコントローラの値を「VBoxSVGA」のままログインするとハングアップしてしまうので注意が必要である。
ハングアップしてしまったら、一旦「×」ボタンでシャットダウンし、グラフィックスコントローラ選択ボックスの値を「VMSVGA」に戻し、Ubuntu を再起動すれば正しくログインが可能になるはずである。

VirtualBox への Ubuntu インストールについては、「Ubuntu Tutorial」に詳しく書いてあるのでそちらを参考にすると良い。