刹那(せつな)の瞬き

Willkömmen! Ich heiße Setsuna. Haben Sie etwas Zeit für mich?

Excel 2019 for MacにWebクエリ経由でデータを渡してみる

Excel 2019 for Mac には外部データを取り込む手段のひとつに Web クエリがあります。

少なくとも Excel 2000 の頃には既に存在していた機能で、大まかに言えば Web ベージにある <table> 要素を抽出して Excel シート上に転記するものです。

流行り廃りが激しい Web 系の機能なのに 20 年以上も存在してるなんて!

1. 思ったこと

現存してるのは良いのですが、Excel 2019 for Mac ではどうなのでしょう。

Excel にデータ提供する側としては、Power Query (Get & Transform) 以外の手段にも興味があります。そもそも手段は TPO に合わせるので、いくつあっても困りません。

当然と言えば当然なのですが、Excel for Mac の場合、Windows 版で問題ない VBA が動作しない場合があります。特に ActiveX が絡む CreateObject() は絶望的です。
また、WEBSERVICE(), FILTERXML()等のWeb 系関数は値を返しません。

とにかく Windows 版での当たり前が Mac では通用しない事は多々あります。
なので、過去の経験も踏まえて検証してみました。

....

例えば、このような テーブルが Web サイトの表示ページ内にあるとします。

番号 文字列 日付 数値
1 りんご🍎 2018-01-03 100
22 みかん🍊 2021-11-21 1,200
333 キウイ🥝 2022-04-10 12,3450.25

Web クエリを利用すれば、この内容をそのまま Excel シート上に展開できます。

基本的にインポート系のデータ取り込みは初回限りですが、Web クエリで取り込んだデータは再読み込みが可能です。常に最新のデータを表示できるので、日々変化するデータを照会する手段としては便利だと思います。

Web クエリの実行時にテーブルと見なすのは <table> 要素だけです。
今時の HTML ドキュメントでは CSS で <div>, <lu>, <li> タグ等のスタイルを操作してテーブルを表現する構造もありますが、その場合は Excel に読み込む事ができません。

....

一方、Excel にデータを提供する側の視点で考えると「 http レスポンスに <table> 要素を返せば、後は Excel が良いようにしてくれる」機能にも見えます。

つまりは、独自にデータ照会用の http サーバを用意すれば、Excel には Web クエリを経由してデータ提供が可能になると。

2. 環境を整える

実際に検証用の環境を構築してみます。
※使用マシン: M1 Mac mini (macOS Big Sur 11.6.5)

今回はローカルサーバを Node.js で構築します。

$ node -v
v17.8.0

検証のため http レスポンスを返すだけの簡易的な http サーバを用意します。

任意のディレクトリに次のファイルを作成します。

・ファイル名: main.js

const http = require("http");
const port = process.env.PORT || 3000;

const server = http.createServer((_request, response) => {
    response.writeHead(200, {
        "Content-Type": "text/html; charset=utf-8"
    });
    const msg = `
<table>
<thead>
<tr>
<th style="background-color: #EAD9FF; text-align: right">番号</th>
<th>文字列</th>
<th>日付</th>
<th>数値</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>りんご🍎</td>
<td>2018-01-03</td>
<td>100</td>
</tr>
<tr>
<td>22</td>
<td>みかん🍊</td>
<td>2021-11-21</td>
<td>1,200</td>
</tr>
<tr>
<td>333</td>
<td>キウイ🥝</td>
<td>2022-04-10</td>
<td>12,3450.25</td>
</tr>
</tbody>
</table>
`;
    response.end(msg);
    console.log("送ったよ");
});

server.listen(port);
console.log(`待機中 (PORT: ${port})`);

ここでは Excel 側で適切に処理されるであろう <table> 要素だけを生文字列リテラルとして記述しています。

敢えて <table> 要素に絞ってますが、正規の HTML ドキュメントを貼り付けても、もちろん検証可能です。

....

ローカルサーバを起動します。

$ node main.js
待機中 (PORT: 3000)

この状態で curl コマンド等からhttp://localhost:3000/にアクセスすると、前述した <table> 要素を構成する部分のテキストだけを返却します。

正規の HTML ドキュメントではありませんが、一応 Safari, Chrome, Firefox でアクセスしてみたところ、それなりに表示されました。

3. Web クエリの実行

前述のローカルサーバが返す内容を Excel 側に取り込んでみます。

まずはデータ取得用の iqy ファイルを準備します。

・ファイル名: my_web_query.iqy

WEB
1
http://localhost:3000/

Selection=1
Formatting=HTML
PreFormattedTextToColumns=True
ConsecutiveDelimitersAsOne=True
SingleBlockTextImport=True
DisableDateRecognition=False
DisableRedirections=False

データの照会先はhttp://localhost:3000/です。

取得するデータを HTML 形式として解釈し、最初の <table> 要素を対象とします。
その他、各セルの値についてはパラメータに応じて処理します。

....

この iqy ファイルを Excel 2019 for Mac のメニューバーにある「データ」-「外部データ取り込み」-「Web クエリの実行...」から表示される画面で選択し、そのまま Excel に取り込みます。

※この操作については、こちらのサイトが詳しいです。

www.wanichan.com

そして、取り込んだ結果がこちらです。

f:id:infinity_volts:20220401201805p:plain

UTF-8 エンコードの <table> 要素を文字化けせずに取り込む事ができました。

日付と数値は Excel で扱える書式設定に変換されるので、フォーマットから好みの書式に変更できます。

ちなみに、<table> 要素の書式については、いくつか制限があります。

  • CSS, JavaScript の効果は反映されない。
  • <style> 要素の内容は処理されない。
  • <table>, <tr>, <th>, <td> タグ内の style 属性は処理される。
  • 非推奨になった align, bgcolor 等の属性も処理される。

また、データを再読み込みする際にも注意すべき点があります。

  • <th>, <td> 要素内のテキストで改行 <br /> は縦方向にセル分割される。
  • <br /> の副作用で、同一 <tr> 要素の他項目は縦方向にセル統合される。

過度な期待はせず、Excel に取り込んでから、Excel の範疇で対処するのが無難ですね。

....

ここで、一旦ローカルサーバを停止し、main.js 中の <table> 要素の内容を変更します。

再度ローカルサーバを起動して、Excel のリボンの「すべて更新」をクリックするとデータが最新に置き換わる様子を確認できます。

4. あとがき

技術の変革が止まない Web 系の機能ですが、Excel 2019 for Mac でも十全に使えました。これなら、Excel が直接接続できないデータへのコネクタを作成できます。

少し心配なのは、最近 iqy ファイルが添付されているメールはウイルス扱いなので、それなりの配慮が求められます。風評被害で Web クエリそのものを拒絶されると辛いです。

....

そもそも Power Query (Get & Transform) はどこに行ったのよ。

docs.microsoft.com

現在、Excel 2019 for Mac 16.59 ですが、肝心の Power Query が見当たりません。

私の記憶違いでなければ、2022.1 にリリースされた Excel 2019 for Mac 16.57 で、手ずから Power Query を試したはずなのです。
その際、SQLServer への接続を確認して安心してたのに!

見当たらないのは致し方ないので、大人しく次のリリースを待つ事にします。

Beekeeper StudioはSQLクライアントとして適度に便利

オープンソースSQL クライアントソフトの一つに Beekeeper Studio があります。

Electron ベースの GUI ツールで、GPLv3 ライセンスの Community Edition と商用ライセンスの Ultimate Edition が提供されています。

公式サイトで紹介されているように、モダンで簡単に使えて見目が良く、MySQL, PostgreSQL, SQLite, SQLServer 等に対応している SQL クライアントです。

f:id:infinity_volts:20220322081001p:plain

クロス・プラットホームであり、SQL エディタは自動補完で構文強調付き、タブで処理を切り替えられるし、テーブルのソートやフィルタも利用可能、等々。
確かに今時の GUI ツールと言える特長になってます。

個人的には ODBC ドライバや JDBC ドライバ等を必要としない点がお気に入りです。
サポート対象の DBMS は限定されますが、今の私の用途では十分です。

....

macOS にインストールする場合、公式サイトでは Edition の比較表にある Download ボタン(Community Edition の方は強調されてないけど...) をクリックし、DMG ファイルをダウンロードする方法が紹介されています。

私は Community Edition を Homebrew 経由でインストールしました。

$ brew install --cask beekeeper-studio

※現在のバージョンは 3.2.1 です。

....

先日、このような記事を書きました。

ここでは SQLite のデータファイル yubin10.db から sqlite3 を利用して住所データの CSV ファイルを出力しました。

この記事で用いたクエリを Beekeeper Studio で実行してみます。

・住所データを抽出するクエリ

SELECT
    a.post_app_no AS '番号',
    a.post_app_name_sei AS '氏名(姓)',
    a.post_app_name_mei AS '氏名(名)',
    a.post_app_namekana_sei AS 'フリガナ(姓)',
    a.post_app_namekana_mei AS 'フリガナ(名)',
    a.post_app_disp AS 'リスト表示用氏名',
    a.post_app_disp_kana AS 'リスト表示用フリガナ',
    (CASE WHEN a.post_app_keisho = 1 THEN '様' ELSE '' END) AS '敬称',
    a.post_app_zip AS '郵便番号(自宅欄)',
    a.post_app_address1 AS '自宅住所(都道府県)',
    a.post_app_address2 AS '自宅住所(市区町村)',
    a.post_app_address3 AS '自宅住所(番地等)',
    a.post_app_address4 AS '自宅住所(建物名)',
    a.post_app_disp_address AS 'リスト表示用自宅住所',
    IFNULL(r.post_app_name_mei, '') AS '連名1(名:自宅欄)',
    (CASE WHEN r.post_app_renkeisho = 1 THEN '様' ELSE '' END) AS '連名1(敬称:自宅欄)',
    c.post_app_category_name AS 'カテゴリ'
FROM post_app_adressbook AS a
    LEFT OUTER JOIN post_app_address_category_tbl AS b
    	ON b.post_app_address_no = a.post_app_no
    INNER JOIN post_app_address_category_mst AS c
        ON c.post_app_category_no = b.post_app_category_no
    LEFT OUTER JOIN post_app_renmei AS r
        ON r.post_app_no = a.post_app_no
ORDER BY
    a.post_app_no;

Beekeeper Studio を起動して、

  1. New Connection ウィンドウの Connection Type で SQLite を選択。
  2. Choose File ボタンをクリックしてファイル選択から yubin10.db を開く。
  3. Connect ボタンをクリックして接続。

ここで、前述のクエリを貼り付けて、テキスト選択を解除した状態がこちらです。

f:id:infinity_volts:20220322081510p:plain

ここで Run ボタンをクリックすると、クエリの実行結果が表示されます。

抽出した結果を確認するだけであれば、操作は以上です。
ソートやフィルタを試すのもアリです。

続いて、この結果をエクスポートしたい場合、右下の Download をクリックします。
出力形式は CSV, Excel, JSONクリップボードへのコピーが選択できます。

....

実は今回の作業を行うまで、この Download 機能に気づいてませんでした。

もう 2 年近く Beekeeper Studio のお世話になっているのに、この体たらく。
早速、お試しに CSVExcel を選択してみました。

まずは CSV ファイルですが、残念ながら私の期待する形式ではありません。
どこかにダブルクオートを付加するオプションでもあれば嬉しいのですが。

しかし、Excel形式 のファイル (.xlsx) では特に問題ありません。
Excel 2019 for Mac で普通に開く事ができました。

元々は住所データを CSV ファイルにした後、別途 Excel に取り込んで保存するつもりでした。しかし、UTF-8 のままだと Excel 2019 for Mac でも文字化けするので面倒です。
直接 xlsx ファイルを生成してくれるおかげで、色々と手間が省けて良かったです。

 

あとがき

私は RDBMS を管理・操作する際、基本的には各 RDBMS が提供しているコマンドラインツールを優先的に利用しています。
スクリプトを用意すれば、何度も同じ操作を処理できるし、記録も残せるからです。

それでも、お手軽に GUI ツールを利用したい場面もそれなりにある訳で。

ただ、あくまで個人的な都合ですが、macOS では JRE / JDK 環境や JDBC ドライバが必須なツールは利用したくありません。
その点、単体で動作する Beekeeper Studio は作業に最適なのです。

今までの用途は主にクエリの動作確認でしたが、これで Excel 出力ツールとしても活用できそうです。

一方、Linux では OpenJDK 環境を構築済みなので、DBeaver も併用してます。
DBeaver も良いけど、Beekeeper Studio もお手軽で便利ですよ。

....

もう随分前になりますが、Windows 環境での苦労話です。
Java アプリ / JDBC ドライバで問題なくて、何故か某言語 / ODBC ドライバで不具合が発生する件に関わった事がありました。

当時、調査用に提供されてたツール類は Java で作成されたものばかり。
それらのツールではどうやっても再現せず、ほとほと困りました。
最終的にはその言語で調査用コードを書いて、なんとか原因を突き詰めたのですが...

詳細は控えますが、あまりの結末に虚しくなったのを覚えてます。
その出来事以来、対象となる接続方法に合わせてツールを選択するようになりました。

私が仕事で Java に触れる機会は永久にないので、基本的に Java アプリは利用しない。

自分縛りが厳しい気もしますが、可能な限り実戦して今に至ります。
まぁ Java アプリは種類が豊富なので、稀に禁を破るのはやむ無しという事で。

はがきデザインキットの yubin10.db から自己都合で住所データを抽出してみた

先日、はがきデザインキットが入ってた macOS Mojave 環境を発掘しました。
既にサポート終了してるアプリですが、「住所書出」機能を利用して、住所データを書き出す事は可能です。

早速、書き出してみたものの、出力された address_list.csv は、残念ながら私の欲しい形式の CSV ファイルではありませんでした。

....

そもそも、はがきデザインキットのデータは yubin10.db に記録されています。
そして、yubin10.db は SQLite のデータファイルなので、CLI である sqlite3 コマンドが利用できます。

私の欲しい形式の CSV ファイルは、文字列がダブルクオートで括られ、空文字列・項目省略・NULL 値が判別可能であれば良いのです。
これは sqlite3 コマンドで提供される機能の範疇で済みます。

せっかくの機会なので、yubin10.db から直接住所データを抽出してみました。

方針

yubin10.db のテーブルを私の都合で解釈します。

  • 対象レコードは全件個人。
  • 対象項目は私が識別できた項目から独断で決定。
  • 項目名は address_list.csv の日本語名を参考に付加。
  • 連名は夫婦しか登録してないので、一名のみ。
  • 敬称は "様" のみ。
  • カテゴリは名称のみ。

スクリプト

sqlite3 コマンドが一括処理できるようにスクリプトを用意します。

・ファイル名: hagaki_designkit.sql

.mode csv
.headers on
.once result.csv
SELECT
    a.post_app_no AS '番号',
    a.post_app_name_sei AS '氏名(姓)',
    a.post_app_name_mei AS '氏名(名)',
    a.post_app_namekana_sei AS 'フリガナ(姓)',
    a.post_app_namekana_mei AS 'フリガナ(名)',
    a.post_app_disp AS 'リスト表示用氏名',
    a.post_app_disp_kana AS 'リスト表示用フリガナ',
    (CASE WHEN a.post_app_keisho = 1 THEN '様' ELSE '' END) AS '敬称',
    a.post_app_zip AS '郵便番号(自宅欄)',
    a.post_app_address1 AS '自宅住所(都道府県)',
    a.post_app_address2 AS '自宅住所(市区町村)',
    a.post_app_address3 AS '自宅住所(番地等)',
    a.post_app_address4 AS '自宅住所(建物名)',
    a.post_app_disp_address AS 'リスト表示用自宅住所',
    IFNULL(r.post_app_name_mei, '') AS '連名1(名:自宅欄)',
    (CASE WHEN r.post_app_renkeisho = 1 THEN '様' ELSE '' END) AS '連名1(敬称:自宅欄)',
    c.post_app_category_name AS 'カテゴリ'
FROM post_app_adressbook AS a
    LEFT OUTER JOIN post_app_address_category_tbl AS b
    	ON b.post_app_address_no = a.post_app_no
    INNER JOIN post_app_address_category_mst AS c
        ON c.post_app_category_no = b.post_app_category_no
    LEFT OUTER JOIN post_app_renmei AS r
        ON r.post_app_no = a.post_app_no
ORDER BY
    a.post_app_no;
.system open -a TextEdit result.csv

スクリプト内のドットコマンドでは出力を CSV モードにして、項目名の行を先頭に付加、そしてクエリの実行結果を result.csv に書き込むように指定します。

最後の .system で macOS 標準のテキストエディット (TextEdit) を起動して、result.csv の内容を確認します。

ちなみに VSCode で確認する場合は.system code result.csvとします。

実行

ターミナルを起動して、スクリプトを処理します。

$ sqlite3 yubin10.db < hagaki_designkit.sql

$ file --mime result.csv
result.csv: application/csv; charset=utf-8

result.csv ファイルを確認した後、念の為、文字コードも確認してみました。
無事 UTF-8エンコードされています。

ほんと sqlite3 コマンドって便利ですね。※公式サイトはこちら

 

あとがき

住所データを失って早三年かと思ってたところ、まさか別環境に存在してたとは。
今更感満載ですが、これは僥倖とウキウキ作業してました。

しかし、はがきデザインキットが書き出す CSV ファイルは charset=unknown-8bit 、文字列はそのまま出力されます。
期待と異なる結果に、一瞬絶望しました。

それでも結果としては自分好みに処理できたので、概ね満足してます。

後は子供達の名前も連名に含んでるパターンが少々気になりますが、発掘した macOS Mojave 環境は既に消去したので、もはや確認する術がありません。
もう少し早く気づけば良かったな。

KDE Plasma 5.24になったらGeForceでWaylandセッションがままならない

KDE neon User Edition での話です。

以前から気が向いた時に GeForce での Wayland セッションの具合を試してます。

KDE Plasma 5.22 の終盤から安定度が増し、5.23 は特筆する事が無い程に順調でした。

....

そして現在、KDE neon のデスクトップ環境は KDE Plasma 5.24.3 です。

既定の X11 セッションでは特に問題ないのですが、Wayland セッションにすると困った状況になります。

CPU AMD Ryzen 5 2600X
M/B GIGABYTE B450 AORUS PRO WIFI (BIOS: F32)
GPU NVIDIA GeForce GTX 1050 Ti
OS KDE neon 5.24 User Edition
KDE Plasma Version: 5.24.3
KDE Frameworks Version: 5.91.0
Qt Version: 5.15.3
Kernel 5.13.0-35-generic
GPU Driver NVIDIA Driver Version: 510.47.03

この構成で Wayland セッションを選択してログインすると、GUI 操作ができません。

デスクトップ背景はまっ黒のままで、マウスポインタだけ表示されます。
アプリケーションランチャーやアプリケーションメニューは表示されません。

一応、最左上にマウスポインタを移動すると反応はありますが、表示しているウィンドウがないので無意味です。

ログアウト操作も行えないので、電源 OFF もやむなし。
そんな状況でしたが、幸いCtrl+Alt+F3が有効でした。

Ctrl+Alt+F3でコンソール画面に切り替えて、ユーザアカウントでログインし、直後にrebootコマンドで OS を再起動できました。

....

少なくとも KDE Plasma 5.23.4 の頃までは、Wayland セッションでもこのような問題はなく、普通に利用できてました。
なので、一ヶ月以上 Wayland セッションを試せてません。

KRunner を起動するとqt.qpa.wayland: Could not create EGL surface (EGL error 0x321c)とか連発するし...
既に Bug として認識されてますが、今のところ特に進展はないみたいです。

KDE Plasma 5.24 は LTS なので、今後の展開が心配です。

→ 追記: 2022-04-23 Kubuntu 22.04 LTS でも同様でした。

....

追記: 2022-04-10 現在、未解決のまま

少し NVIDIA ドライバの情報を調べてみたところ、

  • nvidia-driver-510: package has invalid Support PBheader, cannot determine support level

のような感じだったので、とりあえず 470 系のドライバに戻しました。

現在、ドライバのバージョンは 470.103.01 ですが、Wayland セッションを選択すると強制的にログアウトされ、ログイン画面に戻ります。

ブラックアウト状態よりはマシなので、Wayland セッションが使用可能になるまで、このまま過ごします。

 

おまけ: Ubuntu 21.10 の場合

Ubuntu 21.10 では、前述の構成でも Wayland セッションが期待通りに動作します。

※こちらも nvidia_drm.modeset=1 は必要です。

OS Ubuntu 21.10
GNOME Version: 40.4.0
Kernel 5.13.0-30-generic
GPU Driver NVIDIA Driver Version: 510.47.03

約一ヶ月後には Ubuntu 22.04 LTS が控えてます。
こちらの既定のデスクトップセッションは GeForce でも Wayland になるのかな?

→ 追記: 2022-04-23 Ubuntu 22.04 LTS では 動作しませんでした。

→ 追記: 2022-05-14 Ubuntu 22.04 LTS で Wayland セッションが解禁されました。
 kernel: 5.15.0.27-generic, NVIDIA Driver version: 510.60.02 で確認

→ 追記: 2022-05-23 アップデートしたら X11 かつ解像度が 1024x768 固定に
 カーネルモジュールとの矛盾があり。解決策が見つからず。

→ 追記: 2022-05-25 OSを再セットアップしたら X11 は問題なし。
 Wayland は使用せず、しばらく様子見です。

ビンテージ入りしたMacBook Pro Mid 2014はmacOS Big Sur 11.5.2で打ち止めではなかった

昨年10月、予定通り macOS Monterey がリリースされました。

私が所有してる MacBook Pro Mid 2014 も予定通りのアップグレード対象外。
順当にビンテージ入りを果たしました。

ビンテージ入りしたとはいえ、急に使用できなくなる訳ではありません。
macOS Big Sur には対応してるので、もう少し現役でいけるかな。

....

などと思ってた時期もありました。

先日、ようやく時間が取れて MacBook Pro Mid 2014 の OS を macOS Big Sur にアップグレードしようとしたところ、重大な事実に気づきました。

f:id:infinity_volts:20220226223710p:plain

MacBook Pro Mid 2014 では macOS Big Sur の提供は 11.5.2 で終了なのでしょうか。

M1 Mac mini で確認したところ、本日の時点では macOS Big Sur 11.6.4 が最新版です。

ビンテージ入りって、ここまでシビアだったとは。
てっきり対応 OS の最終版までは提供されるものだと、勝手に思ってました。
少々残念ですが、アップグレードは諦めました。

追記 2022-03-12:

試しに macOS Mojave から Big Sur にアップグレードしてみました。
インストール時は 11.5.2 ですが、無事 11.6.4 にアップデートできました。 

f:id:infinity_volts:20220312110732p:plain

....

M1 Mac mini と動作比較できないなら、macOS Mojave 10.14.6 のまま過ごします。
ビンテージ機として、もう少し区切りが着くまで現状維持です。

ちなみに現状維持で、私的にメリットがあるとすると...

  • Intel 入ってる。
  • Retina は美麗。 
  • PixelCat が動作する。
  • Office 2011 for mac が一応動作する。
  • Docker for Mac (4.3.1) はまだ動作する。
  • はがきデザインキット 2021 の住所書出が機能する。
  • Xcode 11.3.1 で Homebrew は警告出まくりだけど、必要なものはビルド可。
  • お手軽に Linux を起動できる。

てな感じでしょうか。

他にも VirtualBox とか挙げたいけど、今は利用してないので何とも言えないです。

最近は CPU ファンの回転数が上がるような利用方法は避けてます。
バッテリー問題も残ってますし。

次のノート PC を用意するまでの繋ぎになれば十分かな。

macOS版 PPSSPP v1.12.1 と古いPS3用有線コントローラで遊べるようにする

M1 Mac mini (macOS Big Sur 11.6.3) での話です。

先日、M1 チップでも PPSSPP が動作する事を知りました。

Homebrew 経由でbrew install ppsspp --caskとして、インストールされたのは PPSSPP v1.12.3 でした。

早速、アプリケーションに登録された PPSSPPSDL.app を実行したところ、アプリが壊れてる旨が表示され、残念ながら動作しませんでした。
Intel Mac では v1.12.3 でも動作してます。試したいだけなので、原因は未調査です。

仕方ないので、こちらのサイトから公開中の古いバージョンを試してみました。

※古いバージョンは Assets を展開すると公開中のファイルを確認できます。

  • PPSSPPSDL-macOS-v1.12.3.zip は実行不可。
  • PPSSPPSDL-macOS-v1.12.2.zip は実行可能だが、BGM 遅延発生。
  • PPSSPPSDL-macOS-v1.12.1.zip は実行可能。
  • v1.12 以前はソースコード公開のみ。

ソースコードからコンパイルするのではなく、お手軽に試してみたい。
てな訳で、今回は PPSSPP v1.12.1 を採用しました。

....

どのバージョンでも PPSSPPSDL.app が実行可能であれば良いのです。

zip を展開したら、PPSSPPSDL.app をホームフォルダにあるアプリケーション~/Applicationsに移動して、とりあえず実行します。

起動するのが確認できたら一旦終了し、セーブデータを~/.config/ppsspp/PSPにコピーします。コピー後はこんな感じです。

$ ls ~/.config/ppsspp/PSP
PPSSPP_STATE	SAVEDATA	SYSTEM

そして、手持ちの古い PS3 用コントローラを接続してから PPSSPPSDL.app を実行してみたのですが、いつものように十字ボタンや L / R ボタンが反応しません。

しかし、この状態は Linux 環境で経験済みです。

なので、以前と同様にお手軽な方法で対処してみました。

....

まずは SDL2 のコンパイル環境を用意します。

$ brew info sdl2
sdl2: stable 2.0.20 (bottled), HEAD
~(ざっくり省略)~

$ brew install sdl2

続いて SDL2 のソースを公式サイトから適当な場所にダウンロードします。
※インストールしたバージョンは 2.0.20 なので、一応それに合わせてます。

$ cd ~
$ mkdir work
$ cd work
$ wget https://www.libsdl.org/release/SDL2-2.0.20.tar.gz
$ tar xzvf SDL2-2.0.20.tar.gz

ダウンロードして SDL2 を展開した後、controllermap をビルドします。

$ cd SDL2-2.0.20/test
$ ./configure
$ make controllermap

ビルドが終了したら、MacPS3 用有線コントローラを接続して、実行してみます。

$ ./controllermap
2022-01-31 23:53:20.680 controllermap[19651:1514209] INFO: There are 1 joysticks attached
2022-01-31 23:53:20.680 controllermap[19651:1514209] INFO: Joystick 0: HORI PAD A
2022-01-31 23:53:20.680 controllermap[19651:1514209] INFO:        axes: 4
2022-01-31 23:53:20.680 controllermap[19651:1514209] INFO:       balls: 0
2022-01-31 23:53:20.680 controllermap[19651:1514209] INFO:        hats: 1
2022-01-31 23:53:20.680 controllermap[19651:1514209] INFO:     buttons: 13
2022-01-31 23:53:20.680 controllermap[19651:1514209] INFO: instance id: 0
2022-01-31 23:53:20.680 controllermap[19651:1514209] INFO:        guid: 030000000d0f00004d00000001000000
2022-01-31 23:53:20.680 controllermap[19651:1514209] INFO:     VID/PID: 0x0f0d/0x004d
2022-01-31 23:53:20.691 controllermap[19651:1514209] INFO: Watching joystick 0: (HORI PAD A)
2022-01-31 23:53:20.691 controllermap[19651:1514209] INFO: Joystick has 4 axes, 1 hats, 0 balls, and 13 buttons
2022-01-31 23:53:20.691 controllermap[19651:1514209] INFO:

    ====================================================================================
    Press the buttons on your controller when indicated
    (Your controller may look different than the picture)
    If you want to correct a mistake, press backspace or the back button on your device
    To skip a button, press SPACE or click/touch the screen
    To exit, press ESC
    ====================================================================================

とりあえず、こんな感じで表示されれば、SDL2 の入力デバイスとして利用可能です。

後は以前の記事と同様に、認識しているコントローラ番号を引数に指定して実行すると、そのコントローラの確認画面が表示されます。

ついでに結果を任意のファイルにリダイレクトしておくと便利です。

$ ./controllermap 0 > hori_a.txt

f:id:infinity_volts:20220201101907p:plain

この画面が表示された後、緑色のインジケータに合わせて、実際のコントローラのボタンを順次押していきます。

なお、この画面はコントローラの物理的な配置とは一部異なります。

手持ちの HORI PAD3 MINI の場合、左アナログスティックは画面の十字ボタンの位置にありますが、あくまでインジケータに従い、要求されたボタンを押します。

f:id:infinity_volts:20220201102059p:plain

途中、存在しないボタンについても入力を要求されますが、キーボードのスペースキーを押すと、その要求をスキップできます。

一連の対応付けが終わると、画面が閉じます。

....

リダイレクトした結果はこんな感じです。

$ cat hori_a.txt
030000000d0f00004d00000001000000,HORI PAD A,platform:Mac OS X,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,

この結果を assets にある gamecontrollerdb.txt に追記します。

$ cd ~/Applications/PPSSPPSDL.app/Contents/MacOS/assets
$ ls
7z.png			langregion.ini		sfx_toggle_off.wav
Roboto-Condensed.ttf	logo.png		sfx_toggle_on.wav
compat.ini		ppge_atlas.meta		shaders
debugger		ppge_atlas.zim		ui_atlas.meta
flash0			rargray.png		ui_atlas.zim
gamecontrollerdb.txt	sfx_back.wav		unknown.png
icon_regular_72.png	sfx_confirm.wav		zip.png
lang			sfx_select.wav
$ cat ~/work/SDL2-2.0.20/test/hori_a.txt >> gamecontrollerdb.txt
$ cd ~

これで準備は完了しました。

....

改めて PPSSPPSDL.app を実行したところ、十字ボタンが有効になりました。
これで最低限の操作はコントローラのみで対処できます。

後は L / R ボタン等の割当を PPSSPPSDL.app の環境設定で調整すれば PPSSPP で遊べるようになるはずです。

細かい設定については他サイトで詳しく説明されているので、そちらを参考にしてます。

MAZDA CONNECTの地図データ更新期限がギリギリだった

2018年9月に CX-3 を購入してから、MAZDA CONNECT の地図データを一度も更新してませんでした。

そういえば、そろそろ無償更新できる期間が終わるかも...
きっと期間が過ぎても最終版のデータくらいはいつでも入手できるんだろうし...
なんて気楽に考えてたら、とんでもなかったです!

調べてみたところ、新しい地図データの配信開始は今週の木曜日 (2021年12月16日) 。
同時に「2017年秋版ナビゲーション用SDカードPLUS」の無償更新期間も終了との事。

「2017年秋版ナビゲーション用SDカードPLUS」の部品番号は G46Y 79EZ1 D 。
まさに、私のクルマに搭載されてる SD カードの部品番号です。

www.mazda.co.jp

新しい地図データが公開されると、古いデータは配信終了です。

勝手な思い込みで「2020年秋版の地図データ」はいつでも入手できると思ってました。
まさか2021年12月15日で公開終了、以後ダウンロードすらできないとは。
なんてこったい!

これは早急に更新しなくてはいけません。
....

しかし、私は SDHC 対応の SD カードリーダライタを所持してません。

この際、リーダライタを購入しようか少し悩みましたが、手持ちの機器で MacBook Pro Mid 2014 の SD カードスロットが対応してたのを思い出しました。

公式サイトから macOS 版の地図データ更新ツール 2.3.0 をダウンロードして、SD カードの地図データを更新。私の環境では 40 分くらいで完了しました。

更新した SD カードをクルマに戻しエンジン始動したところ、ナビ画面に昨年建設された近所の施設名が表示されたので、新しい地図データに更新できたようです。

まさか無償更新の期限間近での更新になるとは。

アレのせいでクルマでの長距離移動を控えてたので、完全に失念してました。
なんとか更新期限までに思い出し、対処できたので良しとします。

....

購入した CX-3 は今年の 8 月に最初の車検を迎えました。
走行距離はようやく 10,000 km over になったところで、まだまだ走り足りません。

予定では関東への出張に活躍するはずだったのですが、2019年末から諸々の案件やイベントが自粛モードに陥り、そもそも出張がなくなりました。

大変苦々しい思いで日々を過ごしてますが、来年は何とかしたいところ。
来年 9 月末までに結論を出さなければいけない事もあるので、良い年になるといいな。