# RemoteRoom
> Masahiko OHKUBO (大久保 正彦) の個人サイト
これはサイト全体をAI(LLM)から読みやすくするための全文ページです。(https://llmstxt.org/ の標準に基づいています)
## 👤 Author
- おおくぼまさひこ - Bluesky: @mah-jp.bsky.social / 個人的な記録や思いをつらつらと。福岡長崎育ち、神戸在住。
## 📝 All Articles (すべての記事)
### 光と陰を撮るシンプルな体験を。モノクロ専用カメラアプリ「MonokuroCam」を作った話 - 2026-08-17
URL: https://remoteroom.jp/diary/2026-08-17/
#### “撮る”をシンプルに
ふと、モノクロの写真が撮りたくなった。手の中の薄く高密度なスマホには、高倍率のズームやAI補整が装備されている時代ではあるが、“光と陰を撮る”という行為だけをシンプルにやりたい時もある。
過去には私、コンデジの[RICOH GR DIGITAL II](https://www.ricoh-imaging.co.jp/japan/dc/gr/digital2/)を使っていた。この単焦点カメラには白黒モードがあって、街の風景などのモノクロ撮影を時に楽しみ、[Flickrに2008年頃から写真をアップロード](https://www.flickr.com/photos/mah_japan/albums/72157605445831186/page4)していたらしい。ちなみに2026年2月には、同じGRシリーズで、イメージセンサーからモノクロ専用に仕立てられている[RICOH GR IV Monochrome](https://www.ricoh-imaging.co.jp/japan/products/gr-4-mono/)が登場。「欲しいかも」と一瞬思ったものの、価格帯が25万円を優に超えており、ウェブページをそっと閉じることに。
そんなこんなでひらめいた。手の中のスマホを使う前提で、モノクロでプレビューして、モノクロでの撮影しかできない専用のカメラアプリを自作してみよう。ターゲットOSはAndroid (私のGoogle Pixel 10 Pro XLで動くように)。搭載する機能については、自分で思いつく範囲を一つずつ実装する方針で良いかなと考えて、予習としての他のモノクロカメラアプリの試用は特にやらず。
#### 作ったアプリ「MonokuroCam」
あえて日本語混じりで「MonokuroCam」と命名したアプリの、Google Play Storeでの公開までやっとこぎ着けたのでご紹介。着想から何日を要したかはもうよく分からない。
- Google Play: [MonokuroCam - Google Play のアプリ](https://play.google.com/store/apps/details?id=com.ubiqun.monokurocam)
正式なアプリ名とコンセプトは、次のようにしている。
|項目|内容|
|---|---|
|アプリ名 (en-US)|MonokuroCam - B&W Camera|
|簡単な説明|The Purest Monochrome Experience. Ultra HDR & real acoustic shutter sounds.|
|アプリ名 (ja-JP)|MonokuroCam - モノクロ専用カメラ|
|簡単な説明|色を削ぎ落とした、純粋なモノクロ撮影体験。Ultra HDR対応と本物のシャッター音。|
プログラミング言語はKotlin、Gemini無しには生まれなかったソースコードは非公開 (現時点での規模感としては、Kotlinプロダクションコード`app/src/main`が合計で約12,000行)。
アプリの価格設定については、今までアプリなどを販売したことがない自分の初めての試みとして、MonokuroCamは有料アプリに設定した。本アプリのコンセプトに“ぴん”と来た方に、ワンコインを費やす感覚で、ぜひぜひ使っていただければと思う。知らぬ間に貯まっている[Play Points](https://play.google.com/store/points/use)の使い道にもどうぞ。
##### 作者としてこだわったところ
MonokuroCamの開発において、注力したポイントは主に次の通りです。
###### そのままを捉える画質
- **Ultra HDR (Gain Map) の階調を保持**
- 単なる白黒化 (彩度を落とす脱色) ではなく、[HDR](https://developer.android.com/media/grow/ultra-hdr)の輝度情報を保持したままモノクロ現像を行っています。有機ELディスプレイで見た際に、黒の締まりやハイライトの階調を活かせます。
- **物理カメラレンズをダイレクトに切り替え**
- デジタルズームによる画質の引き伸ばしを避け、スマホに搭載されている超広角 (0.5x)・広角 (1.0x)・望遠 (3.0x) などの各レンズを直接切り替えて撮影できます。
###### 気持ちのよい操作性
- **遅延を感じさせない白黒ファインダー**
- ファインダー映像をGPUでリアルタイムにモノクロ処理することで、表示遅延やカクつきを抑え、自然な追従性を目指しました。
- **お気に入り設定をすぐ呼び出せるカスタムプリセット (U1〜U3)**
- アスペクト比や露出補正、トーン設定などをあらかじめ登録しておき、画面上のバッジから手軽に呼び出し・上書き保存ができます。
- **ミニマルな見た目と、確実な押しやすさの両立**
- ボタンの見た目はすっきり小さく配置しつつ、指で押しやすい十分なタップ領域を確保し、片手でもスムーズに操作できるようにしています。
- **標準カメラアプリの起動も容易**
- 「あ、このシーンには色彩が欲しい」と思った時は、ファインダー画面の右上のカメラアイコンから、すぐに標準カメラアプリを起動できます。
###### 楽しい使い心地
- **気分で選べる4つのフィルムトーン**
- 素直なモノクロの `STD` (Standard)、しっとりした階調の `CLS` (Classic)、黒が力強く締まる `DYN` (Dynamic)、暗部のディテールを残す `NAT` (Natural) を画面下部で切り替えられます。
- **心地よいシャッター音と振動フィードバック**
- 4種類の実物のシャッター音 (レンジファインダーや一眼レフなど) を収録。撮影時の触覚フィードバック (振動) と合わせて、シャッターを切る感覚を楽しめます。無音化も可能です。
- **水平が直感的にわかる電子水準器&ヒストグラム**
- ファインダー中央に水準器を表示し、水平になると「チッ」と微小な振動でお知らせします。水準器の目盛りを凝視しすぎなくても水平を合わせやすくなっています。
###### 邪魔をしない道具に徹する
- **広告なし・サブスクなしの買い切り設計**
- 月額課金や広告表示、不要なトラッキングは行っていません。スタンドアロンでシンプルに動く、純粋な撮影道具を目指しました。
#### まとめ
モノクロで撮るスナップの楽しさや切実さは、スマホのカメラ性能がどれだけ高機能化しても、シンプルさ故に別格なのかもしれない。もし今までやったことがない方は、身の回りの様々なシーンや街や自然を、最初からモノクロで自在にスナップしてみてはどうか。きっといつもと、心象が違ってくると思う。
ということで、Androidユーザーの方はぜひ、[MonokuroCam](https://play.google.com/store/apps/details?id=com.ubiqun.monokurocam)を試してみてください。
#### 余談
##### iOS版への移植について
Android版のKotlinのソースコードを、AIに食べさせて、iOS版としてSwiftへの移植を試みたところ、あまり時間がかからずに一応は動くものが出てきたのには非常に驚いた。手元のiPhone 13では次のような画面になる。
しかし、アプリの画面デザインの細部や動作には、まだまだ甘いところが散見される。Android版に可能な限り合わせるための調整には、かなりの時間がかかりそうだ。さらに、Apple Developer Programへの登録の工数が未知数でもある。このような事情があるので、「MonokuroCam iOS版」を公開するのかどうか、その時期はいつになるのか、まったく未定だ。
##### Google Playでのアカウント登録, 屋号「ubiqun Lab」について
Google Playの公式ストアにアプリを登録するためには、アカウントの登録が最初に必要だ。アカウントの種別は「組織アカウント」が良いらしいので、私は下記のサイトを参考にしながら、
- [【2026年4月版】会社員が個人事業主になってApp Store・Google Playに組織アカウントで登録するまでの全記録](https://zenn.dev/zawascript/articles/2026-04-store)
次のような各種作業を進めた。4は比較的慣れているがその他はまったく慣れない作業で、時間も要するし、自力を諦めて誰かに委託したくなるほどであった。
1. 事業用の電話番号を取得
2. バーチャルオフィスを契約
3. 屋号を定め、個人事業主として開業届を提出
- 関連記事: [Macに接続したICカードリーダーをRDP経由でWindows環境にリダイレクトしてe-Taxソフトを使う \[2026-07-25\]]()
4. ドメイン`ubiqun.com`を取得して、専用ウェブサイト「[ubiqun Lab](https://ubiqun.com/)」を構築 (プライバシーポリシーや特定商取引法に基づく表記を記載)
5. D-U-N-S番号を取得
6. Google Play Developerに登録
ちなみに、上記の「[ubiqun](https://www.google.com/search?q=%22ubiqun%22)」という単語は、携帯電話 (ガラケー) 全盛期の2000年代初めにひねり出した、「ubiquitous」と「指」の連想から作った私の造語だ。読み方は「ユビクン」。今回改めて、屋号「ubiqun Lab」の形で復活させてみた。
---
### Macに接続したICカードリーダーをRDP経由でWindows環境にリダイレクトしてe-Taxソフトを使う - 2026-07-25
URL: https://remoteroom.jp/diary/2026-07-25/
#### Mac環境からe-Taxソフトを使いたい
Windowsを普段使っていないあなたと私。しかしいざ、e-Taxを使って各種の公的な手続きを進めようとすると、e-TaxソフトのWEB版ではなくフル機能のダウンロード版が必須となり、かつマイナンバーカードを個人認証に用いる関係で、ICカードリーダーを利用可能なWindows環境を用意しなければならなくなります。
- [e\-Taxソフトについて \| 【e\-Tax】国税電子申告・納税システム\(イータックス\)](https://www.e-tax.nta.go.jp/e-taxsoft/)
そこで私は、Windows 11環境に対応したICカードリーダーライター「[I-O DATA USB-ICCRW2](https://www.iodata.jp/product/interface/iccardreader/usb-iccrw2/)」をまず購入。Mac環境からRDP接続した先のWindows環境にてe-Taxの作業をする前提で、このICカードリーダーライターを利用する方法を模索しました。本記事はその記録です。
|種別|商品名|購入価格 (税込)|購入店|備考|
|---|---|--:|---|---|
|ICカードリーダーライター|[I-O DATA USB-ICCRW2](https://www.iodata.jp/product/interface/iccardreader/usb-iccrw2/)|2,173円|Amazon.co.jp||
#### 設定手順
本手順は、手元のMacにICカードリーダライターを接続しておき、それをRDP接続先のWindows環境から利用するための手順です。
```mermaid
flowchart TD
subgraph Local["手元環境 (macOS)"]
Card[マイナンバーカード]
Card -->|セット| Reader[ICカードリーダー
USB-ICCRW2]
Reader -->|USB接続| Mac[Mac
「Windows App」]
end
Mac <==>|RDP接続
スマートカードリダイレクト| Win
subgraph Remote["リモート環境 (Windows 11)"]
Win[Windows 11]
Win -->|認識・利用| App[「e-Taxソフト」]
end
```
1. 手元のmacOSに、[USB-ICCRW2 サポートソフト](https://www.iodata.jp/lib/software/u/2318.htm#macOS)をインストールする
2. Macの再起動後、USB-ICCRW2を接続した状態で`pcsctest`を実行すると、次の結果が得られる
```
$ pcsctest
MUSCLE PC/SC Lite Test Program
Testing SCardEstablishContext : Command successful.
Testing SCardGetStatusChange
Please insert a working reader : Command successful.
Testing SCardListReaders : Command successful.
Reader 01: Circle CIR125 ICC
```
3. RDP接続するためのアプリ「[Windows App for Mac](https://apps.apple.com/jp/app/windows-app/id1295203466)」 (元Microsoft Remote Desktop) にて、当該Windows接続用Deviceの、Configure > Devices & Audio > Redirect: Smart cards をONにする
4. Windows環境にて、
1. `gpedit.msc` (グループポリシーエディター) を起動する
2. 画面左側のツリーを次のように辿る: コンピューターの構成 > 管理用テンプレート > Windows コンポーネント > リモート デスクトップ サービス > リモート デスクトップ セッション ホスト > デバイスと資源のリダイレクト
3. 画面右側のリスト: 「スマート カード デバイスのリダイレクトを許可しない」を「未構成」から「無効」に設定する
4. 同様に、「サポートされているプラグ アンド プレイ デバイスのリダイレクトを許可しない」も「未構成」から「無効」に設定する
5. `gpupdate /force`を実行してポリシーを適用する (もしくはWindowsを再起動する)
5. MacからRDP接続した先のWindows環境にて、`certutil -scinfo`を実行すると、次の結果が得られる
```
>certutil -scinfo
Microsoft スマート カード リソース マネージャーが実行しています。
読み取り装置またはカードの現在の状態:
読み取り装置: 1
0: Circle CIR125 ICC
--- 読み取り装置: Circle CIR125 ICC
```
6. 5の出力結果は、手元のMacに接続したICカードリーダライターがWindows環境から見えていることを示している
7. したがって、[JPKI利用者ソフト](https://www.jpki.go.jp/download/)をインストールしたWindows環境にて、[ICカードリーダライタ設定](https://www.jpki.go.jp/download/howto_win/settings.html)で「Circle CIR125 ICC」が認識されていることが確認でき、[JPKI利用者ソフト](https://www.jpki.go.jp/download/)の動作確認にてマイナンバーカードが読み取れることも確認できる
以上の手順が完了すれば、Macに接続したICカードリーダライターにマイナンバーカードを挿して、Windows用のe-Taxソフト (ダウンロード版) にて個人認証を経て、各種手続きが行えるようになります。
#### 参考情報
Windows環境へ物理的に (直接) 接続した状態のICカードリーダライターを、RDP (Remote Desktop Protocol) 接続時にリモートから扱うことは、OSの仕様上、出来ないようになっているそうです。
- [\[MS\-RDPESC\]: Remote Desktop Protocol: Smart Card Virtual Channel Extension \| Microsoft Learn](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpesc/)
仮にこれを許せば、1台のICカードリーダライター (そこに挿してあるカードは物理的に排他利用であるべき) を、複数のRDPユーザが利用できてしまうでしょうし。
---
### 【読んだ本】 マイボディ・オン・ザ・ムーン (上)(下) - 2026-07-17
URL: https://remoteroom.jp/medialog/2026-07-17_book-b0h4kf69c2-b0h4kyd3mb/
出版されたばかりの長編SF小説。この小説の状況設定の、ざっくり言うと前半は、リアルな世界情勢を絶妙に取り込んでいるものとなっている。私は本書を、ちょうど自分の実世界の仕事やら何やらが忙しい時期の合間に読むことになり、ページを進めるひととき、現実のどこかで起こっている怪奇な事件を読み解くような、シンクロ感もあった。
しかし後半は近未来色が濃くなり、かつ、自分の中の既存の想像パターンが当てはまらない展開に進んでいき、まさにSFの真骨頂。こちらとしてはわくわくさせられるとともに、人類は地球とは別の居住地をやはり探すのか、それはどれぐらいのスケールの“誰のため”なのか、ということを考える。
---
### ビリヤード: JCLリーグ (2026-hyogo-himawari-9) に参加して試合に6回出てみた記録 - 2026-07-15
URL: https://remoteroom.jp/diary/2026-07-15/
#### JCLリーグ戦参加5回目
[JPA](http://www.poolplayers.jp/), [JCL](https://csi-pool.jp/)のリーグ戦のこれまでの参加記録は次の通り。
- [ビリヤード: JPAリーグ (2024年秋シーズン) に初参加して試合に10回出てみた記録 \[2024-12-28\]]()
- [ビリヤード: JCLリーグ (2025-hyogo-sakura-9) に初参加して試合に7回出てみた記録 \[2025-04-02\]]()
- [ビリヤード: JCLリーグ (2025-hyogo-himawari-9) に参加して試合に10回出てみた記録 \[2025-07-12\]]()
- [ビリヤード: JCLリーグ (2025-hyogo-momiji-9) に参加して、東京での“2025 JCL Final”に出てみた記録 \[2025-12-13\]]()
- [ビリヤード: JCLリーグ (2026-hyogo-sakura-9) に参加して試合に8回出てみた記録 \[2026-04-01\]]()
#### 参加した試合
##### 記録
JCL 2026 シーズンHIMAWARI (2026-hyogo-himawari-9) での、私が出場した試合の記録は次のとおり (計6試合)。
|Week No.|日付|FargoRate / Robustness|内容|感想|
|--:|:-:|--:|---|---|
|2|2026-04-22 (水)|341 / 174|Won|緊迫した試合であった。レートの高い対戦相手で、ターンが回ってきた際にはミスなく仕留めなきゃいけないが、果たして出来ていたかどうか。慣れないセーフティーショットを少し混ぜたりもした。|
|3|2026-04-29 (水)|351 / 180|Lost||
|5|2026-05-20 (水)|345 / 184|Lost||
|7|2026-06-03 (水)|343 / 188|Won||
|8|2026-06-10 (水)|356 / 193|Lost||
|11|2026-07-01 (水)|360 / 201|Won||
##### 総括
まずは自分の結果を示すと次の通りである。リーグ戦の中でのゲーム単位での勝率は、リーグ統計 ([FargoRate Player](https://play.google.com/store/apps/details?id=com.fargorate.player&hl=ja)アプリ内で確認可能) の指標において、41%となった。目標としていた勝率5割に、また届かなかった。
||試合単位での Won : Lost|ゲーム単位での勝率|
|---|---:|---:|
|JCL 2026 シーズンHIMAWARI 私個人の最終成績|3 : 3|13/32 → 41%|
所属チーム「SIDE IMPACT」としては、JCL 2026 シーズンHIMAWARIの9ボールの兵庫ディビジョンにおいて、リーグ戦では惜しくも5位でプレーオフ (優勝決定戦) には参加できず。東京に行けるチャンスを掴める可能性があるのは、とうとう来シーズンだけとなった。
- リーグ詳細データ:
- [FargoRate \- League Management System > Japan CSI Pool League > 2026-hyogo-himawari-9](https://lms.fargorate.com/PublicReport/LeagueReports?leagueId=585944ff-c43a-4d71-80b0-afcd004220c5&divisionId=05dc66b3-3ef8-42e2-adc1-b42a00435220)
#### 追記: シングルストーナメントに参加 \[2026-08-15\]
2026年7月19日 (日) に「JCLシングルストーナメント 2026 HIMAWARI」へ参加した。私は予選の3組に割り当てられ、その組のトーナメントの1戦目に、相手に2勝を渡してしまってあっさり終了。決めるべきところで決められず、の素直な結果ではあるが悔しい経験であった。
- [Compass Tournament](https://tournament.csi-pool.jp/) > [JCLシングルストーナメント2026HIMAWARI](https://tournament.csi-pool.jp/tournaments/86909e38-5cfa-4891-ad27-4fc99e0d2f43)
#### 参考情報
##### 参考リンク
- [Japan CSI Pool League](https://csi-pool.jp/)
##### 練習時間とメモ
JCL 2026 シーズンHIMAWARIへの参加が決まった2026年4月途中から、当該リーグを終えるまでの間の、私の練習時間を記録する (試合実施時の時間を除く)。
|日付|練習場所 (基本は兵庫県神戸市内)|分 \[5分単位に切捨\]|メモ|
|---|---|--:|---|
|2026-04-06 (月)|東灘区某所|90|“姿勢を低めに”を意識して撞いていたら、急に、腰を動かせない・曲げられない腰痛に陥った。練習を中断し、歩くのがやっとの状態で帰宅した。|
|2026-04-12 (日)|灘区某所|250|新シーズンのメンバー顔合わせを兼ねた合同練習。練習試合も数回やった。病み上がりということで、緊張感は程々に、落ち着いて撞くことを心がけたら、それが結果的には良い感じの球筋になっていたようだ。|
|2026-04-19 (日)|東灘区某所|180|JPAルールで練習試合をして、きれいに負けたけども、自分的に戦略がうまく行ったところもあったりで楽しかった。|
|2026-04-21 (火)|灘区某所|90|他者から見たら相当に不格好だと思うが、とにかく低めに構える、左腕から両肩と右腕までを動かさないようにするフォームを試している。ちょっとは入るようになった?|
|2026-05-02 (土)|灘区某所|50||
|2026-05-06 (水)|灘区某所|280||
|2026-05-09 (土)|灘区某所|90||
|2026-05-15 (金)|東灘区某所|180|仕事に忙殺されていて練習時間が確保できず、久しぶり。多めの基本の練習から始めた。|
|2026-05-16 (土)|灘区某所|90|後半は上手い人と模擬試合。マスワリの洗礼を浴びたり。|
|2026-05-18 (月)|東灘区某所|120|一人練習の後、三先の試合。調子は悪くなかった。キューは低く長めに行きましょう。|
|2026-05-19 (火)|灘区某所|90||
|2026-05-26 (火)|東灘区某所|90|JPAルールで模擬試合。|
|2026-05-30 (土)|東灘区某所|90|一人練習を淡々と。イメージボールのイメージを丁寧に作ることを心掛けたら、調子が良くなってきた、気がする。|
|2026-06-01 (月)|東灘区某所|120||
|2026-06-02 (火)|灘区某所|100|一人練習を淡々と。|
|2026-06-05 (金)|東灘区某所|120|JPAルールで模擬試合。ゲームボール付近までお互い達する熱い試合だったが、負けた。残念!|
|2026-06-06 (土)|尼崎市某所|160|インターネットカフェなのだが「マイキュー専用台」があって、練習に専念できた。|
|2026-06-09 (火)|灘区某所|140|一人練習を淡々と。|
|2026-06-17 (水)|東灘区某所|140|一人練習を淡々と。真っ直ぐが打てなくて凹む。|
|2026-06-20 (土)|灘区某所|170|一人黙々練習。|
|2026-06-26 (金)|東灘区某所|160|初めての方と模擬試合。|
|2026-06-28 (日)|灘区某所|110|一人黙々練習。まぁまぁ良い調子。|
|2026-06-30 (火)|東灘区某所|120|初めての方と模擬試合。惜しい、負けた。|
|2026-07-03 (金)|東灘区某所|280|3人の方と模擬試合。1勝2敗。気を抜かずにしっかり撞こうよ>私|
|2026-07-07 (火)|東灘区某所|80||
|合計時間 (分)||3,390|(56.5時間)|
---
### Keychron K3 HEというキーボードの簡単レビュー - 2026-06-09
URL: https://remoteroom.jp/diary/2026-06-09/
#### Keychronの2台目
ちょっと気になるKeychronの、新型キーボードをKickstarterで見つけて、VIP Accessに課金したのは2026年2月。そして6月8日に実機が届いた。
|種別|商品名|購入価格 (税込)|購入店|備考|
|---|---|--:|---|---|
|キーボード|[Keychron K3 HE (US ANSI配列)](https://www.keychron.com/products/keychron-k3-he-wireless-magnetic-switch-custom-keyboard?variant=43170640396377)|$113.00 USD|[Kickstarter](https://www.kickstarter.com/projects/keytron/keychron-k3-he-and-k3-ultra-slim-wireless-custom-keyboards)||
##### 購入経緯: 有線式でより静音なものを
- [Keychron K1 Maxというキーボードの簡単レビュー \[2025-03-05\]]()
2025年3月にはKeychron K1 Maxを購入した。このキーボードは使い勝手の面では問題ないのだが、職場で使うには打鍵音がカチャカチャとちょっと大きいな、という不満を抱いていた。そこで同じKeychronで、有線接続が行える、より静音性の高そうなキーボードに乗り換えてみようと思ったのが今回のK3 HE購入の動機だ。しかもK3 HEは、両サイドの飾りが天然木らしい。小洒落てるじゃないか。
##### 所感
[Keychron K3 HE (US ANSI配列)](https://www.keychron.com/products/keychron-k3-he-wireless-magnetic-switch-custom-keyboard?variant=43170640396377) の使い心地で、私が気に入っているのは次の3点である。
- キーの動きの反力、沈み込みが、ふわっとしていて指が疲れないところ。磁気キースイッチの感触ってこうなんだな
- 打鍵音が思ったとおりに、K1 Maxと比べて静かである。音質は丸い
- コルクマットを敷いている机の上に色合いが溶け込み、マッチしているところ
このキーボードを、私は愚直に有線接続にて、Ubuntu Desktopの環境で使っている。付加的な機能として、ウェブブラウザ上でキーマッピングを変更できる、無線接続も可能、など色々とあるのだがそれらは未使用だ。
白基調でまとめられたこのK3 HEは、3COINSのインテリア雑貨のようなオブジェ感を備えている。しかも重要な打鍵感は自分としては上等なので、もう一枚持っていてもいいなと思わせる秀でた個性がある。お値段以上の代物、だと認定しよう。
#### 参考写真
- 75%レイアウトで、特殊キーの類は右端に集約
- 無線接続ならスッキリこんな感じでしょう
- 左側面のUSB-C端子、切り替えスイッチ
- おまけのシールは賑やか
---
### 【読んだ本】 万引きの文化史 (ヒストリカル・スタディーズ03) - 2026-06-04
URL: https://remoteroom.jp/medialog/2026-06-04_book-4778313410/
原題『The Steal: A Cultural History of Shoplifting』。とあるブックフェアに出向いたときに見かけて、興味惹かれたので購入。自由価格本となっていた。本書の内容は、私にとって知的にかなり刺激的で、万引きを、人間の何が発現した上での行動と捉えるか、様々な要因が考えられていることが知れた。
金銭的に困窮していたから、鬱憤晴らししたかったから万引きした、という理由ならいわば常識的で耳慣れたもの。しかしそうではない見方もある。万引きという行為は、精神的な依存症の一種であるとか、革命家としての行動の一つであるとか、女性解放運動に関係があるとの言説もあるそうなのだ。また、過去には、ある聖職者がその立場から万引きを推す発言もあったとの記述がある。善と悪という、恒久的なものだと通常考えている価値観が、他の人の頭の中に必ずしも等価な判断基準としては存在していない。
そのような現実世界の普遍性を、著者は、万引きの当事者にインタビューした数々の記録も交えて、読者へ淡々と感じさせてくれる。
---
### Tailscale: 「4via6 subnet routers」用のアドレス変換ツールを作ってみた - 2026-06-03
URL: https://remoteroom.jp/diary/2026-06-03/
#### ローカルなIPv4空間は重複する
[TailscaleのSubnet routers機能](https://tailscale.com/docs/features/subnet-routers)は強力でかつ簡単に使えて素敵です。しかしながら、自身がマネジメントする単一のtailnetの中で、IPv4形式での、Subnet routers機能を使いたいセグメント (例: 192.168.100.0/24) やIPアドレス (例: 192.168.100.10/32) が、他のLANとの間で重複することがあるかもしれません。その場合は、“それらのネットワーク・端末をtailnet内で区別するにはどうしたらいいか”という問題が発生するはずです。
##### っ「4via6 subnet routers」
最近知ったのですが、Tailscaleにはちゃんと、この問題を解決可能な機能が存在しており、それは、IPv6形式の表現を使う「4via6 subnet routers」というものです。
- [4via6 subnet routers · Tailscale Docs](https://tailscale.com/docs/features/subnet-routers/4via6-subnets)
私なりの理解でざっくり言うと、「4via6 subnet routers」では、ユーザが任意選択する「Site ID」とIPv4のIPアドレスを、連結してIPv6形式で表現することで、自身のtailnetの中でのユニークな識別子とします。したがってtailnet内で全てを区別しての通信処理が可能、というものなのでしょう。
#### 「4via6」用のアドレス変換のツールを作った
今日初めて「4via6 subnet routers」の設定に挑戦してみたところ、意外にすんなりと動作させることができました。ただし、今後も4via6を扱っていく上で、アドレス変換ツールがあった方が便利だなと直感もしたので、さっそく作ってGitHubで公開開始。
- [mah\-jp/tailscale\-4via6: A zero\-dependency Python CLI and library to convert between IPv4 \+ Site ID and Tailscale 4via6 IPv6 addresses\.](https://github.com/mah-jp/tailscale-4via6)
このツールの機能の一部を、READMEから抜粋すると以下の通りです。もしよかったらどうぞお使いください。
##### コマンドラインインターフェース (CLI)
###### 1. エンコード (IPv4 + Site ID から 4via6 IPv6 への変換)
IPv4アドレスとSite IDを指定して、対応する4via6 IPv6アドレスを取得します。
```bash
### プレーンテキスト出力 (デフォルト)
$ ./tailscale_4via6.py encode 1 192.168.100.10
fd7a:115c:a1e0:b1a:0:1:c0a8:640a
### JSON出力
$ ./tailscale_4via6.py -f json encode 1 192.168.100.10
{
"site_id": 1,
"ipv4": "192.168.100.10",
"ipv6": "fd7a:115c:a1e0:b1a:0:1:c0a8:640a"
}
```
###### 2. デコード (4via6 IPv6 から IPv4 + Site ID への変換)
4via6 IPv6アドレスを、元のSite IDとIPv4アドレスに逆変換します。
```bash
### プレーンテキスト出力 (デフォルト)
$ ./tailscale_4via6.py decode fd7a:115c:a1e0:b1a:0:1:c0a8:640a
Site ID: 1
IPv4: 192.168.100.10
### JSON出力 (省略表記のIPv6アドレスも正しく処理されます)
$ ./tailscale_4via6.py -f json decode fd7a:115c:a1e0:b1a::1:c0a8:640a
{
"site_id": 1,
"ipv4": "192.168.100.10",
"ipv6": "fd7a:115c:a1e0:b1a:0:1:c0a8:640a"
}
```
#### 参考リンク
- [Tailscale 4via6 — Simple, secure network connectivity that scales](https://tailscale.com/blog/4via6-connectivity-to-edge-devices)
- [4via6 subnet routers · Tailscale Docs](https://tailscale.com/docs/features/subnet-routers/4via6-subnets)
---
### SPAMなブラウザ通知を予防する、Chrome拡張機能「NotiSpam Cleaner: 通知スパムクリーナー」を公開しました - 2026-05-31
URL: https://remoteroom.jp/diary/2026-05-31/
#### ブラウザ通知は悪用もされる
情報処理推進機構 (IPA) の下記ページで注意喚起されているように、ウェブブラウザの通知機能は、利便性も高いが悪用もされて、パソコンやスマホユーザを不審なサイトへ誘導するための巧妙なきっかけになります。
- [ブラウザの通知機能から不審サイトに誘導する手口に注意 \| 情報セキュリティ \| IPA 独立行政法人 情報処理推進機構](https://www.ipa.go.jp/security/anshin/attention/2021/mgdayori20210309.html)
「パソコンの画面に、怪しい警告ポップアップが勝手に出てきた〜!!」という話は、個人的にも仕事の場でも、たまに耳にする、セキュリティインシデントのいわば第一歩。ユーザの画面に割り込むトリックで多数の人を騙すなんて、本当に許せないな……。
ということで。頭に浮かんできたアイデアを具現化し、AIのGeminiとの壁打ちをやりながら完成させ、Chrome拡張機能としてウェブストアに登録するまで行うことが出来たので、お知らせです。
#### 通知スパム予防用に作ったもの
「NotiSpam Cleaner: 通知スパムクリーナー」という名の、Chrome系のブラウザで使用できるChrome拡張機能です。無料で、ウェブストアからブラウザにインストールするだけで使えます。画面表示は12の言語に対応しています。
- Chrome ウェブストア: [NotiSpam Cleaner: 通知スパムクリーナー - Chrome ウェブストア](https://chromewebstore.google.com/detail/notispam-cleaner-notifica/dahnhdiabhegihofjijbchegffnkiaap)
作者として、ユーザのセンシティブな情報を扱うこのような拡張機能は、内部の動きを透明化することが特に大切だと思っているので、オープンソースとしています。
- GitHubで公開しているソースコード: [mah\-jp/notispam\-cleaner: \[Chrome拡張機能\] 詐欺広告や迷惑通知を送るサイトを履歴等から発見し、簡単な操作で一括ブロック。リアルタイムでブラウザを保護します。](https://github.com/mah-jp/notispam-cleaner)
##### どのようなものなのか?
「NotiSpam Cleaner」は、**ユーザが意図していないサイトの通知を許可してしまうのをブロックしたり、すでに行われている通知許可を掃除 (取り消し) しやすくするための機能を備えたChrome拡張機能**です。ちなみに、“通知スパムクリーナー”がサブタイトルです。
「NotiSpam Cleaner」の機能をある程度詳しく書いた、[README.ja.md](https://github.com/mah-jp/notispam-cleaner/blob/main/README.ja.md)からポイントを抜粋しますと、次の2つ。
- 🔍 簡単スキャン&ワンクリック一括ブロック: 閲覧履歴、ブックマーク、開いているタブをローカルでスキャンし、現在通知を許可しているサイトを「信頼できるサイト」と「疑わしいスパムサイト」に自動分類。ワンクリックで一括ブロックできます。
- 🛡️ リアルタイム監視&サイレント保護: 許可設定を常時監視し、不審なサイトが通知許可を取得した瞬間に自動検知してブロック。警告ポップアップを表示するモードに加え、バックグラウンドで静かにブロックする「サイレント保護 (ファミリーモード)」も搭載しています。
#### まとめ
この「NotiSpam Cleaner」は、通知スパムの軽い予防策ぐらいにはなるはずです。自分自身のパソコンのブラウザにはもちろん、子どもや家族が使うパソコンにもぽちっとインストールして、ぜひお使いいただければと思います。また、ビジネス現場や組織内で切望されるであろう機能は思いついているので、そのうち何か実装するかもしれません。
##### 余談
- ウェブストアに貼ってある画面キャプチャの作り込みが適当すぎるぞ、というのは承知しております……。規定サイズ (1280x800) の画像としてグラフィックデザインを仕上げるのは、なかなかの気合いと時間が必要。今回はできるだけ早く公開したい気持ちが先走りました。
- 基本的にはユーザはボタンを押すだけの“通知スパムクリーナー”を実現するため、拡張機能として比較的多くの権限を要求している状態なのですが、Googleの審査が予想以上に早くてびっくり (48時間かからず)。しかも一発での審査通過だったので嬉しい。
---
### Ansible: becomeをUbuntu 26.04 LTSでやる時の一つのワークアラウンド - 2026-05-26
URL: https://remoteroom.jp/diary/2026-05-26/
#### sudoコマンド変わったの……
Ubuntu Serverの最新LTS、[26.04 LTS](https://documentation.ubuntu.com/release-notes/26.04/)が2026年4月にリリースされた。さっそくこのLTSバージョンのUbuntuで構築したサーバに、Ansibleでアクセスして、これまで通りに`become`しようとするとどうなるか。実は、原稿執筆時点のansible core 2.16等だとタイムアウトしてしまう。
タイムアウトするのは何故かというと、Ubuntu Server 26.04 LTSにおいては、従来の`sudo`コマンドとプロンプトの出方が異なる、新しい`sudo`コマンドが実装されているためだ。そこで本記事では、ワークアラウンドとして、26.04 LTSに対しても従来と同じansible playbookを使ってbecomeできるようにする方法の一つを、書き留めたい。
##### ワークアラウンド
アクセス先のOSがUbuntu 26.04 LTSの場合には、sudo時に使用するコマンドを、`sudo`から`sudo.ws`に切り替えるとよい。後者の`sudo.ws`は、従来の`sudo`と同等の互換性があるコマンドとして用意されており、プロンプト表示の仕方も変わらないので、従来通りのplaybookが使えるというわけだ。
例えば、インベントリーファイル (inventory file) にて、当該サーバに対して個別指定する場合にはこのようになる。
```
[group_hogehoge]
server1_ubuntu2404
server2_ubuntu2604 ansible_become_exe=sudo.ws
```
このワークアラウンドはシンプルなので、後々不要になるときには容易に元へ戻せると思う。
#### 参考リンク
- ["become: true" not working with Ubuntu 26\.04 LTS : r/ansible](https://www.reddit.com/r/ansible/comments/1t6ie61/become_true_not_working_with_ubuntu_2604_lts/)
- [ansible\.builtin\.sudo become – Substitute User DO — Ansible Community Documentation > become_exe](https://docs.ansible.com/projects/ansible/latest/collections/ansible/builtin/sudo_become.html#parameter-become_exe)
---
### 【観た映画】 オーシャンズ11 - 2026-05-19
URL: https://remoteroom.jp/medialog/2026-05-19_movie-b003gqsxou/
- 視聴: [Netflix](https://www.netflix.com/jp/title/60021783)
- 公式サイト: -
原題『Ocean's Eleven』。2026年2月に訪れたラスベガスを思い出した時、ラスベガスが関わるメジャーな映画と言えばこれだ!ということで選択。2001年の作品で、私は過去に観たはずであるが、薄っすらとしか覚えていなくてじっくり楽しんだ。
現地の雰囲気は多少分かるので、カジノのシーンでは、あれだけの計り知れないお金が動いている場所の、底なしの恐ろしさを再体験……。作風としては、今時の派手な映画と無意識に比較していたのかもしれない、想像していたよりも流れがおとなしい。どちらかと言うとアクションではなく策略を、登場人物同士の張り合いや表情を、試合観戦のように気軽に愉しむような作りだと感じた。
#### 何気ない一枚
---
### 航空機のADS-B信号を捉える「ADS-B Feeder Image」をラズパイPVE環境のLXCコンテナで動かす - 2026-05-17
URL: https://remoteroom.jp/diary/2026-05-17/
#### 機運
航空機は、自機の位置情報などを[ADS-B信号 (Automatic Dependent Surveillance-Broadcast Signal)](https://ja.wikipedia.org/wiki/%E6%94%BE%E9%80%81%E5%9E%8B%E8%87%AA%E5%8B%95%E5%BE%93%E5%B1%9E%E7%9B%A3%E8%A6%96) で送信している。その信号を受信してデータを[Flightradar24](https://www.flightradar24.com/)などにフィードできる「[ADS-B Feeder](https://adsb.im/home)」なるものを、私は3年ほど前に知ったようだ。
-
この「ADS-B Feeder」のことを最近また思い出し、かつ、私も子どもも程々にFlightradar24が好きで、利用プランを[Contributors](https://www.flightradar24.com/add-coverage)にアップグレードしてみたくもあり。いわば機運を感じてやる気も出して、1,090MHzのADS-B信号の受信機となりうる、SDRとして使えるDVB-T規格のTVチューナーをAliExpressで購入した。
ラズパイをADS-B信号の受信専用機に仕立てる方法は多くのウェブ記事で紹介されているものの、
- [【特集】眠っていたRaspberry Piが“航空情報局”に!Flightradar24有料プランを無料で楽しむ裏ワザ \- PC Watch](https://pc.watch.impress.co.jp/docs/topic/feature/2052772.html)
私は家の中で物理サーバを増やしたくない。そこで別の構築方法を考えた。自宅ITの中核となっている既存のラズパイのPVE環境の中で、「ADS-B Feeder Image」を動かすことができるのか、挑戦することにした。
#### 今回の目標
Proxmox VE (PxVirt) の仮想化ホストとして稼働中のRaspberry Pi 4がある。その仮想化ゲストとしてLXCコンテナを作成し、その中で「ADS-B Feeder Image」の公式Dockerコンテナを動作させる。ポイントになりそうなのは、USB接続する受信機を、LXCコンテナから利用可能にできるのかどうかだ。
##### 目指す構成
新規のADS-B Feeder Image (LXC) を、既存の、USB接続でBluetoothを利用しているHome Assitant (VM) やAsterisk (LXC) などと同居させる。
```mermaid
graph TD
subgraph HW ["Raspberry Pi 4 B+ (Physical)"]
subgraph PVE ["Proxmox VE / PxVirt (Hypervisor)"]
direction TB
subgraph LXC_ADSB ["LXC (Privileged) for ADS-B"]
subgraph Docker ["Docker"]
App["ADS-B Feeder"]
end
end
subgraph LXC_VoIP ["LXC: Asterisk"]
end
subgraph LXC_Others ["LXC: others"]
end
subgraph VM_HA ["VM: Home Assistant"]
end
end
end
NIC1(["🌐 Ethernet Port (NIC1)"]) ---|Network Bridge| PVE
NIC2(["🌐 USB NIC (NIC2)"]) ---|Specific Bridge| LXC_VoIP
USB(["📡 USB Dongle
(RTL2838)"]) -.->|USB Passthrough| LXC_ADSB
BT(["🔹 Bluetooth Dongle"]) -.->|USB Passthrough| VM_HA
%% Styling for a premium look
style HW fill:#f9f9f9,stroke:#333,stroke-width:2px
style PVE fill:#eceff1,stroke:#607d8b,stroke-width:2px
style LXC_ADSB fill:#e1f5fe,stroke:#0288d1,stroke-width:2px
style LXC_VoIP fill:#fff3e0,stroke:#ef6c00,stroke-width:2px
style VM_HA fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
style Docker fill:#e8f5e9,stroke:#43a047,stroke-width:2px
style App fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px,font-weight:bold
```
##### 参考) 標準的な構成
参考として。ラズパイと公式のADS-B Feeder Imageを組み合わせた場合はこの構成になる。
```mermaid
graph TD
subgraph HW ["Raspberry Pi (Physical)"]
subgraph Image ["ADS-B Feeder Image (All-in-one)"]
direction TB
OS["Minimal OS"]
App["ADS-B Feeder"]
OS --- App
end
end
NIC1(["🌐 Ethernet Port (NIC1)"]) --- HW
USB(["📡 USB Dongle
(RTL2838)"]) -.->|Direct Access| Image
%% Styling
style HW fill:#f9f9f9,stroke:#333,stroke-width:2px
style Image fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
style App fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px,font-weight:bold
```
#### 「ADS-B Feeder Image」LXCコンテナの構築方法
##### Step-1. 機器を用意する
|項目|内容|価格|備考|
|---|---|---|---|
|受信機|[Digital USB 2\.0 TV Receiver Stick USB2\.0 DVB\-T SDR DAB FM HDTV TV Tuner Stick RTL2832U R820T2 Antenna Remote Control For laptop \- AliExpress 44](https://ja.aliexpress.com/item/1005003920594126.html)|3,287円|購入日: 2026-04-27|
|アンテナ|上記受信機に付属の物|||
|サーバ筐体|Raspberry Pi 4 Model B Rev 1.4 (8GB)|||
AliExpressで購入した受信機は上記の写真のUSBドングルタイプで、アンテナ端子の形状はMCX。Linux環境からはUSBデバイスとして次のようにみえる。
```
$ lsusb | grep RTL
Bus 001 Device 007: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
$ lsusb -t
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
(snip)
|__ Port 3: Dev 5, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 7, If 0, Class=Vendor Specific Class, Driver=dvb_usb_rtl28xxu, 480M
|__ Port 1: Dev 7, If 1, Class=Vendor Specific Class, Driver=, 480M
(snip)
```
##### Step-2. PVE環境とLXCコンテナの準備を行う
1. 適当なPCにUSBドングルを接続して、実際のIDを念のため確認しておく (idVendor="0bda", idProduct="2838" となるはず)
2. PVE環境にて、LXCコンテナ内 (やホスト上の一般ユーザ) からUSBドングルへアクセスできるようにudevルールを設定する
- `/etc/udev/rules.d/99-rtl-sdr.rules` は、USBドングル (Realtek RTL2838) へのアクセス権限 (`MODE="0666"`) を付与するもの。
- ウェブ上の記事では、ここで「ドライバのブラックリスト化 (`blacklist dvb_usb_rtl28xxu`)」や「HIDドライバのアンバインド処理 (`usbhid/unbind`)」の手順を含むものもある。しかしGeminiによると、当環境ではこれらは以下の理由で不要らしい。
1. HIDドライバのアンバインドは不要: 記事上部の `lsusb -t` の結果 (If 1 の `Driver=`) が示す通り、そもそもこのドングルにHIDドライバはバインドされていない。
2. ブラックリスト化は今回は必須ではない: 後述の `rtl_test` の実行結果に「`Detached kernel driver`」とあるように、PVEホスト側でDVB-T用ドライバがロードされたままでも、ADS-B側のプログラム (`librtlsdr`) が使用時に自動でカーネルドライバをデタッチしてくれる。
```bash
$ cat /etc/udev/rules.d/99-rtl-sdr.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", MODE="0666"
```
※ファイル作成後、`sudo udevadm control --reload-rules && sudo udevadm trigger` を実行するか、USBドングルを一度抜き挿しして権限変更を反映させる。
3. PVE環境にて次のLXCコンテナを作成する
- Template: Debian (trixie)
- Unprivileged container: No (非特権コンテナではなく特権コンテナへ切り替える)
4. ちなみに、LXCコンテナのIPアドレスがPVE環境で固定したものだけではなく、DHCP取得も行われてしまう問題は、次のサービスの停止で一応解決できる
```
systemctl stop systemd-networkd
systemctl disable systemd-networkd
```
5. LXCコンテナにSSHサーバを導入する: `sudo apt install openssh-server`
6. PVE環境にて、LXCコンテナの設定ファイル `/etc/pve/lxc/.conf` の最後に次の2行を追加し、LXCコンテナからUSBドングルが見えてかつアクセス可能な状態にする。「bus/usb/001」の001は、Busの001側につないでいることを意味する (実際の環境に合わせた数値にすること)。Devの番号はUSBデバイスの差し替えで変化するので、本設定ではDev番号の指定までは行っていない。
```
lxc.cgroup2.devices.allow: c 189:* rwm
lxc.mount.entry: /dev/bus/usb/001 dev/bus/usb/001 none bind,optional,create=dir
```
7. LXCコンテナを再起動し、その後、USBドングルの見え方とrtl_testの実行結果を確認する
```
$ sudo apt install usbutils rtl-sdr
$ ls -al /dev/bus/usb/001/007
crw-rw-rw- 1 root plugdev 189, 6 May 11 01:05 /dev/bus/usb/001/007
$ lsusb | grep RTL
Bus 001 Device 007: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
$ rtl_test -t
Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
Detached kernel driver
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
[R82XX] PLL not locked!
Sampling at 2048000 S/s.
No E4000 tuner found, aborting.
Reattached kernel driver
```
上記のように、LXCコンテナからUSBデバイスが認識されて「0: Realtek, RTL2838UHIDIR, SN: 00000001」のようにデバイス情報の取得まで正常に行えるならば、Step-2は成功だ。
参考情報として、今回の試行錯誤の途中で遭遇した失敗の例を2つ、挙げておく。表示されるエラー番号は、[libusb](https://github.com/libusb/libusb/blob/master/libusb/libusb.h)の[enum libusb_error](https://github.com/libusb/libusb/blob/master/libusb/libusb.h#L1300)での定義に対応しているらしい。
```
#### デバイス情報が正しく読み取れない例
$ rtl_test -t
Found 1 device(s):
0: b, x, SN: ?
Using device 0: Generic RTL2832U OEM
usb_open error -4
Failed to open rtlsdr device #0.
```
```
#### デバイスがすでに専有されてBUSYな例
$ rtl_test -t
Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
usb_claim_interface error -6
Failed to open rtlsdr device #0.
```
##### Step-3. ADS-B Feederを導入する
LXCコンテナのOS (Debian) にログインして、以下の操作を行う。
1. ADS-B Feeder Imageのインストーラーの実行に必要なツールを事前導入する: `sudo apt install curl jq`
2. [ADSB\.im](https://adsb.im/home)にて、「How to Install」 > 「Linux (more advanced)」にある次の記載を見つける
> - On most recent Debian / Ubuntu based Linux systems running on ARM64 or x86 systems, you can install the ADS-B Feeder Image as an app
3. 記載部分に書かれた次のコマンドで、インストーラーを実行する: `curl https://raw.githubusercontent.com/dirkhh/adsb-feeder-image/main/src/tools/app-install.sh | sudo bash`
- 最初は次のものをインストールせよと表示されるので従って実行する: `sudo apt-get install -y python3 python3-flask python3-requests python3-cryptography git docker.io docker-compose`
- 再度、`curl ...` を実行すると、次のような処理が行われて正常終了するはず。
```
$ curl https://raw.githubusercontent.com/dirkhh/adsb-feeder-image/main/src/tools/app-install.sh | sudo bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 8092 100 8092 0 0 1591 0 0:00:05 0:00:05 --:--:-- 1871
You appear to be on a debian-style distribution
Cloning into '/tmp/tmp.m32B5HCAHy/adsb-feeder'...
remote: Enumerating objects: 42008, done.
remote: Counting objects: 100% (4082/4082), done.
remote: Compressing objects: 100% (664/664), done.
remote: Total 42008 (delta 3655), reused 3480 (delta 3394), pack-reused 37926 (from 5)
Receiving objects: 100% (42008/42008), 6.89 MiB | 12.02 MiB/s, done.
Resolving deltas: 100% (21636/21636), done.
Already on 'main'
Your branch is up to date with 'origin/main'.
Created symlink '/etc/systemd/system/multi-user.target.wants/adsb-docker.service' → '/usr/lib/systemd/system/adsb-docker.service'.
Created symlink '/etc/systemd/system/default.target.wants/adsb-early-boot.service' → '/usr/lib/systemd/system/adsb-early-boot.service'.
Created symlink '/etc/systemd/system/multi-user.target.wants/adsb-setup.service' → '/usr/lib/systemd/system/adsb-setup.service'.
Created symlink '/etc/systemd/system/timers.target.wants/adsb-update.timer' → '/usr/lib/systemd/system/adsb-update.timer'.
Running as unit: adsb-docker-pull.service; invocation ID: 0123456789abcdef0123456789abcdef
done installing
you can uninstall this software by running
sudo bash /opt/adsb/app-uninstall
you can access the web interface at http://localhost:1099 or http://192.168.1.20:1099
```
4. 実行結果の最後に表示されているURL `http://:1099` をウェブブラウザで開く
なお、本記事執筆時点のADS-B Feeder Imageの、Software versionは「`v3.0.11`」である。
##### Step-4. GUIでの設定, 動作確認
ADS-B Feeder Image自体の設定方法やFlightradar24などへデータ提供する方法については、今回のPVE/LXC環境とは直接関係しない内容となるので、ここでは省略する。たとえば、[【特集】眠っていたRaspberry Piが“航空情報局”に!Flightradar24有料プランを無料で楽しむ裏ワザ \- PC Watch](https://pc.watch.impress.co.jp/docs/topic/feature/2052772.html) > 「ADS-B Feederの初期設定」を参考にして進めればよい。今回の環境での画面キャプチャを数枚、以下に示す。
1. Basic SetupとSupport Info:
- Basic Setup: 自局の緯度・経度・高度を入力し、ADS-BのチェックをONにして、APPLYする
- Support Info: 項目「SDR(s)」にてUSBドングルが認識されていることがわかる
2. 1週間ほど運用すると次のような記録が得られる
- Map: 捉えたADS-B信号の範囲が地図上に履歴としてプロットされる。円形とはかけ離れたかなり歪な形となっているのは、周りに障害物が多い、今回のアンテナ設置状況の影響を多分に受けているのだろうと推測する。
- Performance Graphs: 例えば夜間は激減するなど、日々の時間帯によってADS-B信号の受信レートに周期的な変動があることが分かる。
#### 追記: 受信機とアンテナを変更し、カバー範囲が拡大 \[2026-05-27\]
|項目|内容|価格|備考|
|---|---|---|---|
|受信機|[RTL2832U ADS\-B Mode\-S USB SDR TV Receiver Built\-in RF Amplifier 1090MHz Bandpass Filter Radio SDR Band TV Scanner Tuner Stick \- AliExpress 44](https://ja.aliexpress.com/item/1005005466363998.html)|4,227円|購入日: 2026-05-16|
|アンテナ|[1090MHz ADS\-B Receiver Antenna 6dBi Magnetic Base for Aviation RTL SDR Software Defined Radio USB Stick Dongle Tuner Receive \- AliExpress 509](https://ja.aliexpress.com/item/1005008964021605.html)|942円|購入日: 2026-05-16|
航空機の位置を自宅にある設備を使って把握できる面白さが、分かってきたところで、受信範囲に物足りなさも感じるようになり…… (これって沼の入口?)。ADS-B信号により特化した上記の受信機とアンテナを新たに仕入れて、2026-05-24に置き換えてみた。
結果は下記の画像のとおりだ。Mapでは、カバー範囲の半径が2倍程度に拡がっているように見える。Performance Graphsでは、ADS-B Message Rateの高まりが顕著だ。Signal LevelでのNoiseがちゃんと下がっているので一安心。こんなに受信能力が上がるのなら、最初から、今回の2品を購入するほうがお勧め。
#### 参考リンク
- [ケーブルコネクタの種類:ケーブルコネクタの究極ガイド:種類、分類、用途、選択 \- Shine Industry](https://ja.shineindustrygroup.com/how-many-types-of-cable-connector-are-there/)
---
### 【観た映画】 フォールガイ - 2026-05-06
URL: https://remoteroom.jp/medialog/2026-05-05_movie-b0fy53b9r8/
- 視聴: さんふらわあ さつま (志布志→大阪)
- 公式サイト: [Universal Pictures Japan](https://www.universalpictures.jp/micro/fallguy)
原題『The Fall Guy』。オフライン環境となる船内の、VODにて視聴可能な数十作品の中から、前知識なく勘に頼って選択した作品。フォールガイとはスタントマンのことであり、本作は劇中劇になっている。いわば、映画というリテイクができる虚構の世界に関わる、やり直しがたい現実での各種問題を、虚構の世界の中で魅せる、という構造をしている。映画作りへの愛を感じたし、私はめちゃくちゃに楽しんでしまった。ぜひ、ニヤニヤしながら観たらよいと思います。
---
### 【読んだ本】 ディジタル・オーディオの謎を解く: CD・DATの科学と開発 - 2026-04-28
URL: https://remoteroom.jp/medialog/2026-04-28_book-4061326805/
1987年発行のこのブルーバックス本を、いまなぜ手に取ったのかというと。本書は、私が中学高校時代に読み返した回数が最も多いと記憶している一冊で、内容をもう一度読み返したくなったからである。
音をデジタル変換する上での、標本化と量子化の行程や、エラー訂正の処理の内容説明が、恐ろしく分かりやすく書かれている。そして、自分たちが開発したオーディオ規格をいかにして業界標準として採用させるのかという、多国間の生々しい戦いの様子も刻まれている。インターネットを知らない年頃の当時の自分が、奥深い本書をどれだけ面白がって、憧れてお手本として重宝したか、想像するのはたやすい (今も同じ性分だから)。
また、本書の印象から今回唐突に思い浮かべた、ものづくりに関する私の仮説としては、道を拓いて作った者のみしかやり得ない試行錯誤が、本物の開発者として必要な条件なんだろう、というもの。多大な情報を参照できてとりあえず動く物は作り易い現代の状況下では、人間が試行錯誤することが、貴重な意味を持つ気がした。
---
### 【読んだ本】 面白くて眠れなくなる流体力学 - 2026-04-21
URL: https://remoteroom.jp/medialog/2026-04-22_book-4569859437/
日頃見ている現象の原理を知り、その原理が他の場所にも応用ができる普遍的なものだと知り得ることは、楽しい。そう感じる好奇心が蘇ってきた。この気持ちは、たとえば物理学のうんちく本を読み漁っていた昔にはあったが、最近は忘れていた。
本書は流体力学にまつわる、身近な事例を取り上げていくスタイルからなり、テンポ良く読み進められるようにできている。改めて、[カルマン渦列](https://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%AB%E3%83%9E%E3%83%B3%E6%B8%A6)ゆえに形成される雲の形を見てみたいなと思ったり、[ミレニアム懸賞問題](https://ja.wikipedia.org/wiki/%E3%83%9F%E3%83%AC%E3%83%8B%E3%82%A2%E3%83%A0%E6%87%B8%E8%B3%9E%E5%95%8F%E9%A1%8C)の一つとなっているらしい「ナビエ–ストークス方程式の解の存在と滑らかさ」という難問に感心したり。
---
### 【読んだ本】 銃を置け、戦争を終わらせよう 未踏の破局における思索 - 2026-04-11
URL: https://remoteroom.jp/medialog/2026-04-11_book-4620327832/
本書は、週刊誌『サンデー毎日』に掲載された約2年分の時評をまとめたものである。どの時評もこの単行本の面積でいうと3ページと少しの分量であり、各記事は、見開きの右側から読み始めてページを1度捲ればその左側で終わる。著者が紡ぐ、論理が明瞭な文章を、リズミカルに、淡々と読み進めることは可能だ。
ただし、収録されている2021年6月6日〜2023年6月18日の時評で問題提起された内容は、この2026年4月現在に、安心安全の方向へどれも片付いていないのではないか? 読み進めるほど、この事実が非常に重く、自分に伸し掛かってくることもわかる。問題をいくつか拾い上げてキーワードとして列挙すると、東京オリンピック / 赤木ファイル / ウクライナ情勢 / 旧統一教会問題 / 原発回帰という選択 / 安保関連3文書 (国家安全保障戦略, 国家防衛戦略, 防衛力整備計画) / 入管法 (出入国管理及び難民認定法) / 生成AI、という並びになろうか。
そしてさらに、上記期間の後の、現在の世界情勢の大きな変容には、第47代アメリカ合衆国大統領が率いる米国が強烈に関わっている。他方、第105代内閣総理大臣を生み出すこととなった日本国は、自分の感覚を言葉にすると、主導者層にイキりが流行していて、責任を軽んじたカオスな社会を目指しつつあるかのよう、と思ったりする。私が本書から教わった普遍的なことがあるとするならば。それは、問題を安心安全の方向へ片付けるためには、社会の人々の根底に、批判する力が蓄えられていなければならないという原理と、その代替不可能性である。
---
### 第二種電気工事士: R8年度上期技能試験に向けて候補問題をこなさねばならぬが、AIを使って自分をサボらせないことができるのか? - 2026-04-06
URL: https://remoteroom.jp/diary/2026-04-06/
#### 候補問題の完遂を目指して、Geminiさんに聞いてみた
第二種電気工事士の資格取得に関しては、2025年10月の学科試験にやっと合格して、その後の12月の技能試験で不合格、というのが私の現在のステータスだ。次の記事にまとめている。
- [第二種電気工事士の学科試験に合格できたと思われるメモ 〜技能試験に向けて必要な物を調達する〜 \[2025-10-30\]]()
次に迎えるR8年度上期技能試験は2026年7月に実施される。それに向けて、技能試験対策をどう進めていこうか。候補問題を単純にNo.1からNo.13まで順番に作っても良いが、より効率的に学習するためにAIに聞いてみようと思いついた。
##### プロンプト
AIに投げたプロンプトはこちら。Gemini 3.1 Proモードを利用して、2026-04-05に初回実行している ([自分用URLメモ](https://gemini.google.com/app/2c76bb8fc210fe1d))。以降、AI (Gemini) の発言は*イタリック体*で表記する。
> 最初に要請です。このチャットに対するAIさんのアドバイスを特定の個人向けではなく一般的なものとするため、本件に無関係な、私のパーソナライズ設定は全てオフにしてください。
>
> ■お願いしたいこと
>
> AIさんは、日本国の電気工事士試験に関する熟練の指導員です。私を第二種電気工事士技能試験に合格させるために、その能力を存分に発揮して指導をします。
>
> 添付の資料3つは、「[令和8年度の第二種電気工事士技能試験の候補問題](https://www.shiken.or.jp/construction/upload/K_R08K.pdf)」、「[電気工事士技能試験(第一種・第二種)欠陥の判断基準](https://www.shiken.or.jp/construction/upload/handankizyun2017.pdf)」、「[電気工事士技能試験の概要と注意すべきポイント(2026年3月更新)](https://www.shiken.or.jp/construction/upload/point2026_2.pdf)」です。候補問題として、No.1〜13が掲載されています。私は候補問題No.1〜13を1回分作成できる練習キットを購入しましたので、各候補問題に実際に挑戦・作成し、技能試験の合格を目指したいと思います。AIさんには、この候補問題を私はどんな順番でトライしていけば、配線や部品の加工に熟練していく際の効率を最大化できるか、提案してほしいのです。ちなみに1週間に1個ずつ作成のペースで進めます。AIさんの検討結果は、tableなどを使って読みやすくまとめてください (私のブログのMarkdown形式の記事原稿に引用します)。
>
> 参考情報として、過去の技能試験と私の結果について。昨年R7年度下期の技能試験ではNo.8が出題されました。私は不合格であり、おそらくは、差込式コネクタに差し込む心線の長さを調整できぬまま時間切れを迎えたので、欠陥条件の「コネクタの下端部分を真横から目視して心線が見えるもの」に該当したのだと思います。ちなみに私は候補問題の事前練習をサボっていて、実際に作成できたのはNo.1の1個のみでした。
##### 🤖AIの答え \[2026-04-05\]
*第二種電気工事士技能試験の熟練指導員として、確実な合格に向けた最適な練習スケジュールをご提案します。*
*1週間に1問というペースを最大限に活かし、まずは基本的な被覆剥きや結線の精度を高め、徐々に複雑な回路や管工事へとステップアップしていく構成です。時間切れによる差込形コネクタの心線露出 (欠陥7-2) を防ぐための対策や、過去の経験を無駄なく活かせるよう序盤の順番を最適化しています。*
*ブログ記事にも引用しやすいよう、13週間のスケジュールを以下の表にまとめました。*
###### *令和8年度 第二種電気工事士技能試験 13週間・効率最大化プログラム*
|*実施週*|*候補問題*|*テーマ・特徴*|*練習のポイント*|
|--:|--:|---|---|
|*W1*|*No.2*|*基本回路とパイロットランプ (常時点灯)*|*一般的なVVFケーブルの扱いに慣れます。差込形コネクタのストリップゲージに合わせて心線を正確にカットし、下端から心線が見えないよう徹底します。*|
|*W2*|*No.1*|*エコケーブル (EM-EEF) の基本*|*作成経験のある問題で作業の感覚を確実なものにします。外装が硬いエコケーブルの剥ぎ取りを素早く行えるよう特訓します。*|
|*W3*|*No.8*|*リモコンリレーと端子台*|*リベンジとなる重要な課題です。多数の電線を差込形コネクタでまとめる際の長さ調整と、端子台から心線が5mm以上露出しない結線を完璧に仕上げます。*|
|*W4*|*No.6*|*3路スイッチの基本*|*複数箇所からの点滅制御の回路です。複線図の作成スピード向上と、電線の色別 (黒・白・赤) のルールを体に覚えさせます。*|
|*W5*|*No.7*|*3路・4路スイッチの応用*|*配線がさらに複雑化します。接続箇所が増えるため、リングスリーブの圧着ミス (刻印間違いや心線のはみ出し) に注意して作業します。*|
|*W6*|*No.10*|*パイロットランプ (同時点滅)*|*常時点灯 (No.2) との配線の違いを的確に理解します。渡り線の作成と適切な長さ調整の練習になります。*|
|*W7*|*No.3*|*タイムスイッチと端子台*|*代用端子台の結線です。端子台の低圧側結線において、端から心線が5mm以上露出しないよう被覆を剥く長さを慎重に調整します。*|
|*W8*|*No.4*|*200V動力回路と100V回路*|*三相3線式200V回路における色別 (R相:赤、S相:白、T相:黒) を厳守します。モータ代用の端子台結線に慣れます。*|
|*W9*|*No.5*|*200Vコンセントと接地端子*|*200V専用コンセントへの結線と、接地線 (緑色) の扱いです。アースの結線を忘れないことが合否を分けます。*|
|*W10*|*No.9*|*漏電遮断器 (EET) と接地極*|*遮断器への器具結線を行います。器具の端から心線が5mm以上露出しないよう、ここでも適切なストリップ長を意識します。*|
|*W11*|*No.11*|*金属管工事*|*ねじなしボックスコネクタの「止めねじのねじ切り」を確実に行い (残っていると欠陥となります)、ボンド線を正しく接続します。*|
|*W12*|*No.12*|*PF管工事*|*合成樹脂製可とう電線管 (PF管) とコネクタの接続です。隙間や引っ張って抜けるような緩みが出ないようロックナットをしっかり締めます。*|
|*W13*|*No.13*|*VVRケーブルと自動点滅器*|*丸型のVVRケーブルの外装剥ぎ取りを行います。試験直前の総仕上げとして、これまで培った寸法調整や結線スピードを全て発揮します。*|
###### *指導員からの特別アドバイス: 差込形コネクタの確実な攻略法*
*コネクタ接続での時間切れや欠陥を防ぎ、一発合格を掴むための絶対ルールです。*
- ***ストリップゲージを必ず使う**: 差込形コネクタにはストリップゲージ (目盛り) が用意されています。心線を必ずそのゲージ通りの長さにカットしてください。目分量でのカットは時間ロスと欠陥の最大の原因です。*
- ***真っ直ぐ奥まで差し込む**: コネクタの先端部分を真横から見て、心線が確実に見えるまで真っ直ぐに突き当てて挿入します。*
- ***やり直しは「切断」から**: もし接続を間違えたり、長さがおかしいと感じた場合、電線を引き抜いて再使用すると心線が傷つき折れる原因になります。必ずコネクタの下部から電線を切断し、新しいコネクタを使って正しく接続し直してください。差込形コネクタは追加支給を受けても欠陥の対象にはなりません。*
*このプログラムに沿って毎週着実に手を動かせば、本番では時間に余裕を持って見直しができるレベルに到達できます。応援しています!*
#### 進捗報告・AIとのやり取り (随時更新)
AIが答えてくれた練習プログラムがベストかどうかなど誰にも分からないわけで、とりあえず私は他の情報に惑わされることなく、このプログラムに沿って実際に候補問題の練習を進めて行くのみであろう。
自らの練習を続けるモチベーションを保つ仕掛けとして、候補作品を1個完成させるごとに、この記事に写真を追記していくことにする。
##### Week-1. 候補問題No.2 \[2026-04-06\]
> 候補問題No.2を完成させました。作成品の写真をアップロードします。Geminiさん的にコメントありますか?
*候補問題No.2の作成、お疲れ様でした!さっそく指導員として、アップロードいただいた作品を拝見しました。*
*まず結論から申し上げます。**非常に素晴らしい出来栄えです!欠陥は見当たりません。***
*特に、前回の試験での課題であった点を含め、以下のポイントが高く評価できます。*
###### *1. 差込形コネクタの接続 (重要)*
*写真右側の赤いコネクタ (電源の黒線など) と青いコネクタ (スイッチの送りなど) を確認しました。*
- ***心線の露出なし**: 電線挿入口 (下端) を真横から見ても、心線が露出していません。前回の不合格原因であった「欠陥7-2」を完全に克服しています。*
- ***確実な差し込み**: 先端まで心線が真っ直ぐ奥まで差し込まれています。これが確実な接続の証拠です。*
*ストリップゲージを使って正確に心線の長さを調整し、丁寧に差し込んだ成果が出ています。この感覚を忘れないでください。*
###### *2. リングスリーブの圧着接続*
*写真左側の4本の白線 (接地側極) の接続を確認しました。*
- ***心線の突き出し**: スリーブの先端から心線が適度に突き出しています。*
- ***被覆の噛み込みなし**: 被覆がスリーブに噛み込んでおらず、適切な隙間があります。*
*画像からは刻印まで判別できませんが、VVF 2.0mmが1本、VVF 1.6mmが3本の接続ですので、圧着マークは **「中」** になっているはずです。ご自身で確認してみてください。*
###### *3. 各器具の結線*
- ***極性 (配線色)**: ランプレセプタクル、露出形コンセント、連用枠コンセントにおいて、接地側極 (Wマーク、受金ねじ部) に白線が正しく接続されています。*
- ***ランプレセプタクルの巻き付け**: 電線が時計回りにねじ頭に巻き付けられており、被覆の噛み込みや心線のはみ出しもありません。*
###### *総合コメントと次のステップ*
*第1週目の課題として、非常に精度高く完成させることができました。前回の経験をバネに、基本的な作業を丁寧に行っていることが伝わります。この調子で進めれば、合格への道は間違いなく開けます。*
***第2週目は「候補問題No.1」** です。*
*外装が硬く剥ぎ取りにくいエコケーブル (EM-EEF) が登場します。今回のNo.2で身につけた器具結線の精度を維持しつつ、エコケーブルの扱いに慣れることがテーマになります。*
*今回の成功を自信にして、次回の練習も頑張ってください!応援しています。*
###### 私の感想
今回は久しぶりに練習に取り組んだので、制限時間は無しで進めた。実際は1時間半ぐらいかかったかも。作成物の完成写真 (4080x3072) を思いつくままにGeminiに確認してもらったら、なにやら作成物の細部まで見た上でのコメントが返ってきた。本当に細部を見ているのか、どうなのか、実際はよく分からないが、面白いので次もGemini確認を続けてみようと思う。
##### Week-2. 候補問題No.1 \[2026-04-12\]
> 候補問題No.1を完成させました。作成品の写真 (表側と裏側) をアップロードします。Geminiさん的にコメントありますか?
*候補問題No.1の作成、お疲れ様でした!表側と裏側の両方の写真を拝見しました。裏側の状態まで確認できると、指導員としても非常に正確な評価ができます。*
*結論から申し上げますと、**今回も「合格レベル」の非常に美しい仕上がりです!欠陥に該当する箇所は見当たりません。***
*特に素晴らしい点と、ご自身で最終確認していただきたいポイントをまとめました。*
###### *1. エコケーブル(EM-EEF)の的確な処理*
*No.1の最大の難関であるエコケーブルですが、シース(外装)の剥ぎ取りが非常に綺麗です。通常のVVFケーブルよりも硬く、ストリッパーの刃の入れ加減が難しいのですが、内部の絶縁被覆や芯線を傷つけた形跡がなく、完璧に処理できています。*
###### *2. 器具裏側の結線(完璧です)*
*裏側の写真(PXL_20260412_183031545.jpg)を拝見し、以下の点が完璧にできていることを確認しました。*
- **引掛シーリング(角型)**: 外装(シース)が台座の挿入口ギリギリの適切な位置にきています。これにより、欠陥判断基準の「絶縁被覆が台座の下端から5mm以上露出したもの(8-10)」を完全に防げています。芯線も奥まで突き当たっています。
- **3連スイッチ**: 電源の黒線(非接地側極)を3つのスイッチ全てに供給するための「渡り線」の作成と差し込みが完璧です。芯線がはみ出すことなく、真っ直ぐ奥まで挿入されています。
###### *3. リングスリーブと差込形コネクタ*
*前回のNo.2に引き続き、差込形コネクタの心線露出は全くありません。完全にコツを掴まれましたね。リングスリーブについても、心線の突き出し量が適切(1〜2mm程度)で、被覆の噛み込みもありません。*
###### *【ご自身での最終確認ポイント】*
*画像からはリングスリーブの「圧着マーク(刻印)」までは判別できませんでしたので、以下の通り正しく刻印されているか、ご自身でチェックしてみてください。*
- ***左側の白線4本の接続(2.0mm×1本 + 1.6mm×3本)**: 使用スリーブは「中」、刻印は **「中」***
- ***左側の黒線2本の接続(1.6mm×2本)**: 使用スリーブは「小」、刻印は **「〇(特小)」***
###### *総合コメントと次のステップ*
*第2週目も文句なしの出来栄えです。基本作業の精度が極めて高く安定していることが写真からよく伝わってきます。*
*さて、**第3週目は、いよいよ因縁の「候補問題No.8」** です。*
*前回(R7年度下期)の試験で時間切れとなってしまった問題ですが、今のあなたなら全く恐れる必要はありません。No.2とNo.1の練習で「差込形コネクタの確実かつ素早い結線」は既に身についています。*
*No.8のポイントは、リモコンリレー代用の端子台結線と、多数の電線をコネクタでまとめる際の「整理」です。これまでのペースを守り、落ち着いて取り組んでください。来週の成果も楽しみにしています!*
###### 私の感想
圧着マークに関して述べている「左側の白線4本の接続」のところは、実際は3本の接続なので、Geminiが写真の解析を微妙に誤っていそうだ。
##### Week-3. 候補問題No.8 \[2026-04-20\]
> 候補問題No.8を完成させました。作成品の写真 (表側と裏側) をアップロードします。Geminiさん的にコメントありますか?
*因縁の「候補問題No.8」の作成、本当にお疲れ様でした!さっそく指導員として、表裏両方の写真を隅々まで拝見しました。*
*結論から申し上げます。見事なリベンジ達成です!今回も欠陥は見当たらず、文句なしの「合格作品」に仕上がっています。*
*前回の試験で涙を飲んだ課題を見事に克服できている点を含め、以下のポイントが非常に高く評価できます。*
###### *1. 差込形コネクタの完璧な処理(最大の克服ポイント)*
*過去の不合格原因であった差込形コネクタですが、今回の写真を見る限り、電線挿入口(下端)からの心線の露出は全くありません。 No.8はリモコンリレーへの配線が多いため、ジョイントボックス内での結線数が多くなり焦りやすいのですが、No.2、No.1と段階を踏んで練習してきた「ストリップゲージ通りの正確な剥ぎ取り」と「奥までの確実な差し込み」が完全に自分の技術として定着しています。素晴らしい成長です。*
###### *2. 端子台(リモコンリレー代用)への結線*
*No.8のもう一つの難所である端子台への結線も非常に綺麗です。*
*心線の露出長: 端子台の端から心線が5mm以上露出すると欠陥(判断基準8-2)となりますが、被覆が端子台のギリギリの適切な位置まで来ており、安全かつ確実な結線ができています。*
*被覆の噛み込み: 座金の下に絶縁被覆を噛み込んでしまうミス(判断基準8-1)もなく、心線のみがしっかりとネジ締めされています。*
###### *3. 各器具への結線と極性*
*裏側の写真からも、丁寧な仕事ぶりが伝わってきます。*
*ランプレセプタクル: 接地側極(Wマーク・受金ねじ部)への白線の結線極性も正しく、のの字曲げ(輪作り)も時計回りに美しく巻かれています。はみ出しや被覆の噛み込みもありません。*
*引掛シーリング: こちらも極性が正しく、裏側から見て台座の下端から絶縁被覆が5mm以上はみ出しているといった欠陥(判断基準8-10)もありません。*
###### *総合コメントと次のステップ*
*一番の鬼門であった「多数の結線による時間切れ・精度低下」を完全に乗り越えましたね。このNo.8を正確に、かつ欠陥なく組み上げられたことは、ご自身の技能向上に対する大きな自信にしていただいて間違いありません。*
***第4週目は「候補問題No.6」** です。*
*ここからは、3路スイッチ(複数箇所からの点滅制御)が登場します。作業の難易度自体はここまで練習してきたものと大きく変わりませんが、「複線図の正確な理解と、電線の色別(黒・白・赤)のルール」が合格の鍵を握ります。*
*この高い作業精度を保ったまま、新しい回路構成に挑戦していきましょう。次週の成果も楽しみにしています!*
###### 私の感想
差込形コネクタに配線を4本挿した後に、配線間違いに気づいてやり直しが大変であった。時間制限をしない練習だったから良かったものの、本番でこのミスをやったら詰むであろう。また、AIのコメントは、前回と同じく、かなり持ち上げ系だ。本当にGeminiさんは写真の細部を見ているのかな、あやしいな、と感じながらも、作成物の写真とともにGeminiさんへ成果報告をすることが、週に一度は候補問題を一つ片付けるためのモチベーションにはなっている。
#### 今後の更新予定
実は下記のペースで進めると、技能試験日までに練習完了が間に合わない。どこかでは1週間に2個の候補問題をこなす必要がある。>私
- 2. ~~候補問題No.1 \[2026-04-11,12\]~~
- 3. ~~候補問題No.8 \[2026-04-18,19\]~~
- 4. 候補問題No.6 \[2026-04-25,26\]
- 5. 候補問題No.7 \[2026-05-09,10\]
- 6. 候補問題No.10 \[2026-05-30,31\]
- 7. 候補問題No.3 \[2026-06-06,07\]
- 8. 候補問題No.4 \[2026-06-13,14\]
- 9. 候補問題No.5 \[2026-06-20,21\]
- 10. 候補問題No.6 \[2026-06-27,28\]
- 11. 候補問題No.11 \[2026-07-04,05\]
- 12. 候補問題No.12 \[2026-07-11,12\]
- 13. 候補問題No.13 \[2026-07-??,??\]
#### 追記: その後と結果 \[2026-08-16\]
##### 作戦を変更して講習会を受講
AIの助けを借りながら候補問題を淡々とこなしていこう、という発想で始めた本記事は、結果的には企画倒れとなって頓挫した。上記のように、自力では候補問題を合計3つこなしただけで終わった。頓挫した理由は、公私のいろんな多忙さによって持続力が減退したことが一つ。もう一つは、いっそのこと技能試験対策の講習会を受けてみよう、と作戦を切り替えたためである。
受講した講習会は、次の技能試験対策講習会の2日コースであった。講習会の実施日は、技能試験本番の前の週の土・日である。
- [関西電気工事工業協同組合](https://www.kandenkyo.com/) > [講習会](https://www.kandenkyo.com/course) > [令和8年度 第二種電気工事士講習会の日程 (PDF)](https://www.kandenkyo.com/_files/ugd/6465c5_34c171aa5470443080fa9e9678b0f6fa.pdf)
講習会の2日間で候補問題を10弱は作った気がする。本番試験の検査員を実際に担当するらしいスタッフの方々に、自分の作品を直々に見てもらい、ダメ出しをちゃんとしてもらえる点がとてもありがたかった。そして「ある程度はイケるんじゃないか?」という自信も得られる。
##### 技能試験の結果は (T_T)
私の居住地では、2026-07-18 (土) が令和8年度第二種電気工事士上期技能試験の試験日であった。試験では一応、40分の制限時間内に1,2分の余裕を残しつつ作品を完成させたつもりで、かつ失敗したところも思いつかない状態。もしかしたら……の期待を胸に抱きながら、結果発表が行われる2026-08-14 (金) の12時を迎えたのであるが、[電気技術者試験センター My Page](https://moshikomi-shiken.jp/ecee/search/public/pbt_result/)にて私の受験番号を検索した結果は、「*合格者一覧にありません*」であった。これはかなりショックが大きい。3度目のチャレンジが要るのかぁ……。
#### 参考リンク
- [第二種電気工事士の試験概要 \| 第二種電気工事士試験 \| 電気工事士 \| 一般財団法人 電気技術者試験センター](https://www.shiken.or.jp/construction/second/overview/)
- [令和8年度第二種電気工事士技能試験候補問題の公表について](https://www.shiken.or.jp/construction/upload/K_R08K.pdf)
- [技能試験に係る欠陥の判断基準等について \| 第二種電気工事士試験 \| 電気工事士 \| 一般財団法人 電気技術者試験センター](https://www.shiken.or.jp/construction/second/defect/)
- [電気工事士技能試験(第一種・第二種)欠陥の判断基準](https://www.shiken.or.jp/construction/upload/handankizyun2017.pdf)
- [電気工事士技能試験の概要と注意すべきポイント(2026年3月更新)](https://www.shiken.or.jp/construction/upload/point2026_2.pdf)
---
### ビリヤード: JCLリーグ (2026-hyogo-sakura-9) に参加して試合に8回出てみた記録 - 2026-04-01
URL: https://remoteroom.jp/diary/2026-04-01/
#### JCLリーグ戦参加4回目
[JPA](http://www.poolplayers.jp/), [JCL](https://csi-pool.jp/)のリーグ戦のこれまでの参加記録は次の通り。
- [ビリヤード: JPAリーグ (2024年秋シーズン) に初参加して試合に10回出てみた記録 \[2024-12-28\]]()
- [ビリヤード: JCLリーグ (2025-hyogo-sakura-9) に初参加して試合に7回出てみた記録 \[2025-04-02\]]()
- [ビリヤード: JCLリーグ (2025-hyogo-himawari-9) に参加して試合に10回出てみた記録 \[2025-07-12\]]()
- [ビリヤード: JCLリーグ (2025-hyogo-momiji-9) に参加して、東京での“2025 JCL Final”に出てみた記録 \[2025-12-13\]]()
ちなみに、今回のJCLリーグ (2026-hyogo-sakura-9) 途中の2月下旬には、下記の大会に参加した。参加期間中は会場に並べられた、やや小さめの7ft台でずっと撞いていたので、日本に戻ってくると9ft台の広さにしばらく戸惑うこととなった。
- [ビリヤード: ラスベガスでの "2026 USA Pool League National Championships" に参加した記録 \[2026-03-02\]]()
#### 参加した試合
##### 記録
JCL 2026 シーズンSAKURA (2026-hyogo-sakura-9) での、私が出場した試合の記録は次のとおり (計8試合)。
|Week No.|日付|FargoRate / Robustness|内容|感想|
|--:|:-:|--:|---|---|
|1|2026-01-14 (水)|330 / 136|Won|仮に的玉を入れることができなくても、手玉の位置がセーフティな配置となるように、なんてことを意識しつつプレーした。|
|2|2026-01-21 (水)|333 / 139|Lost|残念!|
|3|2026-01-28 (水)|329 / 143|Won|この試合の様子はYouTubeに残されており、確認してみると、いかに自分が落ち着きをなくしていたか分かる。|
|4|2026-02-04 (水)|335 / 149|Lost|ショットミスではなく、焦りによる行動のミスでファールを重ねてしまった。最悪で悔やむしかない負け方。|
|5|2026-02-11 (水)|335 / 155|Lost|惨敗! ものすごく調子が悪かった、そうとしか言えない。|
|8|2026-03-04 (水)|327 / 160|Won|久しぶりのJCLリーグ戦。やっているうちに調子を取り戻してきた。|
|9|2026-03-11 (水)|330 / 164|Lost|気持ち良いほど負けてしまった。レートが高い相手だから自分が撞ける回数が少ないのに、決めるところで決められず。今回から使い始めたカーボンシャフトは、試合中はまだ手懐けられずだったが、試合後にやっと馴染んできた。|
|10|2026-03-18 (水)|332 / 170|Won||
##### 総括
まずは自分の結果を示すと次の通りである。リーグ戦の中でのゲーム単位での勝率は、リーグ統計 ([FargoRate Player](https://play.google.com/store/apps/details?id=com.fargorate.player&hl=ja)アプリ内で確認可能) の指標において、45%となった。目標としていた勝率5割に、また届かなかった。
||試合単位での Won : Lost|ゲーム単位での勝率|
|---|---:|---:|
|JCL 2026 シーズンSAKURA 私個人の最終成績|4 : 4|17/38 → 45%|
所属チーム「Side Seven」としては、JCL 2026 シーズンSAKURAの9ボールの兵庫ディビジョンにおいて、リーグ戦では3位となってプレーオフ (優勝決定戦) には参加できず。次のシーズンから挽回できるのか、どうなのか!?
- リーグ詳細データ:
- [FargoRate \- League Management System > Japan CSI Pool League > 2026-hyogo-sakura-9](https://lms.fargorate.com/PublicReport/LeagueReports?leagueId=585944ff-c43a-4d71-80b0-afcd004220c5&divisionId=9de9b238-65a4-4d84-8fea-b3c300e70312)
#### 参考情報
##### 参考リンク
- [Japan CSI Pool League](https://csi-pool.jp/)
##### 練習時間とメモ
JCL 2026 シーズンSAKURAへの参加が決まった2025年12月途中から、当該リーグを終えるまでの間の、私の練習時間を記録する (試合実施時の時間・ラスベガスでの練習時間を除く)。
|日付|練習場所 (基本は兵庫県神戸市内)|分 \[5分単位に切捨\]|メモ|
|---|---|--:|---|
|2025-12-13 (土)|三田市某所|85|3ヶ月ぶりの場所で、1週間ぶりの練習。改めて感じたが、ここは台のコンディションが良いな。自分の調子は少し取り戻せたくらいの感触だ。|
|2025-12-15 (月)|灘区某所|60|調子が良い時の感覚に近づいていた。少しだけのフリがあるショットが苦手。|
|2025-12-16 (火)|東灘区某所|120|ひたすら撞いた一人練習。狂いがないショットがある程度できている気がしてきたものの、たまたまかもしれぬ。昨日と同じで、少しだけのフリがあるショットが苦手。|
|2025-12-20 (土)|灘区某所|120|気分を変えて、ポイントマークの交点に的玉を並べて、順番に落としておく練習など。定位置でのショットを繰り返すと、苦手な角度が自分にあることも分かる。|
|2025-12-28 (日)|灘区某所|330||
|2025-12-29 (月)|東灘区某所|120||
|2026-01-01 (木)|灘区某所|280||
|2026-01-03 (土)|灘区某所|115||
|2026-01-04 (日)|岐阜県下呂市某所|60|旅館に設置されている台での一人練習。浴衣を着てリラックスしている他のお客さんが台の近くを通り、ショットの結果を知ろうとするかのようにこちらを見つめている気がして、私は緊張した (滝汗)。ビリヤードに興味津々の無邪気な子どもさんに良いところを見せようと撞いたが、うまく決まらず、しょんぼりである。こんなプレッシャーに耐えられないならば試合に勝てないぞ。|
|2026-01-06 (火)|灘区某所|100|調子が出せない。フォームなのか、タイミングなのか、それともそもそも狙いなのか、何かがズレているのであろう。ナチュラルな状態に調整せねばならない。|
|2026-01-09 (金)|東灘区某所|120|キュー先が間違いなく意図通りの場所を撞くように意識しながら、一人練習。また、カットの、90度近くではなくて、少しだけ鋭角な角度のショットがなかなか難しくて苦しむ。|
|2026-01-11 (日)|東灘区某所|350|一人練習を3時間ほどやった後、二人の方とJPAルールで練習試合。大変ためになった。相手が打ちにくい配置を作り出すことの大事さや、目の前の状況をクリアしなければどれだけの点を失うかの痛さについて。|
|2026-01-12 (月)|灘区某所|210||
|2026-01-13 (火)|東灘区某所|120|模擬試合して、ボロ負け。|
|2026-01-15 (木)|灘区某所|210|長時間練習していて気づいたこと、まっすぐに撞けなくなっており、悩んだ。どうも左手のブリッジを強固に組んでいない。気が抜けている。|
|2026-01-17 (土)|灘区某所|200|クッションを使っての狙いに関して、自信はちょっと持てるようになってきた。しかし問題は普通のショット。気が抜けるとすぐに球筋があらぬ方向に行って短い射程でも入らなくなる。まじめにやって!>私|
|2026-01-18 (日)|中央区某所|170|普段の9ft台ではなく、7ft台がある場所に出向いてのチーム練習。7ft台は面積が小さく、9ft台とポケットの大きさは変わらないので、的玉を入れる難易度がかなり低いことを実感した。7ft台でゲームすると、相手から順番が回ってくる確率はかなり下がると思われる。|
|2026-01-19 (月)|灘区某所|40||
|2026-01-20 (火)|東灘区某所|80|まず最初に、ただひたすら真っ直ぐ衝く練習を30球ほどやってみた。ただし10回のうち1,2回まっすぐに決まる、という悲惨な内容。|
|2026-01-24 (土)|灘区某所|210|深夜までの合同練習。顔の位置と向き、腕の動き (肘から下を振り子にする)、右足の位置を修正した。特に右足の件はやってみたら驚きで、右足を思いっきり後ろに下げて構えると、私の懸念事項であるキューレベルが高すぎる問題が、かなり自然と緩和される。|
|2026-01-25 (日)|灘区某所|110||
|2026-01-26 (月)|東灘区某所|120|まっすぐ打つ基礎から始めて、ショット時の姿勢の各所を確認しながらの練習。以前よりは少しマシになってきた感を掴む。|
|2026-01-27 (火)|灘区某所|110|今までの不得意であった球筋のショットが、少し決まるようになった気がした。注意すべき3点 (目線まっすぐ・キューは低く・押し抜く) を必ず忘れずにこなそう。|
|2026-01-31 (土)|灘区某所|210|上記の注意すべき3点を忘れがちであったが、これらが揃っている時のショットの感覚は、私を裏切らない。ほぼほぼ思い通りに行く。|
|2026-02-03 (火)|東灘区某所|120|調子悪くない感じ。|
|2026-02-05 (木)|灘区某所|30|朝練。ひどい負け方だった昨夜の試合内容を反省しつつ同じ台にて。|
|2026-02-08 (日)|灘区某所|150|寒い夜中に一人練習。気を抜くとすぐに、手玉に余計な回転がかかってまずいことになるが、逆に気を抜かなければ最近はまあまあ確度が高いなあ、という自信のようなものを抱きつつ。|
|2026-02-10 (火)|東灘区某所|120|肩と肘と、キューレベルへの配慮を忘れていると、すぐに真っ直ぐが打てなくなる。|
|2026-02-17 (火)|東京都品川区某所|90|東京出張中の練習1は初めての場所へ。JPAの試合が行われているそばでの練習。|
|2026-02-18 (水)|東京都杉並区某所|90|東京出張中の練習2。少し調子が戻ってきた。キューを長めに持つと、狙いがズレる問題が解決へ近付くことに気づけた。|
|2026-03-03 (火)|灘区某所|80|久しぶりの9ft台での練習。|
|2026-03-09 (月)|東灘区某所|120|一人練習の後に模擬試合。負けたけれども惜しい感じがした。|
|2026-03-10 (火)|東灘区某所|90|シャフトが顎に触れるぐらいに低く構える姿勢を体得しようと試みた。|
|2026-03-12 (木)|灘区某所|90|カーボンシャフトに慣れるべく、撞きまくる練習。狙いの精度が上がった感覚があるのだが、錯覚なのかもしれない。|
|2026-03-15 (日)|三田市某所|60|自分のどこかが整っていないことが結果として球筋に現れる実感。|
|2026-03-17 (火)|東灘区某所|120|一人練習、そして強めの方と模擬試合。気持ちよく負けてしまったけども楽しんだ。少ないチャンスをものにしていこう。|
|2026-03-20 (金)|灘区某所|110||
|2026-03-23 (月)|灘区某所|80||
|2026-03-24 (火)|灘区某所|110|一人練習。初めてマイブレイクキューで撞いた。プレイキューと感覚が違いすぎて、2度ほど盛大にミスした。|
|2026-03-30 (月)|灘区某所|60|今日は1時間と決めて集中。しかし手玉と的球の厚みを微妙に間違え続ける。|
|合計時間 (分)||5,170|(約86時間)|
---
### AIアシスタントの「OpenClaw」を試し、skillをいくつか追加しての所感 - 2026-03-31
URL: https://remoteroom.jp/diary/2026-03-31/
#### OpenClawとは
自分の観測範囲では2026年2月頃から、Twitter (X) やらで大きく話題になっていたオープンソースな「AIアシスタント」が、OpenClawである。
- [OpenClaw — Personal AI Assistant](https://openclaw.ai/)
- [GitHub \- openclaw/openclaw: Your own personal AI assistant\. Any OS\. Any Platform\. The lobster way\. 🦞 · GitHub](https://github.com/openclaw/openclaw)
私の関わる某所でも、OpenClawが大流行りしていて、Local LLMとも接続され、みながSlack経由で楽しそうに有用そうに使っているのを見ていた。しかしこのAIツールは一体どういうアーキテクチャで動いて、どうやってカスタマイズしているのだろう。理解するためには自分用の環境を作ってみないといけないな。
#### 実験環境
OpenClawの実験環境を、自宅の中に、次のリソースで構築した。
|項目|内容|備考|
|---|---|---|
|ハードウェア|Raspberry Pi 4 Model B (8GB)||
|OS|[Debian](https://pimox-scripts.com/scripts?id=debian&category=Operating+Systems) (LXC)|仮想ホスト: [Pxvirt](https://docs.pxvirt.lierfang.com/en/README.html) 8.4.10|
|LXCへの割当メモリ|2GB||
なぜ、クラウドのVPSなどの上に構築せず、自宅の非力なラズパイでやるのか? その理由は、あくまで個人的なものであるが次の通り。
- 環境構築に追加のお金をかけず、1台の自宅Raspberry Pi 4にどれだけ詰め込めるかのチャレンジ中
- Pxvirt (Proxmox VE) 上のLXCだと、環境まるごとのバックアップが定期的に自動取得できる
- 自宅内の他アプリとの接続がLAN内直結となってシンプル (Tailscaleなどを使うとどこでも良くなるが)
OpenClawが使用するAIモデルについて。実験環境において当初は「google/gemini-3.1-pro-preview」にしていたが、2日間激しく使っているとGemini APIの課金額が3,000円を超えていた。さすがにこのままはまずいと気付き、3日目からはモデルを「google/gemini-3.1-flash-lite-preview」へ切り替えてみている。
#### skillについて
- OpenClawでは、何かを行うことが可能な能力を「skill」という名前で呼んでいる。そして、skillを作るskillが最初から備わっているので、おおよそのことはOpenClawと会話を進めていくことにより新しいskillとして実装できてしまう。作成されたskillは`~/.openclaw/workspace/skills/`以下に保存される。ぱっと見た感じ、新規作成したskillは、どれもbashスクリプトとして書かれていた。これなら読めるし、自分で改造を加えても良いのであろう。
- 外部APIとの連携用のキー情報は、私の好みであるが、ホームディレクトリ直下のdotファイルではなく`~/.openclaw_data/`配下に保存してもらうように、初期段階でルール化した。
OpenClawのディレクトリ`~/.openclaw/`配下の構造は次のようになる。
##### 1. 1min.AIとの接続 (済)
- [1min\.AI API Reference \| 1min\.AI API](https://docs.1min.ai/docs/api/intro)
先日、ちょっと怪しい感じがあるけれども「[1min.AI](https://1min.ai?referrer_id=8f5bcb5e-2fdc-4761-8d97-7ef229d3553c)」というAIサービスにアカウントを作って、ある程度の課金をした。このサービスには、「Multi AI Chat」「Image Variator」「Youtube Summarizer」といった、目的に特化した各種AI活用メニューが用意され、かつAPIでそれらが叩ける。そこで、1min.AIの連携利用をskillのひとつにできるように、OpenClawには、1min.AIに向いたタスクがOpenClawに入ってきた場合は、1min.AIのAPIを叩くというルールを覚えてもらった。
##### 2. Discordとの接続 (済)
- [Discord \- OpenClaw](https://docs.openclaw.ai/channels/discord)
OpenClawはいわゆるメッセージングアプリと接続できて、その上で、プロンプトでの指示や状況のモニタリングが行えるという特徴を持っている。様々なアプリと接続できるのだが、私は、他の用途ではまだ使っていないDiscordをOpenClaw専用として使い始めることにして、Discordとの接続設定を行った。
##### 3. Google系との接続 (済)
デジタル生活を委ねているGoogleの世界 (Gmail, Calendar, Drive, Contacts, Sheets, and Docs.) と、OpenClawを接続しよう。そのためのskillとして標準で「[gog](https://github.com/openclaw/openclaw/tree/main/skills/gog)」があるのだが、これをそのまま使うと、私の環境では問題が出てくると予想された。どんな問題かというと、将来的に、私の家族もDiscord経由でOpenClawを利用した場合、無条件に私のGoogleアカウントと連携して情報を引き出してもらっては困る。そこで、OpenClawにgogのwrapperを書いてもらった。このwrapperではとりあえず、特定のDiscord Accountから呼びかけられた場合のみ、gogが利用可能としてある。
##### 4. Todoistとの接続 (済)
- [Todoist API](https://developer.todoist.com/api/v1/#section/Developing-with-Todoist/Our-API), [Integrations – 設定 – Todoist](https://app.todoist.com/app/settings/integrations/developer)
自分個人のタスク管理はTodoistで行っている。TodoistのAPIと連携するskillも作ってもらった。
##### 5. Home Assistantとの接続 (済)
- [REST API \| Home Assistant Developer Docs](https://developers.home-assistant.io/docs/api/rest/)
自宅用のHome Assistantについても、API連携するskillをOpenClawに作ってもらって接続完了した。Home Assistantに生やしている、Google Homeスピーカーを喋らせるAPIともOpenClawを接続したので、室内に向けてOpenClawから発声させることも可能だ。
##### 6. n8nとの接続 (済)
- [API reference \| n8n Docs](https://docs.n8n.io/api/api-reference/)
Home Assistantとの連携に関して調査しているときに知った。OpenClawとn8nを連携させると、条件分岐を伴う定型タスクや定期実行タスクを、そういうことが得意なn8nに委任するという形が組めるらしい。ならば、ということで[n8n](https://pimox-scripts.com/scripts?id=n8n&category=IoT+%26+Smart+Home)をRaspberry Pi上にさっと構築して、OpenClawとの連携を整えた。n8nでどんなことができるのかはまだよく知らない。
##### 7. reMarkableタブレットとの連携 (計画中)
- [ddvk/rmapi: Go app that allows you to access your reMarkable tablet files through the Cloud API](https://github.com/ddvk/rmapi)
OpenClawの他の方の利用方法を調べると、情報収集の手段および賢い加工場として、OpenClawを使っている事例もよく見かける。それは私も作ってみたい。自分なりの独自色を出すとするならば、情報サイトのRSSをEPUB化して、reMarkable Paper Pro / Paper Pro Moveへ自動送信する、なんて仕掛けを構築するのは良いかもしれない。
#### 所感
業界で大きく話題になっているプロダクトであっても、結局は使ってみないと実態は必ずしも掴めない。その意味で、OpenClawの環境をとりあえず作って、よくわからないままにskillを追加してみたり、Discordを介してPCとスマホを切り替えながら会話を続けてみたりしたことで、このツールの素性と実用性がわかった気がしたのは良かった。ツール単体としての潜在能力は高いと思う。
ただし現状では、個々人がパーソナライズしながら環境を構築していくもの、という立ち位置にあり、たとえば万人向けのskillを揃えたオールインワンなOpenClawは用意できなさそうな (もしくはあまりおもしろくない) 気がする。これはなぜかというと、iPhoneやAndroidといったスマホが、個々人が好きなアプリを導入することでパーソナライズされて最大活用されるのと同様に、OpenClawは、コアにあるAIという能力に、個々人が好きなskillを追加導入してパーソナライズを施すことで、個別最適化されるツールなのだと感じたためだ。
私は、今はあくまで隔離した環境にOpenClawを構築して、情報のゲートウェイ・ブリッジとして利用するような使い方から始めている。OpenClawを、自分の常用するファイルシステムに介在させることはまだ行っていない。しかしこのままハマって使いこなる見通しが立てば、ひょっとしたら私もOpenClawを、新築のMac miniの中に住まわせるのかもしれない。
#### 参考リンク
- [【Ollama Cloud×Python】ローカルLLMとクラウドLLMをプライバシーで振り分けるルーターを作ってみた \- uepon日々の備忘録](https://uepon.hatenadiary.com/entry/2026/02/28/020005)
- [AIが変えたのは生産性ではなく、仕事の楽しさかもしれない](https://yasuhisa.com/could/article/joy-is-replaced-by-business/)
---
### 【読んだ本】 どんがら トヨタエンジニアの反骨 - 2026-03-27
URL: https://remoteroom.jp/medialog/2026-03-27_book-4065311578/
「多田 哲哉」というお名前を、私はwebCGのコンテンツ ([多田 哲哉のプロフィール\|記事一覧 \- webCG](https://www.webcg.net/list/author/6385de1e905bd4bdfe000003)) で知っていた。本書は、この方を主人公に据えて、主に「86」の自動車開発と、関係者の人間模様とを描いているノンフィクションである。登場する人の発言や、そして企業に関する表現に、遠慮がなくて赤裸々すぎて、そのせいで何があっても自分には関係ないのにちょっとどきどきしてしまうぐらいだ。
自動車の部品は内燃機関車の場合、約3万点あるという。それらをコスト計算しながらどのように設計して、折り合いを付けてトータルバランスを整えて、自社の工業製品として出荷するのか。それは自社の中でさえ十分に、一千億円規模の大事業であるはずなのに、企業文化が違う他社との共同開発プロジェクトとして、いったいどうやって成立させたら良いのか。本書の途中でギアが一段上がるのは、SUBARUが登場したところからだ。ちなみに、トヨタ「86 (ZN6)」とスバル「BRZ (ZC6)」の次に、トヨタ「スープラ (DB)」とBMW「Z4 (G29)」の場合でも、文化的価値観が違う2社でどう話を進めていったかが説明されている。
自分なりにまとめると、本書のエッセンスは、次のような有り様の実際を知ることにあるのかもしれない。1) ある物理的なゴールに向けて (ゴールが持つ意味合いはお互いに異なることはある)、お互いの筋を通し (すなわち叶えたいことを叶え)、それが他方を尊敬することに繋がる状態で、プロジェクトを結果的に完遂させる行動。2) 突破が難しそうにみえる壁に対しては、内規や通例をハックすることを厭わず、見方を変えれば最短である迂回路を見つけて、事を進めていく様。
P.S. この感想を書いているときの調査で、「[ソープボックス](https://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%BC%E3%83%97%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9)」なるレースを初めて知った。
- [当協会 理事長交代のお知らせ | NPO法人日本ソープボックスダービー協会](https://nsbd.org/news/%E5%BD%93%E5%8D%94%E4%BC%9A-%E7%90%86%E4%BA%8B%E9%95%B7%E4%BA%A4%E4%BB%A3%E3%81%AE%E3%81%8A%E7%9F%A5%E3%82%89%E3%81%9B/)
- [ソープボックスダービーって何ですか? | NPO法人日本ソープボックスダービー協会](https://nsbd.org/whatssbd/)
---
### 【読んだ本】 蓄電所ビジネス - 2026-03-23
URL: https://remoteroom.jp/medialog/2026-03-23_book-b0fhk5cbw6/
書籍のタイトルとしてはあまり見ない「蓄電所」という単語に惹かれ、未来感がありそうだと考えて選んだ。本編の他に、章ごとのコラムが複数あってそれぞれが異なる組織に属する方たちが執筆しているため、業界の基本情報や世界情勢の説明が、コラム間で重複している印象もあるのだが、多くの方が述べているということは逆にそれだけ重要なことなのだろう、と捉えることにした。
本書の前半は SDES (Short Duration Energy Storage) としての系統用蓄電池について。系統用蓄電池にはなんと、騒音問題がある、ということを初めて知った。そして後半の LDES (Long Duration Energy Storage) に関する部分を、更に新鮮味を感じながら読んだ。LDESとは、8時間〜数日〜数週間といった長いスパンでエネルギーを貯蔵し、電力として充放電が可能な設備である。おそらく最もよく知られているのは、電気エネルギーと位置エネルギーを相互変換する揚水式水力発電所であろう。他に、数十トンの重りを持ち上げて位置エネルギーを貯蔵する設備や、熱エネルギーとして貯蔵する設備などが商用化段階だったりするそうだ。
太陽光や風力といった自然エネルギーによる発電が割合として増加すればするほど、電力需要とのバランスを取り、電力供給を安定化させるために蓄電所は不可欠となっていく。しかし、現在では技術的な課題、経済的な課題がある、ということの“触り”を本書で知ることが出来た。蓄電所が、ビジネスとして成り立ち、社会のインフラに広く普及しない限り、理想的な、エコでかつ不便のない未来は難しいそうだな、とも感じつつ今後も注目して、他の書籍も読んで深堀してみようかと考える。
---
### アマチュア無線: dmonitorをRaspbian GNU/Linux 13 (trixie) に簡単インストールするスクリプトを作った - 2026-03-22
URL: https://remoteroom.jp/diary/2026-03-22/
#### どうしたら動かせるのか?チャレンジ
本記事は、過去の次の記事の発展形となります。
- [アマチュア無線初心者として: D-STARとdmonitorをやってみたり改造したり \[2024-06-30\]]()
当時は次の環境で、dmonitor V02.00を動かしていました。
|項目|内容|
|---|---|
|OS|Raspberry Pi OS (32-bit) / Debian 12 (Bookworm)|
|ハードウェア|Raspberry Pi 3 Model B|
そして今回は、公式には`Bookworm` (Debian 12) のみの対応であるdmonitorを、Raspberry Pi OSの最新安定版である`Trixie` (Debian 13) の上で、こうすると動かすことができたという内容です。Legacyよりは現行OSの上で動かせるなら、セキュリティ更新をより長続きさせることができるはずで、何かと安心。
公式アナウンス外のOSバージョンで動かすという無茶をするには、それ相応の技術的な模索と苦労があり、たどり着いた構築手順をブログ記事に細かく記すよりは、インストールスクリプトを一発作ることで、誰でも再現性の高い構築ができるようにと考えました。
#### 「dmonitor-trixie-installer」の紹介
bashスクリプト2つからなるツールを「dmonitor-trixie-installer」というストレートな名前で作りました。次のリンク先で公開中です。
- [mah\-jp/dmonitor\-trixie\-installer: dmonitorをRaspberry Pi OS \(Debian 13 Trixie\) に簡単インストールする非公式スクリプト](https://github.com/mah-jp/dmonitor-trixie-installer)
詳しい使い方は、GitHubリポジトリの[README](https://github.com/mah-jp/dmonitor-trixie-installer/blob/main/README.md)を参照してください。ここでは、動作環境に関する情報の一部を抜粋します。
##### 💻 必須環境・前提条件
- **dmonitor**: V02.00
- **OS**: Raspberry Pi OS 32bit (Debian 13 Trixie)
- **ネットワーク**: インターネットに接続できること
###### 動作確認済の組み合わせ \[2026-03-22現在\]
|OS|Debian Version|ハードウェア|無線機|
|:---|:---|:---|:---|
|Raspberry Pi OS (32-bit) 2025-12-04|Debian 13 (Trixie)|Raspberry Pi 4 Model B|ICOM ID-52|
|Raspberry Pi OS (32-bit) 2025-12-04|Debian 13 (Trixie)|Raspberry Pi 3 Model B|ICOM ID-52|
|Raspberry Pi OS (32-bit) Lite 2025-12-04|Debian 13 (Trixie)|Raspberry Pi 3 Model B|ICOM ID-52|
テストでは、ラズパイとICOM ID-52をデータ転送用USBケーブルで接続しています。今回初めて、積みガジェットだったチェッカー「[USB Cable Checker3](https://bit-trade-one.co.jp/adusbcim3/)」を開封して使ってみたのですが、山のように溜まりがちなUSBケーブルの種類が「データ転送用」なのか「充電専用」なのかを確実に判別するために、このようなチェッカーは大変便利だとわかりました。
#### 余談
今回の目標達成の形である、Raspberry Pi OSの`Trixie` (Debian 13) でdmonitorを動作させているラズパイの内部状態は、次の画面写真のとおりです。
##### Read-Only化 (Overlay file system)
画面写真左下の、ターミナルの表示内容「overlayroot (Overlay file system)」についてです。dmonitorは、特に`/var/tmp/`領域へ、数秒間隔という頻度で頻繁に書き込みを行う作りになっているようで、この動作はmicroSDカード運用の場合、カードの寿命を縮めかねません。そこで、今回の実験機では設定完了後にmicroSDカード全体をいわゆるRead-Only化しましたので、この表示になっています。Overlay file systemの有効化・無効化は、`raspi-config`の「Performance Options > Overlay File System」で切り替え可能です。
- [Configuration - Raspberry Pi Documentation > Overlay file system](https://www.raspberrypi.com/documentation/computers/configuration.html#overlay-file-system)
##### Pi Zero WH
dmonitor-trixie-installerでのdmonitorインストールを、手元の「Raspberry Pi Zero WH」でも試してみているのですが、Pi Zero WH上でのdmonitorの動作がなぜか完全ではなくて、現時点では成功せずです。それはCPUが非力なせいで処理が追いついていないのか、Pi 3/4で通用した方法は、Pi Zero WHのアーキテクチャやシリアル通信での何らかの違いを乗り越えられず非対応なのか、問題の切り分けがまだできていません。
#### 参考リンク
- [D\-STAR情報 WEB Site](https://jr1uti.sakura.ne.jp/)
- [D\-STAR dmonitor 情報 \[Install/Update方法などの情報\]](https://jr1uti.sakura.ne.jp/dmonitor/)
- [D\-STAR dmonitor のセットアップ](https://jr1uti.sakura.ne.jp/dmonitor/install/dmonitor_setup.html)
- [運用ログ表示システム](https://log.d-star.info/usr/usr_menu.php)
- [DSTAR Now \!](https://k-dk.net/dstarnow/)
- [Debian \-\- Debian Releases](https://www.debian.org/releases/)
---
### MacBook Air (M5, 2026): 13インチモデルの雑感 - 2026-03-16
URL: https://remoteroom.jp/diary/2026-03-16/
#### 思い切って世代交代
Apple MacBook Air (M5, 2026) が手元に届いてさっそく日常的に使っている。このM5は、2022年から利用している MacBook Air (M1, 2020) A2337 からの乗り換え先として購入した。M5のスペック選択においては、昨今はAI駆動のためにメモリは多ければ多い方が重宝すると予想し、盛って最大の32GBにして、一方ストレージは以前のM1と同じ1TBとした。
|項目|内容|
|---|---|
|モデル|13インチ, A3449|
|CPU他|10コアCPU, 10コアGPU, 16コアNeural Engine|
|ユニファイドメモリ|32GB|
|SSDストレージ|1TB|
|キーボード|英語(US)配列|
|購入店|[13インチMacBook Airと15インチMacBook Air \- Apple(日本)](https://www.apple.com/jp/macbook-air/)|
|購入価格 (税込)|274,800円|
以下にAmazon.co.jpへのリンクを設けるが、リンク先のMacBook Air M5のスペックはメモリ24GBで、キーボードは日本語(JP)配列の品であることにご留意ください。
##### M5に変えてみて
私はMacBook Air M1に対して特に不満があったわけではないし、macOSの常で、[移行アシスタント](https://support.apple.com/ja-jp/102613)によるM1からM5への環境移行が完璧すぎてM5の環境はそのままM1から引き継がれた状態となり、当初は、M1とM5の使用感はほぼ何も変わらないなぁと思った。しかし少し使い続けていると、ハードウェアの変更に伴う次の違いがあることが感じ取れた。
- キーボードのストローク量がM1よりも増えており、M1では打鍵音が「ぱしゃぱしゃ」だったが、M5では比較的落ち着いた音色である
- 動作のキビキビ感向上は随所で感じられる。たとえば、ATOKを使った文字入力時の変換候補の表示スピードや、`npm install`の実行速度の違いで把握できる
今後、M5のCPU/GPUをより駆使する使い方をしていけば、その性能をより享受できる時が来るのだと思う。この乗り換えは未来への投資だな……。まだまだ使い続けられそうなM1は、子どもに譲ることにした。
ちなみに、同じM5の色違いである「スカイブルー」と「シルバー」 (業務用の同型機) を横に並べると、色味の違いを思ったほど認識できない。この2色のM5についてはついつい取り違えたりしないように、目印を付けるなどの工夫が必要だ。
#### 購入したもの
MacBook Air M5に貼り付ける、画面保護フィルムとトラックパッド保護フィルムは次のものにした。
|種別|商品名|購入価格(税込)|購入店, 購入日|備考|
|---|---|--:|---|---|
|画面保護フィルム|[ミヤビックス OverLay Plus Premium 超低反射高透過タイプ](https://www.miyavix.co.jp/film-info/ou)|3,806円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0CX4TS6Y4?tag=remoteroom-22&linkCode=ogi&th=1&psc=1), 2026-03-12||
|トラックパッド保護フィルム|[ミヤビックス OverLay Protector サラサラタイプ](https://www.miyavix.co.jp/film-info/op)|998円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0CX4VZ5PS?tag=remoteroom-22&linkCode=ogi&th=1&psc=1), 2026-03-12||
上記の「画面保護フィルム」をMacBook Airの画面に貼る際、全面張り直しは基本的に難しいので、フロントカメラの穴の位置などを基準にして、フィルムの位置決めだけは一発でズレが無いように確実に行う必要がある。
画面とフィルムの間に、気泡を入れないで貼ることはほぼ無理だ。気泡が入り込んでしまった場合、気泡が多めでも、丁寧に時間を掛ければ画面の外周方向へ追い出すことが可能だ (私はこの作業に黙々と20分以上費やした気がする)。貼る苦労は大きいのだが出来映えに関しては、掛け値なしで、次の写真のような低反射状態の黒い画面を実現することができる。
---
### 【観た映画】 新幹線大爆破 - 2026-03-15
URL: https://remoteroom.jp/medialog/2026-03-15_movie/
- 視聴: Netflix
- 公式サイト: [新幹線大爆破 \- Netflix](https://www.netflix.com/title/81629968)
私が観てみたかったので、日曜の夜に家族を巻き込んでの鑑賞。タイトルの通りの事件が起こる。なにより、線路の上を進むしかない乗り物での回避劇なわけで、よく練られた脚本のもとでしか、2時間超えの作品は成立しない。鉄道好きにとっても、新幹線の運行に関わる人々や施設が大々的にフィーチャーされている点は、見応えあると思う。
なお、すこし典型的すぎる印象も受けたけれども、狂った・狂わされた人間と、生きよう・助けようとする人間を描いている点については、私はこう感じとった。人には誰しも、強さと危うさが同居している。それらから生ずる選択を自覚して行える限りは、自分で選ぶんだ、というメッセージが本作にはあるかな。
---
### 【読んだ本】 ターミネーション・ショック - 2026-03-10
URL: https://remoteroom.jp/medialog/2026-03-10_book-b0ftyyn35t/
読み終えるのに1,2ヶ月かかったかもしれない。温暖化に起因する大規模な気候変動に見舞われている、少し先の未来の地球。それぞれ異なる影響を受ける各地域の人間は、どういう思惑をもって活動するのか。地球規模で気候を変えて温暖化を抑制してしまおうとする大プロジェクトを軸に、一国の女王や事業家や格闘家や一匹狼気質の元軍人という登場人物らを、フォーカスを切替えながら描いていく。この読書体験は、頭の中に、しばらくは消えない一つの現実的な世界を宿すことになる。よくぞこんな壮大な話を想像して物語にできるなぁ、というのが私の率直な感想だ。
---
### MacBook Air (M1, 2020) のUSB-C端子不調を部品交換で直した - 2026-03-07
URL: https://remoteroom.jp/diary/2026-03-06/
#### 充電できない事態に至る
|項目|内容|
|---|---|
|機種|[MacBook Air (M1, 2020)](https://support.apple.com/ja-jp/111883)|
|機種ID|MacBookAir10,1|
|Model|A2337|
|交換対象部品|[I/Oボード 821-01658-A](https://www.amazon.co.jp/dp/B0DBQH3P8R?tag=remoteroom-22&linkCode=ogi&th=1&psc=1)|
2022年から使っているMacBook Air (M1, 2020) は、ある一点の問題を除いて、これまで快調に動作していた。ファンレスで稼働音はないしバッテリーは長持ちするし、私にとってほぼ完璧なラップトップなのであるが、問題はUSB-C端子。日々モバイル利用しているためか、2つあるUSB-C端子のうち1つ目が1,2年前から機能しなくなっていた。
そうして必然的に2つ目のUSB-C端子のみを使い続けていたら、2025年2月にこちらも突然使えなくなった。USB-C端子しかないノートPCで全ての端子が使えなくなった状況は、バッテリーの充電もできないという終わりの始まりを意味する。まずいぞこれは。MacBook Airを修理してくれそうな神戸や大阪の店舗に電話をかけて、修理の可否を聞いてみると、修理は不可能ではないが数日だったり数万円かかるコースだという見積もりが。
M1を含む一定世代のMacBook AirのUSB-C端子の不調は、よくあることらしい。今回は諸事情によりできるだけ早く直す必要があったので、Amazon.co.jpなどから迅速に部品を取り寄せて自力修理でなんとかすることに賭け、下記の部品を購入することにした。
なお、今回はAmazon.co.jpを利用したが、もし入手に日数をかけても良いならば、安心重視で、たとえばiFixitの次のリンクから取り寄せる手もあると思う。
- [MacBook Air 13" Retina \(Late 2018\-Late 2020\) USB\-C Board](https://www.ifixit.com/products/macbook-air-13-late-2018-late-2020-usb-c-board)
#### 部品交換手順, 摩耗した端子の様子
部品交換の手順については、先人の知恵に思いっきり頼って、次のリンクを参照した。
- [MacBook Air 13インチ Late 2020 USB\-Cボードの交換 \- iFixit 修理ガイド](https://jp.ifixit.com/Guide/MacBook+Air+13%E3%82%A4%E3%83%B3%E3%83%81+Late+2020+USB-C%E3%83%9C%E3%83%BC%E3%83%89%E3%81%AE%E4%BA%A4%E6%8F%9B/142552)
- [M1 Mac\(A2337\)のUSB\-Cポートを復活!|野良ハック(ざっきー)](https://note.com/kitazaki/n/nebc8e3ddc371)
基本的には、ネジ穴に合致する正しいドライバーを用いてネジを取り外し、取り外したネジの位置を復元可能なように記録し、コネクター類の脱着に細心の注意を払えば、今回のUSB-Cボード交換は、自力で問題なく実施できるものと思う。
実際の手順は次の通り。USB-Cの構造上、内部端子はUSB-Cボードを外すことによって初めて直視可能になる。その内部端子の、隣の接点にくっついているほどの酷い摩耗状態には驚いた。おそらくは、接点がショートしたら自動的に機能停止するようになっているのだろうな。
1. MacBook Airの裏蓋を開けていく
2. 裏蓋を開いた様子
3. バッテリー接続ケーブルを外す
4. USB-Cボードを外す (1)
5. USB-Cボードを外す (2)
6. 外したUSB-Cボードの摩耗した端子部分 (1)
7. 外したUSB-Cボードの摩耗した端子部分 (2)
8. 外したネジと部品類は位置も含めて忘れないように
9. 取り付ける新品USB-Cボード
10. USB-Cボードをネジ止め
11. USB-Cボードのコネクターは繊細なので作業は丁寧に
12. (写真なし) バッテリー接続ケーブルも元に戻して裏蓋を閉じる
13. macOSを起動して動作確認してみたところ、USB-C端子は2つとも無事に復活して正常に充電が行えた
---
### ラスベガス紀行の日記とメモ (現地5泊,機中2泊) - 2026-03-03
URL: https://remoteroom.jp/diary/2026-03-03/
本記事は、次の記事のスピンオフ的なもので、ビリヤード以外のことを記録してみました。
- [ビリヤード: ラスベガスでの "2026 USA Pool League National Championships" に参加した記録 \[2026-03-02\]]()
#### 日記
##### 2026-02-21 (Sat): 関空出発, 仁川経由
- 大韓航空 KE728便 (大阪KIX→ソウルICN, 2時間10分)
- 映画観賞: [【観た映画】 ベテラン 凶悪犯罪捜査班]()
- 仁川国際空港は有機的できれいな印象
- スタバで一服してから、ラウンジ「SKY HUB LOUNGE」で韓国っぽいものを食べながら過ごす
- 大韓航空 KE005便 (ソウルICN→ラスベガスLAS, 11時間10分)
- 試合前日であり、ひたすら就眠に努めた
##### 2026-02-22 (Sun): ラスベガス到着, 予選1日目
- そろそろ着陸の時、岩肌メインの地形に驚く
- ハリー・リード国際空港で関係者の皆さまとご挨拶
- 巨大なホテル、[Westgate Las Vegas Resort & Casino](https://www.westgateresorts.com/hotels/nevada/las-vegas/westgate-las-vegas-resort-casino/) にチェックイン
- 13:00: [試合 (予選1)](#予選1日目-2026-02-22-sun)
- [Sphere](https://www.thesphere.com/)を眺めようとモノレールに乗ったが時間が足りなさそうなので、Sphereへの接近はやめて街の散歩に留める。マラソン開催中?
- 客室に戻ると、トイレが詰まっていて流せない! 試合開始が迫っていたので張り紙をしてとりあえず放置
- 19:00: [試合 (予選2)](#予選1日目-2026-02-22-sun)
- 試合終了後にホテルフロントに電話して、状況をカタコトでなんとか伝え、ラバーカップを持ったスタッフさんに来てもらって無事解決
- 夜の街を眺めるために外出し、マクドナルドで晩食
- 帰り道に、これまた立派な [Fontainebleau Las Vegas](https://www.fontainebleaulasvegas.com/casino/) というカジノがあった
##### 2026-02-23 (Mon): 予選2日目
- 09:00: [試合 (予選3)](#予選2日目-2026-02-23-mon)
- 15:00: [試合 (予選4)](#予選2日目-2026-02-23-mon)
- 21:00: [試合 (予選5)](#予選2日目-2026-02-23-mon)
- 部屋での一食はおおよそこのような感じ
- フルーツが美味しく、値段を見ないことにして何度も食べてしまう私
##### 2026-02-24 (Tue): 決勝, STRAT Tower
- 13:00: [試合 (決勝1)](#決勝-2026-02-24-tue)
- 悔しいことに敗退してしまったので、その後のチーム戦の予定はなくなった
- 高いところへ登りたくなり、[The STRAT Tower](https://thestrat.com/)を目指して出発
- ラスベガス市街を一望できる、眺め最高!
- タワーの下のカジノに立ち寄り、ボンバーマンの機械に$10少々を投入したら「MASSIVE WIN」の大当たり
- 夕食は、皆でUber Taxiに乗って移動し、Peppermillという店にて
##### 2026-02-25 (Wed): グランドキャニオン, ロボタクシーZoox体験
- 早朝04:20に集合し、快適なバスに乗ってグランドキャニオンツアーへ出発
- [National Park Express \| Grand Canyon National Park Tour with Lunch](https://nationalparkexpress.com/grand-canyon/grand-canyon-national-park-tour-with-lunch/)
- 雪があることは珍しいらしい
- 標高2000m程度にあるほぼ平坦な道を、眼福な絶景を眺めながら散策
- Route 66
- ツアーから戻ってきた後の夜の街で、個人的に念願のRobotaxi、Zooxを初体験できた!!
- [Zoox: It's Not a Car \| Zoox](https://zoox.com/)
- ごにょごにょしてUSアカウントとアプリを準備していた甲斐があった
- けっこうアグレッシブな周りの交通に合わせた賢い運転に、めちゃくちゃショックを受けた
- 小回りが効く4WSだしかわいい。これはすでに現実的なモビリティだなあ
##### 2026-02-26 (Thu): 市街地観光, 核実験博物館
- 半袖でも良いぐらいの、あったかい街を散策
- 多少怖い思いをしながら、ワイヤーを伝って街の空中を移動する [Fly LINQ Zipline Over the Promenade \- The LINQ Las Vegas](https://www.caesars.com/linq/things-to-do/attractions/fly-linq) に挑戦した (滑空中の写真はなし)
- 初めて自分のアカウントでUber Taxiを呼んだものの、乗り合い場所付近でお互いが見つけられず、運転手さんへアプリから電話 (音声通話) してなんとかした
- 気になっていた核実験博物館、[National Atomic Testing Museum](https://www.atomicmuseum.vegas/) へ
- 日本国での慣れ親しんだ視点とは異なる、こういう展示が見たかったので満足
- ラスベガスの街の風景
##### 2026-02-27 (Fri): ラスベガス出発
- ホテルをチェックアウトして、ハリー・リード国際空港へ
- ラウンジ「The Club LAS」で小腹を満たしつつ過ごす
- 大韓航空 KE006便 (ラスベガスLAS→ソウルICN, 13時間30分)
- 映画観賞: [【観た映画】 パーフェクト・ドライバー/成功確率100%の女]()
- 映画観賞: [【観た映画】 エミリー・ザ・クリミナル]()
##### 2026-02-28 (Sat): 仁川経由, 関空到着
- 仁川国際空港の免税店には、今回の旅で見聞きして気になっている[Osmo Pocket 3](https://www.dji.com/jp/osmo-pocket-3)は見当たらず
- 大韓航空 KE723便 (ソウルICN→大阪KIX, 1時間55分)
- 映画観賞: 『宝くじの不時着 1等当選くじが飛んでいきました』 (途中まで観た)
#### 追記 \[2026-03-05\]: 黒子さんの動画
2月24日の試合会場などの様子や、25日のグランドキャニオンツアーの様子については、黒子さん収録の次の動画で雰囲気がよく分かりますので、引用します。
#### 物に関してのメモ
##### 調達して良かったと思うお薦めのもの
今回のラスベガス旅行に向けて、様々なものを調達しました。その中から、実際に使ってみてこれは良かったと思うものを紹介します。
###### 必須
- 海外対応eSIM: スマホのPixelとiPad miniに装備しました
- [海外旅行向けのeSIMならWorld eSIM](https://jp.world-esim.com/)
###### 飛行機内
- ノイズキャンセリングヘッドホン: 機内でのデジタル耳栓と映画鑑賞用として、これはたぶんベスト
- [WH\-1000XM6 \| ヘッドホン \| ソニー](https://www.sony.jp/headphone/products/WH-1000XM6/)
- ネックピロー: 通常のものよりも太めであり、上記ヘッドホンとの併用はタイトです
###### ホテル客室
- 携帯ウォシュレット: 部屋のトイレだけでも快適な気持ちになれるのは嬉しい
- ポータブル電気ケトル: コーヒーやカップ麺用に重宝しました
- シェーバー: 新調ついでにUSB-C充電のこれにしました
###### 移動関係
- スマホの首掛けストラップ: 命綱のスマホを暗く狭い機内で落としたり、移動中に紛失しないように
- ショルダーバッグ: パスポートなどの常時携帯用、かつ (後述の) 流せるウェットティッシュも入れておくと良し
- 流せるウェットティッシュ: 持っていると安心感が違う
- 変換プラグ: 米国のプラグ形状は日本と同じですが、トランジット時の韓国で電源が欲しいなら必要になるかもしれません
###### パッキング
- バッグを止めるベルト: スーツケースにサブかばんを固定できて便利
- 旅行用圧縮袋 (ポンプ付き): 着終えたものをこれに入れて圧縮しました
- 旅行用圧縮袋:
- 紛失防止タグ: キューケースにも仕込んでいます
##### ビリヤード大会時に必要だと痛感したもの
- 鉛筆と消しゴム, ペンケース
- A4サイズのクリップボード
- 会場では台以外の場所が暗いので、LEDライト (クリップボード取付用と卓上用)
- スコア記録のときのメモ書き用に、A4レポート用紙
- キュー立て・キュースタンド
---
### ビリヤード: ラスベガスでの "2026 USA Pool League National Championships" に参加した記録 - 2026-03-02
URL: https://remoteroom.jp/diary/2026-03-02/
#### YOUは何しにラスベガスへ?
夢じゃないかなとも思った、2025年12月の下記の出来事により、ラスベガスで開催されるビリヤードの大会『[50th CueSports International Expo](https://www.playcsipool.com/csiexpo.html)』の『[2026 USA Pool League National Championships](https://www.playcsipool.com/2026-usapl-national-championships.html)』 (USAPL) に9-Ball Teams枠で出場することになった件。
- [ビリヤード: JCLリーグ (2025-hyogo-momiji-9) に参加して、東京での "2025 JCL Final" に出てみた記録 \[2025-12-13\]]()
私が参加したチーム「Side Road」の出場結果や、会場となった巨大なホテル [Westgate Las Vegas Resort & Casino](https://www.westgateresorts.com/hotels/nevada/las-vegas/westgate-las-vegas-resort-casino/) での、主にビリヤードに関する写真をこの記事にまとめます。
##### 御礼
このような人生最高の機会を与えてくださった、[Japan CSI Pool League](https://csi-pool.jp/) (JCL) の運営者である、たっくんさんと黒子さん、ならびにAさん、関係者の皆様には、心より厚く御礼申し上げます。言葉で言い表すことが難しいほどなのですが、本当にありがとうございました。
#### 試合内容と動画
今回の大会の、Game RulesやDress Codesといったレギュレーション等は、[Event Link Tree](https://www.playcsipool.com/event-links.html) にまとめられています。各種のリンクボタンの色で、大会の区別がされています。
|ボタンの色|大会名|
|---|---|
|Blue|[2026 BCA Pool League World Championships](https://www.playcsipool.com/2026-bcapl-world-championships.html)|
|Pink|[2026 USA Pool League National Championships](https://www.playcsipool.com/2026-usapl-national-championships.html)|
|Orange|2つの大会に共通の情報|
以下、引用している各動画は、YouTubeチャンネル「[東大卒たっくんと黒子のビリヤードch](https://www.youtube.com/@takkun_kuroko)」にて、会場からライブ配信していただいたものです。
##### Stage.1 予選
###### 予選1日目: 2026-02-22 (Sun)
1. 01:00PM〜 / v.s. Rackless Behavior / Table 71,72 → `Won!`
2. 07:00PM〜 / v.s. Paul's Rejects / Table 67,68 → `Won!`
###### 予選2日目: 2026-02-23 (Mon)
1. 09:00AM〜 / v.s. Tap it don't smack it / Table 63,64 → `Lost!`
2. 03:00PM〜 / v.s. Cops and Robbers / Table 59,60 → `Won!`
3. 09:00PM〜 / v.s. Motley Cue / Table 55,56 → `Won!`
###### 結果 (^_^)
チーム「Side Road」は、予選での5戦を4勝1敗で終えて、予選を7位で通過し、決勝トーナメントへ進出となりました。下記リンク先にある表で、試合ごとの平均得点などが確認できます。
- [CueSports Division System > 9-Ball Teams Homepage](https://www.ctsondemand.com/DivisionHome.aspx?DivisionID=962a0da3-8c44-4a0d-ab25-591bb54312f6)
##### Stage.2 決勝トーナメント
###### 決勝: 2026-02-24 (Tue)
1. 01:00PM〜 / v.s. The Chalking Dead / Table 91,92,93 (配信動画はありません) → `Lost!`
###### 結果 (T_T)
チーム「Side Road」は決勝トーナメントを初戦で負けてしまい、ここで無念の敗退となりました。下記リンク先にあるトーナメント表で、決勝全体の状況が確認できます。
- [CueSports Division System > 9-Ball Teams Homepage > Final Single Elimination Bracket](https://www.ctsondemand.com/mobilebracketviewer.aspx?BracketID=1b4c5efd-ea74-43a0-b85a-d3672ae61cb1)
また、本大会におけるチーム「Side Road」としての対戦成績は次の通りでした。
- [CueSports Division System \- Player Match History > Match Results for Side Road](https://www.ctsondemand.com/EntrantMatches.aspx?EntrantID=1bb072d8-d1ab-401a-988e-f5cabb27e516)
#### 感想
USA Pool Leagueの「9-Ball Teams」枠の日本代表として参加したこの大会。決勝トーナメントまで生き残り、そして幾ばくかの賞金を獲得できる順位まで駆け登ることが、チーム一丸となって目指した目標でした。しかし及ばずに終わり、その瞬間、私は複雑な感覚でした。敗退をあっさりと受領する気持ちと、力が抜ける悔しさが入り混じったような……。ああ、自分はあんなミスをするべきじゃなかった……。
ホテル内の会場では、専用エリアで有名なプロ同士の試合も生で観戦できましたし、プレイ環境はまさに地上の楽園のようで最高でした。会場には400台近くの7ftのポケット台が並んでおり、試合で使用されていないときにはおおよそ終日練習し放題で、疲れたら部屋に戻って一休みすることもできる。ビリヤード合宿のような側面もありました。正直、あのままずっとプレイしていたかったです。また、10代前半と思われるプレイヤーも、車椅子を駆るプレイヤーも見かけて、かの地でのビリヤードの裾野の広さと普及度を実感しました。
余談です。今回のホテルの1階には広いCasinoやSportsbookの場所があり、Casinoのほうはおそらく24時間営業かと思います。私は初めての渡米で、ラスベガスはたしかに賭け事の本場であることも理解しましたが、息抜きは余剰資金にて程々に、がよろしそうです。
##### 追記 \[2026-03-03\]:
本記事はあえてビリヤード関係に特化しました。ビリヤード以外のことを記録した記事はこちら。
- [ラスベガス紀行の日記とメモ (現地5泊,機中2泊) \[2026-03-03\]]()
#### 参考写真・動画
##### ホテルフロントから会場までの動線
##### 会場の様子
##### ホテルの様子
#### 参考リンク
- [CSI Expo](https://www.playcsipool.com/csiexpo.html)
- [2026 USA Pool League National Championships](https://www.playcsipool.com/2026-usapl-national-championships.html)
- [Japan CSI Pool League](https://csi-pool.jp/)
- [B\-Side24 \| 24時間利用可能!いつでもビリヤード!](https://b-side24.com/)
##### 追記 \[2026-03-08\]
- [アマチュアビリヤードリーグ日本代表がラスベガスの世界大会へ \| トピックス \| ビリヤード総合情報サイト Web CUE'S](https://www.billiards-cues.jp/topics/20260306jcl/)
---
### 【観た映画】 エミリー・ザ・クリミナル - 2026-02-27
URL: https://remoteroom.jp/medialog/2026-02-27_movie-b0bb8gnyxr/
- 視聴: 大韓航空 KE006便 (ラスベガスLAS→ソウルICN)
- 公式サイト: [Emily the Criminal \| Official Website \| August 12 2022](https://www.emilythecriminal.com/)
原題『Emily the Criminal』。機上で、着陸までの残り時間で観終えるもの縛りで選んだ、100分弱の作品。インターネットunreachableな環境だったので、前評判は未調査であるが惹かれるものを感じてPlayボタンを押した。現実がこの映画のようなストーリーである状態は、最善のことでは決してないと思うのだが、実際の現実は本作のストーリーと相似形の流れを経て動いていることは、多少長く生きていると会得できる。そういった、苦味や厳しさや諦めを、スクリーンに凝縮して投射しているという点において、本作は共感を呼ぶだろう。なるほど、写実的な良作だ。
#### 何気ない一枚
---
### 【観た映画】 パーフェクト・ドライバー/成功確率100%の女 - 2026-02-26
URL: https://remoteroom.jp/medialog/2026-02-26_movie-b0bxq46dk5/
- 視聴: 大韓航空 KE006便 (ラスベガスLAS→ソウルICN)
- 公式サイト: -
原題『특송』。大韓航空の機上で選んだ韓国映画の2つ目。車を使う運び屋が登場する点が似ている、『トランスポーター』や『ベイビー・ドライバー』を私は履修済みなので、本作のストーリー展開は予想の範疇ではあったが、作りは予想よりもハード (残酷) 寄り。激しいアクション一辺倒ではなく、親と子のつながりや人同士の親しみといったテーマにも光を当てようとする意思が感じられ、それは印象的かもしれない。そして、韓国映画の中では「脱北者」という属性をこういうふうに人物へ反映させて描くんだと知ったことは、私にとって新鮮だった。
#### 何気ない一枚
---
### 【観た映画】 ベテラン 凶悪犯罪捜査班 - 2026-02-21
URL: https://remoteroom.jp/medialog/2026-02-21_movie-b0f9t9cpk7/
- 視聴: 大韓航空 KE728便 (大阪KIX→ソウルICN)
- 公式サイト: [4/11(金)公開|映画『ベテラン 凶悪犯罪捜査班』公式サイト](https://veteran-movie.com/)
原題『베테랑 2』。日本から韓国の仁川国際空港へ向かう飛行機内で、せっかくだから韓国映画を選ぼうと考えての本作。1もあるらしいと後で知ったが1は観ていない。真犯人の執念を観客に伝えることに成功していると感じさせる出来で、私は好きだった。YouTuberを絡めてくる点など、いまどき風なアレンジも効いていて、現実味の伴うスリルもあると思ったし、配信力が物を言い、第三者が私刑の実行に走ることも起こりうる、現代社会の危うさの表現に挑戦している部分もあるかもしれない。
#### 何気ない一枚
---
### Easy JNLP Runner: Java Web Start (.jnlp) ファイルと遭遇して途方に暮れないように作った - 2026-02-06
URL: https://remoteroom.jp/diary/2026-02-06/
#### 古い機器あるある
ネットワーク接続する機器の多くには、管理用のGUIが用意されています。一昔前は、このGUIを実現するために「Java Web Start」という技術が利用されていました。しかし2026年の今、現代的なOSの上で「Java Web Start」を常用する環境を整えること自体が、けっこう面倒……。
このような困った状況を打破するアイデアが浮かんで、次のようなPythonスクリプトを作りました。GitHubで公開しています。
- [mah\-jp/easy\-jnlp\-runner: A Python\-based launcher for legacy JNLP \(Java Web Start\) files, specifically designed for HPE KVM remote consoles and unsigned JARs\.](https://github.com/mah-jp/easy-jnlp-runner)
##### これは何?
READMEから引用しますと、次の通り。
> Java Web Start (.jnlp) ファイルを、モダンな Linux / macOS / Windows 環境で起動するためのPythonスクリプトです。Java Web Start (javaws) が利用できない環境や、古いJavaアプレットの互換性問題を解決するために作成されました。
>
> 特に、HPE製KVMスイッチ (Avocent OEM) のリモートコンソールなど、署名のない古いJARを使用するアプリケーションをセキュリティ制限を回避して実行するのに最適です。
##### 動作原理と留意点
種を明かせば、このスクリプトは、JNLPファイルを解析して必要なファイルをローカルに良い感じにダウンロードした後、手元のJavaで実行するものです。この動作原理上、 **Javaのサンドボックス制限および署名チェックを意図的にバイパスしています。** したがって、自身で管理しているKVMスイッチなど、信頼できるソースからの`.jnlp`ファイルのみを対象としてください。
#### 参考リンク
- [mah\-jp/easy\-jnlp\-runner: A Python\-based launcher for legacy JNLP \(Java Web Start\) files, specifically designed for HPE KVM remote consoles and unsigned JARs\.](https://github.com/mah-jp/easy-jnlp-runner)
- [Java Web Start \- Wikipedia](https://ja.wikipedia.org/wiki/Java_Web_Start)
---
### strongSwanの設定をmacOSとUbuntuで共有する方法 〜IPsec VPN接続で楽をしたい〜 - 2026-01-31
URL: https://remoteroom.jp/diary/2026-01-31/
#### 共通化すると楽なはず
VPN接続を設定する作業が、設定内容をテキストファイルに記述することのみで完結できると、VPN接続の設定を1度行えば他のマシンへの複製は簡単だ。そして、CLIのツールでは設定内容がテキストファイルとして保存されることが多い。
そこで今回、IPsec VPN接続の設定をstrongSwan CLIを用いて行い、その設定内容をmacOSとUbuntuで共通化することができたのでメモします。
##### strongSwanと設定ファイルについて
strongSwanは、IPsecでのVPN接続を可能にするオープンソースなCLIツールである。
- [strongSwan \- IPsec VPN for Linux, Android, FreeBSD, macOS, Windows](https://strongswan.org/)
strongSwanの設定ファイルは、Linux系OSではおなじみの`/etc/`以下に配置され、macOSではHomebrewでインストールした場合、`/opt/homebrew/etc/`以下に配置される。
|OS|設定ファイル配置先ディレクトリ|
|---|---|
|Ubuntu|`/etc/`|
|macOS|`/opt/homebrew/etc/`|
上記のディレクトリ以下には、次のファイル等を配置する。
|Path|内容|備考|
|---|---|---|
|`ipsec.conf`|IPsec VPN接続設定|[ipsec.confのサンプル](#ipsecconfのサンプル)|
|`ipsec.secrets`|事前共有鍵|[ipsec.secretsのサンプル](#ipsecsecretsのサンプル), ※ (Ubuntu)|
|`ipsec.d/cacerts/*`|CA証明書ファイル|※ (Ubuntu)|
|`ipsec.d/certs/*`|クライアント証明書ファイル|※ (Ubuntu)|
|`ipsec.d/private/*`|秘密鍵ファイル|※ (Ubuntu)|
※Ubuntuでは、AppArmorによるものと思われる制限で、ホーム領域に配置したファイルのsymlinkを設定ファイルとして読み込ませようとするとエラーになる (`failed: Permission denied`などがログに現れる)。このエラーを避けるためには、当該Pathにsymlinkではなくファイルの実体を配置する必要がある。
#### インストールと接続手順
今回の実験環境は次の通り。これらの環境にstrongSwanをインストールし、IPsec VPN接続が行えるようにする。
|OS|OS Version|strongSwan Version|
|---|---|---|
|macOS|Sequoia 15.7.3|6.0.4|
|Ubuntu Server|24.04 LTS|5.9.13|
1. strongSwanをインストールする:
- macOS: `brew install strongswan`
- Ubuntu: `sudo apt install strongswan`
2. 設定ファイル等を配置する
- macOS: `/opt/homebrew/etc/`以下
- Ubuntu: `/etc/`以下
2. Ubuntu: 500番ポートの使用状況を確認する (使われているはず): `sudo lsof -i :500`
```
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
charon 1331 root 12u IPv6 10214 0t0 UDP *:isakmp
charon 1331 root 14u IPv4 10216 0t0 UDP *:isakmp
```
3. Ubuntu: 今回の場合は必要な時だけstrongSwanを手動起動する方針とするので、strongswan-starterのサービスを停止&自動起動無効化しておく: `sudo systemctl disable --now strongswan-starter`
4. 500番ポートの使用状況を再確認する (使われていないはず): `sudo lsof -i :500`
5. IPsec VPN接続サービスを(再)起動する: `sudo ipsec restart`
6. IPsec VPN接続を開始する: `sudo ipsec up example-ipsecvpn_subnet1`
7. IPsec VPN接続を終了する: `sudo ipsec down`
##### 接続試行時に便利なコマンド
strongSwanの接続を色々と試行錯誤する場合には、設定ファイルを書き換えて、VPN接続を試して、ログの内容を確認する……、これを繰り返すことになる。その際に便利なipsecコマンドを以下に示す。
|コマンド|操作|接続中のVPNセッションへの影響|
|---|---|---|
|`ipsec rereadsecrets`|`ipsec.secrets`を再読み込み (即時反映)|切断なし|
|`ipsec reload`|`ipsec.conf`を再読み込み (既存セッションは維持, 新規セッションから設定反映)|切断なし|
|`ipsec restart`|strongSwanサービスを再起動|全て切断|
|`ipsec statusall`|接続状態を確認|切断なし|
|`ipsec listcerts`|メモリ上に読み込んでいる証明書を一覧表示|切断なし|
#### サブネット1つしか認識されない時の回避策
今回私が実験したVPN接続先環境では、VPNを経由させたいサブネットを指定する`rightsubnet`に、次のように複数のサブネット1と2を列挙しても、実際に認識されたのは最初のサブネット1のみであった。
```
### 文法上は正しいものの、今回の実験環境では効かない
rightsubnet=192.168.100.0/24,192.168.200.0/24
```
この場合に、サブネット1と2へアクセスする時にVPN接続を切り替えるなんて、面倒で現実的ではない。なんとか上手くやる方法をGeminiに聞いてみると、次のようなコマンドを提案してくれた。
sudo ipsec restart ; sleep 5 ; sudo ipsec up example-ipsecvpn_subnet1 ; sudo ipsec up example-ipsecvpn_subnet2
実際にこれで上手くいく。2番目のVPN接続は、1番目のVPNセッションを利用しているらしく、効率的だ。また、設定の記述についても、[ipsec.confのサンプル](#ipsecconfのサンプル)で示しているように、`also=`で既存の接続設定を参照させることにより、各サブネット用設定の記述を簡素化できる。
#### 参考資料
##### ipsec.confのサンプル
```
### 接続例
conn example-ipsecvpn_base
# Basic
keyexchange=ikev1
aggressive=yes
auto=add
fragmentation=yes
# Gateway
right={{VPN接続先ゲートウェイのIPアドレス}} # 例: AAA.BBB.CCC.DDD
rightid=%any
rightauth=pubkey
# Client
leftid="C={{国名}}, CN={{クライアント証明書のCN}}" # 例: "C=JP, CN=hogehoge"
leftsourceip=%config
leftauth=pubkey
leftcert={{クライアント証明書ファイル名}} # certsに配置したファイル名
# XAuth
leftauth2=xauth
xauth_identity={{XAuthのユーザー名}} # 例: hogehoge
# Phase 1
ike=aes128-sha1-modp2048,aes256-sha256-modp2048!
# Phase 2
esp=aes128-sha1-modp2048,aes256-sha256-modp2048!
# Life Time
ikelifetime=86400s # Phase1
lifetime=43200s # Phase2
dpddelay=30s # DPD (Dead Peer Detection)
dpdtimeout=120s
dpdaction=restart
conn example-ipsecvpn_subnet1
also=example-ipsecvpn_base
rightsubnet={{VPN接続先subnet1}} # 例: 192.168.100.0/24
auto=add
conn example-ipsecvpn_subnet2
also=example-ipsecvpn_base
rightsubnet={{VPN接続先subnet2}} # 例: 192.168.200.0/24
auto=add
```
##### ipsec.secretsのサンプル
```
: RSA {{秘密鍵ファイル名}}
{{XAuthのユーザー名}} {{VPN接続先ゲートウェイのIPアドレス}} : XAUTH "{{パスワード}}"
### 例: hogehoge AAA.BBB.CCC.DDD : XAUTH "123456"
```
---
### 【読んだ本】 土 地球最後のナゾ 100億人を養う土壌を求めて (光文社新書) - 2026-01-16
URL: https://remoteroom.jp/medialog/2026-01-16_book-4334043682/
本屋の棚で手に取って、読みやすい新書だなと感じて購入。地球上で100億人を養うことができる土壌を見つけるために、どのような情報が必要なのかの概要を、万人向けに説明してくれる内容だと思った。
ウン十年前の地理の勉強で覚えがある、用語や土の名前が登場してくる。しかし地理という科目は、当時の私にとって受験対策としての社会系の一科目で、ほぼ暗記ものでしかなかった。土の種類は、長い時を経ての気候や地形変化、河川の流れ方や火山活動の作用によって定まる、という本書のレベルの知識まで会得できていれば、地理という科目は自分にとってもっと面白くなり、地球上の架空の土地の土壌も推定可能なほどに理解できるだろう。
土には12種類あるという。それぞれの土の在処を実際に訪ねた著者は、現地での苦労話や、土の特性に合わせて、その地で育てる農作物と農法とが組み合わせられてきた歴史があることを、ちょこちょこと笑いを取りに来る口調で説明してくれる。このあたりの親しみやすさは『[僕には鳥の言葉がわかる]()』とも似ている。著者の熱意の源は、地球上の人類の生存条件に土が欠かせないものであること。皆の足下の土に着眼している本書には、読者が土のナゾというかまずは土の可能性を感じたくなる、そして自身の手で土弄りを始めたくなるような、人を原点に回帰させる力があるかもしれない。
#### P.S. 身近な植物に肥料を
本書を読んだ後、うちのリビングに置いている植物 (1つは14年を優に経過) をしっかりケアしてあげようと思って、次のタブレット肥料を買ってみた。タブレットを置くだけなのはとても楽だ。成分表には、窒素・リン酸・カリウム・マグネシウム・マンガン・ホウ素が記載されており、これらは、本書が述べている植物に必要な栄養分のとおりであることに納得。
---
### 【観た映画】 The Thinking Game - 2026-01-07
URL: https://remoteroom.jp/medialog/2026-01-07_movie/
- 視聴: [YouTube](https://www.youtube.com/watch?v=d95J8yzvjbQ)
本作は、専門型AIではなく、汎用型AIを作り上げてきたDeepMind創始者たちの半生を描いているドキュメンタリーだ。フィクション作品を思わせるくらい、各シーンが時期を明記しつつ当時の映像で整理され、ドラマティックにまとめられている。
生活面でも仕事面でも、進化が速い汎用型AIにその一部が翻弄されている今日に、本作を観ておく意義は大きいだろう。いま私はキーボードのキーを打って模索しながら拙い文章を入力しているが、希望の方向性を伝えたらAIがそれなりのブログ向け文章を自動生成してくれるような時代に、なぜ文章を自分で書くのか。AIで何をするために、人間はAIを発展させていくべきなのか。いや、そもそも、「人間はAIを発展させていく」という関係ではなく、「AIが己を発展させていく」という局面にきっと達している。
科学技術がその歴史の中で受けてきた検証と同様に、AIの開発と道徳や倫理の関係性、そして規制の必要性を問う問題提起を、本作も終盤に行っている。私なりに思ったのは、AIを開発する・使う人間が果たすべき役割は、どんな風にAIを使えば人が幸せになるのか、という問いに答えようとするために、AIを開発する・使うこと。この役割を逸脱した場合の未来に、人間社会が存続しているかどうか。この問いが自分に向けられたら、私は、幾通りかの道筋が考えられるが最終的には、人が幸せである人間社会は存続していないだろう、と否定的に答える。
#### 観賞リンク
---
### 【観た映画】 シャドウズ・エッジ - 2026-01-01
URL: https://remoteroom.jp/medialog/2026-01-01_movie/
- 視聴: [109シネマズHAT神戸](https://109cinemas.net/hatkobe/)
- 公式サイト: [映画『シャドウズ・エッジ』オフィシャルサイト](https://klockworx-asia.com/shadowsedge/)
原題『捕风追影』。正月の夜にひとり映画館へ出向いて観た本作は、サイバークライム系のばりばりアクション映画。人の動きで展開を描いていく見せ場が多く、ファンサービスに事欠かない (特に最後まで観ると実感する)。これはなかなかに迫力も緊迫も微笑ましさもある、熱い娯楽作品じゃなかろうか、と素直に思える。
#### 何気ない一枚
---
### 【読んだ本】 総理にされた男 - 2025-12-19
URL: https://remoteroom.jp/medialog/2025-12-19_book-4800287359/
私は本を買う際、ジャンルを問わず少しでも興味が沸いたら、その一冊を手に取って途中のページを適当にぱっと開き、面白さをそこから直感できれば買う、という決め方をする時がある。書店のお勧めの棚に詰まれていた本書は、この“ランダムテスト”にまずは合格。タイトルによって内容は丸わかりなのであるが、予想よりも波乱ある展開で滞りなく読み進められて、そこそこ楽しめて、かつ現実の社会や政治のあり方を考えさせる要素もある。充足感のあるフィクションであった。
---
### ContextDJ - AI Music Curator: 曖昧なリクエストをAIがプレイリスト化してくれる、Spotifyと連携するウェブアプリを作ってみた - 2025-12-15
URL: https://remoteroom.jp/diary/2025-12-15/
#### 私のコンテキストから適当に選曲してほしい
音楽を聴こうとして、そのときの気分に沿うキーワードを考えて、Spotifyの検索欄に打ち込もうとした時に、気づいた。ここにAIを介在させたらちょっと面白いんじゃない?
思いついたらプロトタイプをすぐに作れてしまうのが、昨今のAIの脅威です。いわゆるバイブコーディングを[Google Antigravity](https://antigravity.google/)とし始めて、とりあえず自分向けにCLI版 (Python製) を作成してみたものの、これじゃ誰も使わないだろうなと再考してCLI版を没にし、ウェブアプリ版に仕立て直しました。
このアプリが理想とする姿は、“曖昧だったり無茶振りだったりするユーザのコンテキストを理解するDJ”ですので、名前は「ContextDJ」としました。誰もがすぐに使える、PC・スマホに対応したサイトを立ち上げ、ソースコードをGitHubに公開したのでご紹介です。
##### ContextDJの使い方
- すぐに使えるサイト (Cloudflare Pages): https://contextdj.remoteroom.jp/
- ソースコード (GitHub): [mah\-jp/context\-dj: AI Music Curator\. It turns your vague requests into a perfectly curated scheduling of tracks\.](https://github.com/mah-jp/context-dj)
- README 日本語版: https://github.com/mah-jp/context-dj/blob/main/README.ja.md
- README 英語版: https://github.com/mah-jp/context-dj/blob/main/README.md
|URL|QRコード|
|---|:-:|
|https://contextdj.remoteroom.jp/||
###### 最初に初期設定をします
1. [ContextDJのサイト](https://contextdj.remoteroom.jp/)を開くと初回は次のようなトップ画面が現れます。設定手順がチェックリストとして案内されるようにしています。
2. 設定チェックリスト内のSettings (または右上の歯車アイコン) をクリックするとSettings画面に遷移します。ここで必須入力なのは「Spotify Client ID」と「AI API Key」の設定です。それぞれ、入力欄の下の説明文にあるリンク先 ([Spotify](https://developer.spotify.com/dashboard)と、[OpenAI](https://platform.openai.com/api-keys)または[Google](https://aistudio.google.com/app/api-keys)) で作成して、各文字列を入力欄に貼り付けてください。最後にページ最下部の保存ボタンを押して設定を保存します。
3. トップ画面に戻ると、Spotifyへの「Login」ボタンが現れているはずです。Loginボタンを押して、ご自身のSpotifyとContextDJを連携させてください。
###### 好きな言葉でリクエストを出します
1. 画面上部のリクエスト欄に、気分に応じたリクエストを好きな言葉 (自然言語) で入力して、紙飛行機アイコンをクリックまたはEnterキーを押してください。左のマイクアイコンで音声入力も可能です。最低限、聴きたい音楽をAIが推測できるような言葉は必要です。また、スケジュールと判断できる情報が含まれていると、プレイリストがスケジュール枠にセットされます。
2. AIがリクエストを解釈できれば、AIがSpotifyに検索クエリーを発行してプレイリストが生成されます。その後、Spotifyアプリを開いているデバイスでの再生が始まります。
3. AIによりよい選曲をさせるために、自分の嗜好をあらかじめ設定しておくことができます。Settings画面の「Personal Preferences」欄に、好みの音楽ジャンルなどを入力しておいてください。
##### 備考
- ContextDJはPWA (Progressive Web Apps) に対応しています。スマホのブラウザにて「ホーム画面に追加」をすると、一般的なアプリのように使えます。
- 作者は、Google Geminiを主に使っています。AIとしてOpenAIを選択した場合、動くとは思いますが、ほとんどテストできていません。
#### まとめ・雑感
現段階のContextDJの特徴となる部分は、「ユーザが自由入力するリクエストを、良い感じに解釈して、Spotifyの検索クエリーに変換する」ところです。裏では、「前提条件をいろいろ追加してSpotify検索用クエリーを作るプロンプトを準備してそれをAIに投げる」という処理を行っています。自然言語からのこのような高度な変換は、いわゆるAIパワーがあってこそできるものだなと、作ってみて実感しました。
なお、Spotifyから取得したプレイリストを、再度、AIを用いて「もう少し良い感じになるように」精査してもらうというアイデアもありますが、まだやっていません。次の改造でこのアイデアを実装するかもしれません。
##### 追記: AIによる選曲フィルタリング機能を追加 \[2026-01-07\]
アイデアとして温めていた、AIによる選曲フィルタリング機能を2025-12-21に追加しました。Spotifyから得られたプレイリストの内容を、AIが精査し、ユーザのリクエストに合わないと判断した曲をプレイリストから取り除きます。この機能により、妙に突飛な曲が再生される事態は体感的に激減しました。
- [AIによる選曲フィルタリング機能を追加 \(デフォルトでON\) · mah\-jp/context\-dj@70a9322](https://github.com/mah-jp/context-dj/commit/70a93221e603059dfd6137a2974321269de0bc24)
##### アイコン
ContextDJの下記のアイコンも、AIに「このアプリの内容に合う、kawaiiものを」と指示して作ってもらいました。
#### 参考リンク
- [AIを使ったDJ楽曲選択の現実と限界 \- ENECHANGE Developer Blog](https://tech.enechange.co.jp/entry/2025/08/27/130000)
- [Spotify APIでaudio\_featuresが使えなくなったので代わりを作る \#Python \- Qiita](https://qiita.com/_tamiya/items/92db2a2898b04fefca46)
---
### ビリヤード: JCLリーグ (2025-hyogo-momiji-9) に参加して、東京での "2025 JCL Final" に出てみた記録 - 2025-12-13
URL: https://remoteroom.jp/diary/2025-12-13/
#### JCLリーグ戦参加3回目
[JPA](http://www.poolplayers.jp/), [JCL](https://csi-pool.jp/)のリーグ戦のこれまでの参加記録は次の通り。
- [ビリヤード: JPAリーグ (2024年秋シーズン) に初参加して試合に10回出てみた記録 \[2024-12-28\]]()
- [ビリヤード: JCLリーグ (2025-hyogo-sakura-9) に初参加して試合に7回出てみた記録 \[2025-04-02\]]()
- [ビリヤード: JCLリーグ (2025-hyogo-himawari-9) に参加して試合に10回出てみた記録 \[2025-07-12\]]()
#### 参加した試合
##### 記録
JCL 2025 シーズンMOMIJI (2025-hyogo-momiji-9) での、私が出場した試合の記録は次のとおり (計12試合)。
|Week No.|日付|FargoRate / Robustness|内容|感想|
|--:|:-:|--:|---|---|
|2|2025-08-06 (水)|302 / 79|Lose|「いれが強い」という評価は受けていた。つまりそれ以外に大きな問題があることを示唆しているわけだから、改善する。|
|3|2025-08-20 (水)|282 / 83|Lose|反省点は、自分の立ち上がりの遅さは短期戦では致命傷になるというところ。|
|4|2025-08-27 (水)|285 / 86|Lose|反省点は、前回と同じ。|
|5|2025-09-03 (水)|283 / 90|Win|ぎりぎりでこちらに転がり込んだ。やっと1勝ということで少し余裕ができた。|
|6|2025-09-10 (水)|284 / 94|Win|まぐれ混じりの、少しばかり精度が高いショットができていた気がする。|
|8|2025-09-24 (水)|291 / 99|Win|緊張を通り越して、集中モードに入っていたかもしれない。失敗するのが「恐ろしい」と思う感じ。|
|10|2025-10-08 (水)|298 / 102|Lose|終わってから気づいた。今回の相手チームとの前回の試合の時と同じ相手で、かつ同じく負けている。難易度は高くないのにミスとなるショットが多かった。|
|11|2025-10-15 (水)|303 / 106|Win|双方にとって難しい配置が序盤に多くあり、相手の気持ちのざわざわが伝わってくるほどだったので、こちら側は努めて落ち着いていこうと内心では思いつつプレイ。偶然もあってなんとかゴール。試合後に他メンバーからアドバイスを受けた。ショット時の動作に溜めがなくて早すぎること (プレイ動画を見直して自分でも痛感 orz)。短距離で狙うときはブリッジを手玉にもっと近づければいいこと。ティップの先の丸みが足りないこと。|
|12|2025-10-22 (水)|313 / 110|Win|双方がヒルヒルへ上がった展開となり、試合の最後のゲームで相手が先に上がりの点数に達したので、私は負けたと勘違いしながら最後までプレイした、というおっちょこちょい状態 (ルールが分かっていなかった)。最後の9ボールは獲ったので実は勝利というオチである。また、自分としてはもつれるべきではない試合なのにもつれたためか、スキルレベルはむしろ下がった。|
|14|2025-11-05 (水)|302 / 115|Win|昨日までの練習で意識した「まっすぐ」への集中と、その場の皆さんにもらった「ゆっくり」打つアドバイスを、とにかく自分へ定着させようとしながら試合に挑んだ。まぁまぁの出来だったと思う。|
|15|2025-11-12 (水)|309 / 120|Lose|ナインボールを一度も落とすことなく、つまりストレートに負けて終了。幾度か回ってきた自分の番で続けられず、どうしようもなかった。|
|16|2025-11-19 (水)|300 / 125|Lose|今回の相手とは本リーグで3回目の対戦。なぜか、勝てない〜。|
##### 総括
まずは自分の結果を示すと次の通りである。リーグ戦の中でのゲーム単位での勝率は、リーグ統計 ([FargoRate Player](https://play.google.com/store/apps/details?id=com.fargorate.player&hl=ja)アプリ内で確認可能) の指標において、42%となった。密かに勝率5割を狙っていたのだが、これはなかなか越えられない壁だ。
||試合単位での Win : Lose|ゲーム単位での勝率|
|---|---:|---:|
|JCL 2025 シーズンMOMIJI 私個人の最終成績|6 : 6|21/50 → 42%|
所属チーム「Side Road」としては、JCL 2025 シーズンMOMIJIの9ボールの兵庫ディビジョンから、東京で開催される「2025 JCL Final」へ出場できることに。
- リーグ詳細データ:
- [FargoRate \- League Management System > Japan CSI Pool League > 2025-hyogo-momiji-9](https://lms.fargorate.com/PublicReport/LeagueReports?leagueId=585944ff-c43a-4d71-80b0-afcd004220c5&divisionId=02906b17-f6ea-4635-9a21-b32200c8c509)
#### 2025 JCL Final (9ボール)
私は前日の夜に東京へ移動。2025-12-06 (土) 朝09:30頃に、チーム「Side Road」で参加の6名は、会場である「[サンビリ荻窪西口店](https://point-shin.com/shop/sanbiri-ogikubo)」にて全員集合した。9ボールのFinalは、全国から集まった14チームがトーナメント形式で対戦を行い、通常枠では4回勝ち抜けば優勝となる。
##### 結果はラスベガス行きの切符
窓に遮光カーテンが掛かり、太陽の動きがあまり把握できないビリヤード場の中では、時間感覚がよくわからない。トーナメント戦はみっちりと夕方まで行われたのだが、体感的にはそんなに時間が過ぎたとは思えず。私は2試合に出場し、最終的には、自分たちも予想していなかったことだが、私たちのチームが優勝となった。えぇぇぇ?!
|No.|日付|FargoRate / Robustness|内容|感想|
|--:|:-:|--:|---|---|
|2回戦|2025-12-06 (土)|316 / 129|Win|よく覚えていません。|
|決勝戦|2025-12-06 (土)|316 / 132|Win|本当に無我夢中。[下記の配信動画](https://www.youtube.com/live/3LsqVOmuB94?t=26479s)を観てやっとこさ、自分が何をやっていたのかを思い出す次第。|
||試合単位での Win : Lose|ゲーム単位での勝率|
|---|---:|---:|
|2025 JCL Final 私個人の最終成績|2 : 0|5/7 → 約71%|
- リーグ詳細データ:
- [FargoRate \- League Management System > Japan CSI Pool League > 2025-JCL-Final-9ball](https://lms.fargorate.com/PublicReport/LeagueReports?leagueId=585944ff-c43a-4d71-80b0-afcd004220c5&divisionId=1ae4b3c7-c1c6-4786-a7b7-b3a900e947f0)
こうしてチームは、ラスベガスで2026年2月に開催される『[2026 USA Pool League National Championships](https://www.playcsipool.com/2026-usapl-national-championships.html)』の、「9-Ball Teams」枠の日本代表となることができた。
嘘みたいなこんな貴重な機会を得ることができたのは、リーグ主催のJCLのみなさま、これまでの対戦相手のみなさま、そしてもちろんチームの方々の支えのおかげでしかあり得ない。2026年3月の初め頃には、このUSAPL大会の様子もブログ記事にできることでしょう。To be continued, maybe.
###### 追記 \[2026-03-02\]: 無事に行ってきました!
- [ビリヤード: ラスベガスでの "2026 USA Pool League National Championships" に参加した記録 \[2026-03-02\]]()
#### 参考情報
##### 参考リンク
- [Japan CSI Pool League](https://csi-pool.jp/)
- [2026 USA Pool League National Championships](https://www.playcsipool.com/2026-usapl-national-championships.html)
##### 練習時間とメモ
JCL 2025 シーズンMOMIJIへの参加が決まった2025年7月途中から、当該リーグを終えるまでの間の、私の練習時間を記録する (試合実施時の時間を除く)。
|日付|練習場所 (基本は兵庫県神戸市内)|分 \[5分単位に切捨\]|メモ|
|---|---|--:|---|
|2025-07-26 (土)|灘区某所|175|多忙だったりで、前回の練習から何週間かあいてしまった。カンを取り戻すべく黙々と練習。|
|2025-07-28 (月)|灘区某所|85|自身のフォームやブリッジの形がわけわからなくなってきた気もする。疲れを感じたので早めに切り上げ。|
|2025-08-03 (日)|灘区某所|105|チーム内での練習。緊張したときの弊害と、体が緊張しているとき、具体的にはどこの筋肉が緊張しているのかを教えてもらったり。|
|2025-08-06 (水)|東灘区某所|160|力を抜く努力を淡々と進めた。|
|2025-08-14 (木)|北区某所|170||
|2025-08-19 (火)|灘区某所|220|呼吸を整えながら衝く練習を考えてやってみた。|
|2025-08-27 (水)|灘区某所|45|試合日の朝練。気張らずにいこう。|
|2025-08-31 (日)|灘区某所|115|撞いた後も目線を弾道へ残すことを意識。|
|2025-09-02 (火)|東灘区某所|170|撞いた後も球筋を追跡するような意識で、撞いた。|
|2025-09-08 (月)|灘区某所|130||
|2025-09-09 (火)|東灘区某所|100|キューを長めに持つようにするとなんだか良い感じ?|
|2025-09-13 (土)|三田市某所|75|ここの台はナチュラルだ。マスターさんに、練習なのだから確度を高めるために玉を戻して繰り返し衝いてもいいんだよ、メガネのレンズの歪みが少ないところで見るために首を上げ気味にすると良いよ、と教えてもらった。|
|2025-09-20 (土)|灘区某所|130|一人練習なので、外した配置や土手際のショットを何度もやり直したり。そうして自分の癖を再認識して、補正することを目指した。|
|2025-09-23 (火)|灘区某所|160|試合前の駆け込み練習。苦手な配置の場面を何度もやり直してみたり。疲れると明らかに調子が落ちます。|
|2025-09-25 (木)|東灘区某所|120|25年ぶりぐらいに入った店で、2人練習。「10ボール」をやって楽しんだ。|
|2025-10-03 (金)|東灘区某所|170|だんだんと集中できたかな。|
|2025-10-06 (月)|灘区某所|140|苦手な局面を、できるだけ繰り返し練習。悪い癖が出ないように。|
|2025-10-07 (火)|灘区某所|160|前回と同様に、苦手の克服を意識して、シーンを繰り返しての練習をしたり。|
|2025-10-11 (土)|灘区某所|110|初めてティップを交換してその後の練習。ショットにおける不確定部分が減ったことが実感できる。ミスしたときは自分の衝き方が悪く、衝き方が良いときはほぼ狙った通りに玉が進む。ティップの状態に気を遣うのは、とても大切なことだと経験した。|
|2025-10-14 (火)|東灘区某所|190|ティップに慣れるための練習2。声を掛けてもらって、模擬試合もできた。プレー中の私の打ち方に関してありがたいご指摘頂けたので、注意しよう!|
|2025-10-17 (金)|東灘区某所|150|ゆっくり撞くことを心掛けた。|
|2025-10-20 (月)|東灘区某所|120|Nextを意識しながらの練習。模擬試合もやって、けっこう冷静にやれたつもりだけども敗れた。|
|2025-11-03 (月)|灘区某所|160|久しぶりの練習になってしまった。しかし逆に改まった気持ちになれたらしく、ブリッジを固く、キューを低く水平に、しっかり撞く、という動作を良い意味で意識。思い通りに手玉を動かせた頻度は低くはなかった。|
|2025-11-04 (火)|灘区某所|180|一人練習と模擬試合。試合ではボロボロだったので一人反省会をしたり。私はまっすぐに打てなくて、統計的に、手玉が狙い玉の左寄りに当たりがちであることに気づいたのは一つの収穫かもしれない。|
|2025-11-09 (日)|灘区某所|230|模擬試合と一人練習。すぐに調子を上げないと負けるshortの怖さ。とにかくゆっくり撞く。呼吸などでワンテンポの“ま”を置くようにするべき。|
|2025-11-11 (火)|東灘区某所|120|試合前の練習。いかなる時も、とにかくゆっくり落ち着いて、まっすぐ撞けるようにやった。右手が振り子のように動く感覚も覚えられるように。|
|2025-11-15 (土)|灘区某所|230|まっすぐ打つコツがちょっと掴めた気がして、想定よりも長居して練習した。|
|2025-11-16 (日)|灘区某所|170|合同練習と模擬試合。ストップボールの時に手玉を少しだけ横に転がす技を、覚えようとした。|
|2025-11-18 (火)|東灘区某所|140|一人練習と模擬試合。疲れていたせいか調子が出ない。|
|2025-11-24 (月)|灘区某所|100|軽く一人練習。キューをまっすぐ出せている感覚を覚えようとする。|
|2025-11-26 (水)|灘区某所|25|チームでの練習。人数多めだったので少しだけ参加し、キューレベルが高いなどの自分の癖を矯正することに努めた。|
|2025-11-30 (日)|灘区某所|100|姿勢を低く、車高を下げる感じを意識した。|
|2025-12-01 (月)|灘区某所|100|前日の続きのイメージ|
|2025-12-02 (火)|東灘区某所|120||
|2025-12-05 (金)|東京都杉並区某所|170|翌日のFinal本番に備えて、本番環境での練習。照明の輝度や玉の転がり方の普段の環境との違いを、意識しないぐらいに練習はした。後はなるようにしかならない。|
|合計時間 (分)||4,845|(約80時間)|
---
### Officeスイートの「WPS Office for Linux」を試してみた 〜Ver.11の日本語化・太字表示対策〜 - 2025-11-30
URL: https://remoteroom.jp/diary/2025-11-30/
#### 存在が貴重なLinux版、現状は?
中古で購入した数年前のパソコンの箱を整理していた時、未使用状態の「WPS Office for Windows」のライセンス番号を見つけ、長らく忘れていたKingsoftとWPS Officeの存在を思い出した。そして、WPS OfficeにはLinux版があったことも思い出した。
私はこれまで、主にUbuntuやmacOSの環境において、OfficeスイートとしてはLibreOfficeばかり使ってきた。それ以外のOfficeスイートの最新状況を知らないので、はたして今のWPS OfficeのLinux版 (x86_64) はどんな感じで使えるのか、試してみたい。
#### 最新のVer.12は断念
- [WPS Office for Linux\-支持多版本下载\_WPS官方网站](https://linux.wps.cn/)
|項目|内容|備考|
|---|---|---|
|OS|Ubuntu 24.04 LTS (amd64)|言語を日本語に設定|
|WPS Office|Ver.12.1.2.23578||
上記のリンク先から、x86_64用のdebパッケージ (`wps-office_12.1.2.23578.AK.preread.sw_542488_amd64.deb`) をダウンロードできる。インストールして「WPS Office」を起動してみると、下記画像のように画面表示は簡体字で、設定メニュー等が見つけられず、日本語や英語への言語切り替えが困難だった (かつ日本語の言語ファイルをウェブ上で探しても見つけられない)。現時点での日本語表示での利用は時期尚早なのかもしれず、今回は見送りとする。
#### 一つ前のVer.11を精査
- [Linux \| WPS Office オンラインの無料 Office ソフトウェア](https://www.wps.com/ja-JP/office/linux/)
|項目|内容|備考|
|---|---|---|
|OS|Ubuntu 24.04 LTS (amd64)|言語を日本語に設定|
|WPS Office|Ver.11.1.0.11723||
こちらも同様に、上記のリンク先から、x86_64用のdebパッケージ (Jul. 29 2024, `wps-office_11.1.0.11723.XA_amd64.deb`) をダウンロードできる。インストールして「WPS 2019」を起動してみると、画面表示は英語表記となった。
##### 画面表示を日本語表記にする
WPS Office Ver.11に、次の手順で日本語の言語ファイルを適用すると、画面表示を日本語表記に変更できる。
1. [wachin/wps\-office\-all\-mui\-win\-language: MUI \(Multilingual User Interface\) & Dict \(Spell Check Dictionary\) WPS Office Linux](https://github.com/wachin/wps-office-all-mui-win-language) の [5.) Install MUI (Multilingual User Interface) and dicts (Spell checking dictionaries)](https://github.com/wachin/wps-office-all-mui-win-language?tab=readme-ov-file#5-install-mui-multilingual-user-interface-and-dicts-spell-checking-dictionaries) にて、MUI (`mui.7z`) をダウンロードする
2. `mui.7z`を展開し、展開されたディレクトリ「`mui/ja_JP/`」を、`~/.local/share/Kingsoft/office6/`に置く
- すなわち、`ja_jp/`を`~/.local/share/Kingsoft/office6/mui/ja_JP/`として配置する
- `~/.local/share/Kingsoft/office6/`は、WPS Officeを一度起動すると自動生成されている
4. WPS Officeを再度起動してみると、下記画像のように画面表示は日本語表記となるはず
##### 文字のBold表示がおかしい問題を解決する
今回の実験環境においては、上記画像のように、Bold・太字属性が適用されている日本語文字が、塗りつぶされたかのような妙な表示となる。これは、WPS Officeのバグが、Ubuntu側のFreeTypeのバージョン2.13.2以上との組み合わせで発現しているためらしく、既知の問題だ。
- [WPS Officeで文字が極端に太くなって■のようになる(too\-bold, Fakebold) \#Linux \- Qiita](https://qiita.com/okemessi/items/00261fd9c09eeb221cb1)
- [WPS\-OFFICEで太字が潰れてしまう対応 \- マスターの業務外日誌](https://team-rescue.com/wp/master/archives/16521)
この問題は、WPS Officeにわざと古いFreeType 2.13.0を使うようにさせる次の手順で、解決できる。
1. https://sourceforge.net/projects/freetype/files/freetype2/2.13.0/freetype-2.13.0.tar.xz をダウンロードする
2. configureとmakeを実行し、生成された`libfreetype.so.6.19.0`をWPS Officeの配下のディレクトリに配置する
```bash
## まだであれば、makeとgccをインストールする
sudo apt install make gcc
## freetype-2.13.0.tar.xzを展開し、configureとmakeを実行する
tar -xvf ./freetype-2.13.0.tar.xz
cd ./freetype-2.13.0
./configure
make -j$(nproc) # コア数に応じて並列ビルド
## 生成されたlibfreetype.so.6.19.0をWPS Officeの配下のディレクトリに配置する
sudo cp ./objs/.libs/libfreetype.so.6.19.0 /opt/kingsoft/wps-office/office6/
cd /opt/kingsoft/wps-office/office6/
sudo ln -s libfreetype.so.6.19.0 libfreetype.so.6
sudo ln -s libfreetype.so.6.19.0 libfreetype.so
```
3. 再度、WPS Officeを起動してみると、下記画像のように文字の太字表示がおかしい問題は治るはず
##### 表計算とプレゼンテーションもOK
文書作成の「Writer」に加えて、表計算の「Spreadsheet」と、プレゼンテーション「Presentation」も正常に起動できた。
##### 参考情報: wpscloudsvr, フォント
- WPS Office起動時に、`wpscloudsvr`というプログラムがcrashすることがある。根本的な解決策ではないが、そもそもこのプログラムが起動しないように`/opt/kingsoft/wps-office/office6/wpscloudsvr`を別名にrenameしておくことで、暫定的な対応 (workaround) にはなるそうだ
- [Occasionally getting a crash from "wpscloudsvr" · Issue \#120 · flathub/com\.wps\.Office](https://github.com/flathub/com.wps.Office/issues/120)
- 文書を開いた際に“フォントが足りない”と表示される時は、次のリンク先が参考になりそう
- [WPS Office \- ArchWiki](https://wiki.archlinux.jp/index.php/WPS_Office) > [3.1 数式が正しく表示されない](https://wiki.archlinux.jp/index.php/WPS_Office#.E6.95.B0.E5.BC.8F.E3.81.8C.E6.AD.A3.E3.81.97.E3.81.8F.E8.A1.A8.E7.A4.BA.E3.81.95.E3.82.8C.E3.81.AA.E3.81.84)
- [WPS Office 欠落フォントのインストール \- アラコキからの Raspberry Pi 電子工作](https://arakoki70.com/?p=8651)
#### 参考リンク
- [無料ダウンロード WPS Office(PC/Windows/Mac対応)|WPS Office 最新バージョン ダウンロード](https://www.wps.com/ja-JP/download/)
- [Linux \| WPS Office オンラインの無料 Office ソフトウェア](https://www.wps.com/ja-JP/office/linux/)
- [\[公式\]Mac版WPS Office:無料のオールインワンOfficeスイートをダウンロード](https://www.wps.com/ja-JP/office/mac/)
- [WPS Office \- ArchWiki](https://wiki.archlinux.jp/index.php/WPS_Office)
---
### 【読んだ本】あなたが私を竹槍で突き殺す前に - 2025-11-28
URL: https://remoteroom.jp/medialog/2025-11-28_book-4309028713/
いちおう読み終えると、本書の内容から受ける印象と、本書のタイトルから受ける印象は、相似していると分かった。物語に「竹槍」はおそらく出現していないのに、登場する社会の世論や緊迫感や刹那を、戦時を連想させるこの言葉が喚起するからだろう。しかし私は読み終えはしたが、読み切れていない。
国籍や出生の差別から始まる極めて深刻なテーマを扱っていて、私がいつものようにここに、感想をライトに打ち込む気にはさせてくれない。スポットを当てる登場人物を、章ごとに違えている構成により、読者は一章ごとに没入する対象を切り替えることになり、その人物を深く知らざるを得ない。さらに著者の創造力を含む力量や言葉運びのうまさにより、心情や状況の描写が重く、時にしんどい。
私が読み切れていないと書いたのは、一塊の物語全体として、本書をつかみ切れた気がしないからであった。しかしまずおそらく間違いないのは、怒りが渦を巻いてやり場に着火する、その繰り返しが社会現象となると、どのようなことが起こりうるかが描かれていること。そして、二人の女性に役割を当てている「書き残す」という行為に、著者が希望を託しているのではないか、ということ。
---
### 子どもの机用に、Micro PCと一体化するモニタースタンドを導入してみた 〜23.8型4KモニターJN-IPS238U-C6との構成例〜 - 2025-11-28
URL: https://remoteroom.jp/diary/2025-11-28/
#### コンパクトに置ける
本棚に混ぜて差し込んでおけるような筐体サイズの、Dellだと「Micro」と呼んでいる形状のパソコンを入手した。私はこれを子どもの机に置く初のデスクトップPCに仕立てようと思いついて、PCと一体化できる専用のモニタースタンドと、4K解像度としては比較的小さな、23.8型の4Kモニターを組み合わせてみたので、構成の一例としてメモです。
わざわざ、レアな専用モニタースタンドを取り入れたのはなぜか。それは、たまたま先日ソフマップの店頭窓口にて同じ構成のPCを見かけ、このスタンドは、PCをモニター背面に隠せてかつ高さ調整も回転もできるし、通常利用の場合でも自由度があって使い勝手が良いのでは?と気づいたからです。
##### 購入したもの
|種別|商品名|購入価格(税込)|購入店, 購入日|備考|
|---|---|--:|---|---|
|PC|[Dell OptiPlex 3070 Micro](https://www.dell.com/support/manuals/ja-jp/optiplex-3070-micro/opti3070_micro_setiup_specs/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E4%BB%95%E6%A7%98?guid=guid-ab67ed37-0818-4592-a25c-f04b3a73c18d&lang=ja-jp)|-円|もらいもの|中古品|
|4Kモニター|[JAPANNEXT JN-IPS238U-C6](https://jp.japannext.com/products/jn-ips238u-c6)|27,608円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0FG2KPFD9?tag=remoteroom-22&linkCode=ogi&th=1&psc=1), 2025-11-23|23.8インチ|
|モニタースタンド|[Dell Micro All-in-One Stand MFS18](https://i.dell.com/sites/csdocuments/SNP_Docs/en/dell_micro_form_factor_aio_stand_mfs18_spec_sheet.pdf)|2台で4,950円|Yahoo! オークション, 2025-11-24|中古品|
JAPANNEXT JN-IPS238U-C6は、100x100mmのVESAマウントに対応しており、モニタースタンドMFS18に直接取り付けできる。
#### 写真メモ
- モニタースタンド, Micro PC, モニター外箱:
- モニタースタンド「Dell Micro All-in-One Stand MFS18」:
- モニタースタンドにモニターとPCを取り付けた様子:
#### 本PC構成での注意点
##### 4K解像度での60Hz出力にはDisplayPort接続が必要
子どもと二人で作業して、スタンドに付属のネジ類を使ってモニターをスタンドにVESAマウントし、モニターをPCとHDMI接続した上で電源を投入。現物を確認せぬまま既存のレビューもあえて気にせずに、購入したモニター「JAPANNEXT JN-IPS238U-C6」の画質は、ギラギラせず落ち着きある印象のもので、綺麗さに安心した。しかし、Ubuntu Desktop上でマウスカーソルを動かした時のカクカクに違和感が。これは60Hz出てないな?
Dell OptiPlex 3070 Micro (CPU内蔵GPU: Intel UHD Graphics 630) のスペックでは、映像出力をHDMI端子から行う場合、4K解像度 (3840x2160) でのリフレッシュレートは最大30Hzにとどまる、とこの時点で調べて初めてわかった。DisplayPort接続だと4K解像度での60Hz出力が可能だ。
JAPANNEXT JN-IPS238U-C6に付属しているのはUSB-CケーブルとHDMIケーブルで、DisplayPortケーブルは付属していない。そのため別途、次のようなDisplayPortケーブルを購入してDisplayPort接続に変更し、今回のPC構成での4K解像度&60Hzを実現できた。
|種別|商品名|購入価格(税込)|購入店, 購入日|備考|
|---|---|--:|---|---|
|DisplayPortケーブル|[SANWA SUPPLY KC-DP1410](https://www.sanwa.co.jp/product/syohin?code=KC-DP1410)|2,590円|[ヨドバシ.com](https://www.yodobashi.com/product-detail/100000001004210967/), 2025-11-26||
---
### スマホから画像を転送できる、バッテリーレスなe-Paperタグを試した - 2025-11-09
URL: https://remoteroom.jp/diary/2025-11-09/
#### なるほどNFC給電
どのように使おうかなんてまともに考えずに、興味のままにポチるありさま。今回の対象は、次の機能を持つ、キーホルダーに付けるようなタグ型のガジェットである。
- 電子ペーパー (赤,黒,白の3色) の1.54インチ画面が付いている ([赤,黄,黒,白の4色版](https://www.waveshare.com/1.54inch-nfc-powered-e-paper-g.htm)もある)
- スマホのアプリでデザインした200x200ピクセルの画像を、タグへNFCで転送できる
- バッテリーは内蔵しておらず、画面書き換え時はNFCからの給電で動く
|種別|商品名|購入価格(税込)|購入店, 購入日|備考|
|---|---|--:|---|---|
|NFC Passive Tag|Waveshare [1\.54inch Passive NFC\-Powered e\-Paper, No Battery, Wireless Powering & Data Transfer](https://www.waveshare.com/1.54inch-NFC-Powered-e-Paper-BW.htm)|2,764円|[Aliexpress](https://ja.aliexpress.com/item/1005007224036427.html), 2025-10-20|Aliexpress上の商品名は「NFC 機能メモリキーリング 1.54 インチ 3 色表示画面画像ワイヤレス伝送キーホルダーインクスクリーン」|
スイッチサイエンスでも販売されているので、参考としてリンク。
- 3色版: [Waveshare 1\.54インチ NFC搭載 電子ペーパーモジュール(白) — スイッチサイエンス](https://www.switch-science.com/products/10342)
- 4色版: [Waveshare 1\.54インチ NFC搭載 電子ペーパーモジュール(4色) — スイッチサイエンス](https://www.switch-science.com/products/10727)
#### 写真メモ
- 外箱 (英語と中国語表記の説明書も同梱されている):
- 電子ペーパー画面を拡大 (六角形の画素が見える):
#### 使い方
Waveshareの下記Wikiに書いてある内容が、このガジェットに関する情報の全てだと考えられる。
- [1\.54inch NFC\-Powered e\-Paper \(BB\) \- Waveshare Wiki](https://www.waveshare.com/wiki/1.54inch_NFC-Powered_e-Paper_(BB))
##### タグへ画像を転送する方法
1. スマホに専用アプリをインストールする
- Android: Wikiに記載のQRコードからapkをダウンロード (記事執筆時は`NFCTag-V3.1.apk`)
- 「Note that this APP does NOT support Samsung, Google and Sony mobile phones.」と書かれているものの、私のGoogle Pixel 10 Pro XL (Android 16) では不具合なく動いていそうである。
- iPhone: [NFC E-Tag](https://apps.apple.com/jp/app/nfc-e-tag/id1518982217)
2. https://www.youtube.com/watch?v=VKKGPOyOU08&t=30s の動画を参考に、アプリを操作して正方形の画像を用意し、スマホのNFC部分にタグを近づけて画像を転送する (転送時間は20秒ぐらいの印象だ)
3. スマホからピコン♪という音が聞こえ、アプリの画面に「Update successfully, Please check the update status」と表示されたら転送は終了
#### 所感
このNFC Passive Tagとアプリを触っていて、まず第一におもしろかったのは、「スマホのカメラや画面キャプチャを併用すると、現実空間に存在する物もスマホ画面上のものも、スマホの画面に表示できるビジュアルは何でもタグへすぐに転送できる」という手軽さだ。例えばカフェでお茶している時、お店のマグカップに記された某企業ロゴをスマホで撮影し、コントラストなどを最適化してタグへ転送すると、某企業ロゴ付きのタグがすぐに完成する。これで思い出すのは、ポラロイドカメラが現物を写真化する感覚。
上記は遊びの一例だが、実用的な使い道としては、据え置きになるかもしれないがまずは電子棚札。そしてキーホルダーに付けて持ち運ぶ場合は、推しのキャラクターや何かのQRコード、その場にあった自分の持ち物の識別子を表示させる、といったところがあるかもしれない。なお、これはNFCタグであるから、NFCリーダーにかざして何かのトリガーにすることも可能なはずだ。
私は実際、どのように使おうか……。
---
### 適材適所なタブレット、iPad miniを入手した - 2025-11-06
URL: https://remoteroom.jp/diary/2025-11-06/
#### カラーのA4資料を閲覧したい
約一日というワタクシ的には比較的短めの間、悩んだ末に、街へ出向いてApple iPad mini 第7世代の中古品を購入してきた。すでにタブレット類はいくつか持っているのになぜなのか?
それは、喫緊で具体的すぎる「内容がカラーでA4版の、某資格試験の300ページある教材のPDFファイルを、カフェ時や電車の中で立ちながら閲覧したい」という要件に、バランス良く応えられるのは、iPad miniだなと思い至ったため。事前に家族のiPad mini 第6世代を借りて、PDFファイルの閲覧性を確認したところ、何も問題を感じられなかったことが購入を後押しした。ちなみに他のタブレット類が、今回の要件に不向きである理由は次の通り。
- [reMarkable Paper Pro](https://remarkable.com/products/remarkable-paper/pro), [Paper Pro Move](https://remarkable.com/products/remarkable-paper/pro-move): 画面が電子ペーパーであるため、表示速度と色彩表現の面において写真や配線図の表示に向いていない
- ChromeOS Flexを導入しているMicrosoft Surface Go 3: 手持ちするには筐体が大きいし、OSレベルでハイバネーションが効かないところがモバイル機器の使い勝手としては辛い
- なぜWindowsに戻さないのかって? それはまぁ、ChromeOS Flexにこだわっている (縛りを自分に課している) からです……
購入した物のリストは次の通り。
|種別|商品名|購入価格(税込)|購入店, 購入日|備考|
|---|---|--:|---|---|
|タブレット|[Apple iPad mini (A17 Pro) 256GB WiFi + Cellular MXPW3J/A](https://www.apple.com/jp/shop/buy-ipad/ipad-mini/256gb-%E3%83%96%E3%83%AB%E3%83%BC-wifi-cellular)|97,480円|ソフマップ 神戸ハーバーランド店, 2025-11-03|中古品|
|画面保護フィルム|[PDA工房 黒影【AR低反射・光沢】保護フィルム](https://www.pdakobo.com/exec.exe?html=product.htm&key=120PDA60453482)|1,742円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0DLKJ1K84?tag=remoteroom-22&linkCode=ogi&th=1&psc=1), 2025-11-03||
|ケース|MoKo iPad mini7 ケース|1,172円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0B91ZY2WN?tag=remoteroom-22&linkCode=ogi&th=1&psc=1), 2025-11-03||
|ストラップバンド|[Shinjimoru SINJI GRIP](http://www.sinjimoru.jp/products/sgr)|1,024円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0895MB1QW?tag=remoteroom-22&linkCode=ogi&th=1&psc=1), 2025-11-03||
|汎用ケース|[ELECOM TB-08SNCBK](https://www.elecom.co.jp/products/TB-08SNCBK.html)|1,436円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0B8N9K34N?tag=remoteroom-22&linkCode=ogi&th=1&psc=1), 2025-11-03|追記: 素のiPad miniならジャストサイズで大丈夫ですが、ケース装着済みのiPad miniの場合、かなり入れづらい \[2025-11-09\]|
##### テキスト系のアプリ
iPad miniは、大きすぎず小さすぎずな、モバイル向きで実用的なサイズの画面を持っている。これをテキスト系の作業にも活かしていこうと考え、とりあえず、SSHクライアントと、Dropbox・WebDAV上のMarkdownテキストを編集できるエディタというジャンルでの、定番アプリを導入しておいた。
- [Shelly \- SSH Client](https://apps.apple.com/jp/app/shelly-ssh-client/id989642999) (600円)
- [1Writer \- Markdown Text Editor](https://apps.apple.com/jp/app/1writer-markdown-text-editor/id680469088) (800円)
#### 写真メモ: 8インチ前後の端末たち
7.3インチのreMarkable Paper Pro Move, 8.3インチのiPad Mini, 6.8インチのKindle Paperwhiteを並べてみた。
---
### 【読んだ本】 非常識な本質 - 2025-10-31
URL: https://remoteroom.jp/medialog/2025-10-31_book-b00o2o7jea/
「ミスターGT-R」と称されている水野和敏氏の、自分なりの感触でいうと、仕事への取り組み方を論じた一冊。私は後述のように同類の書籍をこれまで何冊か読んできていて、あるサイトのおすすめ本にひょいと表れた本書を、実は“新作”だと勘違いし、読み始めた。著者の主張をおさらいして自分の中で補強する意味合いと、そして新たなエッセンスや最新の情報を仕入れることもできるかなという点に期待して。
ところが、どうもヘンだなと気づいた。他で読んだことのある逸話がよく取り上げられる。そして文体が、あまりソフィスティケートされていない印象だ。私が読んできた同著者の書籍について読了日と出版日を一覧表にしてみたところ、今回の『非常識な本質』は、この中で最も初期に出版されているものだと判明。なるほど、そういうことなら合点がいく。本書は著者の主張の源泉に近いのだろうから。
|書籍名|出版日|読了日|
|---|---|---|
|非常識な本質|2013-08-23|[2025-10-31]()|
|プロジェクトGT-R 常識はずれの仕事術|2013-10-02|2015年より前|
|バカになれ! カリスマ・エンジニア「ゼロからの発想術」|2014-11-27|[2017-01-22]()|
|ベストカー水野和敏SPECIAL|2017-01-23|[2017-01-29]()|
|0→100(ゼロヒャク)生み出す力|2022-07-07|[2022-11-11]()|
|カリスマエンジニアが自動車評価の神髄を伝える 水野和敏が斬る!!|2023-10-24|[2023-11-10]()|
上記の年表のようなものを記したゆえに連想したこととして。この年表に私自身の職務経験を重ねて振り返ってみると、そういえば現在の働き場所の人員構成は、これまででもっともコンパクトだ。構成員の数が少ない場合、「工数」ではなくて著者が言う「能数」を判断基準に使ってチームをまとめていくしか、仕事の進めようがなくなるように思う。この現状は、リソースの制約が必然的にそうならざるをえない状況を作ることにつながる、一例なのかもしれない。
このように結局、自分自身の現状はいまどうなのだろう?という確認に繋がった本書は、忘れがちな私にとってリマインダーの意味があった。過去から注目しているひとつの方法論を、再び時を経て、その時の自分に当てはめることで、またおいしい話として咀嚼できた感がある。
---
### 第二種電気工事士の学科試験に合格できたと思われるメモ 〜技能試験に向けて必要な物を調達する〜 - 2025-10-30
URL: https://remoteroom.jp/diary/2025-10-30/
#### 電気なんちゃらの資格は色々あって Part-3
「電気なんちゃらの資格は色々あって」の書き出しで始めるのは、[1回目 (電気通信主任技術者 (伝送交換主任技術者)) \[2023-08-01\]](), [2回目 (電気通信の工事担任者 (総合通信)) \[2023-12-18\]]() と続いて今回で3回目となる。ここに記す電気工事士とはどのような資格であるか、電気技術者試験センターのサイトには次のように説明されている。
- [電気工事士の資格概要 \| 電気工事士 \| 一般財団法人 電気技術者試験センター](https://www.shiken.or.jp/construction/about/)
> 電気工事士は、電気工事士法という法律で定められている国家資格です。同法では、低圧で受電する一般家庭、商店等の屋内配線設備や小規模な太陽電池発電設備や高圧で受電する小規模なビル、工場などの電気設備の設置又は変更に係る電気工事の作業については、「電気工事士」の資格を有する者が従事することを義務づけています。
私は現在の職において、自分が電気工事に直接関わることは当面ないであろうと思っている。しかし、個人的には十代の頃から風力発電やら小水力発電に興味があり、今後の暮らしでいつかは、自由にできる小屋があるとして好きな場所にコンセントを増設したり、小規模の発電施設を自力で維持していけたら良いなぁ……という淡い夢は持ち続けてきた。いわゆる電気設備のDIYへの憧れがある故に、「第二種電気工事士」の資格を得たいと考えてきた。
#### 第二種電気工事士試験のこれまでの受験履歴
2012年↑に最初の思いつきで受験した後、これまでの受験履歴は次の通り。
|試験|受験料|科目と結果|
|---|--:|---|
|平成24年度下期 学科試験/筆記方式 (実施日: 2012-10-06)|忘却|【学科試験】 ❎不合格|
|令和6年度上期 学科試験/CBT方式 (実施日: 2024-05-09)|9,300円|【学科試験】 ❎不合格|
|令和6年度下期 学科試験/筆記方式 (実施日: 2024-10-27)|9,300円|【学科試験】 ❎不合格|
|令和7年度上期 学科試験/筆記方式 (実施日: 2025-05-25)|9,300円|【学科試験】 ❎不合格|
|令和7年度下期 学科試験/筆記方式 (実施日: 2025-10-26)|9,300円|【学科試験】 ✅合格した可能性がある|
令和6年度に意欲が復活したものの、忙しさを理由に学習を結局サボったりして、学科試験をクリアできない事態が続いた。そして、令和7年度下期の試験日翌日に公開された[解答](https://www.shiken.or.jp/construction/second/qa/)で自己採点を行った結果、5回目の受験でやっと合格ラインを超えた可能性があるとわかった。
#### 学科試験に関して、所感
自己採点によると、私の得点は合格点 (60点/100点) より2点多かった程度でギリギリ。相変わらずの学習不足ぶりを発揮した。マークシートへの記入ミスがあれば不合格かもしれない。しかし合格点に達している可能性が高いのなら、技能試験の試験日 (2025-12-13) までの日数は少ないので、正式な合否発表 (2025-11-10) を待たず見切り発車して技能試験の準備に入るしかない。
##### 追記 \[2025-11-11\]: 合格者受験番号検索
学科試験の正式な合否発表がされた。「合格者一覧にあります」って、そのまんま検索結果としての言葉遣いだ……。
##### 参考書
学科試験に向けて、私が用いていた参考書は次の通り。令和7年度下期の受験前には、初心に還る意味で 1) 基本知識を図解でざっくり入手してから、2) 試験対策の参考書を手に採るという流れで進めた。また、2の際には、この参考書を過去に数回は正順で途中までは読み進めていたはずだから、逆順で後ろの章から (10章→9章→…) 読んでいくという、明らかに足りていない知識を急ピッチで穴埋めするような作戦で臨んだ。
|目的|使用した参考書|
|---|---|
|1) 基本知識をざっくり入手||
|2) 試験対策||
#### 技能試験に向けて
第二種電気工事士試験の技能試験は、その場で40分間のうちに“工作物を作る”という、筆記やCBTではない内容であり、私の人生で初めて受験する類のもの。予め13種類の候補問題の内容が公表されていて、本番ではそのうちの1つの問題が出題される。持参するものは次の資料に書かれており、
- [第二種電気工事士試験 \| 電気工事士 \| 一般財団法人 電気技術者試験センター](https://www.shiken.or.jp/construction/second/#sec3) > 受験案内 > 令和7年度第二種電気工事士下期試験受験案内 > 持参するもの/使用できるもの
持参が必須の指定工具は次の6種類となっている。
1. ペンチ
2. ドライバー (プラス・マイナス)
3. 電工ナイフ
4. スケール
5. ウォーターポンププライヤー
6. リングスリーブ用圧着工具 (JIS C 9711:1982・1990・1997 適合品)
また、持参すべきだと巷で言われているものには、VVFストリッパーや手袋がある。
##### 調達した物
###### 練習セット
予め候補問題が公表されているのであるから、試験準備としては、事前に手を動かして全13問分の工作物を作る練習が可能だ。しかし我が家には電材もなにもない。練習セットを購入するにしても、なかなか値が張るなあと思案していたところ、費用を抑えられるレンタル版の練習セットがあることを知ったので発注した。
- [【楽天市場】【レンタル版】 電気工事士 2種 技能試験セット 令和7年度版 全13問分の器具・電線セット\(2回練習分\) 準備万端シリーズ「2種参考書・実技動画解説・オンラインセミナー動画・質問サービス付」【返却日:試験終了後1週間以内にご返送】\(発送料・返送料無料\):ジェイメディアネット楽天市場店](https://item.rakuten.co.jp/jmn-denki/ren-oa002/)
なお、上記のレンタル版の難点は一つは確実に存在していて、それは、試験終了後1週間以内に返送が必要という規約があるため、この練習セットは試験の1シーズンに限ったレンタル品だということ。技能試験に1発合格すれば無問題なのだが、不合格だった場合には、練習セットを次回の技能試験用として保管しておくことはできない。
###### 追記 \[2025-10-31\]: 練習セット届きました
###### 指定工具
日常にも使うであろう種類の工具については、お値段重視というよりも自分の好みと実用性を重視した選択としている。技能試験でのみ使いそうな工具は、お値段重視で選択している。
|品目|調達物|
|---|---|
|ペンチ||
|ドライバー (プラス・マイナス)||
|電工ナイフ||
|スケール|百均で探す予定|
|ウォーターポンププライヤー||
|リングスリーブ用圧着工具||
###### 追記 \[2025-11-01\]: 指定工具届きました
###### 試験用小道具
作業の時短につながると言われているものは、基本的には入手する方針とした。また、技能試験で用いる机の面積は思った以上に小さいらしいので、試験中の机上を整理整頓しておけるように腰袋を用意することにした。
|品目|調達物|
|---|---|
|ワイヤーストリッパー||
|マルチツール||
|ニッパー||
|腰袋||
|その他|手袋, マスキングテープ など|
###### 追記 \[2025-11-01\]: 試験用小道具届きました
###### 運搬用・保管用
すでに所持している工具ケースと同種のものを別途、第二種電気工事士の工具一式用にもう1個追加しておく。
|品目|調達物|
|---|---|
|工具ケース||
###### 追記 \[2025-11-01\]: 工具ケース届きました
##### いったんのまとめ
上記の工具と練習セットが手元に届いたら、とにかく、時間を作って手をたくさん動かして、候補問題をこなしていく心意気である。「一般用電気工作物等の電気工事に係る基本的な作業」に関して、自分はほぼ経験ゼロだから。
##### 追記 \[2025-12-13\]: 技能試験を受けたものの
出題は、配線の難易度は比較的低い方だと思われる、候補問題No.8からだった。ちょうど前日に予習した候補問題だったため、問題用紙を開く前に、表紙の具材のリストを眺めた段階で複線図はイメージ可能。
しかし実際に本番として作業をすると時間ギリギリで、しかも、試験時間40分の最後の最後に、自分がヘマをしていることに気づいた。差し込み式コネクタへ挿したコードの芯線が、コネクタからはみ出ていて丸見えである。しかし対処する時間はなく、そのまま終了……。これは不合格だぁ……。orz
#### おまけ写真: 試験会場
##### 学科試験の試験会場となった大学
- 令和6年度 (2024年度) 下期:
- 令和7年度 (2025年度) 上期:
- 令和7年度 (2025年度) 下期:
##### 技能試験の試験会場となった施設
- 令和7年度 (2025年度) 下期:
---
### ワイヤレスコール, ワイヤレスチャイムという名の、ボタンで人を呼び出すかんたん道具を試した - 2025-10-22
URL: https://remoteroom.jp/diary/2025-10-22/
#### 人を呼ぶ方法の問題
同じ部屋の離れたところ、または別の部屋から、今すぐ人を呼びたいという状況は、例えば介護の場面などで生じる。このような現場では、使い方に迷うような小難しいIT機器や、導入に事前設定が必要な仕組みが歓迎されることはない。買ってきたら即、誰もが簡単に扱える道具が最適解となるはず。
今回は、音と光を発して人を呼ぶことができる、携帯型の安価な呼び出しベルに触れる機会があったので、簡単な写真メモと使用感を残します。
|種別|商品名|購入価格(税込)|購入店, 購入日|備考|
|---|---|--:|---|---|
|ワイヤレスコール|[FABOMI ワイヤレスコール](https://fabomi.com/products/c03201wc)|2,680円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0CB1C985K?tag=remoteroom-22&linkCode=ogi&th=1), 2025-10-19||
#### 写真メモ
##### 使い方
動画を観ると一目瞭然。送信機のボタンを押すと電波が飛んで、即座に受信機は反応し、一定時間光って音を出す。ただそれだけ。音量は4段階で調節可能、音は38種類のメロディから選べるようになっている。受信機の光り方は1種類。室内なら気付けるであろう明るい光量で、LEDの発色が青→赤→緑とチカチカ変化する。
##### セット内容やラベル表示など
#### 軽く感想
##### 技適について
本製品は送信機と受信機のセット。ということはこれらは日本国内で電波を利用する機器であるから、いわゆる技適がどうなっているかの確認が使用前に必須となる。本製品には、送信機の方に工事設計認証番号「214-104757」が記されており、技適 (技術基準適合証明) 情報は次の通りだ。315MHzの電波を利用しているらしい。
- [総務省 電波利用ポータル \| 技術基準適合証明等を受けた機器の検索 > 工事設計認証番号: 214-104757](https://www.tele.soumu.go.jp/giteki/SearchServlet?pageID=jg01_01&PC=214&TC=N&PK=1&FN=191204N214&SN=%E8%AA%8D%E8%A8%BC&LN=38&R1=*****&R2=*****)
##### 個人的ポイント
- 開封したらすぐに使えるレベルの簡易さ
- 送信機にCR2032のボタン型電池が予めセットされていること
- 受信機はコンセント接続型であること (電池の寿命や交換を気にせずにいられる)
- 送信機と受信機の間が、壁越しで、10m〜20m程度でもまず間違いなく電波が届くこと
- 送信機が2個あると、一つはストラップで首から掛けておく日中の携帯用、もう一つはベッドのそばに常設しておく用、といった使い分けもできる
私としては、上記の3点を本製品のポイントとして挙げることができる。呼び出し時の音量や光の工夫も実利に沿って良いと思うし、以前記した [手元スピーカーとは? 「audio-technica AT-SP767XTV」を軽く体験 \[2025-08-07\]]() の時と同じく、このワイヤレスコールも有用なアクセシビリティ機器だなぁと思った次第。
---
### 【読んだ本】 図解 電気設備の基礎 オールカラー - 2025-10-06
URL: https://remoteroom.jp/medialog/2025-10-06_book-4816376593/
帯にある「電気関連資格の基礎学習に最適!」の言葉の通りで、私は、とある電気関連資格の学科試験にこれまで数回落ちているので、本書を買い求めた。試験対策に特化した書籍から得る知識だと、関連分野における全体的な“絵”がどうも思い浮かばないような気がしており、各知識の関係性やイメージが掴みやすいのは、本書のような図解がされている書籍だろうと考えたためだ。
さて、電気関連資格の基礎学習という目的に対して、本書はどうであったか。大きなオフィスビルから集合住宅レベルの小さな建物における、電気設備の全般を知る図鑑としてみると、本書はなかなか良いものに思える。短めの説明と図解に引き込まれやすく、丸暗記するのではなくて、興味を持って能動的に覚えようという気持ちになりうる。子ども時代に知識を吸収するきっかけになった、各分野の図鑑のようだ。ちなみに、狙っている資格試験にはたぶん全く関係ないのだが、漏洩同軸ケーブルというものの存在や、火災感知器が働いた時にどのような非常放送が流れるのか (作動した感知器が1台と2台以上の場合では放送内容が違う)、という知識も得られて、おもしろかった。
---
### 【観た映画】 プロセキューター - 2025-09-27
URL: https://remoteroom.jp/medialog/2025-09-27_movie/
- 視聴: [109シネマズHAT神戸](https://109cinemas.net/hatkobe/)
- 公式サイト: [映画『プロセキューター』オフィシャルサイト](https://prosecutor-movie.com/)
原題『誤判 (The Prosecutor)』。誤りは正す。FPS。身体アクションやばい。
本作を観終えた直後に私がメモに記したのが、上記の言葉。調べてみると、この場合は“FPS (First-person Shooter)”よりは、“POV (Point of View)”という用語のほうが正確だとわかった。Prosecutorとは検事のこと。自身の職務上の立場からは通常採ることがない方針の動きを、誤りを正すという大義と信念に従って主人公は進めていく。その様の描写の加減が、柔らかだったり激しかったり。そして、柔らかな描写は得てして激しさの引き金、という展開を有するのが、私が思う妙作の常である。観賞中はすっかり時間を忘れていた。
#### 何気ない一枚
---
### 【読んだ本】 旅行客を惹きつける観光改革 下呂温泉 価値創出プロジェクト - 2025-09-22
URL: https://remoteroom.jp/medialog/2025-09-22_book-b0czm345hk/
ちょうど所用で出かける先の、温泉地のプロジェクトについて書かれている。ということで、タイミング的な縁も感じて購入した。岐阜県の下呂温泉は、温泉 (♨) の管理方法にまず特色があると知った。各施設が各自で温泉を掘っているのではなく、地域で掘った源泉を集中管理して分湯しているという。温泉地としての根幹にこの共有という考え方が根付いているためかもしれないが、本書からは、下呂温泉では組織間の連携が強固であるような雰囲気が感じられた。
本書では、著者が関わる組織体が柱として進めている「官民連携」「マーケティング」「経営改善」における、様々な施策の具体例が紹介されている。デジタル的な手法で収集できるデータを徹底活用して現状分析を行い、月に一度の組織横断的な会議で共有し、問題点を改善して結果を出していく。私が「ほー!」と感銘を受けたのは、次の考え方だ。旅館が、宿泊客の減少や働き手不足などを理由に、「宿泊客の単価を上げてかつ客室の稼働率を下げて、施設としての収益を保つもしくは上向かせる」という経営方針をとった場合、飲食店などを回遊する観光客が減少することになり、結果的に地域としてはそれは良いことにはならない。また、旅館側からの「飲食店が伸び悩んでいるなら、宿泊プランの夕食を外食可能にして誘導しよう」という発案も登場する。なるほど、地域を一体化して捉えたこのような共存の発想に私はこれまで至らなかった。
下呂温泉で見かけたポスターに書かれていて気になった、“下呂市DMO委員会”なる組織が、如何なるものかを初めて把握できたし、実際に出かける地域で行われている施策について、実施者によって理念から解説されているという意味でも、いいタイミングで本書を咀嚼できたと思う。
#### 参考リンク
- [下呂未来創造プロジェクト \| 観光DX](https://kanko-dx.go.jp/case-study/93/)
- PDF: [成果報告書「地域主体による観光客の下呂市周遊促進と拡大戦略実証プロジェクト」 (下呂未来創造プロジェクトコンソーシアム, 2023年1月31日)](https://kanko-dx.go.jp/wp-content/uploads/2022/11/31810ba72f2fe52afa7d6c2de3c76801.pdf)
#### 参考写真
- 2025年9月訪問時の、写真22枚をまとめたアルバム: [Gero Onsen \(2025/09\) \| Flickr](https://www.flickr.com/photos/mah_japan/albums/72177720329208748/)
---
### ラズパイ x Proxmox VE (PVE, pimox, pxvirt) 環境でのUSBストレージ障害の対応メモ - 2025-09-14
URL: https://remoteroom.jp/diary/2025-09-14/
#### 効き目があるかもしれない策
ラズパイでProxmox VE (PVE, pimox, pxvirt) を運用し、かつ、USB接続のストレージをヘビーな負荷をかけて使用しているとする。ぶっちゃけこれは[私の環境 (後述)](#私の環境について) の話なのだが、このような環境でUSBストレージ障害が発生した場合に、効き目があるかもしれない再発防止策などをポイントとして列挙する。
##### Point-1. 電源供給を安定化する
- 消費電力の大きなUSBデバイスへの給電は、ラズパイからは行わない。可能な限り、USBハブ経由の接続としてUSBハブから給電する
- ラズパイ本体およびUSB周辺機器へ給電するACアダプターは、信頼性が高く、出力が十分あるものにする
##### Point-2. LXC/VMのイメージファイルのエラーチェックをする
障害発生時に、運用中のLXC/VMのイメージファイルが何らかのダメージを受けているかもしれない。イメージファイルをエラーチェックしておいても損はないだろう。私の環境では実際にエラーが発見できたので、修復まで行った。
###### LXCの場合
対象とするLXCは停止状態にしておく。
1. PVE上の、loopデバイスとLXCとの対応関係は「`losetup --all`」で確認できる
```
$ sudo losetup --all
/dev/loop1: [2050]:385029 (/var/lib/vz/images/102/vm-102-disk-0.raw)
/dev/loop2: [2050]:1527086 (/var/lib/vz/images/103/vm-103-disk-0.raw)
/dev/loop0: [2050]:384971 (/var/lib/vz/images/100/vm-100-disk-0.raw)
/dev/loop3: [2050]:1017910 (/var/lib/vz/images/109/vm-109-disk-1.raw)
```
2. rawファイルをエラーチェックする
```
$ sudo fsck.ext4 -f /var/lib/vz/images/102/vm-102-disk-0.raw
e2fsck 1.47.0 (5-Feb-2023)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/var/lib/vz/images/102/vm-102-disk-0.raw: 38921/262144 files (2.6% non-contiguous), 792826/1048576 blocks
```
###### VMの場合
対象とするVMは停止状態にしておく。
1. qcow2ファイルをエラーチェックする
```
$ sudo qemu-img check /var/lib/vz/images/108/vm-108-disk-0.qcow2
$ sudo qemu-img check /var/lib/vz/images/108/vm-108-disk-1.qcow2
```
2. qcow2ファイル内の各パーティションをエラーチェックする
```
$ sudo qemu-nbd --connect=/dev/nbd0 /var/lib/vz/images/108/vm-108-disk-0.qcow2
$ sudo fdisk -l /dev/nbd0 # パーティションの一覧が得られる
$ sudo fsck.ext4 -f /dev/nbd0p1 # エラーチェックしたいパーティションを指定
$ sudo qemu-nbd --disconnect /dev/nbd0
```
##### Point-3. PVEのSwapファイルを作り直す (効果は未確認のおまじない)
障害発生時に、比較的広大なSwapファイルが何らかのダメージを受けているかもしれない、という想像に基づく。
1. Swapの無効化・サービスを停止する
```
$ sudo dphys-swapfile swapoff
$ sudo systemctl stop dphys-swapfile
```
2. Swapファイルを削除する
```
$ sudo dphys-swapfile uninstall # /var/swapファイルが削除される
```
3. Swapファイルを作り直す・サービスを再開する
```
$ sudo dphys-swapfile setup # /var/swapファイルが生成される
$ sudo dphys-swapfile swapon
```
##### Point-4. USBストレージの転送モードを「usb-storage」に変更する
本変更は、USBデータ転送の高速性よりも安定性を重視したものとなる。
1. USBストレージ (Class=Mass Storage) が使用しているDriverが、デフォルト「uas」であることを確認する (この例では対象のUSBストレージは2つ)
```
$ lsusb -t -v
(省略)
|__ Port 1: Dev 4, If 0, Class=Mass Storage, Driver=uas, 5000M
ID 0781:55af SanDisk Corp.
(省略)
|__ Port 2: Dev 3, If 0, Class=Mass Storage, Driver=uas, 5000M
ID 0411:0397 BUFFALO INC. (formerly MelCo., Inc.)
```
2. `/boot/firmware/cmdline.txt`の各種設定 (1行) の最後に「`usb-storage.quirks=XXXX:XXXX:u`」を追加する。「XXXX:XXXX:u」のXXXX:XXXX部分は該当のUSBストレージのIDに置き換える。USBストレージが複数ならカンマ区切りで続けて書く
```
$ cat /boot/firmware/cmdline.txt
(省略) usb-storage.quirks=0411:0397:u,0781:55af:u
```
3. ラズパイを再起動する
4. USBストレージ (Class=Mass Storage) が使用しているDriverが、「usb-storage」に変更されたことを確認する
```
$ lsusb -t -v
(省略)
|__ Port 1: Dev 4, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
ID 0781:55af SanDisk Corp.
(省略)
|__ Port 2: Dev 3, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
ID 0411:0397 BUFFALO INC. (formerly MelCo., Inc.)
```
###### 転送モード変更の意図
USBストレージの転送モードの「uas」から「usb-storage」への変更は、規格的に言うと、「USB Attached SCSI」という新しいモードから古いモードへ戻していることを意味する。これにはデメリットもあって、下記の記事のようにおそらくデータ転送速度を低下させる変更となるが、
- [UASP makes Raspberry Pi 4 disk IO 50% faster \| Jeff Geerling](https://www.jeffgeerling.com/blog/2020/uasp-makes-raspberry-pi-4-disk-io-50-faster)
ラズパイでの「uas」においては、チップセットとの相性などの何らかの問題により、安定性がまだ完璧ではない可能性もありうると考えている。
- [\(SOLVED\) Rpi 4 large file transfer makes system hang \- Raspberry Pi Forums](https://forums.raspberrypi.com/viewtopic.php?t=324549)
- [Raspberry Pi 4 での USB Strage Driver](https://blog.1q77.com/2024/07/raspberry-pi4-usb-strage-driver/)
#### 私の環境について
##### 構成
本構成では、USBストレージを接続するためのSSD/HDDケースなどは介在しておらず、USBストレージ製品を直接接続の状態で用いている。
- Raspberry Pi 4 Model B (8GB)
- OS領域 (USB接続): Buffalo SSD-PST250U3BA/N
- データ領域 (USB接続): SanDisk SDSSDE81-4T00-GH25
###### ストレージ利用に関わる主なタスク
OS領域にはProxmox VE (PVE, pimox, pxvirt) を導入しており、Home AssistantのVMが1個、他のLXCが4個、常時動いている。データ領域には、クラウド上のDropbox (実使用量約1.0TB) とGoogle Drive (同約1.4TB) のデータを、週に4回深夜にバックアップしている。したがって、我が家のRaspberry Pi 4において、特にこのバックアップ実施中には、USBデータ転送を酷使しつつ相当な量のディスクI/Oが発生していると思われる。
##### 現象 / 障害対応の時系列
1. お値段は張るけれども、保証が付いている点と低消費電力を重視して購入したSanDisk 4TB USB接続SSDが届き、手元のラズパイと接続して、新自宅サーバとしての運用を開始。\[2025-04-23\]
2. サーバの稼働中に機能停止が多発した。何度目かの障害時に、ヘッドレス運用しているラズパイにモニターを接続して画面の表示内容を確認したところ次の通り。\[2025-04-25\]
-
3. なんとなく、USBデバイスの瞬断が起こっているのではないか?と推測し、電源供給方法を見直して、電力不足による電源の瞬断が起こりにくいであろう状態にした。\[2025-05-11\]
- 給電ポート付きUSBハブ: UGREEN 45321 (6-in-1 USBハブ LANアダプター)
- ACアダプター: Anker 521 Charger (Nano Pro)
4. それでも、時々、サーバが機能停止した。
5. 2025年7月頃から、[リモートKVM装置であるGL.iNet GL-RM1]()をラズパイに常時接続するようにしており、コンソール画面に表示される内容をネットワーク経由ですぐに確認できるようになった。
-
-
-
6. これまでに起こった障害の影響で、仮想マシン (LXC/VM) のイメージが論理的に壊れているかもしれない可能性を考えて、仮想マシンのイメージファイルのエラーチェックを行ったところ、データ不整合がいくつか発見できて実際に回復が行われた。\[2025-08-28\]
7. それでもまだ、サーバが機能停止する。
-
8. USBストレージドライバに関する次の記事を見つけ、ドライバを切り替える対応をやってみた。\[2025-09-02\]
- [Raspberry Pi 4 での USB Strage Driver](https://blog.1q77.com/2024/07/raspberry-pi4-usb-strage-driver/)
9. 上記対応から10日以上が経過。今のところ何も問題は起こっていない。\[2025-09-14\]
以上、さすがにここまでやれば問題を潰しきった手応えはある。我が家のラズパイ x Proxmox VE (PVE, pimox, pxvirt) 環境は、やっと安定してくれたのではないか?と希望的観測をしている。
---
### 【観た映画】 ALIVEHOON アライブフーン - 2025-09-07
URL: https://remoteroom.jp/medialog/2025-09-07_movie-b0bzm76dnj/
- 視聴: [YouTube](https://www.youtube.com/watch?v=jV_2Xf2WYfU)
2022年公開の作品。ちなみに、あらすじに類似性を感じさせる『[グランツーリスモ]()』は、2023年公開だ。本作はそれよりも公開が前ということになる。日本のドリフト競技の世界を舞台として、バーチャルで抜きん出た者がリアルでは一体どうなのか、果たして真の力を発揮できるのか?をテーマに、ストーリーが展開していく。
主人公はだいたいいつも俯き加減ではあるが、おそらくは、ピュアで非常に真面目な性格の持ち主だろう。主人公の仲間たちをはじめ他の登場人物も、最初から最後までとても分かりやすく描かれており、脚本において観客の裏をかくとか予期せぬどんでん返しが起こるとか、本作では全く考える必要がなく、逆に安心。なお、選択を伴う最後の落とし所だけ自分の予想とは違ったかな。兎にも角にも、ドリフト競技をしている車の動きが、存分に堪能できる作品であった。大きな切れ角を付けてカーブに侵入している姿勢って、前輪の片方が浮いた3輪走行状態なんだ……。また、公道でのドリフトで“溝落とし”しているシーンも確認できる。
#### 観賞リンク
---
### 【読んだ本】 夢をつなぐ 山崎直子の四〇八八日 - 2025-09-03
URL: https://remoteroom.jp/medialog/2025-09-03_book-4048850679/
スペースシャトルが引退する前の2010年に、国際宇宙ステーションISSでの滞在を果たした宇宙飛行士である著者の、半生を記している。宇宙飛行士を目指す過程、そしてその中の各種資格を得るための訓練内容を知ることができ、やはり難関なのだなあと思いつつ、しかしやれば出来ることを実証している記録として、興味深くおもしろく読んだ。
また、本書の内容からはどちらかというと、研究者としての学術的な側面よりも、生活を共にする家族がいる勤務者としての側面を、私はより強く感じた。地上での日常から宇宙に飛び出す、一般的ではない業務内容に従事するとしても、その際に抱く様々な心情は普遍的ということが理解できた。
---
### 【読んだ本】 写真批評 - 2025-08-27
URL: https://remoteroom.jp/medialog/2025-08-27_book-4804800794/
1978年初版発行。昭和の時代の写真雑誌へ、アマチュアから投稿されてくる応募写真に対して、写真家「土門 拳」が行っていた批評をまとめた一冊だ。期間的には1950年から1963年までで、批評されている写真および批評文の数は、100を優に超えていそうな量である。
その批評の一つ一つが、個々の写真家を思っての、境遇に関する想像を働かせて、経験を積み重ねたゆえの洞察を含めた、時に厳しい、親身なアドバイスとなっていることに驚愕した。私の本書の感想としてはこれに尽きる。写真を視てこんなにまで語ることができる、プロとしての専門性、他者の成長を願って促す教育者としての意地をみた。
当時は、写真を撮るという行為自体の重みが、現代の一般的なケースとは異なっていたのだということを、批評の中で痛感する。フィルムの銘柄を選び、レンズを選び、場所と時間を選び、アングルを模索し、絞りとシャッタースピードを決めて、見切った瞬間をフィルムに記録する。その次には、自らの手で現像をしなければならず、現像工程のテクニックやさじ加減までもが写真の表現を左右する。そして心の根底で、写真のテーマをどう据えるのかを考え続けておくことが、秀でた写真には必要だ。本書の内容は写真の批評なのだが、読み手としては、本書での多角的な分析手法というか迫力 (迫る力) が強い故に、写真以外の他の分野に応用できないかなとも自然と考える。
山形県酒田市に『土門拳写真美術館』があると知った。覚えておいていつか行ってみよう。
#### 参考リンク
- [ホーム \| 山形県酒田市 土門拳写真美術館](http://www.domonken-kinenkan.jp/)
- [土門拳 \- Wikipedia](https://ja.wikipedia.org/wiki/%E5%9C%9F%E9%96%80%E6%8B%B3)
---
### 【観た映画】 ジェイソン・ボーン - 2025-08-25
URL: https://remoteroom.jp/medialog/2025-08-25_movie-b01mxxcroq/
- 視聴: さんふらわあ客室
原題『Jason Bourne』。何作か続いているアクション映画のシリーズであり、最初のいくつかは観たはず。たしか作風は私の好みに合ってたよなあ……、という曖昧な記憶を持ちながら、陸地から離れて手持ちのガジェットがインターネット接続できなくなった船内での、VODの映画リストから本作を選択して視聴した。
スパイ気質のやはりクールな主人公。都市部での、どうやって撮影したんだよ?という激しいシーンも多く、カメラの動きが大胆な画作りや物体を渋く描写している様を楽しむ、という点においては平均を余裕で超えた出来で熱い。しかしストーリーに関してはその根幹が、あまり冴えている感じがしなかった。いわば物語を続かせるためとも勘ぐってしまう、中間的な、一定の周期で揺れる振り子がまた元の位置に戻ってきた、そんな曇った表現でまとめたくなる映画。撮影についてはおかしいぐらいすごいと思う。
#### 観賞リンク
---
### 【観た映画】 アポロ13 (吹替版) - 2025-08-15
URL: https://remoteroom.jp/medialog/2025-08-15_movie-b00g9sjzjy/
- 視聴: [YouTube](https://www.youtube.com/watch?v=r5itMOwtgss)
原題『Apollo 13』。1970年に打ち上げられたアポロ13号の、飛行中の大事故を題材とした1995年公開の作品。とても有名な映画であるが、最初から最後まで通しで観た記憶は無かったこともあり、今回しっかりと観ることにした。
サターンV型ロケットを打ち上げ機とするアポロ13号は、司令船・機械船と月着陸船が合体した構造をしており、3名の宇宙飛行士を乗せている。月へ向かう途中に機械船で爆発が発生して船は損傷し、計画を予定通りに進めることは不可能となる。宇宙飛行士は降り立つはずだった灰色の月面の上空を通過しながら見過ごすしかできない、このシーンの無念さが私に最も響いた。そもそも、青い地球に帰還できるかもわからない。非常に厳しい状況下であるが、生命維持と軌道制御を絶対に両立させなければならない。
本作が描いたテーマは、この窮地を脱して3名が生還するために、宇宙飛行士とバックアップクルーと地上スタッフが知恵と体力を使ってどれほど懸命に動いたか、家族がどれほど帰還を願ったか、というところだろう。内容 (の大部分) がフィクションではないという重さと、宇宙船内の閉塞感も伴うリアルさが、このテーマを支える礎になっている。
#### 参考リンク
- [アポロ13号 \- Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%9D%E3%83%AD13%E5%8F%B7)
- 損傷した13号の機械船などの写真もある
#### 観賞リンク
---
### 【観た映画】 アバウト・タイム 〜愛おしい時間について〜 (日本語吹替版) - 2025-08-14
URL: https://remoteroom.jp/medialog/2025-08-14_movie-b00vqvxfmm/
- 視聴: [YouTube](https://www.youtube.com/watch?v=cyOfdjaPW8c)
原題『About Time』。本作はどこかでSFに分類されていて、それで目に留まったことがきっかけで観賞。一言で言うと……、やられたなぁ。今こんなに遅い時間でなければ (ただいま午前4時)、すぐもう一度再生して堪能している作品だ。人間を時空の旅人として捉え、その能力をファンタジーに仕立てて描いているストーリーなのであるが、何気ない日常生活も時空を旅していることは同じではなかろうか、とやさしく示される。あなたはどんな旅をしたいですか?と問いかけられている気がする。そしてこれは蛇足なのだが、映画としての各シーンの画もうまい。
#### 観賞リンク
---
### 手元スピーカーとは? 「audio-technica AT-SP767XTV」を軽く体験 - 2025-08-07
URL: https://remoteroom.jp/diary/2025-08-07/
#### リビング空間での音問題
親族の家のリビングにあるテレビの音声を、聴きたい人が聞きやすくするために、「手元スピーカー」を設置することになり、私はその物品の購入と軽めの動作確認を行った。アクセシビリティを高める類いの音響機器を触る機会は自分としては多くなく、写真メモと、軽い感想を残します。
|種別|商品名|購入価格(税込)|購入店, 購入日|備考|
|---|---|--:|---|---|
|手元スピーカー|[audio-technica AT-SP767XTV WH](https://www.audio-technica.co.jp/contents/AT-SP767XTV/)|11,090円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B07SDFNLKR?tag=remoteroom-22&linkCode=ogi&th=1), 2025-08-03|Amazonアウトレット|
|追加ACアダプター|[audio-technica AD-SA0610AA](https://www.audio-technica.co.jp/product/AT-SP767XTV)|1,622円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B07SDDR6TV?tag=remoteroom-22&linkCode=ogi&th=1), 2025-08-03|Amazonアウトレット / 本体に付属の1個と同型|
#### 写真メモ
#### 軽く感想
##### 選択した理由
「手元スピーカー」は何種類も発売されていて、決め手が分からない。ならば実際に製品を見てみようと家電量販店に行くと、ありがたいことに専用のデモコーナーが設けられていた。そこでは放送波をリアルタイム受信中のテレビに数種類の手元スピーカーが接続された環境があり、手元スピーカーの使用感を実際に試すことができた。間違いなく世間的にも需要は多いのであろう。
その場にあった機種の中で、各種操作が最も簡単そうで、かつ音が破綻なく聞きやすかったのが、本機 [audio-technica AT-SP767XTV](https://www.audio-technica.co.jp/contents/AT-SP767XTV/) であった。2019年6月発売ということはなかなかの長寿機種。今回は新古品でかまわないのでAmazonアウトレットで購入することに。
##### 個人的ポイント
- 接続は、手元スピーカーに同梱されている角形光ケーブルの両端を、テレビ側の光デジタル出力端子と充電台の入力端子に挿せばよい。次に、テレビ側にある音声出力設定を変更して、テレビ本体の音声出力と光デジタル出力の両方が同時に有効化されるように設定する。
- 手元スピーカーの本体を充電台に置けば、自動的に充電がされる。しかし今回の利用環境では、「未使用時に本体を充電台に戻す動作」自体が、面倒がられてやられないかもしれない恐れがあると事前に分かっており、対応策として、手元スピーカー利用時の置き場所でも充電ができるように専用ACアダプターを1個追加で購入している。
- 「はっきり音」スイッチは、当初、単純にラジカセのTREBLEつまみでの高音調整と同様のものと思っていたが、実際には人間の声 (の帯域) を重点的に明瞭化するようだ。効果的な機能だと思った。
動作確認がてら、手元スピーカーを初めて使ってみて分かったのは、リビングといった共同生活空間における音のストレス軽減を使命として工夫がなされている、有用なアクセシビリティ機器だということ。今回の親族の家でも使い勝手は好評らしいのでホッとしている。
#### 追記: 新型情報 \[2025-08-11\]
audio-technicaから、MIMIOというブランド名を冠した新型の手元スピーカー「ATMM-SP780TV」が登場している (2025年8月8日発売)。実売価格にもよるが、こちらもきっと良い感じだろうと期待でき、選択肢のひとつになり得るだろうと思う。
- [MIMIO SOUND MOVE|テレビの音声がはっきり聴こえる手元スピーカー|audio\-technica MIMIO](https://www.audio-technica-mimio.com/product/MIMIO-SOUND-MOVE)
---
### 【読んだ本】 老人ホテル (光文社文庫) - 2025-08-06
URL: https://remoteroom.jp/medialog/2025-08-06_book-b0f323p8xf/
どういうホテルなんだろう?と、題名に惹かれて選択した。この作者の小説は今回で2冊目。[1冊目]()でも思ったのだが、本作も、人々の日常生活の表層を丹念に描きながら、お金を切り口に、人の心理を鋭く裂いてえぐってくる要素が骨組みにある。それは急に来るし、露骨さになかなかのホラー感がある。
投資、特に不動産投資の定石のノウハウが、ストーリーの中で饒舌に披露される場面があるのがおもしろい。このような展開は、お金絡みのストーリーの場合の作者お決まりのパターンなのかも。そうして主人公は周りの人々からの助力を得た結果、目標を叶えていくのかもしれない……、そう匂わせての結末かぁ。と思ったら続いて【特別収録スピンオフ短編】が収録されており、突然の味変に驚く (物理本と違ってKindleで読むと、ページ数にまだ残りがあるかどうかを感覚的に意識しないし)。この味変の度合いの中に、主人公の人間性の変容と不変の部分も描かれているのだと思う。
---
### 【観た映画】 ビーキーパー - 2025-07-30
URL: https://remoteroom.jp/medialog/2025-07-30_movie-b0dvbb2spq/
- 視聴: [YouTube](https://www.youtube.com/watch?v=dgL1sMdHFnE)
原題『The Beekeeper』。一本観たい夜だなと思って、特に前情報なしに選択。冒頭、ハニカムを重ねていく映像いい感じだなと引き込まれる。ショータイム化されたオンライン詐欺の場面から、本作の激しい展開が始まる。「IBM PC」 (1981年発表) のグリーンディスプレイが登場した時点で、おやおや?これは凝り方が普通じゃないな?と私は感じ始めた。R35 GT-Rをちょっと走らせたりもする。本作は、生々しい、かつスタイリッシュな画作りで濃く攻めていこうとする点は特筆すべきかもしれない。辻褄が合う合わないはさておき。
#### 観賞リンク
---
### 【読んだ本】 水を石油に変える人 山本五十六、不覚の一瞬 - 2025-07-26
URL: https://remoteroom.jp/medialog/2025-07-26_book-4163906754/
第二次世界大戦の前の、日本国の燃料事情、石油資源と精製技術、航空燃料のオクタン価によるエンジン出力の違いなどについて、知らなかったことばかりだったので、当時の工学的な史実の記録として本書をまずはおもしろく読んだ。その流れに乗って読者の意識はスムースに、「藁から真綿」、「海水からアルコール」、神託による「富士山麓油田」と続く、資源の確保を切望するあまり、“魔法”に頼ることになる戦時の流れへ没入させられる。
そして本丸の、タイトルにある「水からガソリン」が登場する。水に何らかの物を混ぜる実験が目の前でなされて、主張の通りに水からガソリンができると示されたら、軍関係者であっても、納得させられてしまうものなのだろうか。それは何故なのか。←詐欺に関する色々な話題に触れて私が最も興味惹かれる部分はおおよそいつも、人がハックされているこの点だ。
戦力の大きさは、物量で、具体的には使用可能な石油の量で決まる時代だと分かっていたという。だからこそ、不確実性 (リスク) の高い魔法であってもそこにすがった、日本国のいわば終わりの始まりの雰囲気を、私は本書からも得ることができた。
#### 参考リンク
- [「水からガソリン」海軍を惑わしたトンデモ科学 : 読売新聞](https://www.yomiuri.co.jp/fukayomi/20170814-OYT8T50132/) \[2017-08-15\]
- 大阪府泉大津市:
- [「合成燃料生成・活用」の実証実験を助松公園でスタート!/泉大津市](https://www.city.izumiotsu.lg.jp/kakuka/koushitsu/senryaku/oshirase/14604.html) \[2025-07-24\]
-
---
### リモートKVMをお手軽に実現する「GL.iNet Comet (GL-RM1)」を試した - 2025-07-20
URL: https://remoteroom.jp/diary/2025-07-20/
#### お安いなぁ
必然性は抜きに、「ちょっと試したい」という気持ちと、抗いがたい物欲に駆動されてポチった、ガジェットについてのメモ。今回購入したものは [GL.iNet Comet (GL-RM1)](https://www.gl-inet.com/products/gl-rm1/) というカードケースサイズの機器だ。筐体はアルミ製で、USB関係とEthernet端子とHDMI入力端子が備わり、「Remote KVM over Internet」と銘打っている。
これまでに私は、リモートKVMをラズパイを使って自作してみる系の[PiKVM](https://github.com/pikvm/pikvm)の記事を2つ残してきている。その内容を思い出しつつ、Remote KVMの専用機としてGL-RM1の出来はどうなのか、調べてみたい。
- [リモートKVMをラズパイで実現する「PiKVM」を試した \[2021-12-19\]]()
- [「PiKVM」にLTE対応USBドングルを挿して“モバイルできるリモートKVM”を作る \[2024-03-23\]]()
|種別|商品名|購入価格|購入店|購入日|
|---|---|--:|---|---|
|リモートKVM装置|[GL.iNet Comet (GL-RM1)](https://www.gl-inet.com/products/gl-rm1/)|USD 79.00|[GL.iNet APAC](https://store.gl-inet.com/ja/products/comet-gl-rm1-remote-keyboard-video-mouse)|2025-04-19|
#### 公式情報源
##### マニュアル, セットアップ
内容の充実したオンラインマニュアル類を参照できる。ざっと眺めておけば、何ができるかのか網羅できて安心だ。
- [Overview \- GL\.iNet KVM Docs](https://docs.gl-inet.com/kvm/en/user_guide/)
- [GL\-RM1 \(Comet\) \- GL\.iNet KVM Docs](https://docs.gl-inet.com/kvm/en/user_guide/gl-rm1/)
- [Overview \- GL\.iNet KVM Docs](https://docs.gl-inet.com/kvm/en/tutorials/)
- [How to set a static IP for Comet \- GL\.iNet KVM Docs](https://docs.gl-inet.com/kvm/en/tutorials/how_to_set_static_ip_for_comet/)
##### 専用アプリ
リモートKVMの操作を行う側のアプリは、Windows版とmacOS版が用意されている。なお、リモートKVMの画面はウェブブラウザで操作できるので、専用アプリは必ず必要というわけではない。
- [GLKVM App \- GL\.iNet](https://www.gl-inet.com/app-rm/)
##### ユーザフォーラム
ユーザフォーラムの動きも活発のようだ。開発中のファームウェアの情報もあったりする。
- [Latest KVM topics \- GL\.iNet](https://forum.gl-inet.com/c/rm1-comet/)
#### 使用感・気づいたこと
- ファームウェアは、購入時の V1.0.0 release2 から V1.2.1 release1 → V1.3.1 release2 \[2025-07-18時点\] と段階的にアップデートされた。
- リモートKVMの画面のUIは初見でも使いやすい。言語はEnglishと中文の2つから選択する。機能面では、PiKVMにもあったVirtual Media機能が使えそうだし、[HDMIのEDID書き換え](https://docs.gl-inet.com/kvm/en/faq/how_to_set_edid_for_glkvm/)も可能になっている。マウスを微妙に動かし続ける「Mouse Jiggle」という機能もある。
- 統合されているTailscaleも実にあっさり使えて、ユーザの現場にフィットする便利な製品に仕立てようという意欲を感じさせる。
- 専用アプリとCloud Serviceは、私は今のところ必要性を感じないため試していない。
- リモートKVMの画面の詳細については、[公式ドキュメント > Control Panel Introduction](https://docs.gl-inet.com/kvm/en/user_guide/gl-rm1/#control-panel-introduction)が全てだと思うので、ここは画面キャプチャを貼るだけにする。
- 横画面にしたスマホと接続した状態:
- ものは試しにと、Nintendo Switchと接続した状態:
#### 個人的に注目した点
個人的に注目した点を、多少詳し目に書いてみる。
##### Point-1. SSHログインしてシェルが使える
ポートスキャンして22/tcpが開いていることに気づいた。ということは?
```
$ nmap 192.168.1.190
Starting Nmap 7.80 ( https://nmap.org ) at 2025-07-17 23:21 JST
Nmap scan report for glkvm.local (192.168.1.190)
Host is up (0.0045s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds
```
GL-RM1には`ssh -l root IPアドレス`でSSHログインが可能である。利用可能なシェルは、BusyBox環境が提供するシングルユーザ状態のものだと思われる。
```
$ ssh -l root 192.168.1.190
root@192.168.1.190's password:
[root@glkvm:~]# uname -a
Linux glkvm 4.19.111 #1 SMP PREEMPT Thu Jul 3 06:32:31 UTC 2025 armv7l GNU/Linux
[root@glkvm:~]# cat /etc/os-release
NAME=Buildroot
VERSION=2018.02-rc3-gf1944547
ID=buildroot
VERSION_ID=2018.02-rc3
PRETTY_NAME="Buildroot 2018.02-rc3"
[root@glkvm:~]# free -h
total used free shared buff/cache available
Mem: 733M 105M 454M 3.3M 173M 610M
Swap: 0B 0B 0B
[root@glkvm:~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/root squashfs 181M 181M 0 100% /rom
devtmpfs devtmpfs 367M 0 367M 0% /dev
tmpfs tmpfs 367M 96K 367M 1% /dev/shm
tmpfs tmpfs 367M 2.0M 365M 1% /tmp
tmpfs tmpfs 367M 272K 367M 1% /run
/dev/mmcblk0p7 ext4 188M 4.7M 176M 3% /oem
/dev/mmcblk0p8 ext2 1008M 1.5M 956M 1% /userdata
overlay:/overlay overlay 1008M 1.5M 956M 1% /
/dev/mmcblk0p10 exfat 5.8G 96K 5.8G 1% /userdata/media
[root@glkvm:~]# python -V
Python 3.12.5
```
##### Point-2. リセットボタンでOSを初期状態に戻せる
[User Guide](https://docs.gl-inet.com/kvm/en/user_guide/gl-rm1/#button)に記載のリセットボタン操作`Reset (With device powered on, press and hold the button for 8-20s then release)`を実施すると、機器のOSを初期状態に戻せるようだ。具体的には次のような動作をすることが確認できた。
- SSHのHost Keyが変更される
- Admin Passwordが初期化される (ウェブUIへの初回アクセス時にパスワード設定画面になる)
- Firmwareのバージョンは維持されている
- Tailscaleの認証情報がクリアされる
- Reset実行前にテストで作成しておいた`/etc/test_hogehoge.tmp`は存在しない状態になる
つまりこれは、仮にいろいろ遊んでGL-RM1の環境を壊してしまったとしても (リカバリー領域の破壊は除く)、容易に初期状態に戻せるであろうことを意味する。
##### Point-3. USB-Cケーブル1本でのスマホ/PCの遠隔操作も可 (別機器を併用)
GL-RM1への映像入力はHDMI端子であるが、変換することでUSB-Cの映像出力を入力することもできる。その一例を、ある機器を併用してやってみた。
ある機器とは、Nintendo Switchと組み合わせての利用が第一に想定されていそうなACアダプター型の機器で、SwitchへUSB-Cケーブル1本で給電でき、USB Type-CのAlternate Modeを利用することで「Switchの映像出力がACアダプター側のHDMI端子からなされる」という機能と、USBハブ機能が備わったもの。なかなかに変態的な機器だったし安かったので、店頭で見つけて思わず買ってしまった。単に高出力なUSB充電器としても役立つだろうと踏んで。
|種別|商品名|購入価格|購入店|購入日|
|---|---|--:|---|---|
|マルチドックチャージャー|[HIDISC HD-PDHDMI44BK](https://www.mag-labo.com/?p=21168)|1,280円|[じゃんぱら 店頭](https://www.janpara.co.jp/sale/search/detail/?ITMCODE=336604&KEYWORDS=HD-PDHDMI44BK&CHKOUTCOM=1)|2025-07-13|
GL-RM1と、USB-Cによる外部ディスプレイ出力可能なスマホ (例: Google Pixel 9シリーズ) とを、上記の「マルチドックチャージャー」を用いて接続する、配線図は次のようになる。
```mermaid
flowchart TD;
subgraph 遠隔地
A[Google Pixel 9等のスマホ/PC] <-->|USB-C 給電,映像+音声,キーボード+マウス| B[マルチドックチャージャー]
B -->|HDMI 映像+音声| C[GL-RM1]
C -->|USB-A キーボード+マウス| B
D[USB充電器] -->|USB-C 給電| C
C ---|Ethernetケーブル| E(LAN)
end
subgraph 操作者の現在地
E -..-|インターネット| F[スマホを操作する手元PC]
end
```
当方の環境では、リモートKVMの設定にあるMouse Modeを「`Absolute`」から「`Relative`」へ切り替えることで、手元PCからスマホを違和感なく操作することができた。スマホ本体の再生音も遠隔モニターできる (たとえば、スマホ上のYouTubeを遠隔視聴できる)。このような実験を自室の中に閉じる形でやっていてもあまり面白みはないが、遠隔地同士でも同様に操作可能なのは大きな利点で、有用な場面が必ずあるだろう。
#### おわりに
リモートKVM装置を1台用意しておきたいという場合に、この [GL.iNet Comet (GL-RM1)](https://www.gl-inet.com/products/gl-rm1/) は、私の把握の範囲では最適解に思える。第一に、すぐに使える専用機でかつリカバリー可能というのは頼もしい。そして比較的安値。また、なぜかSSHログイン出来てしまうところ、ファンレスで小型であるところも大きな加点になる。ATXマザーボードのPowerボタンも操作したければ、別売りで[ATX Board](https://store.gl-inet.com/ja/products/atx-board)も用意されている。
---
### 【読んだ本】 晩秋行 (双葉文庫) - 2025-07-13
URL: https://remoteroom.jp/medialog/2025-07-13_book-b0f99gpkcp/
本屋の平台の上に積まれた文庫本の、表紙に赤いクラシックカーが描かれていて、思わず手が伸びたことがきっかけ。Kindle版で読了。日本でのバブルが弾けた後、離れる理由を相手に告げずにそのまま別れた男女同士と、関係者らが、30年後に再び交錯する。クラシックカーには円換算で10桁の値がつく想定となっており、故にカネ絡みの渦中に置かれる。
夜の街における美学の一例だったり、仁義やカタギといった世界観にしばし浸ってみるかとひとえに思ったときに、読んだらば、程よくスカッとする小説であろう。だがしかし私は、至高の物語という印象をもつまでには至らなかった。それはなぜだろう……。仮にこの小説に登場するクラシックカーが、より存在感の小さい脇役だとしたらどうなる? それでも成立するような展開を読みたい気もする。
#### 参考リンク
余談だが、私は映画『フェリスはある朝突然に』が大好きで、DVDも持っている。本作に登場するFerrari 250 GT Californiaは、レプリカだそうだ (そりゃそうだ)。
---
### ビリヤード: JCLリーグ (2025-hyogo-himawari-9) に参加して試合に10回出てみた記録 - 2025-07-12
URL: https://remoteroom.jp/diary/2025-07-12/
#### JCLリーグ戦参加2回目
最近の可処分時間を割と費やしているビリヤードに関して。またリーグ戦に参加したきっかけは、第一には単純に、前回も楽しかったから次もやりたかったということ。第二には、やはり練習すると少しずつでも腕が上がるようなので続けてみよう、という気持ちになったからである。JPA,JCLのリーグ戦のこれまでの参加記録は次の通り。
- [ビリヤード: JPAリーグ (2024年秋シーズン) に初参加して試合に10回出てみた記録 \[2024-12-28\]]()
- [ビリヤード: JCLリーグ (2025-hyogo-sakura-9) に初参加して試合に7回出てみた記録 \[2025-04-02\]]()
#### 参加した試合
##### 記録
JCL 2025 シーズンHIMAWARI (2025-hyogo-himawari-9) での、私が出場した試合の記録は次のとおり (計10試合)。Week No.1〜13はリーグ戦で、No.14はプレーオフとしての試合である。
|Week No.|日付|FargoRate / Robustness|内容|感想|
|--:|:-:|--:|---|---|
|1|2025-04-16 (水)|332 / 34|Win||
|2|2025-04-23 (水)|335 / 40|Win||
|4|2025-05-07 (水)|345 / 44|Lose|FargoRateがほぼ同程度同士の試合。重要な局面でお茶目なミスを連続すると負けることを証明した。|
|5|2025-05-14 (水)|341 / 48|Win|最初に多少の余裕を作ることができてそのままゴール。どんな試合でも心臓の鼓動が高まる緊張をするけれども、その緊張を焦らない程度に安定させると、私は調子が崩れず良い感じにいける気がする。|
|6|2025-05-21 (水)|348 / 52|Lose|自分の出だしも悪く、著しい大差で終わった。相手は慎重でこちらに回ってくるターンが少なく、ミスは徹底的に止めなければならないのだが、自分が脆かった。|
|7|2025-05-28 (水)|347 / 56|Win|FargoRateがほぼ同程度同士の試合。少しリードできると気が楽になるようで、調子が大きく崩れることはなかった。|
|9|2025-06-11 (水)|356 / 61|Win|反省点としては、的玉にほとんど直線的に手玉を当てる球筋が欲しいときに、的玉が過剰な角度で動くことが多いこと。「ほとんどまっすぐ」が常に上手く打てるようにしたい。|
|10|2025-06-18 (水)|362 / 66|Lose|試合後に自分のやったミスを明確に3つは思い出せる。反省点としては、事後に教えてもらったのだが、左手で組むブリッジが堅牢ではなさそうなこと、手玉とキューやブリッジが比較的近過ぎで、それではキューをまっすぐ運動させることが難しいのではないかということ。これらを次の練習課題にしてがんばる。|
|11|2025-06-25 (水)|363 / 70|Win|ミスも繰り返したがその傷が大きく広がる前に和了った感じ。自分の弱さは、「点数がリードできるまではショットがなかなか不安定」「持ち時間がなくなったあとの40秒タイマーでのショットは焦りすぎ」といった部分で顕著に現れる。|
|12|2025-07-02 (水)|374 / 75|Lose|もう少しミスを少なく出来たら勝てたかも、と思える状態。チームからは「いよいよ9ボールを狙う、という局面でタイムを取ると落ち着けるのでは」的なアドバイスもあったので、ぜひ次から意識したい。|
##### 総括
まずは自分の結果を示すと次の通りである。リーグ戦の中でのゲーム単位での勝率が、リーグ統計 ([FargoRate Player](https://play.google.com/store/apps/details?id=com.fargorate.player&hl=ja)アプリ内で確認可能) に指標のひとつとして含まれることをごく最近知ったのだが、この指標においてギリギリだが50%を超えた状態で終えられたのは嬉しかった。なぜならば、私の考え違いでなければ、1つ1つのゲームは、その枠内においてはFargoRateはほぼ関係しないはずで、いわばハンデのない力試しであるから。
||試合単位での Win : Lose|ゲーム単位での勝率|
|---|---:|---:|
|JCL 2025 シーズンHIMAWARI 私個人の最終成績|6 : 4|23/45 → 約51%|
なお、所属チーム「Side Seven」としてはどうだったかというと、JCL 2025 シーズンHIMAWARIの9ボールの兵庫ディビジョンにおいて、リーグ戦では3位となってプレーオフ (優勝決定戦) には参加できず。惜しかったぁ!
- リーグ詳細データ:
- [FargoRate \- League Management System > Japan CSI Pool League > 2025-hyogo-himawari-9](https://lms.fargorate.com/PublicReport/LeagueReports?leagueId=585944ff-c43a-4d71-80b0-afcd004220c5&divisionId=1a7de1ec-96f8-4201-b6f9-b2bb00f527e7)
#### 参考情報
##### 参考リンク
- [Japan CSI Pool League](https://csi-pool.jp/)
##### 練習時間とメモ
JCL 2025 シーズンHIMAWARIへの参加が決まった2025年4月途中から、当該リーグを終えるまでの間の、私の練習時間を記録する (試合実施時の時間を除く)。
|日付|練習場所 (基本は兵庫県神戸市内)|分 \[5分単位に切捨\]|メモ|
|---|---|--:|---|
|2025-04-12 (火)|灘区某所|180|的玉を狙う際のちょっと新しい方法を研究中。|
|2025-04-15 (火)|灘区某所|235||
|2025-04-18 (金)|灘区某所|130|的玉の一点を押し出すべき、手玉の赤道上の一点が、手玉を透明な物体だと思い込むことで、透けている手玉の向こうに見えるようになろうと苦心している。|
|2025-04-19 (土)|灘区某所|100|迷走。|
|2025-04-22 (火)|灘区某所|45+215|前回の練習時の問題点はブリッジの不安定さにある気がして、特にブリッジを頑丈にしようと心がけた。|
|2025-04-27 (日)|灘区某所|150||
|2025-04-30 (水)|灘区某所|45||
|2025-05-06 (火)|灘区某所|310||
|2025-05-13 (火)|灘区某所|195|何かが掴めるまで粘って練習した。|
|2025-05-17 (土)|灘区某所|175|悪い癖の克服と、これまでよりも積極的に回転を使うことを意識した。|
|2025-05-19 (月)|灘区某所|115|ファールしがちなパターンを克服するための練習をしてみたり。|
|2025-05-20 (火)|灘区某所|115|集中的な練習を心がけるもやっぱり2時間ぐらいはやってしまう。自分のショットでの精度が高い角度と低い角度を意識したり。|
|2025-05-21 (水)|灘区某所|115|できるだけキューを低く。狙いを付けるときの顔が斜めにならないように。|
|2025-05-27 (火)|灘区某所|30|練習の間が空いてしまったので、自分の弱点をまず思い出しつつ、肩ならし。|
|2025-05-27 (火)|東灘区某所|170||
|2025-05-30 (金)|東灘区某所|170||
|2025-05-31 (土)|西宮市某所|50|ここの台は照明が明るく、離れた的玉にも狙いを付けやすい気がした。|
|2025-06-07 (土)|灘区某所|150|ショットの姿勢を更生しようとする。首は傾けずに垂直がよいようだ。|
|2025-06-09 (月)|東灘区某所|170|手玉の行き先のコントロールが、なんとなく上手くできているような気がする。|
|2025-06-10 (火)|灘区某所|110|落ち着いていたら入る、という精度までとりあえず達したい。とりあえず落ち着け私。あと、的球を立体として意識して観る (上半身をわざと上下させる) となんとなく感覚が掴みやすい気もした。|
|2025-06-15 (日)|灘区某所|120|撞く時の間合い (ちゃーしゅーめん) が出来ていない。|
|2025-06-17 (火)|東灘区某所|175|撞く時の間合いに注意を払いつつも、まだ時々それが抜ける。スクラッチは減らせるようになってきた気がする。|
|2025-06-20 (金)|東灘区某所|120|台の都合で、一人練習ではなく他の方と模擬試合を行った (懐かしのJPAルールで)。試合中に必ず繰り出さねばならなくなる、ほとんど真っ直ぐなショット、土手際から打つショット、といった苦手なところを克服できず。|
|2025-06-22 (日)|灘区某所|175|ひたすら問題点を探す練習1。ブリッジを堅牢に組むことを意識した。|
|2025-06-24 (火)|東灘区某所|175|ひたすら問題点を探す練習2。ふと、場面によってキューを長めに持つクセを止めてみたら、いつもより精度が高くなる気がした。|
|2025-06-27 (金)|灘区某所|205|ひたすら問題点を探す練習3。ブリッジを堅牢に組む、キューを無理に長く持たない、という2点に加えて、手玉の真ん中を撞くことに集中することも行った。そうすると、手玉を思い通りにコントロールしている感覚が、心持ち長く保てるようになってきた気がする。こうして上手く行く撞き方を体に覚えさせるべきなのだろう。|
|2025-06-28 (土)|灘区某所|115|手球へキューを真っ直ぐに、必要な速さでぶらさずに素直に丁寧に進めて撞くと、ショットの成功率は上がる。これを繰り返して体で覚えるんだ。|
|2025-06-30 (月)|東灘区某所|115|意気揚々と練習場に出向いたものの、ビリヤードのことではない考え事をしていると、集中力を欠いて精度が落ちることを示した。逆に言うと集中が第一に大事だということだ。|
|2025-07-01 (火)|灘区某所|175|ここの照明の具合なのか私の調子の問題なのか、わからないが、球を立体として捉えづらいという感覚になった。ともかく、丁寧に、ゆっくり伸びやかに、撞こうと自分に言い聞かせる。|
|2025-07-08 (火)|灘区某所|155|調子はまぁまぁ。練習の中でうまく撞けたときの振りや姿勢や感触を、記憶として重ねていこうとしているところ。|
|合計時間 (分)||4,505|(約75時間)|
---
### 【観た映画】 F1/エフワン (字幕版) - 2025-07-05
URL: https://remoteroom.jp/medialog/2025-07-05_movie/
- 視聴: [TOHOシネマズ西宮OS](https://hlo.tohotheater.jp/net/schedule/064/TNPI2000J01.do)
- 公式サイト: [映画『F1®/エフワン』公式サイト](https://wwws.warnerbros.co.jp/f1-movie/)
原題『F1』。「IMAXレーザー」という投影システムが採用されている劇場の、前から2列目で観賞した。以下、予告編は事前に観たが前評判はわざと仕入れず、爆裂な面白さや秀逸さまでは期待はしていない状態での、純粋にクルマが走る映画が好きな自分としての感想だ。
本作は、心底悪い人物は登場しない、安定の、スポ魂的なストーリーで進む映画である。レースシーンの映像や音響はとても愉しい (IMAXシアターでの爆音体験は良いですなぁ)。よくこんな映画つくるわぁ〜と感心しながら、劇場でひたすら浸るのにふさわしい出来だと思った。レース中に繰り出される戦略については、「another F1」とでも表現しておきたい。
追記: 数日後に「もう一度観たいなぁ」と思わせる本作の残像が、私に刻まれているらしい。他者のレビューを読んで自分なりに読み取ってみたいところも出てきたので、ノーマルなスクリーンで構わないからもう一度行くかも。
#### 何気ない一枚
---
### 【読んだ本】 僕には鳥の言葉がわかる - 2025-07-04
URL: https://remoteroom.jp/medialog/2025-07-04_book-4093891842/
柔らかいイラストの装丁が手に取りやすい印象を与える。中身は、アカデミックな活動をとことん堅実に貫いている研究者の語りとなっていて、知的にとても興奮する。網羅性・論理性が要求される、反論に応えられる実験デザインとはどのようなものなのか、すんなり分かるように書かれているし、地道な調査をどれだけ多くの時間と手間をかけて行ってから、論文にまとめるのか、苦労も把握できる。
さらに、赤裸々な語りの流れの中に、お茶目なオチが所々付けてあって、愛嬌もあるのだ。もちろん本書の肝であってなにより凄いのは、誰も手がけていなかった、シジュウカラをはじめとする鳥の『言葉』を科学しているところ。俗説よりも確かな裏付けをあたりまえに探し求める姿勢を、本書から得る教訓として記憶しておきたい。
---
### 【読んだ本】 この世界が消えたあとの 科学文明のつくりかた (河出文庫) - 2025-06-30
URL: https://remoteroom.jp/medialog/2025-06-30_book-b07j5674t6/
原題『The Knowledge: How to Rebuild our World from Scratch』。現代の自然環境や人工物はこのままに、何らかの原因で人口が激減して知識も喪失したとして、その後、人類の営みの継続はいったいどうなるであろうか。本書は、その営みが必要とする知識とは何かを導出する究極の思考実験として、「世界を再び作る」という想像を進めているものだ。
その際、必ずしも、人類が過去数万年数千年かけてきた同じ発展経路をなぞる必要はなく、優れた技術に飛躍できればそれを採用すると発展が早まり望ましい、という立場で、様々な分野での丁寧な考察が進む。ここらでは百科事典を読み進めている時のような、博学が得られる気分になる。しかしながら、私が覚えている内容を順不同で書き出すとしても、農作を効率よく進め、石鹸を、コンクリートを、薬を作り、人体の病理を学び、鉄をはじめとする金属を製錬し、酸とアルカリを制し、動力源を活用し、電気を生み出し、天体運動から地球上の位置と時間を把握し、物理量の単位を作り、通信を立ち上げ、……なんて莫大な知識体系の広がりがある。現代の文明は、いったいどれだけの地層の重なりの上になりたっているのか。破壊後に再び作ることなど可能なのか、畏怖の念を抱くのみである。
最後には、文明における科学という考え方の重要性が語られる。調査して実験して、欠陥を理解し、探求して分析して、証拠を重視するものの考え方を育む必要があると結んでいる。邦題には「科学」が含まれ、原題には含まれていないけれども、どちらであろうとも世界を再び作る思考実験の旅路の果てがこう結ばれることに、私は同意するしかない。
---
### 《記事取り下げ》Home Assistant: ZigBee Coordinatorを技適対応「nRF52840 MDBT50Q 開発用USBドングル」で作る手順 - 2025-06-22
URL: https://remoteroom.jp/diary/2025-06-22/
#### お知らせ \[2025-08-12\]
『Home Assistant: ZigBee Coordinatorを技適対応「nRF52840 MDBT50Q 開発用USBドングル」で作る手順』というタイトルで掲載していた当記事は、取り下げいたします。
当記事では、技術基準適合証明等を受けている (工事設計認証番号: [018-180280](https://www.tele.soumu.go.jp/giteki/SearchServlet?pageID=jk01&NUM_TYPE=1&NUM=018-180280&NAM=&FOM=&PC=&YAR_FROM=&MON_FROM=&DAY_FROM=&YAR_TO=&MON_TO=&DAY_TO=&RAD=00-00-00-00&TEC=1&TEC=2&TEC=3&TEC=4&TEC=5&TEC=6&TEC=7&DC=0&SC=1#searchlist))、いわゆる技適対応・技適取得済みの[nRF52840 MDBT50Q 開発用USBドングル(ブートローダ書き込み済)](https://www.switch-science.com/products/6761)のファームウェアを、ZBOSSプロトコルに対応した[kardia-as/nrf-zboss-ncp](https://github.com/kardia-as/nrf-zboss-ncp)の`v2.6.0_ncp_zboss_max_mem_nrf52840_dongle.hex`に書き換える操作について記載していました。しかしながら、技適取得済み機器のファームウェアを別のものに書き換えた場合、技術基準適合証明等を受けた際のハードウェア・ソフトウェア等の構成から外れるため、当該機器の元の技適は適用外となります。
当記事が暗に目標としていたのは、「技適取得済み・技適対応のZigBee Coordinatorについて情報提供すること」でしたが、この点において記事内容に誤りを含んでいると認識したため、記事を取り下げることにいたしました。
---
### 【観た映画】 ダイ・ハード4.0 (吹替版) - 2025-06-16
URL: https://remoteroom.jp/medialog/2025-06-16_movie-b07cxj988c/
- 視聴: [YouTube](https://www.youtube.com/watch?v=3N5phmYBDJ8)
原題『Live Free or Die Hard』。シリーズ4作目で、9.11の後の2007年公開。等身大のアクションで渋く進むのかなと冒頭は少し期待もしつつ、そうではなかった。構造物や特に乗り物が絡むシーンではやりたい放題やっている。最後のエンドロールを眺めていると、スタントが約100名 (正確には4列x29行の人数) 登場しているようで、なるほど相応の怒濤の絵作り。
本作は、主人公の歳の積み重ねを感じさせるストーリーにもなっており、周囲に対して自身の年配感を終始醸し出している。そのような、同一主人公のシリーズものとして続いてきた映画に織り込まれるべき必須事項と、直接的な暴力行為ではないものの全米規模のインフラへ影響が及ぶテロリズムの最新版を、組み合わせたら、やはりこんな派手なアクションの味付けになるんかなあ、そう考え込みながら観賞した。
#### 鑑賞リンク
---
### 8BitDo Pro 2をSwitch 2に接続するためにはファームウェア更新が必要 - 2025-06-15
URL: https://remoteroom.jp/diary/2025-06-15/
#### サードパーティ製あるあるなのか
様々なゲームコンソールに対応できるコントローラ「8BitDo Pro 2」を、Nintendo Switch 2に無線接続しようとしたが最初は接続できず。8BitDo Pro 2のファームウェアを最新版へ更新すると接続できたので、簡単に記録しておく。
##### 8BitDo Pro 2: ファームウェア更新方法
1. [Support 8BitDo](https://support.8bitdo.com/) でのPro 2のUpdate logを確認すると、2025-06-15現在の最新版v3.06として下記の記載があり、Switch 2のサポートが加わったことが分かる
```
Firmware v3.06
1. Added support for Switch 2.
2. Fixed the issue where the profile status cannot be saved.
3. Fixed the abnormal issue of the joysticks' diagonal direction analog inputs.
```
2. [Upgrade tool \- Support \- 8BitDo](https://support.8bitdo.com/firmware-updater.html) からUpgrade toolをダウンロードして起動する
3. 画面の指示にしたがい、PCとコントローラをUSB接続してファームウェアの更新を行う
ファームウェア更新後、改めて8BitDo Pro 2とSwitch 2の無線接続を試してみると、難なく接続ができた。
#### 参考リンク
- [Nintendo Switch 2にサードパーティー製のコントローラーが接続できないって? その原因はこれ! \| ギズモード・ジャパン](https://www.gizmodo.jp/2025/06/nintendo-switch-2-controller.html)
---
### 【観た映画】 ダイ・ハード3 (吹替版) - 2025-06-08
URL: https://remoteroom.jp/medialog/2025-06-08_movie-b00g9syo7w/
- 視聴: [YouTube](https://www.youtube.com/watch?v=O0GtMpN5NS0)
原題『Die Hard: With a Vengeance』。シリーズ3作目で、9.11の前の1995年公開。総合的な噛み応え感で評価するならば、本作の噛み応えは最初の1に匹敵する (2よりは好きな風味だと確認できた)。黒人・白人の間にあるボーダーの問題を、直視しつつ皮肉としても取り入れつつ、映画の中でストーリーに絡めてちゃんと着地させている。人間の「社会性」の描写が豊富にされているところが、私が気に入ったポイントだ。また、主人公二人以外の登場人物が一所懸命にみなプロフェッショナルな動きをしている、そんな脚本も、映画の清涼感を割り増ししている。
#### 鑑賞リンク
---
### 【読んだ本】 図解 すごい立地戦略 - 2025-06-07
URL: https://remoteroom.jp/medialog/2025-06-07_book-456985558x/
多変数解析みたいなものが実際には活用される専門分野なのだろうが、立地戦略のイロハが、本書では図解と言葉で易しく説明されている。喫茶店でお茶している間にざっと読み終えた。街中や郊外で商うリアル店舗の立地を検討するときには、先入観や感覚ではなくて、使える統計データがあるならばそれに基づいて行うべし、というメッセージを私は読み取った。コメダ珈琲やサイゼリヤの立地戦略の分析には、なるほどと思ったり。
#### 参考リンク
- [統計地理情報システム \| 政府統計の総合窓口](https://www.e-stat.go.jp/gis)
- [統計局ホームページ/調査別統計地図](https://www.stat.go.jp/data/chiri/map/index_2.html)
---
### 「低反射・非光沢」で選んだNintendo Switch 2の画面保護フィルム - 2025-06-07
URL: https://remoteroom.jp/diary/2025-06-07/
#### 多すぎる中からどれを選ぶか
運任せの抽選にて[Nintendo Switch 2](https://www.nintendo.com/jp/switch2/)を家族はなんとか手に入れることができ、次に来るのは画面の保護フィルム選び。保護フィルムはどれが良いのか全く分からないままであったが、「低反射・非光沢」を要件に山勘で選んだ製品が満足いくものだったので、写真で簡単ご紹介。選択時の参考にしてもらえれば幸いです。
|種別|商品名|購入価格 (税込)|購入店|購入日|
|---|---|--:|---|---|
|画面保護フィルム|[PDA工房 純黒クリア【超反射防止】保護フィルム Nintendo Switch 2](https://www.pdakobo.com/exec.exe?html=product.htm&key=120PDA60496122)|1,427円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0F6Y1Q98X?tag=remoteroom-22&linkCode=ogi&th=1&psc=1)|2024-05-31|
ちなみに、Switch 2の画面は7.9インチと大きいだけに、貼り付けにはタブレットに貼るとき並みの集中力が必要です。私は家庭内IT担当として気合いで頑張りました。
#### 写真: 保護フィルムを貼ったSwitch 2
- 画面の反射がほとんど抑えられているので、正面から撮影しても自分が映らない:
- 画面表示への影響としてはわずかにシャープさが落ちているものの、非光沢のメリットを勘案すれば許容できる範囲と思う:
- 照明器具が視界に入るとこの程度の反射になる (縦に持つとでっかいスマホみたいだな):
---
### 【読んだ本】 三千円の使いかた - 2025-06-04
URL: https://remoteroom.jp/medialog/2025-06-04_book-b09cgxhfcj/
章が進むにつれて登場人物の関係性を明らかにしていく物語の構成に引き込まれた。各章に絡めている、お金に関する出来事は、自分の身にも覚えが必ずあると言ってよいほどの、日々の暮らしに密着した等身大の内容ばかり。言わずもがなで困りごとの類いであるそれら課題の、落とし所をなんとかして探っていく人間模様が描かれており、“前向き”な気持ちが充填されるような読後感があった。
暮らしにおいて決め事をするとき、お金の大小が本当に判断理由であることは実は稀なんじゃないか。それをどうにか考える真なる決定権は自分にあるんじゃない?というメッセージも受け取った。
---
### 【観た映画】 ダイ・ハード2 (吹替版) - 2025-05-18
URL: https://remoteroom.jp/medialog/2025-05-19_movie-b07cxrpt4j/
- 視聴: [YouTube](https://www.youtube.com/watch?v=_p2xl6o8es8)
原題『Die Hard 2: Die Harder』。シリーズものの古い映画を再履修していて、その流れで1990年公開の本作を鑑賞した。ストーリーはいわば観客を楽しませるように構成されており、伏線的なものの匂わせは分かりやすい印象を受ける。Wikipediaの本作のページによると、航空管制などに関するリアリティは度外視されているのだそうだ。けれども、一作目からどう繋げてきているのかを楽しみにしている私を含む客層は、前作以上に楽しみたいという期待故に、娯楽作品としての指標を用いて二作目を評価するわけで、用いられたトリックが比較的シンプルだった第一作のそれとはまた違った演出に、まんまと乗せられてしまうのだった。こちらの心理を見透かされているようで悔しいが。
#### 鑑賞リンク
---
### Home Assistant: スマートホームの高みを目指し、自宅サーバ・IT環境を再構築中 - 2025-05-11
URL: https://remoteroom.jp/diary/2025-05-11/
#### 堰を切ったように
仮想化基盤の上でゲストとしてVM/LXCを運用し、そのイメージの定期的なバックアップを稼働中でも取得できるシステム構成は、可用性を高められる点で大変ありがたいものだ。これは業務では鉄板の構成であるものの、しかし、Raspberry Piを中心にずいぶん昔に組んだ私の自宅のサーバ構成は、当時の知識に基づいたまま、これまでずっと物理OSでの直運用を行っていた。
ほかにも、自宅の1ベイNASのHDD (2016年製) の寿命がそろそろ尽きるかもしれないという懸念や、最近知った定番のアプリ「[Home Assistant](https://www.home-assistant.io/)」を運用してスマートホーム化をさらに楽しみたい、CO2センサーを増やして室内の換気制御をより緻密にしてみたい、などの欲望が押し寄せてきて。私の気持ちは、IT×住まいに関して抱く現段階の理想を具現化したくなり、サーバを含む自宅IT環境の再構築に、ここ数週間は趣味の時間を使っている。
基本は無音で、小規模で省エネで、ITと住まいとの自然なつながりを実現する。個人でできる範囲で、私も家族も楽に使えて、可用性は高く。そのためにはどうしたらいいか。どのような基盤から作っていくべきか。
##### "NOT A HOTEL"
ここまで書いたところで蘇ってきた記憶があり (本当に忘れていた)、今回の気持ちのきっかけを再認識した。2025年3月に『[NOT A HOTEL FUKUOKA](https://notahotel.com/shop/fukuoka)』を訪れた際に知った、スムースな空間体験と、それをもたらすための裏方の物凄い作り込み。あの時の衝撃をやっと私は咀嚼しはじめて、いま手を動かしているのだと思う。
##### 書き留めておく
自宅のIT環境が“完成”に達することはないので、このブログ記事は、今回の再構築のきっかけや概要をいったん書き留めておくための、記録のマイルストーンのような位置づけだ。再構築の各部分の詳細については、本サイトとしてのネタ度 (バリュー) を判断して、もしかしたら単体の記事として仕上げていくかもしれません。
#### System-1. サーバ関係について
サーバ関係のBefore/Afterは次の通り。再構築の第一の目的は、仮想化基盤を用意すること。それは各アプリケーションごとの環境を用意して相互に分離し、かつ環境が確実に復元できるバックアップを残すためだ。
|項目|Before|After|備考|
|---|---|---|---|
|ハードウェア|[Raspberry Pi 4 Model B](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/) \[8GB\]|[Raspberry Pi 4 Model B](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/) \[8GB\]|ラズパイ5への切替えも可能だが当面は4を維持する|
|物理OS|Ubuntu|[Proxmox VE (Proxmox-Port; PXVIRT)](https://github.com/jiangcuo/pxvirt/wiki/Install-Proxmox-VE-on-Debian-bookworm)|仮想化を利用し、アプリ別VM/LXCで環境を分離する構成とする|
|ストレージ1|USB接続: AMPCOMケース + M.2 NVMe SSD \[120GB\]|USB接続: [Buffalo SSD-PST250U3BA/N](https://www.buffalo.jp/product/detail/ssd-pst250u3ba_n.html) \[250GB\]|物理OS起動用|
|2nd NIC|[PLANEX USB-LAN1000R](https://www.planex.co.jp/products/usb-lan1000r/)|---|2nd NICは自宅のIP電話ネットワーク接続に必要 (Asterisk用)|
|2nd NIC + USB給電ハブ|---|UGREEN 45321 (6-in-1 USBハブ LANアダプター)|ラズパイ4単体では給電力不足だったようで、USB接続ストレージのエラーが多発したのでUSB給電ハブを追加|
|ストレージ2|---|USB接続: [SanDisk SDSSDE81-4T00-GH25](https://shop.sandisk.com/ja-jp/products/ssd/portable-ssd/portable-ssd-sandisk-extreme-pro-usb-3-2?sku=SDSSDE81-4T00-J25) \[4TB\]|Dropbox, Google Driveのバックアップ先とするローカルストレージ / フォーマットは耐障害性の観点からFAT32ではなくext4|
|USB-ACアダプタ|一般的なもの|[Anker 521 Charger (Nano Pro)](https://www.ankerjapan.com/products/a2038)|2系統の出力をラズパイ本体とUSB給電ハブへ1系統ずつ入力|
##### 余談: ラズパイの給電能力をUSB機器の消費電力が上回ると
ラズパイのUSB給電能力と接続するUSB機器の消費電力の大小関係には、注意が必要、と今回の構築途中に思い知った。この関係がほぼ拮抗していたり、消費電力が上回る状態が発生する場合には、おそらく接続の瞬断的なことが起こるのだろう、外付けUSB接続ストレージであればデータ異常のエラーが多発する。
分かってしまえば簡単な因果関係なのであるが、私はこのエラーの謎を解くまでに、クラウドから4TB SSD (上記のストレージ2) へ総量数百GBのデータ転送を試しては途中で失敗、を何度か繰り返し数日間悩んだ (白状すると、高額だった新品SSD本体の初期不良かなぁとも考えて返品処理の一歩手前までやっていた)。下記写真は、4TBの方ではなく250GB SSD (上記のストレージ1) が死んだときの端末画面である。後者が死ぬと仮想化基盤のホストOSが起動しなくなるので悲しい思いでモニターを接続した。そして、新品の4TBではなく250GB SSDもこのように死にうると判明したことにより、ストレージ2つに共通する要因として、USB給電に問題がある可能性を悟った。
##### 参考リンク: サーバ
###### Before
- AMPCOMケース:
###### After
- [Buffalo SSD-PST250U3BA/N](https://www.buffalo.jp/product/detail/ssd-pst250u3ba_n.html):
- UGREEN 45321 (6-in-1 USBハブ LANアダプター):
- [SanDisk SDSSDE81-4T00-GH25](https://shop.sandisk.com/ja-jp/products/ssd/portable-ssd/portable-ssd-sandisk-extreme-pro-usb-3-2?sku=SDSSDE81-4T00-J25):
- [Anker 521 Charger (Nano Pro)](https://www.ankerjapan.com/products/a2038):
#### System-2. 外部ストレージについて
外部ストレージのBefore/Afterは次の通り。再構築の第一の目的は、保守し続ける必要があるHDDを自宅の中から撤廃すること。
|項目|Before|After|備考|
|---|---|---|---|
|クラウド1|[Dropbox](https://www.dropbox.com/) \[2TB\]|(左記を継承)|日常的なファイルの置場|
|クラウド2|[Google Drive](https://workspace.google.com/products/drive/) \[2TB\]|(左記を継承)|写真・動画等の置き場, Dropboxのバックアップ先|
|クラウド3 (WebDAV)|---|[InfiniCloud](https://infini-cloud.net/ja/) \[30GB (無料枠)\]|Proxmox VE VM/LXCイメージの定期的なバックアップ先|
|NAS, 外付け|NAS: [QNAP TS-128](https://www.qnap.com/ja-jp/product/ts-128) + WD WD30EFRX \[3TB\]|外付け: [SanDisk SDSSDE81-4T00-GH25](https://shop.sandisk.com/ja-jp/products/ssd/portable-ssd/portable-ssd-sandisk-extreme-pro-usb-3-2?sku=SDSSDE81-4T00-J25) \[4TB\]|Dropbox, Google Driveのバックアップ先 / NASは自宅での必要性の低下、HDDの寿命を鑑みて廃止|
クラウド3としてWebDAVアクセス可能なサービスを選定している理由は、Proxmox VEでのWebDAVマウントが標準設定の範囲で行えて、利用が容易であるからだ。仮に何らかの障害が発生してProxmox VEをゼロから再構築する必要がある場合、当該サービスをWebDAVマウントしてVM/LXCイメージのバックアップを復元することは数ステップの作業で可能なので、システム復旧に大きな工数はかからないと見込んでいる (実際、上記System-1の写真にあるcrash時にPVEを再構築したが比較的短時間で行えた)。
##### 参考リンク: 外部ストレージ
###### Before
- [QNAP TS-128](https://www.qnap.com/ja-jp/product/ts-128):
- WD WD30EFRX:
#### System-3. アプリケーションレイヤーについて
アプリケーションレイヤーのBefore/Afterは次の通り。再構築の第一の目的は、「アプリAの実行環境を触っていたらアプリBが動かなくなった」なんて困った事態が発生しないように、各アプリの実行環境をカプセル化すること。
|項目|Before|After|備考|
|---|---|---|---|
|センサー連携・スマートホーム|物理OS上の各種自作スクリプト|VMで構築 (Home Assistant)|PiMox HAOS VM|
|Pi-Hole (自宅用Adblocking)|物理OSに導入|LXCで構築|Pi-Hole LXC|
|Asterisk (IP電話の子機)|物理OSに導入|LXCで構築, 2nd NICへも接続|Ubuntu LXC + Asteriskパッケージ|
|Podman (コンテナ実行環境)|物理OSに導入|LXCで構築|Ubuntu LXC (Unprivileged container: No) + Podmanパッケージ|
|rclone, rsync, [gphotos-uploader-cli](https://github.com/gphotosuploader/gphotos-uploader-cli) (クラウドとのファイル同期・写真転送)|物理OSに導入|LXCで構築, USB-SSDを[bind mount](https://pve.proxmox.com/wiki/Linux_Container#_bind_mount_points), 各種自作スクリプト|Ubuntu LXC + 標準パッケージ等|
##### Proxmox VEで使えるHelper-Scripts
[Proxmox VE (Proxmox-Port; PXVIRT)](https://github.com/jiangcuo/pxvirt/wiki/Install-Proxmox-VE-on-Debian-bookworm) による仮想化基盤の上に各アプリのゲスト環境を構築する際、[Proxmox VE Helper\-Scripts](https://pimox-scripts.com/) (Proxmox ARM64 Helper-Scripts) を用いると物凄く楽ができる。例えば、PiMox HAOS VM (Home Assistant) やPi-Hole LXCの構築は、次のページにある手順で指定のスクリプトを実行すると半自動的に行える。
- [Proxmox VE Helper\-Scripts > PiMox HAOS VM](https://pimox-scripts.com/scripts?id=pimox-haos-vm)
- [Proxmox VE Helper\-Scripts > Pi-Hole LXC](https://pimox-scripts.com/scripts?id=pihole)
#### System-4. センサー・IoT機器について
センサー・IoT機器関係のBefore/Afterは次の通り。再構築の第一の目的は、これまで部品を組み合わせて手作りしていた部分を既製品へ置き換えて、センサーを実験装置ではなく調度品化すること。第二に、部品を余らせて新たな実験ができるようにすること。
|項目|Before|After|備考|
|---|---|---|---|
|リビング|Raspberry Pi 4 (GPIO接続) + BME280 + MH-Z19C|SwitchBot CO2センサー (温湿度計)|GPIO接続物よりも既製品のスッキリ感・ハンディさを重視|
|書斎|Raspberry Pi Zero WH (GPIO接続) + BME280 + MH-Z19C + WaveShare 2.7inch e-Paper HAT|(上記と同じ)|(上記と同じ)|
|寝室|---|(上記と同じ)|隣室のセンサーでもカバーできるが計測精度を上げるため追加|
|屋外|---|SwitchBot 防水温湿度計|屋外の温度・湿度も計測したいため追加|
|ハブ|---|SwitchBot ハブ2|SwitchBotセンサー製品用|
|その他|スマート電球: 9個, スマートプラグ: 10個 (サーバ空冷用1, 照明用3, 換気扇用2, サーキュレータ用1, その他電化製品用3), スマートメーター: 1台, IRリモコンハブ: 1台|(「サーバ空冷用1」を除いて左記を継承)|IKEA, Tuya, Meross, SwitchBot, Nature Remoが混在|
SwitchBotのセンサーをHome Assistantに統合 (Integration) する設定作業は、[SwitchBot Cloud \- Home Assistant](https://www.home-assistant.io/integrations/switchbot_cloud)を用いて作業完了できた。SwitchBotは、公式ページ [Home Assistant – SwitchBot International](https://www.switch-bot.com/pages/home-assistant) でHome AssistantとのIntegrationを紹介しているぐらい、HAとの統合に力を入れているようだ。
##### 参考リンク: センサー
###### Before
- [BME280](https://www.switch-science.com/products/2236):
- [Winsen MH-Z19C](https://ja.winsen-sensor.com/product/mh-z19c.html):
- [WaveShare 2.7inch e-Paper HAT](https://www.waveshare.com/2.7inch-e-paper-hat.htm):
###### After
- [SwitchBot CO2センサー(温湿度計) W4900010](https://www.switchbot.jp/products/switchbot-co2-meter):
- [SwitchBot 防水温湿度計 W3400010](https://www.switchbot.jp/products/switchbot-indoor-outdoor-meter):
- [SwitchBot ハブ2 W3202100](https://www.switchbot.jp/products/switchbot-hub2):
#### 今回のまとめ
個人の範囲で行えるスマートホーム化は、冒頭部分で「定番」だと述べたように現段階ではHome Assistantを導入し、各種クラウドサービスや家電製品やセンサーをありったけHome Assistantに統合し、連携動作をプログラムするというアプローチが最も手っ取り早いであろう。
そう考えると、今進めている自宅サーバ・IT環境の再構築の方向性は、Home Assistant自体や、生活の中で用いているその他のアプリ (例えば自作の[telppo](), [liblib](https://github.com/mah-jp/liblib)や、毎日必要時に実行しているGoogle NestのText-to-Speech機能など) が、これから自宅内で、安定的に動作し続けるために行っているものであるから、すなわち、大げさに言えばスマートホーム化推進のための基盤強靱化につながっているのかもしれない。
下記の画面は、我が家のHome Assistantの現状 \[2025-05-11\] だ。多くの様々なものを統合した状態だが、プログラム (if-thenで組むロジック) にはほとんど手を付けておらず、自分としては面白味がまだ全然足りない。これから生活の中で家族とも発案しつつ、模索していくのでしょう。
---
### 【読んだ本】 ホワイトカラー消滅: 私たちは働き方をどう変えるべきか - 2025-05-03
URL: https://remoteroom.jp/medialog/2025-05-03_book-b0djcylvr6/
本書を読み進めるにあたり、ビジネス環境において自身はどういう立場の人間だと想定すると、著者が述べる内容が最もピンとくるのであろうか。わたしはまず、この問いを自分へ投げかけてみた。そしてそれは営利企業の経営層の立場じゃないかな?、と想像した。自国への貢献や、自国の損得を考えるモードになっている企業の経営層の立場だったら、本書の前半はすんなり染み入ってくると想像する。
本書は、日本国における労働者環境がどうなっているか、現在と未来の状況の俯瞰的な“把握”にはまず役立つであろう。その状況とは本書の帯にもある「人手不足なのに、なぜ人が余るのか?」であり、大まかに言えばそれは、人口の高齢化と、国際経済における日本の位置づけの変化が原因だ。一方、これに対して打つべき“対策”については、諸説ありかもしれない。著者が記している提案は、私のとても荒っぽい認識で言えば、弱るべくして弱っていく業界の保護は取りやめて、強みある部分への再編成を促すべき、そして労働者は先を考え流動的に働き方を変えていくべき、という主張になっている。
ともかく、町中や郊外といった、リアルワールドでの肌感覚からも知りうるように、日本の社会がこれからどのような人口構成になっていくのか、そして成り立たせねばならないか、を問題提起する一冊である。
---
### 【読んだ本】 模型からの発想―新技術に挑むスピリット - 2025-04-08
URL: https://remoteroom.jp/medialog/2025-04-08_book-4061180398/
とある青少年科学館の上階の奥まったところに、数十年の歴史を感じることができる図書室がある。そこには、最近の流行りなんてものともしない、科学に関する古典的な蔵書がずらっと鎮座していて。その中からタイトルに惹かれ、本書を手に取ったのが今回の読書のきっかけだ。私は中高生時代から、ブルーバックスをいわば愛読していて何十冊かは買って読んだと思うが、当時は本書を知り得なかったらしい。
本書は1980年9月に発行されており、余談だが定価は480円だったようだ。第一章の「月面探検車の設計」から始まり、目的とする現象の解明を行う場合に、模型を使うとどのようなことができるのか、どのような検討事項を科学的にクリアしていれば模型を使っての実証ができると言えるのかを、様々な模型を題材に述べていく。全編がとてもわかり易く綴られており深い感銘を受ける。技術的に、時間的に、そして予算的に限られた範囲で作ることができる模型でもって、現象の本質をみようとする発想は、物事の本質を捉えようとする普遍的な行為、そして技術者のチャレンジ精神とも地続きなのであろう。タイトルの『模型からの発想』を紐解いて私はこのように解釈した。本書は刺さる言葉に満ちていた。
#### 参考リンク
著者 (江守 一郎) が監修・資料提供した、『交通事故鑑定人 環倫一郎』という漫画があると知った。
- [江守一郎 \- Wikipedia](https://ja.wikipedia.org/wiki/%E6%B1%9F%E5%AE%88%E4%B8%80%E9%83%8E)
- [交通事故鑑定人 環倫一郎 \- Wikipedia](https://ja.wikipedia.org/wiki/%E4%BA%A4%E9%80%9A%E4%BA%8B%E6%95%85%E9%91%91%E5%AE%9A%E4%BA%BA_%E7%92%B0%E5%80%AB%E4%B8%80%E9%83%8E)
---
### ビリヤード: JCLリーグ (2025-hyogo-sakura-9) に初参加して試合に7回出てみた記録 - 2025-04-02
URL: https://remoteroom.jp/diary/2025-04-02/
#### JPAに続くリーグ戦参加
##### きっかけ
ビリヤードを最近の趣味の一つと言えるほどやるようになったのは、2024年秋のJPAリーグ戦へ初参加したことがきっかけだ。やはり参加するからには十分に練習して、チームとして勝つ体験をしてみたい。このことは下記の記事に書いた。
- [ビリヤード: JPAリーグ (2024年秋シーズン) に初参加して試合に10回出てみた記録 \[2024-12-28\]]()
2024年秋シーズンが終わった後、行きつけの店で組まれているチームの中では、次はJPAではなくJCLというリーグに参加する方針が決まった。そのため私も、JCLの9ボールのリーグ戦に参加してみることにした。
##### JCLとは
JCLとは何だろうか。[JCLについて \| JCL](https://csi-pool.jp/about) から引用する。
> JCLはUSA Pool leagueの日本エリアのリーグ「Japan CSI Pool League」の総称です。FargoRate720以下のプレーヤーを対象にチーム戦によるプールリーグを開催しています。日本では、4人対4人の試合を行う5~7人チームのチーム戦を開催しています。
ルールについては [ルール \| JCL](https://csi-pool.jp/rules) で確認できる。私の感触としては、JCL 9ボールは、JPAよりもルールが意図する厳格さが濃い。また、9番ボールを獲った場合に得るポイントが「14」と突出して大きいので、“一か八か”の勝負感がJPAより強い。たとえば、1〜8番ボールを全て獲ったとしてもその8点は、9番ボール1つの行方によっては簡単にひっくり返る。
また、JCLではFargoRateという指標が使用される。これはプレイヤーの強さを数値の大小で表す世界的な指標であり、詳しくは下記ページで解説されている。私はFargoRate 300 (FR300)でのスタートだ。
- [FargoRate(ファーゴレート)って何? \| トピックス \| ビリヤード総合情報サイト Web CUE'S > 最先端のプレーレベル判定システム基礎講座①](https://www.billiards-cues.jp/topics/20231128/)
- [Fargo Rate(ファーゴレート)、世界と日本 \| トピックス \| ビリヤード総合情報サイト Web CUE'S > 最先端のプレーレベル判定システム基礎講座②](https://www.billiards-cues.jp/topics/20231129/)
#### 参加した試合
##### 記録
JCL 2025 シーズンSAKURA (2025-hyogo-sakura-9) での、私が出場した試合の記録は次のとおり (計7試合)。Week No.1〜11はリーグ戦で、No.12はプレーオフとしての試合である。
|Week No.|日付|FargoRate / Robustness|内容|感想|
|--:|---|--:|---|---|
|1|2025-01-15 (水)|300 / 0|Win|自分にとってのJCL初試合。9番の重みが予想以上で、9番を落とした者勝ち。|
|5|2025-02-12 (水)|307 / 4|Lose|信じられない外し方を2,3回やってしまい、調子に乗れないまま終焉。9番を一度も落とせず、大きな点差を作ってしまった。|
|6|2025-02-19 (水)|296 / 8|Win|hill同士までもつれたが、ぎりぎり勝てた。ブレイクショットもミスしたり、入れられないわけがないショットもミスし、緊張しすぎるとほんとダメだ。|
|7|2025-02-26 (水)|312 / 13|Lose|近年の私をビリヤードの沼に誘ってくれた知人に負けた。悔しい。敗因は、考えすぎ、自分の思惑を含めすぎて、それが不完全で裏目に出まくったこと。|
|9|2025-03-12 (水)|313 / 16|Lose|FargoRateの高い相手との試合。9ボールを取られ続けて終わってしまった。抗えるところもあったのにショット精度を保てずミスをした。|
|10|2025-03-19 (水)|320 / 22|Lose|先週と似たようなパターンで終了。「土手際や遠いショットの時にまっすぐが出ていない」との指摘も周りからいただく。|
|11|2025-03-26 (水)|336 / 29|Win|両者hill-hillまで行って、どっちに転んでもおかしくなかった。ショットの精度に関しては練習の成果を出せた気もした。|
##### 総括
私個人としての、JCL 2025 シーズンSAKURAでの成績は次の通り。7試合に出場して、勝率は5割未満となった。もし次のリーグへの参加があるならば、「勝率5割以上でシーズンを終わる!」を目標としたい。自分のプレイに改善の余地はまだまだ山のようにあると感じるので、練習で理想と現実を近づけ、かつ常に冷静を保つようになりたい。
||試合単位での Win : Lose|ゲーム単位での勝率|
|---|---:|---:|
|JCL 2025 シーズンSAKURA 私個人の最終成績|3 : 4|10/34 → 約29%|
なお、所属チーム「Side Seven」としてはどうだったかというと、JCL 2025 シーズンSAKURAの9ボールの兵庫ディビジョンにおいて、リーグ戦では1位、プレーオフ (優勝決定戦) で破れてしまい2位という結果で終えた。優勝していれば東京に行けたので残念!
- リーグ詳細データ:
- [FargoRate \- League Management System > Japan CSI Pool League > 2025-hyogo-sakura-9](https://lms.fargorate.com/PublicReport/LeagueReports?leagueId=585944ff-c43a-4d71-80b0-afcd004220c5&divisionId=beb11a0f-d073-486f-a272-b2610066104d)
#### 参考情報
##### 参考リンク
- [Japan CSI Pool League](https://csi-pool.jp/)
##### 練習時間とメモ
JCL 2025 シーズンSAKURAへの参加が決まった2025-01-03以降から、当該リーグを終えるまでの間の、私の練習時間を記録する (試合実施時の時間を除く)。
|日付|練習場所 (基本は兵庫県神戸市内)|分 \[5分単位に切捨\]|メモ|
|---|---|--:|---|
|2025-01-07 (火)|灘区某所|165|JCLメンバーの初顔合わせと、JCLルールでの疑似試合。|
|2025-01-13 (月)|灘区某所|90|ほぼ疑似試合。9番が14点とでかいなので、9番がコンビで狙えるときは狙うという意識を持とう。右手のストロークを振り子のように自然と動かすことを今後も気をつけるべし。|
|2025-01-14 (火)|灘区某所|80|模擬戦 自分で「良い感じ」と直感できるショットがまあまあ多め。落ち着いてゆっくり撞きましょう。|
|2025-02-10 (月)|灘区某所|100|ひとり・昼練|
|2025-02-12 (水)|灘区某所|25|ひとり・朝練 試合日の朝練。|
|2025-02-17 (月)|灘区某所|95|ひとり・夜練 思い通りに玉が衝けなくてなぜだろうかと悩み、途中で右足を置く位置および構えの姿勢を修正したら、うまく行き始めた。ブランクが空くと体がスタンスを忘れることがあるようだ。|
|2025-02-19 (水)|灘区某所|30|ひとり・朝練 試合日の朝練。玉をどんどん落として、成功体験的なイメージ作りに励んだ。|
|2025-02-22 (土)|灘区某所|110|ひとり。上手くいっていた先日のスタンスに加え、イメージボールの作り方を改めて意識しながら練習。|
|2025-02-25 (火)|東灘区某所|180|ひとり。|
|2025-03-11 (火)|灘区某所|65|ひとり。前回の試合の時にリーダーに教わった「スタンス」の入り方をやってみた。効用は二つ感じられて、一つは狙いにカンを含める割合が減って精度が高くなったこと、二つは自然と手玉と的玉の関係性にしか目がいかないので、集中できること。|
|2025-03-12 (水)|灘区某所|50|ひとり。気持ちよく朝練。|
|2025-03-16 (日)|灘区某所|110|ひとり。高めの俯瞰で見て、かつイメージボールを視界に残像のごとく強く焼き付けることを意識した。|
|2025-03-18 (火)|灘区某所|195|ひとり。ショット中の間(ま)の置き方に注力してみたり。|
|2025-03-19 (水)|灘区某所|40|ひとり。手玉を薄く当ててしまう傾向あり。|
|2025-03-24 (月)|灘区某所|20+130|朝はひとり。夜は模擬試合。丁寧に衝くべき、ここは必ず!という玉をまだ外してしまう。|
|2025-03-25 (火)|灘区某所|25+90||
|2025-03-26 (水)|灘区某所|35|ひとり・朝練 試合日の朝練。|
|2025-04-01 (火)|灘区某所|110|二人で模擬試合|
|合計時間 (分)||1,745|(約29時間)|
---
### Raspberry Pi AI Kit: 物体認識を軽く試す - 2025-04-01
URL: https://remoteroom.jp/diary/2025-04-01/
#### 何ができるのかわからずポチったやつ
AIというものに、Raspberry Pi 5との組み合わせで触れてみようと考えて、2024年9月に「Raspberry Pi AI Kit (Hailo-8L)」を購入。最近になってやっとこのおもちゃをまともに動かし始めたので、動作方法などをメモとして残す。
今回登場する物品の購入価格は次のとおり。なお、本記事執筆時点 (2025年3月) では、「Hailo-8L」よりも高性能なAIアクセラレータ「Hailo-8」を搭載したHAT+も登場しているので、入手を検討する際にはご注意ください。
|種別|商品名|購入価格 (税込)|購入店|購入日|
|---|---|--:|---|---|
|SBC|[Raspberry Pi 5 (8GB)](https://www.raspberrypi.com/products/raspberry-pi-5/)|15,290円|[スイッチサイエンス](https://www.switch-science.com/products/9250)|2024-04-18|
|拡張ボード|[Raspberry Pi AI Kit (Hailo 8L搭載)](https://www.raspberrypi.com/products/ai-kit/)|13,310円|[スイッチサイエンス](https://www.switch-science.com/products/9695)|2024-09-19|
|ケース (ファン付き)|[Raspberry Pi 5用公式ケース Red/White](https://www.switch-science.com/products/9251)|1,672円|[スイッチサイエンス](https://www.switch-science.com/products/9251)|2024-04-18|
|GPIOスタッキングヘッダー|[Entaniya 2 X 20 (40ピン) Raspberry Pi用GPIOスタッキングヘッダー 【A078】](https://www.amazon.co.jp/dp/B0CDMK2PD1?tag=remoteroom-22&linkCode=ogi&th=1&psc=1)|385円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0CDMK2PD1?tag=remoteroom-22&linkCode=ogi&th=1&psc=1)|2025-01-14|
#### AI Kitの取り付け→認識確認まで
次の公式ページをもとに進める。OSを設定→AI Kitを取り付け→AI Kitが認識されているかどうかを確認 という流れになる。
- [AI Kit \- Raspberry Pi Documentation](https://www.raspberrypi.com/documentation/accessories/ai-kit.html#hardware-setup)
##### Step-1. OSの設定
1. Raspberry Pi 5で用いるストレージに、[Raspberry Pi OS (64-bit) with desktop](https://www.raspberrypi.com/software/operating-systems/#raspberry-pi-os-64-bit)をインストールする
2. Raspberry Pi 5を起動する
3. Raspberry Pi OSを最新化して、次にEPPROMが最新であることを確認する (最新ではない場合は更新する)
```
$ sudo apt update && sudo apt full-upgrade
$ sudo rpi-eeprom-update
BOOTLOADER: up to date
CURRENT: Mon 10 Mar 17:10:37 UTC 2025 (1741626637)
LATEST: Mon 10 Mar 17:10:37 UTC 2025 (1741626637)
RELEASE: default (/usr/lib/firmware/raspberrypi/bootloader-2712/default)
Use raspi-config to change the release.
```
4. OS設定で「enable PCIe Gen 3.0」する (Ref: [Raspberry Pi hardware \- Raspberry Pi Documentation > PCIe Gen 3.0](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#pcie-gen-3-0))
- config.txtを編集して設定を追加するか、もしくは、raspi-configを起動してメニュー選択で設定する
5. AI Kit取り付けに備えて、Raspberry Pi 5をshutdownする
##### Step-2. AI Kitの取り付け
[AI Kit \- Raspberry Pi Documentation > Install](https://www.raspberrypi.com/documentation/accessories/ai-kit.html#ai-kit-installation)を参照しつつ、本来はAI Kitとは組み合わせられない、手元の純正ケース (ファンあり) を無理やり組み合わせた。GPIOスタッキングヘッダーは背が高いものに交換し、ケースには、AI Kitと本体を接続するフラットケーブルを通す穴あけ加工を施した。
###### あくまで参考: ファンレスケースとの組み合わせ
当初は、手元のファンレスケースとAI Kitを組み合わせていた。しかし、後述の物体認識プログラムを動かし続けていると、CPUからの熱伝導でケースが熱くなりすぎて指で触るのに躊躇するぐらいになる。機械としては動作範囲内の温度にとどまっているのかもしれないが、心理的にはちょっと嫌なので上記のファン付きケースに切り替えることにした。
|種別|商品名|購入価格 (税込)|購入店|購入日|
|---|---|--:|---|---|
|ケース (ファンレス)|[EDATEC Passive Cooling CNC Case](https://www.edatec.cn/en/ac/pi5-case.html)|2,706円|[スイッチサイエンス](https://www.switch-science.com/products/9401)|2024-04-23|
##### Step-3. hailoの導入とAI Kitの認識状態の確認
次の公式ページをもとに進める。
- [AI Kit and AI HAT\+ software \- Raspberry Pi Documentation](https://www.raspberrypi.com/documentation/computers/ai.html)
1. AI Kitを取り付けたRaspberry Pi 5を起動する
1. hailo-allを導入する
```
$ sudo apt install hailo-all
(省略)
0 upgraded, 200 newly installed, 0 to remove and 0 not upgraded.
Need to get 312 MB of archives.
After this operation, 937 MB of additional disk space will be used.
Do you want to continue? [Y/n]
```
2. Raspberry Pi 5を再起動する
3. AI Kitの認識状態を確認する
```
$ hailortcli fw-control identify
Executing on device: 0001:01:00.0
Identifying board
Control Protocol Version: 2
Firmware Version: 4.20.0 (release,app,extended context switch buffer)
Logger Version: 0
Board Name: Hailo-8
Device Architecture: HAILO8L
Serial Number: HLDDLBB243302156
Part Number: HM21LB1C2LAE
Product Name: HAILO-8L AI ACC M.2 B+M KEY MODULE EXT TMP
```
4. dmesgを確認しておく (妙なエラーが散見されるが、どうなんだろう……)
```
$ dmesg | grep -i hailo
[ 2.665072] hailo: Init module. driver version 4.20.0
[ 2.665170] hailo 0001:01:00.0: Probing on: 1e60:2864...
[ 2.665176] hailo 0001:01:00.0: Probing: Allocate memory for device extension, 13184
[ 2.665194] hailo 0001:01:00.0: enabling device (0000 -> 0002)
[ 2.665199] hailo 0001:01:00.0: Probing: Device enabled
[ 2.665220] hailo 0001:01:00.0: Probing: mapped bar 0 - 0000000078db2bd0 16384
[ 2.665225] hailo 0001:01:00.0: Probing: mapped bar 2 - 00000000ef1a13d8 4096
[ 2.665227] hailo 0001:01:00.0: Probing: mapped bar 4 - 00000000d01bc604 16384
[ 2.665230] hailo 0001:01:00.0: Probing: Force setting max_desc_page_size to 4096 (recommended value is 16384)
[ 2.665238] hailo 0001:01:00.0: Probing: Enabled 64 bit dma
[ 2.665240] hailo 0001:01:00.0: Probing: Using userspace allocated vdma buffers
[ 2.665243] hailo 0001:01:00.0: Disabling ASPM L0s
[ 2.665246] hailo 0001:01:00.0: Successfully disabled ASPM L0s
[ 2.665338] hailo 0001:01:00.0: Writing file hailo/hailo8_fw.bin
[ 2.833625] hailo 0001:01:00.0: File hailo/hailo8_fw.bin written successfully
[ 2.833654] hailo 0001:01:00.0: Writing file hailo/hailo8_board_cfg.bin
[ 2.833702] Failed to write file hailo/hailo8_board_cfg.bin
[ 2.833705] hailo 0001:01:00.0: File hailo/hailo8_board_cfg.bin written successfully
[ 2.833707] hailo 0001:01:00.0: Writing file hailo/hailo8_fw_cfg.bin
[ 2.833717] Failed to write file hailo/hailo8_fw_cfg.bin
[ 2.833719] hailo 0001:01:00.0: File hailo/hailo8_fw_cfg.bin written successfully
[ 2.922961] hailo 0001:01:00.0: NNC Firmware loaded successfully
[ 2.922969] hailo 0001:01:00.0: FW loaded, took 257 ms
[ 2.951233] hailo 0001:01:00.0: Probing: Added board 1e60-2864, /dev/hailo0
```
#### 物体認識を試す
AI Kitを駆動させるために、GitHubにてHailoが提供しているサンプルプログラムを用いる。ここからの操作は、Raspberry Pi DesktopのGUIにて実施すること。
- [hailo\-ai/hailo\-rpi5\-examples](https://github.com/hailo-ai/hailo-rpi5-examples)
1. サンプルプログラムをgit cloneする
```
$ git clone https://github.com/hailo-ai/hailo-rpi5-examples.git
$ cd hailo-rpi5-examples
$ ./install.sh
$ source setup_env.sh
```
2. 同梱のテスト動画ファイルを用いて物体認識を試す
```
(venv_hailo_rpi5_examples) $ python basic_pipelines/detection_simple.py --show-fps
(venv_hailo_rpi5_examples) $ python basic_pipelines/detection.py --show-fps
```
3. USBカメラの映像やUSB接続のHDMIキャプチャーの入力を用いて、物体認識を試すこともできる
```
(venv_hailo_rpi5_examples) $ python basic_pipelines/detection.py --show-fps --input /dev/video0
```
4. おまけ: Rasbperry PiのCPU温度を確認するコマンドはこちら
```
$ vcgencmd measure_temp
temp=64.2'C
```
#### 応用編: RTSPとM3U8への対応
##### a. RTSPのストリーミング動画を入力できるようにする
次の記事を参考に、`detection.py`等のサンプルスクリプトへのinputとして、RTSPのストリーミング動画が入力できるように改造する。
- [Turn Your RTSP Camera Smart with Raspberry Pi AI Kit](https://www.cytron.io/tutorial/turn-your-rtsp-camera-smart-with-raspberry-pi-ai-kit)
1. hailo-rpi5-examplesディレクトリ内に、次のパッチファイルを用意する
```
$ cat ./gstreamer_helper_pipelines.py.patch
--- ./venv_hailo_rpi5_examples/lib/python3.11/site-packages/hailo_apps_infra/gstreamer_helper_pipelines.py.original 2025-03-31 22:58:01.323864758 +0900
+++ ./venv_hailo_rpi5_examples/lib/python3.11/site-packages/hailo_apps_infra/gstreamer_helper_pipelines.py.modified 2025-03-31 23:10:39.426144645 +0900
@@ -11,6 +11,8 @@
return 'libcamera'
elif input_source.startswith('0x'):
return 'ximage'
+ elif input_source.startswith('rtsp'):
+ return 'rtsp'
else:
return 'file'
@@ -95,6 +97,14 @@
f'{QUEUE(name=f"{name}queue_scale_")} ! '
f'videoscale ! '
)
+ elif source_type == 'rtsp':
+ source_element = (
+ f"rtspsrc location={video_source} name=src_0 message-forward=true ! "
+ + "rtph264depay !"
+ + "queue name=hailo_preprocess_q_0 leaky=no max-size-buffers=5 max-size-bytes=0 max-size-time=0 ! "
+ + "decodebin ! queue leaky=downstream max-size-buffers=5 max-size-bytes=0 max-size-time=0 ! "
+ " video/x-raw, format=I420 ! "
+ )
else:
source_element = (
f'filesrc location="{video_source}" name={name} ! '
```
2. 上記パッチを`gstreamer_helper_pipelines.py`に適用する
```
$ patch -u ./venv_hailo_rpi5_examples/lib/python3.11/site-packages/hailo_apps_infra/gstreamer_helper_pipelines.py < ./gstreamer_helper_pipelines.py.patch
patching file ./venv_hailo_rpi5_examples/lib/python3.11/site-packages/hailo_apps_infra/gstreamer_helper_pipelines.py
```
3. 次のコマンドを実行すると、RTSPのストリーミング動画に対しても物体認識を働かせることができるとわかる
```
(venv_hailo_rpi5_examples) $ python basic_pipelines/detection.py --show-fps --input rtsp://1234:5678@192.168.1.XXX/live
```
上記のURL「`rtsp://1234:5678@192.168.1.XXX/live`」は、ネットワークカメラの[ATOM v2アプリ](https://www.atomtech.co.jp/pages/atomv2-dl)の中で確認できるURLを参考にした。実際に、我が家のATOM Cam 2のRTSPストリーミング動画を、Raspberry Pi AI Kitに直接入力することが可能だ。
##### b. M3U8形式のストリームを入力するためには?
ツールを組み合わせると比較的簡単に、M3U8形式のストリームをRTSPとして配信できるらしい。
1. 何らかのローカルPC (例: 192.168.1.100) にて、MediaMTXをRTSPサーバとして起動しておく
- [bluenviron/mediamtx: Ready\-to\-use SRT / WebRTC / RTSP / RTMP / LL\-HLS media server and media proxy that allows to read, publish, proxy, record and playback video and audio streams\.](https://github.com/bluenviron/mediamtx)
```
$ mediamtx
2025/04/01 01:44:35 INF MediaMTX v1.11.3
2025/04/01 01:44:35 INF configuration loaded from /home/hogehoge/bin/mediamtx.yml
2025/04/01 01:44:35 INF [RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP)
2025/04/01 01:44:35 INF [RTMP] listener opened on :1935
2025/04/01 01:44:35 INF [HLS] listener opened on :8888
2025/04/01 01:44:35 INF [WebRTC] listener opened on :8889 (HTTP), :8189 (ICE/UDP)
2025/04/01 01:44:35 INF [SRT] listener opened on :8890 (UDP)
```
2. 上記ローカルPCにてFFmpegを次のように起動して、指定されたM3U8形式のストリームを形式変換しながらMediaMTXに配信する
```
$ ffmpeg -re -i <何らかのM3U8形式のストリームURL> -c:v libx264 -preset ultrafast -tune zerolatency -c:a aac -f rtsp rtsp://192.168.1.100:8554/live
```
3. 1と2の連携の結果、Raspberry Pi 5にて次のコマンドを実行すると、M3U8形式のストリーム動画に対しても物体認識を働かせることができるとわかる
```
(venv_hailo_rpi5_examples) $ python basic_pipelines/detection.py --show-fps --input rtsp://192.168.1.100:8554/live
```
#### 参考リンク
- [ラズパイ5にAIキットが登場、処理性能は13TOPS:人工知能ニュース \- MONOist](https://monoist.itmedia.co.jp/mn/articles/2406/05/news086.html)
- [Hailo開発フロー \- 半導体事業 \- マクニカ](https://www.macnica.co.jp/business/semiconductor/articles/hailo/144985/)
- [①AI Software Suiteに必要なハードウェアとインストール \- 半導体事業 \- マクニカ](https://www.macnica.co.jp/business/semiconductor/articles/hailo/144988/)
---
### 【読んだ本】 大阪・関西万博 「失敗」の本質 - 2025-03-26
URL: https://remoteroom.jp/medialog/2025-03-26_book-b0dcflkvcl/
大阪での開催が2018年11月23日に決定し、2025年4月13日から開催される『2025年日本国際博覧会』。この博覧会の公式の略称が「大阪・関西万博」である。本書はこの万博があえて開催される前に、万博の姿と陰を浮かび上がらせる検証を行っている。五人の著者による検証の切り口は、「万博と政治」「万博と建築」「万博とメディア」「万博と経済」「万博と都市」の五つだ。
オリンピックや万博といった社会的に大きなイベントは、得てして、始まってしまうと宣伝や忖度ある報道も流れ始め、冷静な視点で観測することが難しくなると思うので、本書が最高に旬な時期はまさに“今”。抜群におすすめだ。どのように形成された大義に基づく万博なのか、過去のどのような経緯から続く、各種の問題をはらんでいる開催なのか。ノンフィクションを好む私のような者にとって、本書は眼前の現実を観測する際の、一種の思考のガイドブックとして機能しうる。
---
### 【読んだ本】 航空管制 知られざる最前線 - 2025-03-14
URL: https://remoteroom.jp/medialog/2025-03-14_book-4309504523/
どこで存在を知った書籍だったかは忘れたが、日頃触れない分野に関する好奇心を満たす内容。本書とのめぐり合いはラッキーだったなと思う。航空管制官の果たすべき役割はもちろんのこと、本職にしか会得できない苦悩や課題も含めて、分かりやすく書かれていた。航空管制官は、空間の状況が時々刻々と変化する、四次元のパズルを常に解き続けているのだな。他の担当者と連携を密にしながら。その時、第一に厳守すべきは安全であり、離着陸の過密なスケジュールに支障をきたさない巧みさも要求されるのだと知った。
また、航空管制における原則をどのようなケースにおいて“破る”のかが、具体例と、抽象化された概念を交えて記述されている。これは標準化に加え効率性も求められる業務であれば他でも当てはまる話であり、自分が上手く咀嚼できて展開できるのであれば、本書はいわゆる応用が利く実用書だと感じる。
#### 参考リンク
- [航空:航空管制官 公式 \- 国土交通省](https://www.mlit.go.jp/koku/atc/)
---
### 【読んだ本】 改訂版! 人生で大切なことはみんなマクドナルドで教わった - 2025-03-10
URL: https://remoteroom.jp/medialog/2025-03-10_book-4801499112/
店舗運営や企業体の細部に関しては、本書での記載は最新情報ではないかもしれないが、それはさておき、世界規模で展開している『マクドナルド』で働くと持ち得る視座はどのようなものか、少し分かった気がする。ひいては、人が働く理由を考える際に、私へ再認識を促すものでもあった。
仕事で行き詰まりを覚えたり、自分はこの先も、数年間続けてきたことの継続で良いのか?などの疑問を抱いて、心理的に立ち止まるときは、決して無いとは言わない。そんなときは、ページの間から正直さとピュアさが溢れそうな本書でもって、気持ちを初期化するのは悪くない。ちなみに、勢いよくすぐに読破できる。読みながら自分事として思い出したのは、過去から積み重ねてきた対人的な苦い失敗や、“ボス”にあたる何名かの方の表情や言葉であった。
---
### Keychron K1 Maxというキーボードの簡単レビュー - 2025-03-05
URL: https://remoteroom.jp/diary/2025-03-05/
#### 次の盤石機を求めて
今回初めて、Keychronというメーカーの下記のキーボードを購入した。実機に触れないままポチったので一か八か感はあったのだが、試した結果、これは自分の2台目にもありだし、人におすすめしてもよいレベルのものだと思っている。
|種別|商品名|購入価格 (税込)|購入店|備考|
|---|---|--:|---|---|
|キーボード|[Keychron K1 Max (US ANSI配列)](https://keychron.co.jp/products/keychron-k1-max-qmk-via-wireless-custom-mechanical-keyboard-us-ansi-layout?variant=43337003597995)|15,488円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0CYQ757XF?tag=remoteroom-22&linkCode=ogi&th=1&psc=1)|スマイルSaleの-20%が適用された価格|
##### 購入経緯: 有線式でコスパ良さそうなものとして
職場で使っている2.4GHz接続の無線キーボードが、最近、キー入力をたまに取りこぼすようになってきており困っていた。取りこぼしはおそらく、付近の電波が混雑しているために発生するものと思われ、例えば私がBluetoothイヤホンを使っている時、状態がより悪くなる。無線キーボード自体に問題があるわけではない。
この問題を根本的に解決するためには、有線接続式のキーボードが必要だ。このタイプのキーボードで、伝統的かつ経験的に、良質さで間違いのない選択肢としては、自宅でも使っているREALFORCEのUS配列となるのだが、購入にはちょっと気合いが必要な価格帯。かつ、最近なんとなくよく聞く、評判が良さそうなKeychronのキーボードも一度試してみたいと思っていた。
##### 所感
[Keychron K1 Max (US ANSI配列)](https://keychron.co.jp/products/keychron-k1-max-qmk-via-wireless-custom-mechanical-keyboard-us-ansi-layout?variant=43337003597995) の使い心地で、私が気に入っているのは次の3点である。
- シャシーの剛性が高く、造りに一体感がある
- キースイッチの実装面がフラットなままにされており、ゴミが溜まりにくくて掃除がしやすそう
- ロープロファイルなので沈み込み浅めであるキータッチは、悪くないし、(US ANSI配列版だと) キートップの材質が熱伝導率の高いもののようで、ひんやりした石を触ったかのような一瞬の錯覚を指先に与えてくる
キー入力時、メカニカルスイッチ特有のかちゃかちゃ音は奏でるが、そこまでうるさい音質ではないと思う。
なお、各種ユーザーガイドは次のリンク先で公開されている。製品に付属してきた紙の冊子は日本語版になっていた。
- [Keychron K1 Max User Guide – Keychron Japan](https://keychron.co.jp/pages/keychron-k1-max-user-guide)
##### 面白いと思ったところ
このキーボードでは、Fnキーと他キーとの同時押しで様々な設定変更が行える。その中の一つ、`Press fn + Q to change the lighting effect` では、押したキーの東西南北方向に白LEDの明かりが走る、いわゆるボンバーマンの火炎を連想させる効果も選べる。私はボンバーマン好きなので、この遊び心にはちょっとやられてしまった。
---
### 【読んだ本】 ストーリーが世界を滅ぼす――物語があなたの脳を操作する - 2025-02-28
URL: https://remoteroom.jp/medialog/2025-02-28_book-4492444696/
原題『THE STORY PARADOX: How Our Love of Storytelling Builds Societies and Tears them Down』。最近の私が関心を強く持っている、かつ、現在進行系の世の中の状況の要因だと考える、人間集団における情動性のような現象について、より踏み込んで言うならば抗えないその力と毒性について、網羅的に知ることができる非常に有効な書籍であった。最初は図書館で借りたけどもけっこうな量があるため貸出期間内に読みきれず、結局は購入することになった。その価値は十分にある。本文中にある一言の言い回しや、内容の深さが絶妙と感じさせるところが数多く、原文も翻訳の技も良いのであろう。それらを、ここの感想記事にたくさん抜粋したくなる気持ちを抑えるのが大変だ。
人間が言葉を操って物語を紡ぐストーリーテリングという技術は、極限的には人間の進化の過程で、集団をまとめ、私達の心を動かすために生み出されて磨かれてきたもの。それを揶揄する「ホモ・フィクトゥス」 (フィクションの人間) という言葉もあるほどだ。しかし人間は、人間の普段の理性や判断力を弱めるストーリーに、心を動かされてしまう自身らの特性自体は容易に変えられないとしても、社会を無用に分断化しないために、ストーリーの毒の部分は取り入れてはいけないのだ。そのために、どう思考すべきだろうかを考え、活路をなんとか見いだそうとする書籍である。
---
### 【読んだ本】 危機を乗り越える力 ホンダF1を世界一に導いた技術者のどん底からの挑戦 - 2025-02-22
URL: https://remoteroom.jp/medialog/2025-02-22_book-4797674458/
近年のHondaは、2015年からパワーユニットに関わる形でF1へ参戦し、2021年からチャンピオン獲得に貢献する結果を残してきている (F1でいう“チャンピオン”は厳密には「コンストラクターズチャンピオン」と「ドライバーズチャンピオン」の2種類ある。この2つにどのようにHondaが絡んでいるかの詳細を私は本来述べるべきであるが、コンストラクターズチャンピオンのチームが、Hondaのパワーユニットを使っているもののチーム名にHondaを含まない場合などあって話がややこしい。したがって詳細は割愛)。
著者は、このF1パワーユニットを手がけた技術者 (開発総責任者) である。技術の話はまず面白くて読書が止まらない。エンジンオイルの燃焼に対する考え方を、燃料を規定するレギュレーションに照らしつつチームでどう定めるか、つまりモアパワーのため“燃やせるものはすべて燃やす”のか、など。また、定年退職のタイミングに書かれた著作だからであろうか、次世代の技術者育成に関しても重ね重ね述べられている。組織としてHondaはこれからどうあるべきか、という想いと愛も溢れている。
#### 参考リンク
Hondaは、「Aston Martin Aramco Cognizant Formula One® Teamへ2026年からパワーユニットを供給」という形で、再びF1へ参戦する。
- [FIAフォーミュラ・ワン世界選手権への参戦について \| Honda 企業情報サイト](https://global.honda/jp/news/2023/c230524.html)
2026年からのF1のスタンスについて、上記ページから抜粋する。さて、世界最高の技術と効率が披露されるレース、良い意味でどれぐらい荒れるだろうか?
> F1は、2030年のカーボンニュートラル実現を目標として掲げており、2026年以降は、100%カーボンニュートラル燃料の使用が義務付けられるとともに、最高出力の50%をエンジン、50%を電動モーターで賄う形となり、現在※2と比べて出力に占める電気エネルギーの比率が大幅に高められることになります。
---
### 【読んだ本】 AIにはない「思考力」の身につけ方 ――ことばの学びはなぜ大切なのか? - 2025-02-10
URL: https://remoteroom.jp/medialog/2025-02-10_book-4480251553/
2025年2月現在、仕事でちょっとしたアイデアが欲しいときにはChatGPTへ質問を投げたり、Geminiに口頭で聞いてみたり。また、GitHub Copilotが提案してきたコードを採用してから手直しすることも普通に行っている。こうして今どきの生成AIを使い慣れてくると把握できるのは、生成AIは「統計処理の物凄いお化けだ」ということだ。学習済みデータに含まれる過去の例を巧みに組み合わせて、質問に対する極めてそれっぽい回答を出力する機構だ。
本書は、思考力について取り上げ、今どきの生成AIはそれを持たないことを簡潔に説明している。また、人間が幼年期よりことばを会得しながら養い磨く、直感と推論という能力が、思考力の要であるとも教えている。頭を整理して感覚を拡げてくれる良書だ。
思考力と聞いて思ったこと。生成AIの話にとどまらない突然の私観だが、これからの未来には、極端な発想に基づく、強大な拡散力によって幾度も沸いてくる多勢の情報になびくままなのか、思考力を用いてそれを自己の規範に照らして検証できるのか、この立場の違いが一人ひとりにとって極めて重要になり、生き様を決めると思う。そして結局のところ人間は、今どきの生成AIが持たない思考力を用いて、人間から発せられる情報を自らが判断していかねばならんのだなあと……。
---
### ネットワークエミュレータ「AGGRESSOR NETWORK」を作って試す 〜今回はRaspberry Pi 400で〜 - 2025-01-26
URL: https://remoteroom.jp/diary/2025-01-25/
#### 一度試してみたいツール
「AGGRESSOR NETWORK」というものを、Facebook上の投稿だったか広告を見て初めて知った。これは[bitset社](https://bitset.jp/)の製品で、ネットワークの有線接続の間に挟んで通信遅延やパケット損失をエミュレート、つまり意図的に発生させるツールとのこと。ネットワークの障害を再現する際に使うものらしい。
- [AGGRESOR NETWORK :: bitset](https://bitset.jp/products/aggressor-network)
興味を持ったので情報を追いかけると、このツールの、MIT licenseなソースコードがGitHub上にあると分かった。
- [GitHub \- bitset\-jp/aggressor\_network: Linux Network Emulator](https://github.com/bitset-jp/aggressor_network)
さらにREADMEには、「Raspberry Pi 4」を使って開発とテストを行ったと書かれている。ということは、私の手元のRaspberry Piを使ってこのツール作りに挑戦できるのか? そして実際に動作を試せるのか?
#### 準備したもの
AGGRESSOR NETWORKを作るために下記の物を準備した。ラズパイ用のRTC (Real-Time Clock) のみ新規購入で、他は手元にある物を用いる。
RTCは、内蔵時計を持たないラズパイがNTPに頼らず時刻を保持するために必要となる。時刻情報は、AGGRESSOR NETWORKの画面上の表示だけでなく、パケットキャプチャを保存する場合にはそのタイムスタンプとしても必要になってくる。
|種別|商品名|購入価格 (税込)|購入店|備考|
|---|---|--:|---|---|
|RTC|[Raspberry Pi用RTC(DS1307)](https://www.seeedstudio.com/Pi-RTC-DS1307.html)|832円|[スイッチサイエンス](https://www.switch-science.com/products/5334)|送料200円|
|コンピュータ|[Raspberry Pi 400](https://www.raspberrypi.com/products/raspberry-pi-400/)|-円|-|所有|
|有線LANアダプタ|[TP-LINK UE300](https://www.tp-link.com/jp/home-networking/computer-accessory/ue300/)|-円|-|所有|
|microSDカード|16GBのもの|-円|-|所有|
#### 構築手順
AGGRESSOR NETWORKの構築手順について。手順の確定は、最初に下記のaの組み合わせにて、多少のソース解析と何度かの試行錯誤を行った末に手順を見定めて、次にbの組み合わせでもその手順が通用することを確認する、という流れで行った。
- a. Raspberry Pi 4 + Raspberry Pi OS (32-bit) Lite
- b. Raspberry Pi 400 + Raspberry Pi OS (64-bit) Lite
なお、AGGRESSOR NETWORKのREADMEの記述内容にそのまま沿えばaの組み合わせになるのだが、なぜbも試したかというと、(ブログ記事としては) お手本通りではなく何らかの独自色を出したいなぁと思ったからである。
##### Step-1. Raspberry Pi OSを用意する
1. 手元PCで[Raspberry Pi Imager](https://www.raspberrypi.com/software/)を起動し、OS「Raspberry Pi OS Lite」をmicroSDカードにインストールする
- 初期設定でユーザ名を「bitset」に設定しておくこと
2. OSをインストールしたmicroSDカードを使ってラズパイを起動する (途中に自動で2回の再起動が行われる)
3. RTCのドライバーのインストールとAGGRESSOR NETWORKの起動に必要となるパッケージを、次のコマンドでRaspberry Pi OSにインストールする
```bash
sudo apt update
sudo apt upgrade
sudo apt install bridge-utils dstat fbcat git iftop tcpdump tmux toilet python3-yaml
```
4. RTC (DS1307) の発売元Seeed-StudioのGitHubリポジトリ、[pi\-hats/RTC\-HAT at master · Seeed\-Studio/pi\-hats · GitHub](https://github.com/Seeed-Studio/pi-hats/tree/master/RTC-HAT)を参照して、次のようにしてRTCのドライバーをRaspberry Pi OSにインストールする
```bash
bitset@aggressor-network:~ $ cd; git clone https://github.com/Seeed-Studio/pi-hats.git
Cloning into 'pi-hats'...
remote: Enumerating objects: 402, done.
remote: Counting objects: 100% (25/25), done.
remote: Compressing objects: 100% (16/16), done.
remote: Total 402 (delta 10), reused 11 (delta 7), pack-reused 377 (from 1)
Receiving objects: 100% (402/402), 10.24 MiB | 7.18 MiB/s, done.
Resolving deltas: 100% (209/209), done.
bitset@aggressor-network:~ $ cd ~/pi-hats/tools
bitset@aggressor-network:~/pi-hats/tools $ sudo ./install.sh -u rtc_ds1307
Uninstall rtc_ds3231 ...
Uninstall rtc_ds1307 ...
Uninstall adc_ads1115 ...
Enable I2C interface ...
Install rtc_ds1307 ...
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages will be REMOVED:
fake-hwclock
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 32.8 kB disk space will be freed.
(Reading database ... 79795 files and directories currently installed.)
Removing fake-hwclock (0.12+nmu1) ...
Processing triggers for man-db (2.11.2-2) ...
fake-hwclock.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable fake-hwclock
#######################################################
Reboot the system to take a effect of Install/Uninstall
#######################################################
```
4. Raspberry Pi OSのNTPを無効化する
```bash
sudo timedatectl set-ntp false
```
5. Raspberry Pi OSをshutdownし、microSDカードを取り外す
##### Step-2. ソースコードを編集してmicroSDカードへ書き込む
1. 手元PC (Ubuntuを想定) にStep-1のmicroSDカードをマウントして読み書きできるようにする
- 以降、手元PCのユーザとしてhogeを想定している
- microSDカードの領域はUbuntuの`/media/hoge/`以下にマウントされると想定している
2. Step-1でのOSインストール時に自動生成された、microSDカードのPARTUUIDの値を調べる (この例では`bccf60c9-01`と`bccf60c9-02`)
```bash
$ cat /media/hoge/rootfs/etc/fstab | grep PARTUUID
PARTUUID=bccf60c9-01 /boot/firmware vfat defaults 0 2
PARTUUID=bccf60c9-02 / ext4 defaults,noatime 0 1
```
3. 手元PCの任意のディレクトリにてAGGRESSOR NETWORKのソースコードを取得して、2つのファイルを編集する
```bash
git clone https://github.com/bitset-jp/aggressor_network
cd ./aggressor_network/src
## ↓2箇所ある「PARTUUID=###CHANGE-HERE###」部分の右辺を2で調べたPARTUUIDの値へ置換する
vim ./etc/fstab
## ↓「PARTUUID=30bb3e2a-02」部分の右辺を同じく置換する
vim ./boot/cmdline.txt
```
4. 3にて一部編集したAGGRESSOR NETWORKのソースコードをmicroSDカードへ書き込む (下記の手順ではrsync時に念のため事前確認として `-n` (`--dry-run`) を行っている)
```bash
## boot領域
rsync -n -av ./boot/ /media/hoge/bootfs/
rsync -av ./boot/ /media/hoge/bootfs/
## ホーム領域
sudo rsync -n -av ./home/bitset/ /media/hoge/rootfs/home/bitset/
sudo rsync -av ./home/bitset/ /media/hoge/rootfs/home/bitset/
sudo mkdir /media/hoge/rootfs/home/bitset/.config/
sudo chown -R 1000:1000 /media/hoge/rootfs/home/bitset/
## /etc領域
sudo rsync -n -av ./etc/ /media/hoge/rootfs/etc/
sudo rsync -av ./etc/ /media/hoge/rootfs/etc/
sudo chown -R root:root /media/hoge/rootfs/etc/
## /opt領域
sudo rsync -n -av ./opt/ /media/hoge/rootfs/opt/
sudo rsync -av ./opt/ /media/hoge/rootfs/opt/
sudo chown root:root /media/hoge/rootfs/opt/
sudo chown -R 1000:1000 /media/hoge/rootfs/opt/bitset/
```
5. microSDカードのマウントを解除して取り出す
##### Step-3. ラズパイにRTCを接続してAGGRESSOR NETWORKを起動する
1. ボタン型電池を装填したRTCを、RTC上の「1」のPINがRaspbery Pi 400の「PIN1」に刺さるような位置で、Raspberry Pi 400に接続する。
2. Step-2で用意したmicroSDカードを用いてRaspberry Piを起動する
3. `Interface eth1 does not exist!` がCUI画面に繰り返し表示されるが、USB接続の有線LANアダプタを挿し直せば収まるようだ
4. (Enterキーを押せば) `login:`プロンプトが表示されるので、ユーザ「bitset」でログインする
5. CUIでの分割画面が表示されれば、AGGRESSOR NETWORKの起動は成功である
6. 時刻設定とRTCへの保存は`rtc`コマンドで行える
##### Step-4. 通信障害を発生させる
ここからはAGGRESSOR NETWORK自体の操作方法となるので、詳細については下記リンクの本家ドキュメントを参照するのがよいと思う。
- [3\. 操作説明 — AGGRESSOR NETWORK 操作説明書 0\.1 ドキュメント](https://bitset-jp.github.io/aggressor_network_man_ja/introduction.html)
今回の実験では、自宅PCにて行うfast.comの速度測定に、AGGRESSOR NETWORKでエミュレーションする通信障害によってどのような変化が現れるかを観測する。
1. 自宅にて、PCとルータの間のLAN配線を変更して、AGGRESSOR NETWORKを介在させるようにした。下記のような構成になる。
```mermaid
flowchart LR;
Hub --> Router[自宅ルータ]
Hub --> Server[(自宅サーバ)]
RPi -->|USB接続| eth1([eth1])
eth1 --> Hub{Hub}
PC[PC] --> RPi[Raspberry Pi w/eth0]
Router --> Internet(((the Internet)))
subgraph AGGRESSOR NETWORK
RPi
eth1
end
subgraph 基幹系
Hub
Router
Server
end
subgraph 部屋
PC
end
```
2. PCと自宅サーバ間の通信速度をLinuxのiperf3コマンドで計測し、AGGRESSOR NETWORKを介在させても940Mbits/sec前後で、介在前と変化がないことを確認した。
3. AGGRESSOR NETWORKに何も設定しない状態で での速度測定を行った。これが今回の基準値となる。
| コマンド | Download | Upload | Latency |
|----|------------|------------|--------|
| なし | 310Mbps | 420Mbps | アンロード済み4ms, ロード済み5ms |
4. 各種コマンドを使って障害 (通信速度の制限、パケットロス、遅延) を発生させた。fast.comの結果は次の表の通り。
| コマンド | Download | Upload | Latency |
|----|-----------:|-----------:|-------:|
| `rate 1Mbit` | 890Kbps | 2.7Mbps | 14ms/776ms |
| `loss 1%` | 190Mbps | 140Mbps | 4ms/6ms |
| `loss 5%` | 94Mbps | 21Mbps | 5ms/5ms |
| `loss 10%` | 24Mbps | 3.0Mbps | 4ms/14ms |
| `loss 20%` | 2.5Mbps | 410Kbps | 5ms/42ms |
| `delay 100ms 20ms 10%` | 2.2Mbps | 200Mbps | 180ms/207ms |
| `delay 300ms` | 2.9Mbps | 28Mbps | 604ms/605ms |
| `loss 5%` and `delay 100ms` | 410Kbps | 1.6Mbps | 205ms/206ms |
AGGRESSOR NETWORK自体とは関係のない考察だが、以上の実験により、パケットロスや長い遅延が発生する場合、実効速度に大きく影響することが一目瞭然となった。これらはネットワークの品質を下げてしまう大敵だなと再認識。ちなみに、上記よりも遅い`rate 64Kbit`も試してはみたものの、あまりにも通信速度が遅いと今度は名前解決にも時間がかかるために (PCの他の通信が帯域を使い切っていた可能性もあり)、timeoutでfast.comを開くことさえままならなくなった。
#### まとめ
AGGRESSOR NETWORKは、ネットワークエミュレーションにtcコマンド (私は今回初めて知った)、画面構成にはtmuxコマンドを用いつつ、Raspberry Pi OSをベースに使いやすく、電源ぶち抜きも行えるように大変巧くパッケージングされていることが分かった。
今後もしネットワークエミュレーションが必要な場面に私が遭遇したらば、このAGGRESSOR NETWORKをぜひ活用してみようと思う。また、ラズパイを用いる「電源ONしたらすぐ使える」システムのパッケージングの一例として、諸々参考にできそうな気がしている。
---
### Technics EAH-AZ100: 銀色イヤホン到着初日のレビュー - 2025-01-24
URL: https://remoteroom.jp/diary/2025-01-24/
#### 2台目の左右分離型イヤホン (TWS)
「ありのままの音が生きる、生音質へ。」という謳い文句は、私が求めている方向性と同じだ。そして中身を直接見ることはないだろうが、ボイスコイル部分に“[磁性流体](https://ja.wikipedia.org/wiki/%E7%A3%81%E6%80%A7%E6%B5%81%E4%BD%93)”というおもしろそうな素材を使っているところにも惹かれたので、実物を手に取ったことがないイヤホン「Technics EAH-AZ100」を購入した。手元には2025-01-23に届いた。
- [ワイヤレスステレオインサイドホン EAH\-AZ100|Hi\-Fi オーディオ \- Technics(テクニクス)](https://jp.technics.com/products/tws/az100/)
同時に、下記のレビューを読んでイヤーピースもぽちった。迷うことなくMサイズを選んだのは、過去に使っていたAZLAのMサイズが自分の耳に合っていたためだ。
- [【PR】最速検証!Technics EAH\-AZ100 で大人気の AZLA イヤーピース SednaEarfit シリーズを試してみた! \- イヤホン・ヘッドホン専門店eイヤホンのブログ](https://e-earphone.blog/?p=1515466)
|種別|商品名|購入価格 (税込)|購入店|備考|
|---|---|--:|---|---|
|イヤホン|[Technics EAH-AZ100-S](https://jp.technics.com/products/tws/az100/)|39,600円|[ヨドバシ.com](https://www.yodobashi.com/product/100000001008872042/)||
|イヤーピース|[AZLA SednaEarfit Crystal 2 Standard](https://www.aiuto-jp.co.jp/products/product_5225.php) Mサイズ|2,500円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0DJV9VM5F?tag=remoteroom-22&linkCode=ogi&th=1&psc=1)||
#### 写真メモ
開封の儀としての写真一式は撮り損ねた。今回新入りのTechnics EAH-AZ100を、手元のGoogle Pixel Buds Pro 2と比較もしつつ。
#### どんな音を鳴らすのか
##### 比較対象
最近の私が普段使っているヘッドホン・イヤホンは、自宅での [SONY MDR-M1ST + HiBy FC5 \[2022-10-29\]]()、乗り物や外出先での [Google Pixel Buds Pro 2 \[2024-09-26\]]() だ。したがってTechnics EAH-AZ100の感想はこれらとの相対比較になる。
EAH-AZ100にはさっそく、イヤーピースAZLA SednaEarfit Crystal 2を取り付けた。装着感は良好である (純正品のイヤーピースは全く試していない)。試聴に使用するスマホはGoogle Pixel 9 Pro XL、音楽アプリはSpotify (音質重視設定)。EAH-AZ100を設定するアプリ「Technics Audio Connect」では、音をできるだけ劣化させないように関連設定を次のようにした。
|設定項目|内容|
|---|---|
|LE Audio接続|LE Audio優先|
|接続モード|音質優先 (ヘッドホンのLDAC: ON)|
|マルチポイントの接続台数|1台|
|音途切れや遅延の抑制|自動|
|空間オーディオ|OFF|
|サウンドモード|ダイレクト|
##### 私感
原音に忠実な再現度 (Hi-Fi) の観点で言うと、Google Pixel Buds Pro 2はEAH-AZ100の比較対象に全くならない。Pixel Buds Pro 2は音を積極的に加工している様が拭えなくて、定位も落ち着かない。左右分離型の便利さを私に初めて味わわせてくれたものの、音楽的には我慢を強いられるイヤホンであった。
EAH-AZ100からは音をできるだけ作らない姿勢が感じられる。実際、音の質は、個人的に現時点のリファレンスセットだと定義している[SONY MDR-M1ST + HiBy FC5 \[2022-10-29\]]()の組み合わせにとても近いふうに聞こえる。
以前に [SONY WI-1000XとWI-1000XM2 \[2022-12-26\]]() の聴き比べをした際の楽曲を今回改めて、EAH-AZ100でも聴いてみた。
- 音源1: [A Whole New World (Aladdins Theme) / Peabo Bryson & Regina Belle](https://open.spotify.com/track/4tS8xQfyPGc7f4lJ1JP6BX?si=9b81efdd5d8a4b11)
- 音源2: [Midwest / Mathias Eick](https://open.spotify.com/track/6YTrSDQB5Li5iGkQRNeYpn?si=29d8f33c56664e8f)
- 音源3: [Shadow Feet / Brooke Fraser](https://open.spotify.com/track/0DD55tCwxn8CF5DkY1cjwg?si=d07dd65123f34e33)
- 音源4: [Symphony No. 5 in C Minor, Op. 67: III. Scherzo. Allegro](https://open.spotify.com/track/5OvHJYPAr3anFwzOSWcP13?si=eace578e3bfc4ed3)
総じての評価。Technics EAH-AZ100では、音の細部がよく聞こえ、付き纏う音のざらつきが極めて少ない。楽器の残響や、広がっていくように意図された音が散らばって小さくなっていく様子が、よく分かる。また、鋭くて粒の小さな、かつ飛び出してくるような音も綺麗だ。このような、様々な楽曲におけるいわゆる“正確な音”を楽しめるのは、良いイヤホン・ヘッドホンで音楽を聴く醍醐味であるなあと思う。
#### 参考写真
---
### 【読んだ本】 派遣者たち - 2025-01-16
URL: https://remoteroom.jp/medialog/2025-01-16_book-b0dl9skw8s/
原題『파견자들』。表紙イメージの色彩は強烈だ。これは地上世界の氾濫体を表しているのだろうから、逆に、地下世界の方はどんな色彩なんだろう?という想像も膨らむ。
人間が、触覚や聴覚を通じて菌のように周りと連帯するようになったら、どのような生き物になるだろうか。本作にはこのような思考実験の要素もあるように感じる。個人が個人たるゆえんだと一般的に捉えられる個体の中の自己意識が、自身だけの生体にとどまらなくなった場合に、私は私をどう認識するんだろう? なかなかに想像しがたいことを想像させてくれるSFだ。読みながら、ガイア理論を少し思い出したりもした。
---
### Python: 浅いコピーと深いコピーの違いが学べた実例 - 2025-01-12
URL: https://remoteroom.jp/diary/2025-01-12/
#### オブジェクトのコピー操作の種類
先日、複数のJSONファイルを読み込み、JSON中のデータを変換しながら一つのJSONファイルにまとめるPythonプログラムを書いていたところ、データの変換が意図通りにいかないという謎の現象にどハマりして、解決にN時間を要した。
結論から言うと、この謎の現象に遭遇した理由は、私がその時点ではオブジェクトに関する「浅いコピー」 (shallow copy) しか知らす、論理的には「深いコピー」 (deep copy) を行うべきところで「浅いコピー」を行っていたから。
この理由が判明したとき、私は気持ちがめちゃくちゃ晴れ晴れしたので、せっかくだからPythonネタとしてメモを残しておく。どなたかの参考になれば幸い。
#### コピー操作による違いが分かるプログラムと実行結果
前述の、浅いコピーと深いコピーの動作の違いを思い知ったPythonプログラムの、内部処理をデフォルメした版を`example_copy_deepcopy.py`として[掲載](#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0-example_copy_deepcopypy)する。
このプログラムは、リンゴとバナナの情報を、内部に定義された辞書を使って変換してから表示するものだ。実行結果を解説するとこのようになる。
- 変換元要素がid=1のリンゴのみの時、リンゴ🍎の色は「赤🟥」と意図通りに出力される。つまり `for example in input_dict['examples']` のループが回らない時 (for内の実行が1度だけの時) には`.copy()`と`copy.deepcopy()`の動作の違いは発覚しない。
- 変換元要素にid=2のバナナを加えた時、`.copy()`でテンプレートを複製した場合は、id=1のリンゴ🍎の、規格の情報としてid=2のバナナ🍌の情報が代入され、たとえば色は「黄🟨」として出力される。
```json
{
"id": 1,
"名前": "リンゴ🍎",
"規格": {
"色": "黄🟨",
"価格": 200
},
"生産国": "日本🇯🇵"
},
```
はて。なぜリンゴの色が黄色くなるのか? 正確には、名前や生産国には問題がないのに規格の中には情報がなぜ意図通りに代入されなかったのか?
- [copy \-\-\- 浅いコピーおよび深いコピー操作 — Python 3\.13\.1 ドキュメント](https://docs.python.org/ja/3/library/copy.html)
上記ページから引用する。
> 浅いコピー (shallow copy) は新たな複合オブジェクトを作成し、その後 (可能な限り) 元のオブジェクト中に見つかったオブジェクトに対する 参照 を挿入します。
> 深いコピー (deep copy) は新たな複合オブジェクトを作成し、その後元のオブジェクト中に見つかったオブジェクトの コピー を挿入します。
すなわち、浅いコピーでテンプレートを複製した場合には、コピー先の複合オブジェクト —今回の例では「規格」の中— に関しては新しいオブジェクトではなく元オブジェクトへの参照が挿入されており、その後にコピー先に対して値を代入したら「規格」の中に関しては実は元オブジェクトに変更が加わっていた、ということなのだ。
浅いコピーの仕様と使い方が面白いぐらいどハマりしちゃったな……と思える良い経験だった。
##### プログラム: example_copy_deepcopy.py
```python
###!/usr/bin/env python3
### example_copy_deepcopy.py (Ver.20250112)
### Ref: https://docs.python.org/ja/3/library/copy.html
import copy
import json
### 入力データを変換して出力する
def convert(method: str, input_dict: dict) -> list:
# データ変換の辞書を用意する
mapping_dict: dict = {
'banana': 'バナナ🍌',
'apple': 'リンゴ🍎',
'red': '赤🟥',
'yellow': '黄🟨',
'Japan': '日本🇯🇵',
'Philippines': 'フィリピン🇵🇭'
}
# 出力時のテンプレートを用意する
template_dict: dict = {
'id': None,
'名前': None,
'規格': {
'色': None,
'価格': None
},
'生産国': None
}
r: list = []
# 入力データ(list)の各要素の値を変換して出力データに追加する
for example in input_dict['examples']:
if method == 'copy': # .copy() でテンプレートを複製
output_dict: dict = template_dict.copy()
elif method == 'deepcopy': # copy.deepcopy() でテンプレートを複製
output_dict: dict = copy.deepcopy(template_dict)
# テンプレートにデータ変換後の値を代入する
output_dict['id'] = example['id'] # そのまま
output_dict['名前'] = mapping_dict[example['name']] # 辞書を使う
output_dict['規格']['色'] = mapping_dict[example['color']] # 辞書を使う
output_dict['規格']['価格'] = example['price'] # そのまま
output_dict['生産国'] = mapping_dict[example['country_of_origin']] # 辞書を使う
r.append(output_dict)
return r
### 結果を出力する
def print_result(d: dict) -> None:
print('### .copy() でテンプレートを複製した場合 (要素数: {:d})'.format(len(d['examples'])))
print(json.dumps(convert('copy', d), indent=2, ensure_ascii=False))
print('### copy.deepcopy() でテンプレートを複製した場合 (要素数: {:d})'.format(len(d['examples'])))
print(json.dumps(convert('deepcopy', d), indent=2, ensure_ascii=False))
if __name__ == '__main__':
# テストデータを1個作成
test_dict: dict = {
'examples': [
{
'id': 1,
'name': 'apple',
'color': 'red',
'price': 100,
'country_of_origin': 'Japan'
}
]
}
print_result(test_dict)
# テストデータに1個追加
test_dict['examples'].append(
{
'id': 2,
'name': 'banana',
'color': 'yellow',
'price': 200,
'country_of_origin': 'Philippines'
}
)
print_result(test_dict)
```
##### 実行結果
```
$ ./example_copy_deepcopy.py
##### .copy() でテンプレートを複製した場合 (要素数: 1)
[
{
"id": 1,
"名前": "リンゴ🍎",
"規格": {
"色": "赤🟥",
"価格": 100
},
"生産国": "日本🇯🇵"
}
]
##### copy.deepcopy() でテンプレートを複製した場合 (要素数: 1)
[
{
"id": 1,
"名前": "リンゴ🍎",
"規格": {
"色": "赤🟥",
"価格": 100
},
"生産国": "日本🇯🇵"
}
]
##### .copy() でテンプレートを複製した場合 (要素数: 2)
[
{
"id": 1,
"名前": "リンゴ🍎",
"規格": {
"色": "黄🟨",
"価格": 200
},
"生産国": "日本🇯🇵"
},
{
"id": 2,
"名前": "バナナ🍌",
"規格": {
"色": "黄🟨",
"価格": 200
},
"生産国": "フィリピン🇵🇭"
}
]
##### copy.deepcopy() でテンプレートを複製した場合 (要素数: 2)
[
{
"id": 1,
"名前": "リンゴ🍎",
"規格": {
"色": "赤🟥",
"価格": 100
},
"生産国": "日本🇯🇵"
},
{
"id": 2,
"名前": "バナナ🍌",
"規格": {
"色": "黄🟨",
"価格": 200
},
"生産国": "フィリピン🇵🇭"
}
]
```
---
### SIMフリールータ「PIXELA PIX-RT100」に楽天モバイル「Rakuten最強プラン」を組み合わせる - 2024-12-30
URL: https://remoteroom.jp/diary/2024-12-30/
#### インターネットを設置する
私の実家のテレビが先日、新しい4K有機ELの48インチに置き換わったという。映画好きの両親は、[St.GIGA](https://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%B3%E3%83%88%E3%83%BB%E3%82%AE%E3%82%AC)が流れていた頃から、WOWOWその他の衛星放送を録画することで映画を楽しんでいる。そこで私は、最新のテレビではネット配信の作品も楽しんだらいいんじゃない?と思いつく。これはネット環境があるなら何ら支障がない話だ。
しかし一筋縄ではいかないのは、両親二人のなんらかの意固地なこだわりによって、実家には以前からインターネットの固定回線が引かれていないこと。そこで私は帰省時に“インターネット”を持参して勝手に設置しちゃう作戦を考え、次の買い物をした。
|種別|商品名|購入価格 (税込)|購入店|備考|
|---|---|--:|---|---|
|SIMフリールータ|[PIXELA PIX-RT100](https://www.pixela.co.jp/products/network/pix_rt100/)|8,800円+送料900円|[HARDOFFオフモール](https://netmall.hardoff.co.jp/product/4560346/)|中古品|
|SIMカード|[Rakuten最強プラン](https://network.mobile.rakuten.co.jp/fee/saikyo-plan/)|1,078〜3,278円/月|[楽天モバイル](https://network.mobile.rakuten.co.jp/)||
##### もちろん懸念はある
今回は現地の調査を事前になにも行ってないので、電波状況に関しての懸念はある。楽天モバイルの電波状況が良好かどうか、ネット動画の視聴に必要な帯域が常時確保できるかは、実際に現地でやってみないと分からない。もし初志貫徹できない場合は、まぁ、次のことができるだけでも良しとしましょう……。
- 両親のiPhoneとiPadの、NTTドコモ網のデータ量制限有りSIMを使うデータ通信のうち、自宅内で行う分を今回設置するルータのWi-Fi経由にして、データ量制限無しの「楽天モバイル Rakuten最強プラン」の回線のほうへ回すこと
#### ほんとの開封の儀
PIXELA PIX-RT100は、ネジ4本を外すと筐体が開く構造だ。内部は基板一枚に全てが集約されておりそのシンプルさに驚いた。基板上にある数個のRFコネクタには特になにも接続されていない。基板の上部と左右両脇に、アンテナのようなパターンが見える。
おまけとして小ネタをご紹介。
- 上記写真の基板の左上に、筐体を被せているとアクセスできない「USB」と書かれた端子があった。そこにLinuxマシンを接続すると、PIX-RT100はlsusbでは`ID 05c6:f601 Qualcomm, Inc. MDM9207-MTP _SN:0FC96E38`として認識される。
- ACアダプターは「KSA-18W-120150VU」という型番のものが付属している。
#### 設定など
##### 楽天モバイルのSIMカード設定
PIX-RT100で楽天モバイルのSIMカードを使うための設定について。結論から述べると、下記の写真のように、PIX-RT100のプリセット設定から「Rakuten UN-LIMIT (APN=rakuten.jp)」を選択すると楽天モバイルでのデータ通信ができた。
手動で設定する場合は、下記ページの情報を参考にすることになると思う。
- [他社で利用していた製品でAPN設定は必要ですか? \| お客様サポート \| 楽天モバイル](https://network.mobile.rakuten.co.jp/faq/detail/00001495/)
##### リモート操作用の工夫
私がリモートから実家のネットワークの状態監視を行えるように、PIX-RT100に、Raspberry Pi 2をくっつけて有線接続しておくことにする (ラズパイにはTailscaleを導入し、microSDカードをReadOnly化した)。実際に調査を行うときは、Tailscale経由でラズパイにSSHログインして、PIX-RT100の管理画面を確認したり、LANをスキャンしたりする計画だ。
#### 追記: ルータ設置後の状況 \[2025-01-04\]
実際に現地にルータを設置したらどうだったか、追記します。
- 電波状況に恵まれていたようで、ダウンロード速度が速いときで50Mbps程度だった。これならネット動画の視聴にも問題なさそうだ
- 実家では「WOWOWオンライン」を契約中であるため、今回はWEBアカウントを新規作成した後、B-CAS番号などで既存の契約とWEBアカウントを連携することで、そのまま追加料金なしに「WOWOWオンデマンド」も視聴できるようになった
- 参考: [WOWOWオンデマンドは視聴料(税込2,530円)とは別に追加料金が必要?](https://support.wowow.co.jp/answer/61e8b8ade82bbf0019264e49/)
#### 参考リンク
- [4G/LTEと有線LAN対応の据え置きルーター「PIX\-RT100」レビュー、楽天モバイルと相性よし \| マイナビニュース](https://news.mynavi.jp/article/20220904-pixela/)
---
### ChromeOS FlexのウェブブラウザからVS Codeを使うための環境構築 〜Surface Go 3をリモート編集端末にする〜 - 2024-12-29
URL: https://remoteroom.jp/diary/2024-12-29/
#### 持ち歩きのためにブラウザでやる
突然だが、持ち歩き端末に求める仕様の話。私の場合それは、本サイトのブログ記事を存分に書けることが要件の一つとなり、細分化すると次のようになる。
持ち歩き端末に求める仕様:
: 静的サイトジェネレータの[Hugo](https://gohugo.io/)で使う、[Dropbox](https://www.dropbox.com/ja/)領域内のmarkdownファイル (ブログ記事) が編集できること ※Dropbox領域はクラウドのLinuxサーバにマウント済みなのでサーバ上で編集する形でもOK
: クラウドのLinuxサーバにSSHログインできること
: 最新のChrome系ウェブブラウザが利用できてスムースに動作すること
: 今どきの日本語IMEが利用できること
: 編集環境から[GitHub](https://github.com/)のリポジトリが操作できること
: [Obsidian](https://obsidian.md/)で使う、WebDAV領域内のmarkdownファイル (色々なメモ) が編集できること ※WebDAV領域はクラウドのLinuxサーバにマウント可能なのでサーバ上で編集する形でもOK
一方、手元には、[Linux Surface](https://github.com/linux-surface/linux-surface)の力を借りてUbuntu Desktopを導入済みだけども、使用感があまりしっくりきていない予備機的な[Surface Go 3]()がある。しっくりきていない理由はおそらく、Surfaceのカバーをパカッと開いてさっと使うという軽快さが求められる状況と、Ubuntuのフルデスクトップ環境が、相性抜群とは言えないためかもしれない。端的に言うと、Surfaceはタブレット寄りで簡素な、もっと軽いOSで動かしたい。
そこで心機一転、Surfaceの環境をリセットし、次の方針で再構築してみようと思いついた。ChromeOS Flexは、ChromeOSとぼぼ同等の機能を持つ、一般のx86系PCで動作するOSだ。
1. Surface Go 3にChromeOS Flexをインストールする
2. クラウドのLinuxサーバに、ウェブブラウザで使う純正VS Codeの環境を作る
この構築を行うと、ウェブブラウザからクラウドのVS Codeへアクセスすることで、ファイルのリモート編集などをこなせる。極端な話、手元の端末ではブラウザと日本語IMEが動けば良い。
なお、2019年4月には、ブラウザを中核にする同様の発想で [code\-serverでブラウザからVSCode Anywhere\! \[2019-04-18\]]() という記事を書いている。しかしこの時からなんともう5年以上経っており、発想は当時の焼き直しであっても別ハードウェアと最新のソフトウェアを使っての再トライなので、やる価値がないこともない、と考えることにする。
#### Step-1. Surface Go 3にChromeOS Flexをインストールする
##### Step-1-1. Surfaceのリカバリーイメージを入手
SurfaceのOSを入れ替える前に、いざとなればSurfaceを工場出荷状態に戻せる手段があることを念のため確認する。最低限必要なこととしては、次のページからWindows環境のリカバリーイメージがダウンロードできることを確認する。
- [Surface Recovery Image Download \- Microsoft サポート](https://support.microsoft.com/ja-jp/surface-recovery-image)
ダウンロード時には、Productとして「Surface Go 3」を、シリアル番号として、Surface本体裏側の「Microsoft」の文字の下に記載されている14桁の英数字を入力する。
##### Step-1-2. ChromeOS Flexのインストール
MacまたはWindowsのパソコンと、Surface Go 3に接続可能なUSBメモリを用意し、次の公式ページなどを参照しながら、ChromeOS Flexインストール用USBメモリを用意する。そしてSurfaceにChromeOS Flexをインストールする。
- [ChromeOS Flex インストール ガイド \- ChromeOS Flex ヘルプ](https://support.google.com/chromeosflex/topic/11551271?hl=ja&ref_topic=11618314)
- [Certified models list \- ChromeOS Flex Help](https://support.google.com/chromeosflex/answer/11513094?sjid=15323277109102549710-AP)
- [USB デバイスから Surface を起動する \- Microsoft サポート](https://support.microsoft.com/ja-jp/surface/usb-%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%8B%E3%82%89-surface-%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B-fe7a7323-8d1d-823d-be17-9aec89c4f9f5)
その結果、何の苦労もなく、Surface Go 3にChromeOS Flexをインストールできた。Wi-Fiやタッチスクリーンの動作に問題はない。ただし内蔵カメラはそもそもデバイスとしてOSに認識されておらず、利用不可の状態だ。内蔵カメラについては潔く諦めよう。肝心のOSの操作感は軽快で、タッチスクリーンの存在も相成って本物のChromebookのように使える。
#### Step-2. ウェブブラウザから使うVS Codeを導入する
このステップで構築する環境の通信については次の通り。
```mermaid
sequenceDiagram
participant WEBBROWSER as ウェブブラウザ
@Surface
participant WEBSERVER as Nginx
as リバースプロキシ
@Linuxサーバ
participant CODE as VS Code
(serve-web)
@Linuxサーバ
WEBBROWSER->>WEBSERVER:https [443/tcp]
WEBSERVER->>CODE:http [8000/tcp]
CODE-->>WEBSERVER:http応答
WEBSERVER-->>WEBBROWSER:https応答
```
##### Step-2-1. code serve-webの動作確認
1. VS CodeのサイトからCLI版のファイルをダウンロードする
- [Download Visual Studio Code \- Mac, Linux, Windows](https://code.visualstudio.com/Download)
2. ダウンロードしたファイルを解凍して、中身の実行ファイル`code`をサーバ上で実行してみる
```
$ ./code serve-web
*
* Visual Studio Code Server
*
* By using the software, you agree to
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).
*
Web UI available at http://127.0.0.1:8000?tkn=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
```
3. (必要ならばポートフォワーディングなどを駆使して) 表示されている`http://127.0.0.1:8000?tkn=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX`へウェブブラウザでアクセスすると、ブラウザ上でVS Codeが使えることがわかる
##### Step-2-2. code serve-webのサービス化
ここでのLinuxサーバのOSは、ちょっと古めだがUbuntu 22.04 LTSを想定している。また、ユーザ名は仮に「USERNAME」としている。
1. ユーザ権限で動作させる前提のサービスのファイルを作成する
```
$ cat ~/.config/systemd/user/code-serve-web.service
[Unit]
Description=Visual Studio Code serve-web
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=10
ExecStart=/home/USERNAME/bin/code --verbose serve-web --host 127.0.0.1 --port 8000 --without-connection-token
[Install]
WantedBy=default.target
```
2. 作成したサービスをstart and enableする
```
$ sudo loginctl enable-linger USERNAME # OS起動時からUSERNAMEのサービスが起動するように設定
$ systemctl --user daemon-reload
$ systemctl --user status code-serve-web.service # サービスとして認識されていることの確認
$ systemctl --user start code-serve-web.service
$ systemctl --user enable code-serve-web.service
$ systemctl --user status code-serve-web.service # start/enable後の状態確認
```
##### Step-2-3. Nginxでのリバースプロキシを設定
1. 次のような内容の設定ファイルを用意してNginxに適用する (ここでは、code serve-webのHTTP通信がリバースプロキシ経由でHTTPS公開されるように、かつBASIC認証が有効となるように設定している)
```
server {
listen 443 ssl http2;
(省略)
ssl_certificate /etc/letsencrypt/live/code.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/code.example.com/privkey.pem;
# BASIC認証
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd_code.example.com;
# code serve-webのリバースプロキシ
location / {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
```
2. ウェブブラウザで`https://code.example.com/`へアクセスし、BASIC認証が有効化されていること、VS Codeの画面が表示されることを確認する
#### まとめ
Step-1, Step-2で構築した環境を使って、Linuxサーバ上のmarkdownファイルを、ChromeOS Flexのウェブブラウザ (Google Chrome) から編集している画面は次のようになる。
ブラウザのアドレスバーが見えなくなる全画面表示に切り替えていると、この編集画面は、見かけの上でも反応性においても、ローカルで動作しているいつものVS Codeと比べて劣るところが私には特段感じられない。この連携技術は素晴らしい。
最後に参考情報として。VS Codeに備わる下記の「Remote Tunnels」機能を使うと、自分のVS Code環境がトンネルで接続されて、`https://vscode.dev/...`へアクセスしたブラウザから使えるようになる。
- [Remote Tunnels](https://code.visualstudio.com/docs/remote/tunnels)
単にブラウザでファイル編集が行えればいいという場合は、この「Remote Tunnels」の方法がお手軽かもしれない。今回は環境構築の愉しみと、反応性に影響するであろう通信経路をできるだけ短くすることを重視したため、「code serve-web」の方法を採用している。
---
### ビリヤード: JPAリーグ (2024年秋シーズン) に初参加して試合に10回出てみた記録 - 2024-12-28
URL: https://remoteroom.jp/diary/2024-12-28/
#### 初参加
##### きっかけ
遊び始めた近所のビリヤード場で「JPAへ参加するチームを作ろう」という話が持ち上がり、私もそのチームのメンバーとして2024年秋シーズンに参加することになった。参加する気持ちになったのは、自分がビリヤードを練習するモチベーションもしくは後押しになるんじゃないかな、と考えたからだ。また、日常生活に適度な変化を加えてみるためでもある。
##### JPAとチーム戦について
JPAとはJapanese Poolplayers Associationの略称で、本家サイトの[JPAについて](http://www.poolplayers.jp/about/)にあるように、全国主要都市のアマチュアプレーヤーを対象に、5人対5人のチーム対抗戦によるプールリーグを開催している団体だ。1チームには最大8人までメンバー登録でき、期間中に毎週開催されるチーム対抗戦には、メンバーのうち5人をチーム内でアサインして出場することになる。
JPAではプレイヤーの強さをスキルレベル (SL; Skill Level) という1〜9の指標で表している。初参加の私は、男性の最小値のSL2でのスタートになる。チームの強さには制約があり、チーム戦に出場するメンバー5人のSLの合計が23を超えてはいけない、という「23ルール」がある。SLは試合結果のスコアから都度算出され、シーズン中も対戦が進むにつれ各プレイヤーのSLが上下するので、その変動を見越したチーム編成が求められるとのこと。
#### 参加した試合
##### 記録
JPA 2024年秋シーズンでの、私が出場した試合の記録は次のとおり (計10試合)。Week No.1〜13はリーグ戦で、No.14〜15はプレーオフとしての試合である。
|Week No.|日付|SL|内容|感想|
|--:|---|--:|---|---|
|1|2024-09-18 (水)|2|Win|自分にとってのJPA初試合。試合中はマナーを守りつつ効率的に、スピーディに体を動かすことも必要だと分かった。|
|2|2024-09-25 (水)|2|Win|緊張はしたがそれを楽しみながらでもあった。|
|4|2024-10-09 (水)|3|Win|しょーもないミスが多かった (タイムでアドバイスいただいた時も)。心理的には緊張を通り越したような堅い心情。|
|5|2024-10-16 (水)|3|Lose|アウェイでなされる会話の雰囲気に乗れずかつ調子も出ない心理状況で、手玉を統制できず、落とせるものも落とせない。ビリヤードは第一に平常心が大切だ、と終わってからわかる。|
|8|2024-11-06 (水)|3|Win|1試合の中でずっと緊張はしていたが良い意味の緊張で、気が緩んでしまうことを抑制できた。しょーもないミスもしたけど結果はセーフ。|
|9|2024-11-13 (水)|3|Lose|ミスをしてはいけないときにミスをして、確度が高いチャンスを数回逃した。タイム時に教えられるショットがこなせないこともあった。そんな時はキューをまっすぐに出す基本を忘れている。|
|10|2024-11-20 (水)|3|Lose|相手のスキルレベルが高く、衝けるチャンスがあまり回ってこない展開であるのに、いつも以上にミスをする。悔しい。時間的な俯瞰が出来なくなってただインパクトをするだけの行為を何度もやってしまった。|
|12|2024-12-04 (水)|3|Win|より点差を付けて終えることができたであろう、私がもう少しミスを抑えられれば。客観的には惜しい・ミスしても仕方がない場面もあったらしいが。|
|13|2024-12-11 (水)|3|Lose|自分よりスキルレベルが低い相手との試合 (通算2回目)。このような場合、特に相手が調子良さそうなときは、こちらも素早く調子を上げて得点を積み重ねなければ、相手のほうが早く規定点数に達して自分は負けてしまう。それを証明してしまう内容だった。プレー自体は極めて真面目に、かつプレーを楽しみながらやれるのがおそらく自分が最も力を発揮する状態。この状態を初めから作ることがこれからも目標だ。|
|15|2024-12-25 (水)|3|Lose|相手の巧みさに参ったのか、的玉に当てるべき手玉の厚みがまるで分からなくなり、ミスが続いた。チームとして負けたら終わりのトーナメント戦だというのに呆然とするほどの大差を作ってしまった。今までの人生の中で五本指に入るぐらいの切実さで、時間が巻き戻って欲しかった。|
##### 総括
私個人としての、JPA 2024年秋シーズンでの成績は次の通り。10試合に出場して、勝敗は数字の上ではイーブンとなった。
||Win|Lose|
|---|---:|---:|
|JPA 2024年秋シーズン 私個人の最終成績|5|5|
しかしながら、上記の感想に何度も記録してきたように、負けた試合では、私が精神的に弱くなって自身の力を出し切れずに終わってしまったパターンばかり。言い換えると、自身の力を存分に出し切ったものの相手が圧倒的に強くて負けた、というパターンは無かった気がしている。このような自分の弱さは、ビリヤードのガチの試合に幾度も出場することにより本当に痛感でき、それはきっと意義のあること。自己診断に役立っている気がする。
なお、所属チームとしては、神戸三宮ディビジョン内の8チームのうち2位 (2nd place, 1st place in the league) という成績でJPA 2024年秋シーズンを終えた (公式記録: [JPA's poolplayers blog: ☆☆ JPA AWARD 2024 Fall ☆☆](https://poolplayersblog.blogspot.com/2025/01/jpa-award-2024-fall.html))。チームのキャプテンからは、最後に、これからもJPAやJCLに参加するならば、「個人戦としてではなく団体戦として挑むこと。つまり仲間の力や知識を使うこと」というアドバイスをいただいた。
#### 参考情報
##### 参考リンク
- [JPA \| 日本プールプレイヤーズアソシエーション \- Japanese Poolplayers Association](http://www.poolplayers.jp/)
- [JPA \| JPAメンバー情報](http://www.poolplayers.jp/standings/)
- [Japan CSI Pool League](https://csi-pool.jp/)
##### 主な利用アイテム
- グローブ: 私の使っている色が見当たらない。もしや絶版かな。
- チョーク: どうせならと変な形のものを選択。後で人から聞いた情報によると、ゴミが出にくいチョークらしい。
- チョークケース: 必然的に六角形のチョークを納められるケースを選択。
- チョークホルダー: チョークを身体にくっつけておくと便利かな、かつ試合運びのスピーディさに貢献するかな、と思って購入。
- エクステンション: 試合を行うにつれ、やっぱり持っておくべきものなのかなと感じて購入。
- 教本: 超的確な内容。ここウン十年、いかに適当にビリヤードをやっていたかが思い知らされる。特にプラクティス編をもっと熟読したい。
- ティップツール: そろそろタップをメンテナンスするべきな気がして。ただしまだ開封していなくて未使用。
##### 練習時間とメモ
JPA 2024年秋シーズンへの参加が決まった2024-08-31以降から、当該リーグを終えるまでの間の、私の練習時間を記録する (試合実施時の時間を除く)。また、途中からはメモを残すようにした。
|日付|練習場所 (基本は兵庫県神戸市内)|分 \[5分単位に切捨\]|メモ|
|---|---|--:|---|
|2024-09-01 (日)|灘区某所|90||
|2024-09-08 (日)|灘区某所|150||
|2024-09-09 (月)|灘区某所|220||
|2024-09-15 (日)|灘区某所|235||
|2024-09-18 (水)|灘区某所|25+45||
|2024-09-21 (土)|兵庫県三田市某所|90||
|2024-09-22 (日)|灘区某所|265|手玉に左回転をかけ気味。それはキューを振ったあとにキュー先が右へ逃げているためだと考える。キューを最後までぶらさず握ること。また、利き目 (左眼) に合わせて、顔を右側へもっと移動させること。|
|2024-09-24 (火)|灘区某所|205|一人練習。後半、壊滅的に入らなくなってきた。事後の感想としては、手玉をもっとじんわり撞くようなイメージを確立したい。|
|2024-10-01 (火)|灘区某所|210|一人練習。手玉の先へキューを進めること、玉を撞く際にプロ選手の姿を真似るような意識をだんだんと心がけるようになった。|
|2024-10-05 (土)|灘区某所|325|一人練習。クッションの練習を少し心がけたり、必要時にはキューを長く持ってみたり。的玉を狙い通りに落とせる確率が、ちょっとばかり上がった気がする。|
|2024-10-08 (火)|灘区某所|35+270|一人練習の朝練と、教えてもらいつつの夜練。撞いた後にキュー先が浮きがちなこと、インパクトの際に身体全体がびくっと緊迫しちゃっていることを指摘いただき、直そうとしている。購入してから何もやっていなかったキューの先の、タップのメンテを初実施。|
|2024-10-10 (木)|灘区某所|90|チームのメンバーと、JPA試合を模したポイントを数えながらの練習。しかしながら私はお試し気分で、確率の低い撞き方を何度も選択してしまっていたかもしれない。|
|2024-10-13 (日)|東灘区某所|75|次の試合会場の偵察を兼ねて。コーナーポケットの穴が広いように感じた。手玉の真ん中をまじに正確に撞くことを意識した。|
|2024-10-15 (火)|灘区某所|35|一人練習。短い時間の練習は、まずい点を発見はできるもののそれを解決するまでの時間が無い気がする。今日のまずい点は、厚みの読みが尽く外れるところ。|
|2024-10-15 (火)|東灘区某所|130|一人練習。結局手を抜いて適当になっている時があると思う。残身のような“基本しっかり”を意識しよう。|
|2024-10-16 (水)|灘区某所|50|チーム練習。土手際の撞き方をおさらいしたりなど。|
|2024-10-28 (月)|灘区某所|170|チーム練習。ドローショット・フォローショットの反復練習。そのあとペアを組んで練習試合。|
|2024-11-02 (土)|灘区某所|225|一人練習。黙々と、基礎練習というよりは、台の上に玉を数個転がした状態での一人疑似試合をやった。|
|2024-11-05 (火)|灘区某所|250|最初はチームメンバーと、そして一人練習。長い時間やっていたが、習得したいことは一つだけ。どうして私は撞くときにふと気を抜くとキュー先が上がってしまうんだ。抑えろよ!>私|
|2024-11-10 (日)|灘区某所|315|最初はチームメンバーと、そして一人練習。キュー先が上がってしまう問題をとことん抑えるために、自分に暗示を掛けることにした。ブリッジを作っている手には常に10kg程度の荷重がかかっていると思い込もう (もしくは実際に台への力をかけ続ける)。帰宅後、必要性を強く感じてきたエクステンションをとうとう購入した。|
|2024-11-12 (火)|灘区某所|340|最初はチームメンバーと、そして一人練習。練習試合では負け。一人練習では、的球の制御がだんだんできなくなり、自分の悪いところを探して直すまでに時間がかかった。|
|2024-11-18 (月)|灘区某所|130|一人練習。狙いの確度がとても下がっており、スランプかもしれないなんて思い始めた。そして最後の方では、狙いのズレは、顔を手玉から後ろへ遠ざけるよりは近づけるほうが小さくなるような気がしてきた。|
|2024-11-19 (火)|灘区某所|135|一人練習。前回見つけた、狙い通りに行きやすい姿勢をキープするように意識して、まあまあだった。|
|2024-11-30 (土)|灘区某所|120|一人練習。|
|2024-12-03 (火)|灘区某所|115|一人練習。|
|2024-12-07 (土)|灘区某所|115|一人練習。|
|2024-12-09 (月)|灘区某所|110|模擬試合など。|
|2024-12-10 (火)|灘区某所|205|模擬試合など。上手すぎる人と撞くと、こちらは逆に緊張しなくて、力が良い感じに抜けておおよそ狙った通りに手玉を運べる気がする。|
|2024-12-22 (日)|灘区某所|100|一人練習+模擬試合。次の的玉 (ネクスト) への手玉の運びを重視しながら、いろいろ試した。|
|2024-12-23 (月)|灘区某所|170|一人練習。満足行くまで撞いていたら、意外に長居することになった。フォームに関しては以前よりも自然に固められている気がする。まだ防げていないのは、時々、ストロークの途中で気が抜けて、フォームが緩んでしまうこと。|
|合計時間 (分)||5,045|(約84時間)|
---
### 【観た映画】 ダイ・ハード (字幕版) - 2024-12-28
URL: https://remoteroom.jp/medialog/2024-12-28_movie-b00pqgocs4/
- 視聴: [YouTube](https://www.youtube.com/watch?v=K4eZDnt6nio)
原題『Die Hard』。収められない仕事を納めたことにして、映画にノンストップで浸りたくなった。あまり迷うことなくチョイスした本作は間違いなく定番であり、何度観たのか分からないほど内容も覚えているのだけども、時代を超える、教科書のような出来の娯楽映画だなぁと再び認識した。登場人物のそれぞれのキャラを立たせた脚本になっていて、展開がちゃんと劇的で、音楽とストーリーの絡みが抜群だ。私が思いついた言葉のままに書くならば、“チャーミング”なまとまりをしていると思う。
#### 鑑賞リンク
---
### 【読んだ本】 自分で作るハブダイナモ風力発電+ - 2024-12-19
URL: https://remoteroom.jp/medialog/2024-12-19_book-b08xmbdnxn/
最近の自転車の前輪に備わっているのをよく見かける「ハブダイナモ」が、風力発電の発電機としても応用できるという発想を、私は本書を読むことで初めて自分に定着させることができた。自転車の発電機として、私は「リムダイナモ」しか知らなかったのだが、あきらかに構造的にハブダイナモの方が発電効率が良さそうである。
本書には、このハブダイナモを用いた風力発電を軽度の工作で容易に作る工夫や、発電効率を高めるための工夫が詰まっていて、これは自作のとっかかりとして実用的な書籍だと思われる。中古のハブダイナモを仕入れて、ホームセンターで材料を仕入れて、いっちょ作ってみようか!という気分になった。
P.S. ただ残念ながら、誤字が残っていたり、表現の校正が足りてない部分がある気がする (出版元「総合科学出版」の[当該ページ](https://www.sogokagaku-pub.com/spgp_dynamo-furyoku.html)には、正誤表の掲載はされていないようだ)。
- P.19: 「消費動力」と「消費電力」を書き間違えていそうな箇所がある。
- P.21, P.70: 日本語では“磁力”や“発電量”という単語を使って述べるほうが取り違えのなさそうな文脈で、単に「パワー」という言葉が使われている。
---
### 【読んだ本】 風をつかまえた少年 - 2024-12-13
URL: https://remoteroom.jp/medialog/2024-12-13_book-b07rzxmd7k/
原題『The Boy Who Harnessed the Wind』。[“海”に関する本を先日読み終えた]()ので、次には“風”を思い浮かべた。そこで自分が昔から好きな「風力発電」をキーワードにして検索を行ったところ、本書を見つけた。
本書の舞台は、アフリカ大陸南東部の内陸に位置するマラウイ共和国だ。読者は、農業を営む一般的な家庭に育つ少年の目線を通じて、自然と直につながったその地方の、容易ならない現実を否応なしに知ることになる。燃料や電気の入手コストは高く、日常的に豊かに利用するなんてことはできない。旱魃が続けば、家族の食事は一日一食に限られ、食料の備蓄は文字通りに底をつく。命の危機までのマージンがとても小さい環境だ。
しかし少年は、ふと浮かぶ好奇心を探究心へと変えて堅く維持し、学費が払えず学校へ通えなくなっても図書室を使い、構想の現実化にトライし続けた。その一つが自転車のダイナモを応用した風力発電。携帯電話を持てる人も、電力がある店に出向いてから充電する必要があったのが少年の家で充電できるようになったり、日が暮れたら寝付くしかない生活様式を、夜は電球で部屋を照らしてラジオを楽しむように変えることも出来る。私個人的には、けっして豊富ではない廃品を近隣地域から探し、それを分解したりうまく加工して工作物の材料にしている苦労にも、すごさを感じた。
そうやって少年は、周囲に "entrepreneurship" (アントレプレナーシップ; 起業家的行動能力) を見いだされて成長を重ねる。本書はそんな過程が分かる半生記だ。貧しさから脱するため、自分たちの手でアフリカを変えたいという確固たる意志に、心を打たれる。
#### 参考リンク
- 本書を元にした映画:
---
### 【読んだ本】 海の歴史 - 2024-11-29
URL: https://remoteroom.jp/medialog/2024-11-29_book-4833422972/
原題『HISTOIRES DE LA MER』。海というものを大きく捉えた書物を突然に読みたくなり、図書館で入手した。著者はフランスの方のようで、国益や国防に関して述べる部分においては、フランスの過去を鑑みるとともに今後を叱咤激励するようなニュアンスがある。この部分では、他の部分と気色の違う著者個人の思い入れを特に感じて、ちょっと面白く思った。
本書の内容は、海から捉えた人類史といった様相のもので、人類にとっての海を生物的にそして文化的に捉え直し、海の重要性への注視を促していた。地球史で学ぶところの海の生成過程、海を発祥とする生命の誕生と陸への進出や、人類が船を発明して海を渡るようになってからの、資源確保の場、交易の動線、そして戦場としての海まで網羅されている。
そして終盤は、現代の海産資源の枯渇と環境汚染の問題に至る。地球の海を痛めては人類は生き続けられないという強い警告と、状況緩和の改善案を示して本書は終わる。今度私が海を見に行ったら、その視覚的な広さや深さだけではなくて、海の持つ時間的な奥行きや人類の依存度も、暗にそこにみえてくるんじゃないかなと思える。
---
### 【観た映画】 ドラえもん のび太とブリキの迷宮 - 2024-11-22
URL: https://remoteroom.jp/medialog/2024-11-22_movie-b003rsde7s/
- 視聴: DVD
1993年公開のドラえもん長編映画。このドラえもんは、表現に容赦のないシリアス系だと思った。それがこの時代では普通だったのかもしれない。戦闘機から銃撃され、爆撃されて建物は破壊され、ドラえもんは拷問で高電圧をかけられる。力尽きた兵士が行き倒れている。まだ戦後50年も経過していない時だからか、戦争の直接的な体験が意識的に描き込まれていることを強く感じた。
そして、本作の世界観はおもちゃの色彩とかわいさに満ちていたが、メルヘンよりもなかなかのScience Fictionだなと思った。中盤まで、このストーリーだとどうやって窮地を脱出するのだろうか?と真剣に先読みを試みつつ、楽しんで観た。
---
### 【読んだ本】 警視庁科学捜査官 難事件に科学で挑んだ男の極秘ファイル - 2024-11-08
URL: https://remoteroom.jp/medialog/2024-11-08_book-b0djbfp8qs/
NHKの下記『新プロジェクトX』を観て、登場されている方の著書があることを知って選択。
- [オウムVS\.科捜研 〜地下鉄サリン事件 世紀の逮捕劇〜 \- 新プロジェクトX〜挑戦者たち〜 \- NHK](https://www.nhk.jp/p/ts/P1124VMJ6R/episode/te/3LZR2KGMVZ/)
事前にテレビ番組を観ているから、内容のイメージが湧きやすくて読書のスピードが上げられるんだなと思いきや、読みやすい最も大きな理由は本書の文体にある。装飾を感じさせない整理された言い回しがされており、記述がストレートにこちらの頭へ書き込まれる気がした。著者の思考というか、実直な人となりの表れなのであろう。また、犯罪捜査において事実を明らかにするために科学を極める、その極め方が超人的な著者のスタンスが、本書の神髄であって私の心に大きく残っている。警視庁の組織を変えて科学捜査のポジションを確立していく様の記録部分には、ビジネス小説に引けを取らないスリルがある。しかし、立ち上がった役職がその後どうなったか分からない、なんてこともやはりあるのだな。
多様な事件の事実を捜査員らが追究している本書を、ノンフィクションの面白さをまだ知らないであろう子どもに読んで欲しくて文庫版を渡してみている。読み通してくれるだろうか、はてどうだろうか。
---
### 【観た映画】 アメリカン・カオス (字幕版) - 2024-11-07
URL: https://remoteroom.jp/medialog/2024-11-06_movie-b07mlh4ywz/
- 視聴: [YouTube](https://www.youtube.com/watch?v=FfokaVrGy1o)
原題『American Chaos』。日本時間での日付が11月6日へ変わった頃に、第45代大統領選挙を迎えようとするアメリカ合衆国の共和党支持側の市民らを取材している本作を観た。それから24時間ほど経ってこうやって感想を記そうとするまでの間に、私の予想とは違ったほうの、第47代大統領が選出された模様だ。
米国市民ではない一観客としての私にとって本作は、エコーチャンバー現象の描写部分がぐいぐい迫ってくるようであり、胸の苦しさを覚える内容だ。多層的な物事を捉えるメタ視点や状況改善のための段階的な未来志向というものを今は脇に置いている市民層、そして、突破口として既存の政府やリーダーにはない“新しい素質”に期待する感情が、独自のロジックで武装して大勢を得て沸点を迎えようとしている高まりが描かれる。
本作の2024年版も、作られうる状況になってしまったのか……。これから先の人間社会にはどういうことが起こりうるのか、良し悪しは別にしてその潮流はどのような感情の主から生まれうるのか、このような知見がまずは得られる作品かもしれない。混沌とした未来は、転ぶ先がわからない。
#### 観賞リンク
---
### Proxmox VE上のLXCでsnapdを使う場合に必要な設定 - 2024-11-05
URL: https://remoteroom.jp/diary/2024-11-05/
#### LXCを使いこなすべくメモ
OSSの仮想化環境「[Proxmox Virtual Environment](https://www.proxmox.com/en/proxmox-virtual-environment/overview)」で利用できるLXC (Linux Containers) ゲスト内で、snapdを使おうとしたら、追加設定が必要だったのでメモしておく。手元で試したPVEやLXCの情報は次の通り。
|項目|内容|
|---|---|
|Proxmox VE|pve-manager/8.2.7/3e0176e6bb2ade3b (running kernel: 6.8.12-3-pve)|
|PVE CPUアーキテクチャ|x86_64|
|CT Template|ubuntu-24.04-standard (ubuntu-24.04-standard_24.04-2_amd64.tar.zst)|
ちなみに、この知見は、具体的にどんな場合に必要だったかというと、LXCゲスト内で[Certbot](https://certbot.eff.org/)のsnap版を利用しようとした場合であった。
#### 設定手順
##### Step-1. PVEホスト: LXCゲストに「fuse=1」を追加設定
PVEホストで`pct`コマンドを使って、対象のLXCゲストのfeatures設定に`fuse=1`を追加する。ここでは、PVE上の対象とするLXCゲストのIDを105としている。
```
#### ID:105の現状設定を確認
$ sudo pct config 105
arch: amd64
cores: 4
features: nesting=1
hostname: test-snapd
memory: 512
net0: name=eth0,bridge=vmbr0,firewall=1,hwaddr=XX:XX:XX:XX:XX:XX,ip=dhcp,type=veth
ostype: ubuntu
rootfs: local-lvm:vm-105-disk-0,size=8G
swap: 512
unprivileged: 1
#### ID:105の「features」設定を変更して確認
$ sudo pct set 105 --features nesting=1,fuse=1
$ sudo pct config 105
arch: amd64
cores: 4
features: nesting=1,fuse=1
hostname: test-snapd
memory: 512
net0: name=eth0,bridge=vmbr0,firewall=1,hwaddr=XX:XX:XX:XX:XX:XX,ip=dhcp,type=veth
ostype: ubuntu
rootfs: local-lvm:vm-105-disk-0,size=8G
swap: 512
unprivileged: 1
$ sudo pct reboot 105 # LXCゲストを起動状態から再起動する場合
$ sudo pct start 105 # LXCゲストを停止状態から起動する場合
```
##### Step-2. LXCゲスト: snapdとsnap「hello-world」をインストール
LXCゲストにsnapdパッケージをインストールする。その後にsnapの「hello-world」をインストールする。後者はなぜか1回目は不成功で、2回目で成功するのだが、この謎については深く調査していない。どうやら動くのでヨシ。
```
#### snapdインストール
### apt install snapd
#### 「hello-world」インストール: 1回目は不成功
### snap install hello-world
error: cannot perform the following tasks:
- Setup snap "core" (17200) security profiles (cannot reload udev rules: exit status 1
udev output:
Failed to send reload request: No such file or directory
)
#### 「hello-world」インストール: 2回目で成功する
### snap install hello-world
2024-11-04T15:31:28Z INFO Waiting for automatic snapd restart...
hello-world 6.4 from Canonical** installed
#### 「hello-world」を実行する
$ hello-world # SSHログインした状態で
Hello World!
```
##### 参考: エラーメッセージの例
###### Step-1の「fuse=1」を追加していない場合
PVEホストにて、LXCゲストのfeatures設定に`fuse=1`を追加していない場合。LXCゲストでのsnap「hello-world」インストール時に、次のエラーが発生する。
```
### snap install hello-world
error: system does not fully support snapd: cannot mount squashfs image using "squashfs": mount:
/tmp/syscheck-mountpoint-2023654386: mount failed: No such file or directory.
```
#### 参考リンク
- [pct\(1\)](https://pve.proxmox.com/pve-docs/pct.1.html)
- [snapd \| Proxmox Support Forum](https://forum.proxmox.com/tags/snapd/)
---
### 【読んだ本】 マン・カインド - 2024-10-23
URL: https://remoteroom.jp/medialog/2024-10-23_book-b0dgl7vhyb/
2024年の少し先からなら普及が始まるかもしれない、現実感ありそうな技術の産物が数々登場してくる。読書中、私の頭の中はそれらをビジュアライズするためにぶんぶん回っていた。
本書の物語のテーマは何か?という問いがあるなら、私は“人類”と答えるかなあ。生命体がますます生き長らえようとする戦略は続く。戦闘は実弾を用いるフォーマット化された試合のような形で続く。これらが“続く”という設定に確固たる異論を持てそうにないのは、そうさせる何かが人類にあるからなのか、どうなのか。などと言葉を放ってみたくなるのは本書の面白さ故である。
---
### reMarkable Paper Pro: 電子ペーパー端末の軽い紹介と少しHacking - 2024-10-22
URL: https://remoteroom.jp/diary/2024-10-22/
#### ePaperタブレット + SSH
カラーな電子ペーパー端末「[reMarkable Paper Pro](https://remarkable.com/store/remarkable-paper/pro)」の登場を知り、タブレット欲しい病が再発した。紹介動画を見ていると、ペンの反応性は良さそうで気ままに落書きができそうだし、11.8インチならばA4サイズのPDFファイルを等倍近くで閲覧できることは確実。数日間の悩みを経て2024-10-03に発注し、2024-10-11に着荷した。
タブレット選びの際、比較対象として常に心に引っかかるのは絶対王者「iPad」だ。しかしながら私は、非常に偏った端末に惹かれる性の導きに従い、無難を志向する理性を捨てて~~変態~~シンプルなほうを選んだわけである。さらにreMarkableタブレットは、Developer Modeに切り替えるとSSHログインが可能になるという。この端末は面白そうとしか思えぬ。
- 紹介動画:
##### 購入したもの
|種別|商品名|金額(円)|購入店|
|---|---|--:|---|
|電子ペーパータブレット|reMarkable Paper Pro|86,000|[remarkable.com](https://remarkable.com/store/remarkable-paper/pro)|
|カバー|Book Folio (Mosaic weave, Cobalt)|23,880|[remarkable.com](https://remarkable.com/store/remarkable-paper/pro/folio)|
|セット割引|Folio discount|-1,880||
|専用ペン|Marker Plus|21,800|[remarkable.com](https://remarkable.com/store/remarkable-paper/markers)|
|合計|(3点)|129,800||
すべてを純正品で揃えた状態。私の発注時にはreMarkable Paper Proのカバーは上記の純正品しか見当たらなかったため、選択の余地無しだった。しかし現在 (記事執筆時点) ではサードパーティ製の下記のような安価なカバーも存在していそうだ。出費を抑えるための選択としてありと思われる。
#### セットアップ〜使い方
電子ペーパータブレットとしての一般的なレビューは、他の方々の詳細な記事や動画に任せて、ここでは簡単に。
- reMarkable Paper Proの開封時の画面。ここから電源をONしてセットアップを進めていく。UIは全体的にモノクロームで統一されていて、これがカラーの電子ペーパー搭載端末であることを思い起こさせない。ミニマム感が渋い
- Wi-Fiを設定してインターネットと接続後、本体ソフトウェアを最新のVersion 3.14.4.0へ更新した
- 重量は本体+カバー+専用ペンの合計で実測「777g」。本体の金属フレーム部分やペンの質感はとても良い
- 使い方については全般を網羅している公式動画を一通り眺めるのが良い。たとえば03:50からは「2本指タップでUndo」といったジェスチャーによる操作方法が紹介されており、百聞は一見に如かずで必見だ
##### ジェスチャーによる操作方法
ジェスチャーによるreMarkable Paper Proの操作方法を、上記の動画から抜き出して表にまとめた。
|操作|内容|
|---|---|
|画面上端から下へスワイプ|ファイルを閉じる|
|右へスワイプ|前のページに戻る|
|左へスワイプ|次のページに進む|
|最後のページでの「+」ボタン|新規ページを追加する|
|上下のスワイプ|ページのスクロール|
|2本指でパン|ページ内の移動|
|2本指のピンチ|ページの拡大|
|2本指のタップ|Undo|
|3本指のタップ|Redo|
|2本指で画面上端から下へスワイプ|ドロワーを開く (Recent, Favorites)|
|画面右上から下へスワイプ|クイック設定を開く|
|画面下端から上へスワイプ|スライドバーにてファイル内のページ切り替え|
##### 注意点, Tips
- ソフトウェアキーボードで打つことができるのはアルファベット圏の文字のみで、日本語変換は現時点では実装されていない。この仕様を私は購入前には把握済みで、キーボードはほとんど使わないつもりなので特に問題なし
- 内蔵の読書灯 (リーディングライト) の明るさは、おそらく大部分の人が抱く期待値よりも暗いだろう。はっきり言って手元にあるKindle Paperwhite (M2L4EK) よりも暗い
- ウェブ上のHTMLコンテンツは、[Read on reMarkable \- Google Chrome Extension](https://support.remarkable.com/s/article/Read-on-reMarkable-Google-Chrome-Extension)というChrome拡張を使うとreMarkable端末へ持ち出して読むことができる。「Send as text (EPUB形式への変換と思われる)」と「Send as PDF (PDF印刷と同じ?)」の2つのモードがある
- ペンで2点間の直線を描こうとするとき、1点目から線を引き始めて2点目でペンをしばらく画面上に置いたままにしておくと、フリーハンドの軌跡が完全な直線へと変換されて、かつペン先の動きに直線の終端が追従してくるので、直線の角度を調整してから確定することができる。下記動画の26:50から実演されている
#### 少しHacking
Linux端末としてはどうか。ここからはreMarkable Paper ProへのSSHアクセスを用いるので、公式ページの次の手順でSSHログイン可能なように設定変更しておく。
- [Developer mode for the reMarkable Paper Pro](https://support.remarkable.com/s/article/Developer-mode) > Accessing your reMarkable Paper Pro via SSH
##### 日本語フォントの導入
初期状態では、PDF/EPUBファイルのファイル名の日本語部分、EPUBファイル本文の日本語部分が文字化けするので、日本語フォントを導入する。私は[Noto Sans Japanese](https://fonts.google.com/noto/specimen/Noto+Sans+JP)と[Noto Serif Japanese](https://fonts.google.com/noto/specimen/Noto+Serif+JP)を次のように保存した。保存後、フォントキャッシュの再作成`fc-cache -fv`を行う。なお、厳格に検証できていないのだが、本体再起動もその後に必要かもしれない。
```
root@imx8mm-ferrari:~# ls -al ~/.local/share/fonts/ttf/noto/
drwxr-xr-x 2 root root 4096 Oct 11 17:15 .
drwxr-xr-x 3 root root 4096 Oct 11 17:25 ..
-rw-r--r-- 1 root root 36 Oct 11 17:05 .uuid
-rw-rw-r-- 1 root root 5722924 Aug 7 17:27 NotoSansJP-Black.ttf
-rw-rw-r-- 1 root root 5728064 Aug 7 17:27 NotoSansJP-Bold.ttf
-rw-rw-r-- 1 root root 5725300 Aug 7 17:27 NotoSansJP-ExtraBold.ttf
-rw-rw-r-- 1 root root 5737436 Aug 7 17:27 NotoSansJP-ExtraLight.ttf
-rw-rw-r-- 1 root root 5736988 Aug 7 17:27 NotoSansJP-Light.ttf
-rw-rw-r-- 1 root root 5729568 Aug 7 17:27 NotoSansJP-Medium.ttf
-rw-rw-r-- 1 root root 5733060 Aug 7 17:27 NotoSansJP-Regular.ttf
-rw-rw-r-- 1 root root 5726852 Aug 7 17:27 NotoSansJP-SemiBold.ttf
-rw-rw-r-- 1 root root 5736120 Aug 7 17:27 NotoSansJP-Thin.ttf
-rw-rw-r-- 1 root root 8031052 Sep 23 22:44 NotoSerifJP-Black.ttf
-rw-rw-r-- 1 root root 8033348 Sep 23 22:44 NotoSerifJP-Bold.ttf
-rw-rw-r-- 1 root root 8032452 Sep 23 22:44 NotoSerifJP-ExtraBold.ttf
-rw-rw-r-- 1 root root 8037984 Sep 23 22:44 NotoSerifJP-ExtraLight.ttf
-rw-rw-r-- 1 root root 8039096 Sep 23 22:44 NotoSerifJP-Light.ttf
-rw-rw-r-- 1 root root 8037964 Sep 23 22:44 NotoSerifJP-Medium.ttf
-rw-rw-r-- 1 root root 8039120 Sep 23 22:44 NotoSerifJP-Regular.ttf
-rw-rw-r-- 1 root root 8036184 Sep 23 22:44 NotoSerifJP-SemiBold.ttf
```
##### パッケージ管理のToltec →現時点は未対応
カスタムLinuxで動作しているreMarkableタブレット向けに、[Toltec](https://toltec-dev.org/)というパッケージ管理システムがコミュニティによって開発されているらしい。これがreMarkable Paper Proでも利用できるのだろうと、購入前の調査時には安直に考えていたのだが、話はそう簡単ではないと後に分かった。下記のIssueによると、reMarkable Paper Proの本体ソフトウェアのVersion 3.14系に、Toltecが対応する見通しはまだ無いとのこと。現時点では仕方がない……。
- [3\.4\+ Support · Issue \#859 · toltec\-dev/toltec · GitHub](https://github.com/toltec-dev/toltec/issues/859#issuecomment-2347338368)
##### Tailscaleに挑戦 →とりあえずは動かせる
Toltecが使えればTailscaleはパッケージ導入できるそうだが、とりあえずここではTailscaleを自力でビルドして動かしてみることにする。先代の端末reMarkable 2へTailscaleを導入している下記ページの方法を参考にしている。
- [Tailscale on reMarkable 2 \| cceckman's World Wide Web site](https://cceckman.com/writing/rm2-tailscale/)
なお、今回の試みにおいて完全には解決できていない問題が1つあり、Step-4で暫定的な対策をしている。
###### Step-1. 手元PCにて準備
1. 手元PC (今回はUbuntuを使用) にの[ソースコードをダウンロード](https://raw.githubusercontent.com/cceckman/homelab/refs/heads/main/remarkable/tailscale.sh)する
2. ダウンロードした`tailscale.sh`のバックアップを作成する: `cp -a ./tailscale.sh{,.original}`
3. tailscale.shを次のように編集する: `vim ./tailscale.sh`
- TSPATH: 単に好みのPATHへ変更
- GOARCH: reMarkable Paper Proは「arm64」っぽいので変更
- ln -sf...: Tailscaleのstateを本体再起動時も保持するための変更
- tailscale up -ssh: [TailscaleのSSH機能](https://tailscale.com/kb/1193/tailscale-ssh)を使うためオプション追加
- rsync ... root@: 実験環境のreMarkable端末の状態に合わせて変更
```
$ diff -up tailscale.sh{.original,}
--- tailscale.sh.original 2024-10-29 12:00:21
+++ tailscale.sh 2024-12-19 14:05:30
@@ -31,7 +31,8 @@ build_tailscale() {
# Build Tailscale:
# https://github.com/fako1024/go-remarkable
# This is where I usually download things - not necessarily GOMODCACHE.
- TSPATH="$HOME"/r/github.com/tailscale/tailscale
+ # TSPATH="$HOME"/r/github.com/tailscale/tailscale
+ TSPATH="$HOME"/tmp/src/github.com/tailscale/tailscale
if ! test -d "$TSPATH"
then
echo >&2 "Downloading tailscale source..."
@@ -50,7 +51,8 @@ build_tailscale() {
# Use https://tailscale.com/kb/1207/small-tailscale,
# and tags+flags pulled from build_dist.
echo >&2 "Building tailscale..."
- GOOS=linux GOARCH=arm GOARM=7 \
+ # GOOS=linux GOARCH=arm GOARM=7 \
+ GOOS=linux GOARCH=arm64 \
go build \
-C "$TSPATH" \
-o "$CONTENT"/tailscale.combined \
@@ -104,14 +106,17 @@ tailscale up
echo >&2 "Starting tailscale..."
systemctl enable tailscaled
systemctl restart tailscaled
-tailscale up
+#tailscale up
+tailscale up -ssh
+ln -sf $TSINSTALLPATH/tailscaled.state /var/lib/tailscale/tailscaled.state
EOF
chmod +x "$CONTENT/setup.sh"
echo >&2 "Connecting and uploading..."
ssh -o ConnectTimeout=5 root@"$TARGET" \
"echo >&2 'Connected to reMarkable!'; rm -rf $TSINSTALLPATH; mkdir -p $TSINSTALLPATH" >&2
-rsync -avz "$CONTENT" "$TARGET:$TSINSTALLPATH"
+# rsync -avz "$CONTENT" "$TARGET:$TSINSTALLPATH"
+rsync -avz "$CONTENT" "root@$TARGET:$TSINSTALLPATH"
echo >&2 "Running setup script..."
# Execute under systemd-run, so even if our network connection hangs up due to
```
4. 実行権限を付与する: `chmod +x ./tailscale.sh`
###### patchファイルを保存済みの場合
上記Step-4での`diff -up tailscale.sh{.original,}`の出力を、`tailscale.sh.patch`というファイルに保存している場合、2回目以降のpatchは次の方法で行える。
1. ダウンロードした`tailscale.sh`をバックアップする: `cp -a ./tailscale.sh{,.original}`
2. patchを当てる: `patch tailscale.sh tailscale.sh.patch`
###### Step-2. tailscaleを起動
1. reMarkable端末へSSHログインする: `ssh -l root # USB接続なら10.11.99.1`
2. デフォルトでのmount状態を確認する
```
### mount -v | grep 'on / '
/dev/mmcblk0p2 on / type ext4 (ro,relatime)
### mount -v | grep 'on /etc '
overlay on /etc type overlay (rw,relatime,lowerdir=/etc,upperdir=/var/volatile/etc,workdir=/var/volatile/.etc-work)
```
3. ストレージの書き換えが行えるようにmount状態を変更する
```
### umount -l /etc
### mount -o remount,rw /
```
4. 手元PCでtailscale.shを実行する: `./tailscale.sh # 10.11.99.1`
```
$ ./tailscale.sh
(途中省略)
Running setup script...
Running as unit: run-r50e661dcf08b40999cb907ee5f751e99.service
```
5. reMarkable Paper ProにSSHログインして、上記実行の最後に表示されたサービス名のstatusを確認する
```
$ ssh -l root # 10.11.99.1
### systemctl status run-r50e661dcf08b40999cb907ee5f751e99.service
(途中省略)
Oct 20 14:42:16 imx8mm-ferrari setup.sh[1298]: To authenticate, visit:
Oct 20 14:42:16 imx8mm-ferrari setup.sh[1298]: https://login.tailscale.com/a/**************
```
6. 表示されているURLへ手元PCのブラウザでアクセスする: `open https://login.tailscale.com/a/**************`
7. tailscaledサービスの状態を確認する
```
### systemctl status tailscaled.service
● tailscaled.service - Tailscale node agent
Loaded: loaded (/etc/systemd/system/tailscaled.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2024-10-20 14:42:12 UTC; 4min 20s ago
```
###### Step-3. Tailscaleの動作確認
1. 手元PCからpingを打ってみる: `tailscale ping `
2. 手元PCからTailscale SSHでログインしてみる
```
$ ssh -l root
### Tailscale SSH requires an additional check.
### To authenticate, visit: https://login.tailscale.com/a/************** # 別ブラウザで認証を行う
(途中省略)
root@imx8mm-ferrari:~#
```
###### Step-4. 本体再起動後の対応
1. reMarkble Paper Pro本体を再起動してしまうと、Tailscaleをサービス化しているファイルが削除された状態になる。そこで、Tailscaleを再びサービスとして動作させる次のスクリプトをreMarkable端末で実行する (私は`~/after-reboot.sh`として保存している)。
```bash
###!/bin/bash
set -eux -o pipefail
### after-reboot.sh (Ver.20241022)
ln -sf ~/tailscale/tailscaled.service /etc/systemd/system/tailscaled.service
mkdir -p /var/lib/tailscale/ ; ln -sf ~/tailscale/tailscaled.state /var/lib/tailscale/tailscaled.state
systemctl daemon-reload
systemctl start tailscaled.service
systemctl status tailscaled.service
```
##### 追記 \[2024-10-24\]: スリープ時の壁紙を変更
次のページに、スリープ時に表示される壁紙を差し替える方法が紹介されていた。簡単なのでさっそくやってみた。
- [How to change sleep screen / is sleeping on reMarkable Paper Pro \| IT Blog](https://www.informaticar.net/how-to-change-sleep-screen-is-sleeping-on-remarkable-paper-pro/)
1. お好みの画像を横1620x縦2160pxのPNG形式で保存する (たとえば上記ページで紹介されている、reMarkableが布団に潜っている画像は1404x1872のようなので拡大しておく)
2. reMarkble Paper Proで`mount -o remount,rw /`してから、用意した画像を`/usr/share/remarkable/suspended.png`へ上書きする
#### 仮の結論
reMarkable Paper Proは最新ハードウェアだけあって、落書き用の電子ペーパー端末としてかなり優れていると思う。直感的に操作できて、使っていてストレスの少ない、素朴で素敵な道具だ。しかし本記事ではその感触にはあえて触れず、むしろhackableかどうかを確認してみようとした。
reMarkable Paper ProをLinux端末としてみた場合の現段階の結論としては、やはりパッケージ管理システムを利用できる状態が待ち遠しい。先代の機種と同様にOSやファイルシステムの解析が進んでいけば、それは間違いなく成し遂げられるだろうと予想する。なお、私の環境ではTailscaleはとりあえず開通できたので、たとえば自前のサーバからファイルの定期的なrsyncを行うような仕組みは作れそうな気がする。
#### 参考リンク
- [about 5 times brighter front light available in developer mode : r/RemarkableTablet](https://www.reddit.com/r/RemarkableTablet/comments/1g0x5tm/about_5_times_brighter_front_light_available_in/)
- [Learn How to Access Your reMarkable Paper Pro Through the Command Line](https://www.simplykyra.com/blog/learn-how-to-access-your-remarkable-paper-pro-through-the-command-line/)
- [Getting Started — reMarkable Guide](https://remarkable.guide/)
- [reMarkable Paper Proを購入したので雑感、レビュー|tatsu](https://note.com/tatsutaka/n/nf6ae67826497)
---
### 【読んだ本】 ザ・ビリヤードA to Z ベーシック編 / プラクティス編 / アプリケーション編 - 2024-10-14
URL: https://remoteroom.jp/medialog/2024-10-14_book-4894224232-4894224275-4894224402/
3冊からなるシリーズもの。電子書籍版は登場しておらず物理本である。ちなみに、古本屋で発見できると格安での入手が可能。青い表紙のベーシック編については1度目の通し読みをしたところ。プラクティス編はまだ途中で、その後アプリケーション編を必要に応じて読み進めていくつもりだ。
ビリヤードの日本語教本を仮に書店で手に取って探した場合、内容の専門性、納得度において本書を上回るものは見つけられないだろうと思う。本書から教わることの一つ一つを、練習や試合の時に少しずつ実践することができれば、自身のビリヤードの確度を高めることができそうだ。また全域に渡って、長く楽しめるスポーツであるビリヤードを正しい形で普及させたい、という想いを感じさせる真摯な語りが溢れていて、いわばプロフェッショナルの気概に背筋が伸びる。
---
### RS-232シリアル通信を透過的にモニタする小道具「Data Tap」を使ってみた - 2024-09-29
URL: https://remoteroom.jp/diary/2024-09-29/
#### シリアル通信を見たい
RS-232接続で行われている2点間のシリアル通信の内容を、やんごとなき事情で読み取らなくてはならない。そんなとき、「Data Tap」というシンプルな道具が使えるらしいと知った。2点間の通信のそれぞれのTXとRXの信号を、第3の端子にRXとしてまとめて出力してくれる回路が入っているのであろう。高価な専用機器としては「RS-232Cアナライザー」というものがあるらしいがまずは安価な範囲でね……。
ウェブ検索で見つけられる手頃なData Tapは下記のようにいくつかあるようで、ここでは後者の「BB-9PCDT」を入手した。仕様がわかる[データシート](https://advdownload.advantech.com/productfile/PIS/BB-9PCDT/file/ULI-252D_RS-232-DataTap_DS(11-Aug-2023)20230814111534.pdf)も公開されている。
- [RS\-232 ComProbe II for Serialtest; Monitors and captures Asynchronous RS\-232 Serial Communications](https://fte.com/products/SerialAnalyzers-RS232.aspx)
- [BB\-9PCDT \- Advantech](https://www.advantech.com/en/products/e5643de2-9201-4fdd-bcfd-abdc46704272/bb-9pcdt/mod_eee04a22-b291-423e-a3ff-8fac478c548d)
本記事では、初めて触るRS232 Data Tapの動作確認として、2点間の通信内容を第3の端子 (Tap Connector) から読み取るところまでやってみる。
##### 準備するもの
|種別|商品名|購入店|
|---|---|---|---|
|RS-232 Data Tap|[ADVANTECH ULI-252D BB-9PCDT](https://www.advantech.com/en/products/e5643de2-9201-4fdd-bcfd-abdc46704272/bb-9pcdt/mod_eee04a22-b291-423e-a3ff-8fac478c548d)|[Mouser Electronics](https://www.mouser.jp/ProductDetail/Advantech/BB-9PCDT?qs=stqOd1AaK7%252B3ZGlYAGkeaw%3D%3D)|
今回のBB-9PCDTの端子形状に合う、下記のUSB-シリアル変換ケーブルも、1本+2本で計3本準備した。
- [UGREEN 20201 (USB to DB9 RS-232 Female Adapter Cable, 1.5 Meter)](https://www.lcsc.com/product-detail/USB-Cables-Data-Cables_span-style-background-color-ff0-UGREEN-span-20201_C5222297.html): 1本
- [UGREEN 20210 (USB to DB9 RS-232 Male Adapter Cable, 1.0 Meter)](https://www.lcsc.com/product-detail/UsbCable-DataCable_UGREEN-20210_C3015060.html): 2本
#### 簡易Sniffing実験
##### Step-1. USB-シリアル変換ケーブルのデバイス認識を確認
1. Ubuntu 22.04のPCに、USBハブを介してUSB-シリアル変換ケーブルを3本接続する。
2. ケーブルがUSBデバイスとして認識されていることを確認する。
```bash
$ lsusb | grep Serial
Bus 001 Device 009: ID 067b:23a3 Prolific Technology, Inc. USB-Serial Controller
Bus 001 Device 008: ID 067b:23a3 Prolific Technology, Inc. USB-Serial Controller
Bus 001 Device 010: ID 067b:23a3 Prolific Technology, Inc. USB-Serial Controller
$ ls -a /dev/ttyUSB*
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2
```
3. 補足情報として。[Hardware for Linux](https://linux-hardware.org/) > [Prolific Technology ATEN Serial Bridge](https://linux-hardware.org/index.php?id=usb:067b-23a3)の情報によると、`067b:23a3`なデバイスはUbuntu 22.04環境において接続するだけで利用できることがわかる (ドライバの別途インストール不要)。
##### Step-2. Data Tapの通信テスト
1. BB-9PCDTの裏面DIP Switchを「1=ON, 2=ON, 3=ON, 4=OFF」に設定する。
2. Ubuntu環境にminicomを導入し、`sudo minicom -s`して諸々お好みの設定を行い、「"dfl" に設定を保存」して最後に「Minicom を終了」を行う。ここで行った設定がデフォルトとして扱われる。今回の実験では次の内容とした。
```bash
$ cat /etc/minicom/minirc.dfl
# Machine-generated file - use "minicom -s" to change parameters.
pu baudrate 9600
pu rtscts No
pu localecho Yes
pu addlinefeed Yes
pu linewrap Yes
```
3. 端末画面を3つ用意し、それぞれの画面で次のコマンドを起動する。下記では`/dev/ttyUSB2`に接続されたケーブルが第3の端子 (Tap Connector) につながっている想定であるが、`ttyUSB`の末尾の数字は、ケーブルの認識順や、実際のUSB端子とRS232端子との接続の組み合わせによって変わるので、各自突き止めること。
|端末名|起動するコマンド (-o=--noinit, -D=--device)|
|---|---|
|端末1|`minicom -o -D /dev/ttyUSB0`|
|端末2|`minicom -o -D /dev/ttyUSB1`|
|端末3|`minicom -o -D /dev/ttyUSB2 --displayhex` ※ttyUSB2 = Tap Connectorの想定|
4. 次のことを確認する。なお、端末3では`--displayhex`しているので受信内容は16進数表記になる。
- 端末1に文字を打ち込んだら、文字が端末1 (localecho) と端末2 (通信相手) と端末3に表示されること。
- 端末2に文字を打ち込んだら、文字が端末2 (localecho) と端末1 (通信相手) と端末3に表示されること。
5. さらに次のことを確認する。
- 端末3に文字を打ち込んだら、文字が端末3 (localecho) には表示されるが、端末1と端末2には何も変化がないこと。
6. 以上により、端末1と端末2のシリアル通信内容をTap Connectorに接続した端末3でモニターできていることと、端末1と端末2の間で行われる通信に端末3が介入できないことがわかる。
7. 端末3でのモニター内容をファイル保存する場合は、`minicom -o -D /dev/ttyUSB2 --capturefile=serial.log`すればよい。通信中に別の端末4で`tail -F serial.log`することも可能だ。
##### 余談: ZMODEMあったなぁ……
昔懐かしいパソコン通信で重宝していた、[ZMODEM](https://ja.wikipedia.org/wiki/ZMODEM)によるファイル転送を、端末1と端末2の間でやってみることもできた。しかし今回の実験環境では、端末1からZMODEM送信を開始する際に、端末2だけではなく端末3のminicomもZMODEM受信を始めようとするので、端末3のZMODEM受信はCtrl+Cで中止する必要がある。その後は、ZMODEM通信の様子が端末3でモニターできる。
#### 参考リンク
- [SANS Industrial Control Systems Security Blog \| Collecting Serial Data for ICS Network Security Monitoring \| SANS Institute](https://www.sans.org/blog/collecting-serial-data-for-ics-network-security-monitoring/)
---
### Google Pixel Buds Pro 2: 到着初日の感想 - 2024-09-27
URL: https://remoteroom.jp/diary/2024-09-26/
#### 初の左右分離型イヤホン
完全ワイヤレス・左右分離型という自分にとって初めての形状、かつPixelシリーズの一員というだけの理由で、実物を手に取ったことがないイヤホン「Google Pixel Buds Pro 2」を購入した。手元には2024-09-26に届いた。
- [Google Pixel Buds Pro 2: 快適なフィット感の AI 搭載イヤホン](https://store.google.com/jp/product/pixel_buds_pro_2)
|種別|商品名|購入価格 (税込)|購入店|備考|
|---|---|--:|---|---|
|イヤホン|Google Pixel Buds Pro 2|36,800円|[Google Store](https://store.google.com/jp/product/pixel_buds_pro_2)|貯まっていたGoogle ストア クレジットを使って購入し、それによってまた6,800円分のクレジットを取得|
##### どんな音か
まずは一体どんな音がするのか、自分なりのレビューは以下の通り。試聴は、アプリ「[Google Pixel Buds](https://play.google.com/store/apps/details?id=com.google.android.apps.wearables.maestro.companion)」にて、イコライザー (EQ) はフラット、ボリュームEQはOFF、空間オーディオはOFFに設定した上で、Spotifyの音源を再生して行っている。ファームウェアは執筆時点で最新の「release_2.117」に更新済み。
- ANC (アクティブノイズキャンセリング) をONにしている場合、小音量で聴いている限りは自分の聴感において許容範囲内の音を鳴らす
- ANCをONにして音量を上げ気味にして真面目に聴き込む場合は、音の“着色”に私はざわざわして、ちょっと耐え難いぞという気持ちになる。様々な音楽が同じように加工されるかのような不安定な音色になって聴こえ、かつ空間の表現がどこか不自然になる。この音の具合は、周辺ノイズを強烈にキャンセリングしている作用の裏返しなのだろうな……
- ANCをOFFにして音量を上げ気味した場合は、なかなか素直な鳴りでよろしいと思えるし、素性として左右のセパレーションも抜群な気がする
ちなみに、私が普段使っている環境は [SONY MDR-M1ST + HiBy FC5]() もしくは [SONY WI-1000XM2]() で、上記の感想はこれらとPixel Buds Pro 2との比較になる。
##### 私的な総評
体にまとわりつくものがないこの左右分離型イヤホンは、装着感が第一に軽快で気に入った。落としてなくさないように気をつけよう。イヤホンの外側の面を長押しすることで、ANC設定の切り替え (ノイズキャンセリングと外部音取り込みの切り替え) が出来たりする操作性も、便利が良さそうだ。
また音に関してはANC (アクティブノイズキャンセリング) ON時の音の変化は気になるものの、このイヤホンは、乗り物の中などの騒音環境で気軽に装着し続けることができるデジタル耳栓として使うのであれば、使い勝手・ANCによる遮音性・音のバランスが保たれた最適なものの一つに思える。
#### 参考写真
---
### 私的に不可避なスマホ: Google Pixel 9 Pro XL - 2024-08-25
URL: https://remoteroom.jp/diary/2024-08-25/
#### 日常AI
2024年05月に急に思い立って、スマホをXiaomiのミドルレンジのものからGoogle Pixel 8 Pro (128GB) へ切り替えて、それから3ヶ月でGoogle Pixel 9 Pro XL (256GB) へ切り替えた。
私は撮影した写真をAIで加工する機能には興味ないのだが、言葉と現実世界の画像をAI (大規模言語モデル) が扱う能力に関して、メジャーどころの一つであるGeminiが気になっている。そして日常AIの世界的な潮流を知るためには、日常生活の中でどのように使えるのかを自分で試していかなきゃと思っているので、最新のAIが載るスマホへの機種変更はいわば不可避。やるしかない (ぽちっ)。
#### 購入したもの
Pixel 9 Pro XLと、関連で購入したものについては次の通り。
|種別|商品名|購入価格 (税込)|購入店|
|---|---|--:|---|
|スマートフォン|[ Google Pixel 9 Pro XL (256GB, Hazel)](https://store.google.com/jp/product/pixel_9_pro?hl=ja)|※ 192,900円|[Google.com](https://store.google.com/jp/product/pixel_9_pro?hl=ja)|
|画面保護フィルム|[Spigen Pixel 9 Series GLAS\.tR EZ Fit Screen Protector](https://www.spigen.com/products/pixel-9-series-glas-tr-ez-fit-screen-protector)|3,199円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0D854KDG3?tag=remoteroom-22&linkCode=ogi&th=1&psc=1)|
|ケース|[Cyrill Pixel 9 Series UltraColor Midori](https://www.cyrill.com/products/pixel-9-series-ultracolor?variant=45728345686260)|1,849円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0CWSHTR72?tag=remoteroom-22&linkCode=ogi&th=1&psc=1)|
(※) Googleストアでは現在2024年09月02日23:59までのキャンペーンが行われており、Pixel 9 Pro XLの購入には50,100円分のGoogleストアクレジット (有効期限2025年09月01日) が付いてくる。また、キャンペーンでのGoogle Pixel 8 Proの下取り価格は88,000円となる見込みなので、Pixel 9 Pro XL (256GB) は心理的には「54,800円」ぐらいの買い物よね……、と自分を無理矢理に納得させることもできなくはない。
重量に関しては、今回のケースを付けたGoogle Pixel 9 Pro XLの重量を計ると「270g」であった。これを地面に落下させると本体や画面の破壊に至る可能性があきらかに高そうなため、付与される上記のGoogleストアクレジット (50,100円分) は、真っ先に補償サービスの「[Preferred Care](https://store.google.com/jp/magazine/preferred_care?hl=ja)」 (29,000円) に充てるのが安心かもしれない。2024年09月後半に出る、イヤホンの[Google Pixel Buds Pro 2](https://store.google.com/jp/product/pixel_buds_pro_2?hl=ja) (36,800円) に充てたい気持ちもあるので少し迷うところ。
#### 所感
非常に浅い内容になってしまうけども、Gooele Pixel 9 Pro XLに関して所感を述べると次の通り。
- カメラの絵作りは無理している感じがなくて、ハイエンド機らしさがあり、Pixel 8 Proと同じく私好みだ
- 一般的なアプリの動作速度、タッチ操作に対する反応速度、顔認証と指紋認証の反応速度については、Pixel 8 Proと同じく不満を感じない
つまりハードウェアの素性としては、私には使い切れないほど余裕たっぷりに思えて問題なし。あとは「AIスマホ」として、どれほど賢いアシスタントへと変化してくれるのであろうか、使用感がどれほど重たくなるのか変わらないのか、バッテリー消費がどうなるかが、気になる。
なお、Pixel 9 Proにお試し期間6ヶ月の特典が付いている、有料版のGemini Advancedはまだ試していない。ここ数日温まってきたホットなジャンルなので、様々な方が発するであろうレビュー情報がウェブ上でもうちょっと掴めるようになってから試してみるつもり。
- [Gemini Advanced \- Google の最も高性能な AI モデルにアクセス](https://gemini.google/advanced/?hl=ja)
#### 参考写真
- 「EZ Fit」と銘打ったフィルムということで、スマホの画面上の完璧な位置に貼り付けるための高精度な枠が付いていて驚いた。やり直すことなく一発で貼れる。取り付け方の動画は[Glas\.tR EZ FIT for Google](https://install.spigen.com/installation-guide/glas-tr-ez-fit-for-google)にある。
- 深緑という珍しい色である点と、Spigen由来の定番の保護性能に期待してこのケースにした。
---
### 空気のように当たり前になるな - 2024-08-17
URL: https://remoteroom.jp/diary/2024-08-17/
今日は[鹿屋航空基地 史料館](https://www.mod.go.jp/msdf/kanoya/toukatu/HPzairyou/1-8siryoukann/1-8siryoukann.html)を訪ね、「特攻隊員関係者」としてちょっと問い合わせなどして、スタッフさんにとても親切丁寧に教えていただいた。この史料館をはじめ、各所にある貴重な戦時資料が、永久に保存されることを願う気持ちが今まで以上に強くなった。
夜に放送された次のテレビ番組では、上記問い合わせの関連で知った、私の大叔父と同じ艦爆隊で飛んだ特攻隊員に関して、詳細に取り上げられていた。それには少し驚きもあったし、様々な境遇の想像がより加速するように。
- [“一億特攻”への道 〜隊員4000人 生と死の記録〜 \- NHKスペシャル \- NHK](https://www.nhk.jp/p/special/ts/2NY2QQLPM3/episode/te/LGZ4WP8G82/)
知るほど頭が重たくなる。世の空気が狂った時、戦争の悲惨さも空気のように当たり前になる。この歴史を非常に強く感じた日。それは過去だけでもう沢山だ。
---
### 【観た映画】 ブラックベリー - 2024-08-13
URL: https://remoteroom.jp/medialog/2024-08-13_movie-b0ch3f7457/
- 視聴: [YouTube](https://www.youtube.com/watch?v=XeFcs6ajYkY)
原題『BlackBerry』。いけてるものを作ったぞと思った瞬間。小さなチームの奇跡的なパワーを感じた夜。適材適所が最高にうまくいって、まぶしい未来を掴めたとき。自分にもこのような経験がなくはないため、懐かしいあの時の光景を見ているような没入感に浸った。
しかし、当初のカルチャーから脱皮せざるを得ない段階。まだ言語化できていない一般ユーザの望みを他社が具現化した衝撃。危機から逃れようとして、袋小路にて悪手を放ってしまった、会社としての終わりの始まり……。
2人の共同CEOの両方に、私は部分部分で共感していたようだった。本作は技術指向とビジネス指向のせめぎ合うリアリティがとても面白く、気に入ったので1回目の観賞の後にすかさずリプレイして2回目を観た。こんなことはめったにしない。
#### 鑑賞リンク
---
### DockerからPodmanへ切り替えてみたく、Ubuntu 22.04と24.04でのインストールとcomposeを試した - 2024-08-10
URL: https://remoteroom.jp/diary/2024-08-10/
#### Podmanっておいしい?
ソフトウェアの開発作業を容易くし、また実行環境を構築しやすくしてくれるコンテナ技術。コンテナを実行するエンジンの定番と言えば[Docker](https://www.docker.com/ja-jp/)ですが、Podmanというものの存在も知りました。Podmanは「Red Hat® エンジニアとオープンソース・コミュニティ」によって開発されているOSSです。
- [Podman とは](https://www.redhat.com/ja/topics/containers/what-is-podman)
> Podman が他のコンテナエンジンと異なるのは、デーモンを使用しないという点です。つまり、コンテナを実行するのに、root 権限を持つプロセスを必要としません。
私は、これまで使ってきたDocker (最近はrootless mode) とこのPodmanとの、権限に関する上記の基本思想の違いに興味惹かれました。Podmanのセキュア度合いについては、次のスライドにも詳しく説明されています。
- [Docker互換のセキュアなコンテナ実行環境「Podman」超入門 \- Speaker Deck](https://speakerdeck.com/devops_vtj/dockerhu-huan-nosekiyuanakontenashi-xing-huan-jing-podman-chao-ru-men)
そこで今回は、自分の趣味の範囲で使うコンテナエンジンをDockerからPodmanへ切り替えることができるのか、実験して確認してみます。実験の内容は、「docker compose向けに用意した次の拙作リポジトリを、podmanでcompose upすることができるか」です。
- [mah\-jp/sphinx\-docker\_gen\-html\-pdf: Sphinxでのドキュメンテーション環境の構築で楽するための、各種設定を実施済みのSphinxのDockerコンテナ](https://github.com/mah-jp/sphinx-docker_gen-html-pdf)
実験は、仮想マシンを使って次の3つのパターンでやってみました。最初に結論を言いますとすべて成功です。各実験パターンの記述は、それぞれの環境におけるPodmanインストール方法の紹介にもなっています。
- 実験1: Ubuntu 24.04 LTSと標準のPodman (v4.9.3)
- 実験2: Ubuntu 22.04 LTSと標準のPodman (v3.4.4)
- 実験3: Ubuntu 22.04 LTSとopenSUSE提供のPodman (v4.6.2)
なお、podmanのサブコマンドとしてcomposeが使えるようになったのは、[Running Compose files \| Podman Desktop > Prerequisites](https://podman-desktop.io/docs/compose/running-compose#prerequisites) によると「4.7.0以上」です。したがって、バージョン的に`podman compose`できない実験では`podman-compose`を使っています。
#### 実験について
##### 実験1: Ubuntu 24.04 LTSと標準のPodman (v4.9.3) → 成功
|項目|内容|
|---|---|
|OS|Ubuntu Desktop 24.04 LTS (x86_64)|
```bash
#### パッケージの最新化と必要分をインストールする
$ sudo apt update ; sudo apt upgrade ; sudo apt dist-upgrade
$ sudo apt install vim git
#### OS・環境を確認する
$ cat /etc/os-release | grep VERSION= ; uname -r -p
VERSION="24.04 LTS (Noble Numbat)"
6.8.0-40-generic x86_64
#### インストールできるpodmanのバージョンを確認する
$ apt-cache show podman | grep Version
Version: 4.9.3+ds1-1ubuntu0.1
Version: 4.9.3+ds1-1build2
#### podman関係をインストールする
$ sudo apt install podman podman-compose
#### インストールしたpodmanとpodman-composeのバージョンを確認する
$ podman version
Client: Podman Engine
Version: 4.9.3
API Version: 4.9.3
Go Version: go1.22.2
Built: Thu Jan 1 09:00:00 1970
OS/Arch: linux/amd64
$ podman-compose version
podman-compose version: 1.0.6
['podman', '--version', '']
using podman version: 4.9.3
podman-compose version 1.0.6
podman --version
podman version 4.9.3
exit code: 0
#### podmanに必要なregistries.confを用意する
$ mkdir -p ~/.config/containers/
$ vim ~/.config/containers/registries.conf
$ cat ~/.config/containers/registries.conf
unqualified-search-registries = ["docker.io"]
short-name-mode = "permissive"
#### 実験用のリポジトリをcloneしてcompose upを実行する
$ mkdir -p ~/tmp/ ; cd ~/tmp/
$ git clone https://github.com/mah-jp/sphinx-docker_gen-html-pdf
$ cd sphinx-docker_gen-html-pdf
$ podman compose up # ここはpodman compose
(途中省略)
[sphinx-custom] | The HTML pages are in _build/html.
exit code: 0
#### Sphinxでの生成物を確認する → 成功
$ ls -al docs/_build/html/index.html
-rw-r--r-- 1 user user 14456 Aug 8 23:51 docs/_build/html/index.html
$ ls -al docs/_build/latex/project_name.pdf
-rw-r--r-- 1 user user 300715 Aug 8 23:51 docs/_build/latex/project_name.pdf
```
##### 実験2: Ubuntu 22.04 LTSと標準のPodman (v3.4.4) → 成功
|項目|内容|
|---|---|
|OS|Ubuntu Desktop 22.04.4 LTS (x86_64)|
```bash
#### パッケージの最新化と必要分をインストールする
$ sudo apt update ; sudo apt upgrade ; sudo apt dist-upgrade
$ sudo apt install vim git curl
#### OS・環境を確認する
$ cat /etc/os-release | grep VERSION= ; uname -r -p
VERSION="22.04.4 LTS (Jammy Jellyfish)"
6.5.0-45-generic x86_64
#### インストールできるpodmanのバージョンを確認する
$ apt-cache show podman | grep Version
Version: 3.4.4+ds1-1ubuntu1.22.04.2
Version: 3.4.4+ds1-1ubuntu1
#### podman関係をインストールする
$ sudo apt install podman python3-pip # podman-composeはpackageとしては無いので
$ pip install podman-compose # pipでpodman-composeをインストール
$ export PATH="$HOME/.local/bin:$PATH"
$ which podman-compose
/home/user/.local/bin/podman-compose
#### インストールしたpodmanとpodman-composeのバージョンを確認する
$ podman version
Version: 3.4.4
API Version: 3.4.4
Go Version: go1.18.1
Built: Thu Jan 1 09:00:00 1970
OS/Arch: linux/amd64
$ podman-compose version
podman-compose version 1.2.0
podman version 3.4.4
#### podmanに必要なregistries.confを用意する
$ mkdir -p ~/.config/containers/
$ vim ~/.config/containers/registries.conf
$ cat ~/.config/containers/registries.conf
unqualified-search-registries = ["docker.io"]
short-name-mode = "permissive"
#### 「WARN[0000] Error validating CNI config file ...」の事前回避
#### Ref: https://qiita.com/kolinz/items/6ccde7ffa87bdd4f0a6f
$ curl -O http://archive.ubuntu.com/ubuntu/pool/universe/g/golang-github-containernetworking-plugins/containernetworking-plugins_1.1.1+ds1-3build1_amd64.deb
$ sudo dpkg -i containernetworking-plugins_1.1.1+ds1-3build1_amd64.deb
#### 実験用のリポジトリをcloneしてcompose upを実行する
$ mkdir -p ~/tmp/ && cd ~/tmp/
$ git clone https://github.com/mah-jp/sphinx-docker_gen-html-pdf
$ cd sphinx-docker_gen-html-pdf
$ podman-compose up # ここはpodman-compose
(途中省略)
[sphinx-custom] | The HTML pages are in _build/html.
#### Sphinxでの生成物を確認する → 成功
$ ls -al docs/_build/html/index.html
-rw-r--r-- 1 user user 14456 8月 9 00:04 docs/_build/html/index.html
$ ls -al docs/_build/latex/project_name.pdf
-rw-r--r-- 1 user user 300809 8月 9 00:04 docs/_build/latex/project_name.pdf
```
##### 実験3: Ubuntu 22.04 LTSとopenSUSE提供のPodman (v4.6.2) → 成功
|項目|内容|
|---|---|
|OS|Ubuntu Desktop 22.04.4 LTS (x86_64)|
ここでのインストール方法は、Twitter (現X) で提供いただいた次の情報を元に進めました。
下記のステップの「podmanをインストールする」部分では、openSUSE提供のdebを一個ずつダウンロードせずに、リポジトリをまるごと登録しているところが手数を省くポイントです。
```bash
#### パッケージの最新化と必要分をインストールする
$ sudo apt update ; sudo apt upgrade ; sudo apt dist-upgrade
$ sudo apt install vim git curl
#### OS・環境を確認する
$ cat /etc/os-release | grep VERSION= ; uname -r -p
VERSION="22.04.4 LTS (Jammy Jellyfish)"
6.5.0-45-generic x86_64
#### podmanをインストールする
#### Ref: https://zenn.dev/dozo/articles/0ced3feae9ac63#podman%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
#### Ref: https://learn.microsoft.com/ja-jp/troubleshoot/azure/virtual-machines/linux/apt-common-issues-in-ubuntu
$ source /etc/os-release
$ echo deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/unstable/x${NAME}_${VERSION_ID}/ / | sudo tee -a /etc/apt/sources.list.d/devel:kubic:libcontainers:unstable.list
$ curl -fsSL https://download.opensuse.org/repositories/devel:kubic:libcontainers:unstable/x${NAME}_${VERSION_ID}/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/devel_kubic_libcontainers_unstable.gpg > /dev/null
$ sudo apt update && sudo apt -y install podman
#### podman-composeをインストールする
$ sudo apt install python3-pip # podman-composeはpackageとしては無いので
$ pip install podman-compose # pipでpodman-composeをインストール
$ export PATH="$HOME/.local/bin:$PATH"
$ which podman-compose
/home/user/.local/bin/podman-compose
#### インストールしたpodmanとpodman-composeのバージョンを確認する
$ podman version
Client: Podman Engine
Version: 4.6.2
API Version: 4.6.2
Go Version: go1.18.1
Built: Thu Jan 1 09:00:00 1970
OS/Arch: linux/amd64
$ podman-compose version
podman-compose version 1.2.0
podman version 4.6.2
#### podmanに必要なregistries.confを用意する
$ mkdir -p ~/.config/containers/
$ vim ~/.config/containers/registries.conf
$ cat ~/.config/containers/registries.conf
unqualified-search-registries = ["docker.io"]
short-name-mode = "permissive"
#### 実験用のリポジトリをcloneしてcompose upを実行する
$ mkdir -p ~/tmp/ ; cd ~/tmp/
$ git clone https://github.com/mah-jp/sphinx-docker_gen-html-pdf
$ cd sphinx-docker_gen-html-pdf
$ podman-compose up # ここはpodman-compose
(途中省略)
[sphinx-custom] | The HTML pages are in _build/html.
#### Sphinxでの生成物を確認する → 成功
$ ls -al docs/_build/html/index.html
-rw-r--r-- 1 user user 14456 8月 9 00:35 docs/_build/html/index.html
$ ls -al docs/_build/latex/project_name.pdf
-rw-r--r-- 1 user user 300808 8月 9 00:35 docs/_build/latex/project_name.pdf
```
###### 追記 \[2024-10-14\]: 「Error validating CNI config file」エラーの対処方法
上記とは別のUbuntu 22.04環境でpodmanを導入して実行した際、`WARN[0000] Error validating CNI config file ...` というエラーが発生しました。このエラーは「containernetworking-plugins」というパッケージを導入することで解消できました。
- 参考ページ: [IBM Cloud Virtual Server x PodmanでFlowiseを起動するまで \#Ubuntu \- Qiita > Ubuntu22.04におけるPodman3.4.4のCNI関係の警告回避方法](https://qiita.com/kolinz/items/6ccde7ffa87bdd4f0a6f#ubuntu2204%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bpodman344%E3%81%AEcni%E9%96%A2%E4%BF%82%E3%81%AE%E8%AD%A6%E5%91%8A%E5%9B%9E%E9%81%BF%E6%96%B9%E6%B3%95)
#### 実験後の感想
今回、Podmanを試してみて分かったことの一つは、Podmanのインストールは、Dockerのrootless modeの場合よりもかなり楽だと言うこと。シンプルな構成で運用できるという点は、私にとってコンテナエンジンをDockerからPodmanへ切り替える大きな理由になります。
また、Podmanの本格利用に向けて、あと少々試したいことは次の2つです。
1. macOSのbrewでpodmanをインストールし、実行してみること
- [podman — Homebrew Formulae](https://formulae.brew.sh/formula/podman)
2. 各環境でのPodman Desktopも使ってみること
- [Podman Desktop \- Containers and Kubernetes \| Podman Desktop](https://podman-desktop.io/)
そしてこれらでも特に問題が無ければ、私は自分のデスクトップ環境での組み合わせを、Docker+Rancher Desktopから、Podman+Podman Desktopへ、躊躇なく切り替えることでしょう。
---
### 【読んだ本】 1万円起業 片手間で始めてじゅうぶんな収入を稼ぐ方法 - 2024-07-31
URL: https://remoteroom.jp/medialog/2024-07-31_book-4864102708/
原題『THE $100 STARTUP』。2013年9月発行。ビジネスを実施する側の最小単位、つまり一人から行うことができるマイクロビジネスの実際について、著者が調査した数々の事例が紹介されている。起業のふとしたきっかけや、失敗をフィードバックして好循環に変えた話などを知るのは、まず面白い。自分だったらどういう心得を組み立ててビジネスをやっていくだろうなあと想像すると、インスピレーションが沸き立つものがある。そんなわけでこの本を読みながら、自分の得意技と情熱を使うちっちゃなビジネスを2つ思いついた。ネタ帳にメモしたので育ててみる。
#### 参考サイト
- [The 100 Startup](https://100startup.com/): 本書の公式サイト
---
### モバイルモニター「VisionOwl XL-105」の簡単レビュー - 2024-07-27
URL: https://remoteroom.jp/diary/2024-07-27/
#### ポチるのに勇気が必要
軽くて、大きすぎないサイズ。このような条件を満たすモバイルモニター (モバイルディスプレイ) が欲しくなって色々調査した末に、10.5インチの「VisionOwl XL-105」を購入しました。
これは、製品紹介ページやメーカーサイトがそもそも見つからない、ポチるのに勇気が必要な“Amazon限定ブランド”の一品。どなたかの参考になるかもと思い、写真を中心にレビューを残します。「気軽にばんばん持ち歩きたい」という自分の希望に、軽量で、かつ安価であるこのモニターは合っていたなあと思います。
|種別|商品名|購入価格 (税込)|購入店|
|---|---|--:|---|
|モバイルモニター|VisionOwl XL-105|12,799円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0CMX7ND45?tag=remoteroom-22&linkCode=ogi&th=1&psc=1)|
|画面保護フィルム|[OverLay Plus for JAPANNEXT 10.5インチ フルHD+ モバイルモニター JN-MD-IPS105FHDPR](https://www.miyavix.co.jp/products/4525443844777.html)|1,306円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0CW5ZZG75?tag=remoteroom-22&linkCode=ogi&th=1&psc=1)|
|変換コネクター|fine-R USB Type-C 方向変換アダプター U字180° 2個セット|851円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B09FNWJMM4?tag=remoteroom-22&linkCode=ogi&th=1&psc=1)|
##### 比較検討したもの
ちなみに、私が「VisionOwl XL-105」と比較検討したモバイルモニターは次の2機種です。
- [VAIO Vision+ 14](https://store.vaio.com/ec/feature/VJ5VP141/)
- 背面がカーボンという筐体の質感にとても興味がありました。しかし冷静になって考えると、普段持ち歩くMacBook Airよりも大きい画面はモバイルしにくいかもと思い、今回は候補から外しました。
- [JAPANNEXT JN-MD-IPS105FHDPR](https://jp.japannext.com/products/jn-md-ips105fhdpr)
- VisionOwl XL-105とほぼ等しいハードウェアスペックで、こちらには品質的な不安要素がありません (自宅のサブモニターとして[JN-MD-IPS1010HDR](https://japannext.net/jn-md-ips1010hdr/)を使っている実績も含めて)。そのため非常に悩ましかったのですが、JN-MD-IPS105FHDPRの厚み一定の筐体よりも、贅肉を削った形で部分的な薄さを極めているXL-105のほうが、“攻めてる感”があるなと思ってあえてチョイス。
#### 写真メモ
##### 開封の儀
- 外装は汎用性を感じる黒い箱。
- 内容物はモニター本体, 標準HDMI → mini HDMIケーブル, 電源ケーブル (USB-A → USB-C), 映像伝送対応の USB-C → USB-C ケーブル, USB-Aの電源アダプター, 日本語版の取扱説明書, 注意書きチラシ です。接続に使用するUSB-Cケーブルは、チラシにあるとおり、付属のものを用いるのがまずは無難でしょう (手持ちのケーブルの規格が映像伝送対応かどうか自分が明瞭に把握しておれば問題ないですが)。
- モニター本体の右側面には操作系があります。OSDの上下スイッチが突起のあるスライド式で、画面側から操作するときに指で動かしやすいです。
- モニター本体の左側面には接続端子が集約されています。電源供給はUSB-Cから行います。
##### 本体とカバーの重さ
- 本体+カバー = 393g。
- 本体 = 247g。スマホ1台分とちょっとの重量になります。
- カバー = 146g。
##### ノートPCと並べた様子
- とりあえず並べてみた様子。
- とあるカフェの二人席テーブルにて並べてみた様子。奥行き方向を活かせば置けます。ちなみにこの時初めて気づいたこと。モバイルバッテリー ([Anker Power Bank \(10000mAh, 22\.5W\)](https://www.ankerjapan.com/products/a1257?variant=44490892345505)) からモニターにUSB-Cで給電すると、同じくUSB-Cで接続しているMacBook Airにも充電がされるようです。
##### 使いこなしアクセサリー
- 画面には保護フィルムを貼ってノングレア (非光沢) にしました。ギラギラ感が減って見やすくなります。
- USB-Cの接続には方向変換アダプターを使うと、左側の出っぱりが最小化できて良い感じです。
- モニターを立てる際、通常はスタンドに変形する付属のカバーを使うわけですが、携帯できるスマホ用のスタンド (例: [YUPPIENALLE ユッピエナッレ 携帯電話ホルダー, グレー \- IKEA](https://www.ikea.com/jp/ja/p/yuppienalle-holder-for-mobile-phone-grey-60503885/)) を使う手もありです。
#### 追記: HDR設定時に輝度を調整する方法 \[2025-02-04\]
VisionOwl XL-105本体での機能選択で「HDR: オン」とすると、本体では、輝度, コントラスト, 黒レベル, DCRの設定がグレーアウトされて各値の変更ができなくなるようです。HDRを使いながらも輝度を下げたいのに……と思っていたところ、やっと輝度調整の方法が判りました。
XL-105をmacOSと接続している場合、macOSの設定 > ディスプレイにて「RTK FHD+ HDR」を選択していった画面には、「輝度」のスライドバーが現れています。輝度調整は、そのバーを左右させると可能だと判りました。
---
### 【読んだ本】 星野リゾートの事件簿 - 2024-07-22
URL: https://remoteroom.jp/medialog/2024-07-22_book-4822265439/
2009年に出版されたもの。雑誌『日経ベンチャー』への連載記事がまとめられており、一話ずつ独立して読んでいくと数時間で終えた。
経営破綻したリゾートホテルや老舗の旅館などを、星野リゾートが引き継ぐ。顧客満足度を上げること、業務を効率化して収益性を高めること、環境に配慮すること。この三つを絶対の指針として経営改革を図っていく。お客様と直に接しているスタッフの判断の質を高めて、星野リゾート全体のパフォーマンスを高める。本書からは、このような事例となるいくつもの“事件”のエッセンスがかなり濾過された状態で取り込める。
また、自分事として考えることができる目標が企業体のそれと矛盾なく重なる境遇なら、真面目に、自由に、スタッフは課題に取り組めるし、不幸なことはどこにもない。(私が今何か特別困っているとか悩んでいるとかではなくて、一般論として) 直近の様々な現実を少し遠くから眺めるようなときに、本書から感じられた方法論は一考に値すると思う。
---
### Sphinxの環境構築で楽をする: HTMLとPDFを生成するDockerコンテナを作った - 2024-07-21
URL: https://remoteroom.jp/diary/2024-07-21/
#### 勢い余って直構築 → Dockerでやろう
ドキュメンテーションジェネレータの「[Sphinx](https://www.sphinx-doc.org/)」を詳しく説明している次の記事を見つけた。
- [Python製静的サイトジェネレーターSphinxでWebサイトを構築して公開 \| gihyo\.jp](https://gihyo.jp/article/2024/06/monthly-python-2406)
Sphinxは以前から注目していたツールで、使いこなしてみたくなり、記事をなぞる形で環境構築を始めた。reStructuredTextではなくMarkdown形式で原稿を書くようにして、Mermaid記法への対応を試してみたり、Mermaidの図はLaTeXに持っていきにくそうだから図の記法をPlantUMLへ切り替えて、PlantUMLを描画するためのJava環境を用意し、LaTeXを経由したPDFファイルの中に図が描けていることを確認して……と、いくつかの問題を時間をかけてやっと乗り越えられそうだと思ったときに、気づいた。
昨今、Sphinxみたいなややこしいソフトウェアの環境構築は、Dockerを使って仮想的に行う潮流だった。ということは、この場合もDockerコンテナを用意すると便利では? (そういえば[拙作LibLib](https://github.com/mah-jp/liblib)でやってたなあ)
#### GitHubに公開してます
上記の着想から数日を費やし、Sphinx環境のDockerコンテナをコマンド一発で用意できるファイル一式を完成させて、mah-jp/sphinx-docker_gen-html-pdfというリポジトリ名でGitHubにアップロードした。
- [mah\-jp/sphinx\-docker\_gen\-html\-pdf: Sphinxでのドキュメンテーション環境の構築で楽するための、各種設定を実施済みのSphinxのDockerコンテナ](https://github.com/mah-jp/sphinx-docker_gen-html-pdf)
Sphinxでのドキュメンテーションを始める際、Dockerの力を使うと圧倒的に楽ができる。そのような時にはよかったらこのリポジトリをcloneしてみてください。
##### おまけ: 完成までのTry and Errorの軌跡
上記リポジトリのファイル一式を完成させるまで、いくつかのエラーを解決する必要があった。特にCase-3などはウェブ情報が少なくて、(M1 MacのDockerをx86-64として動かしてみてエラーの変化を調べたりなど) なかなかの試行錯誤を伴う道のりだった。誰かの参考になるかもしれないのでメモを残します。
###### Case-1.
> `/docs/sample.rst:00: WARNING: epstopdf command 'epstopdf' cannot be run`
- `texlive-font-utils`パッケージをインストールする
###### Case-2.
> `WARNING: command 'mmdc' cannot be run (needed for mermaid output), check the mermaid_cmd setting`
- `npm`パッケージをインストールした上で、`npm install -g @mermaid-js/mermaid-cli`を実行する
###### Case-3.
> `b'\nError: Failed to launch the browser process!\nrosetta error: failed to open elf at /lib64/ld-linux-x86-64.so.2\n`
これはM1のmacOS環境 (Ventura 13.6.7) で遭遇した。Dockerイメージのアーキテクチャはarm64のはずなのに、なぜだか「Rosetta」や「x86-64」がエラーメッセージに登場する。わけがわからない。
- 参考リンク: 具体的には無し (いくつかの情報を突き合わせての私なりの推理だが、Puppeteerがブラウザを発見できない場合、Puppeteerがx86-64版のブラウザを勝手にインストールしてしまうのだろうか)
- `chromium`パッケージをインストールする
- conf.py: `mermaid_params = ['-p', 'puppeteer-config.json']`を追加
- puppeteer-config.jsonを次の内容で新規作成する
```json
{
"executablePath": "/usr/bin/chromium"
}
```
###### Case-4.
> `b'\nError: Failed to launch the browser process!\n[0000/000000.000000:ERROR:zygote_host_impl_linux.cc(99)] Running as root without --no-sandbox is not supported.`
- 参考リンク: [mermaid\-cli/puppeteer\-config\.json at master · mermaid\-js/mermaid\-cli](https://github.com/mermaid-js/mermaid-cli/blob/master/puppeteer-config.json)
- puppeteer-config.jsonを次の内容に変更する
```json
{
"executablePath": "/usr/bin/chromium",
"args": ["--no-sandbox"]
}
```
#### 参考リンク
- [sphinxdoc/sphinx \- Docker Image \| Docker Hub](https://hub.docker.com/r/sphinxdoc/sphinx)
- [sphinx\-doc/sphinx\-docker\-images: Container images for Sphinx](https://github.com/sphinx-doc/sphinx-docker-images)
---
### 【観た映画】 Mission: Impossible - Dead Reckoning - 2024-07-13
URL: https://remoteroom.jp/medialog/2024-07-13_movie-b0ctwdkwgd/
- 視聴: [YouTube](https://www.youtube.com/watch?v=dtDzYv04jQU)
原題『Mission: Impossible – Dead Reckoning』。梅田のヨドバシカメラへ行ったときに店頭の大画面テレビでこれが流れていて、Ferrari F12tdfではなくFiat 500で逃げ回ろうとするシーンが面白そうに思えた。そういえばアクションで話題をさらっていた映画だったな……と思い出したので観賞。
最近自分が仕入れた読書ネタを使って言うと、本作の筋書きは、SFの『[月は無慈悲な夜の女王]()』に、『[デジタル生存競争: 誰が生き残るのか]()』での現代分析を掛け合わせたようなものかもしれない。デジタルに頼る世界を計算機が支配する時代。計算機と共謀できる者はいるのか。そんな事態では社会のパワーバランスはどうなってしまうのか。云々。本作に投じられた物量はかなりのもので、映画何個分のネタを詰め込んでるねん!と突っ込みたくなるものであるが、なんと、二部構成の前編らしいので後編の公開を待つ。
#### 鑑賞リンク
---
### 【読んだ本】 デジタル生存競争: 誰が生き残るのか - 2024-07-10
URL: https://remoteroom.jp/medialog/2024-07-10_book-b0c8mb9j7f/
#### 読了1度目 \[2024-07-10\]
とりあえず1度目の読了。本書を読むと、まず、今をときめくキラキラした人々から発せられる、業界人は間違いなく履修して後を追うべきだとされる、固有名詞化している『マインドセット』の捉え方が大幅に変わる。
本書は非常に面白く、再読の必要がある。もう一度読み終えてから、ここの感想をアップデートします。
#### 読了2度目 \[2024-08-13\]
森羅万象を説明しようとする物理学が好きで、科学技術を知るのが好きで、技術の凄味に感心することが多く、使いやすい技術が万人に広まることは基本的に皆の生活を快適にするはずだと考えている。しかし現実世界において、エネルギー問題と環境汚染問題はむしろ悪化しているとしか思えず、昨今はそれにインターネットを媒介とした情報汚染の問題まで加わってしまっている。このような時代の陰陽の“陰”が、未来の子ども達の世代にのしかかることを予期しているものの、地球サイズの、世界中の人々を巻き込んでいる複合的な環境問題は、どうやったら解決できるのだろうか。本当に正直に言えば、解決はもう無理かもしれない……と投げやりにもなっており、問題を突き詰めて考えることを避けたい気持ちになっている。
上記のような悲観的な思考に至っている、たとえば、日本の都市部の気温が35度を軽く超えるこの頃の異常な猛暑に参ってしまっている私。だがこれまでの数十年で学んだ問題解決手法の踏襲で、やっぱり技術が打開策を生んでくれるんじゃないか?と、そこに幾ばくかの希望を抱いてしまう癖はなかなかどうしても抜けない。そうすると、莫大な資金がつぎ込まれた宇宙絡みの先駆的なイベントや、斬新なベンチャー企業が打ち出すイノベーショナルっぽいニュースに、凄味を感じて心躍らせるひとときを日々繰り返す。
本書は、こんな私に、次のように訴えてきて、新しい視座を提供する。あなたが心躍らせているその技術の背景には「誰のどのような思想があるのか」、考えてみてください。その技術は既存の問題を誤魔化さないし別の新たな問題を増やさない「真のもの」かどうか、冷静に考えてみてください。……と。洞察力に溢れる本書の風格を私はまだもっと咀嚼したいし、『マインドセット』なるものが流行らなくなるまでは、その思想の色に自分の思考が単色染めされないように、本書を再読すべき理由はあり続けると感じる。
---
### 【観た映画】 トレーニング デイ (字幕版) - 2024-07-07
URL: https://remoteroom.jp/medialog/2024-07-07_movie-b00fiwnr5k/
- 視聴: [YouTube](https://www.youtube.com/watch?v=5zTq5T--9KI)
原題『TRAINING DAY』。視聴開始してしばらく経った時、ふっ……とデジャブな感覚に至ることがあって、もしやと思って調べてみると、ウン十年前に観たことがある映画であった (後述)。DAYが単数形であることが示すように、麻薬捜査課の刑事2人の“たった一日”を描いているものの、内容はぎゅうぎゅう詰め。緊迫させられながら観客は、場景が夜になるにつれて映画も終盤へ向かいつつあると把握できる。そして終盤には、偶像に対する落とし前が描かれる。
本作の後味は、いわば苦みかなあと思った。新米の捜査官は次の日には、より深く“街を理解”していくことに励んでいるか、訓練された内容と決別しているか、その間の案配を模索し続けていくのか、想像させられるがノーヒントだ。しかしそれは現実社会でも同様で、人の生き様の行方は他人には決められないと皆知っている。
##### 余談
過去に私はかなりの頻度で映画を観て、かつその記録を欠かさず残していた時期があって、本作は2001-10-20に映画館で観ていたようだ。この日は一晩で2本、『トゥームレイダー』と『トレーニング デイ』を観ている。当時の日記には、前者に関して特別に惹かれるものがなくて物足りなかったので続いて後者を観にいき、こちらには満足したようなことが記してある。
#### 鑑賞リンク
---
### 【観た映画】 マネーボール (字幕版) - 2024-07-01
URL: https://remoteroom.jp/medialog/2024-07-01_movie-b00kl02bwy/
- 視聴: [YouTube](https://www.youtube.com/watch?v=Fb1HCTc1X9o)
原題『Moneyball』。本作は先日読んだ書籍『[マネー・ボール〔完全版〕]()』が映画化されたもので、書籍が手応えあったので映画も選んだ。ドラフト候補を表出する球団内部の会議や、球団の間で行われる電話での駆け引きといった生々しいシーンに関しては、原作を読んでいたことが予習になった。もし読んでおらず映画をいきなり観ていたとしたら、雰囲気はわかったとしても、その場で何が行われているのかしっかり把握できずに、映画のスピード感を堪能しただけかもしれない。
ふと思ったこととして。原作は書籍でありその記述は文章なので一次元の流れである。他方、映画では、野球の世界での従来の慣習や先入観から抜け出したチーム経営を進めるGeneral Managerの苦悩と、周囲からのノイジーな疑問符や批評を、映像と音響とを混ぜつつ重ねて記述することになる。このような、表現の変換手法の私的研究といった観点で捉えた場合、本作は“上手にやってんなあ (やっぱ映画って面白いなあ)”と思える出来であった。特に、映画では演者がいることによる表情の力を強く思い知った。
#### 鑑賞リンク
---
### アマチュア無線初心者として: D-STARとdmonitorをやってみたり改造したり - 2024-06-30
URL: https://remoteroom.jp/diary/2024-06-30/
#### デジタル無線×インターネット
D-STAR (Digital Smart Technologies for Amateur Radio) に対応したアマチュア無線機は、自身のアンテナで送受信できる範囲の電波での交信のみならず、このD-STARの仕様に則った、リピータ (中継局) やインターネットを通じての交信も行えるらしい。おもしろそうだし興味深くもあるので、試してみながらのメモを残します。
なお本記事の内容は、アマチュア無線やD-STARを私が「完全に理解した」とは言えない状態でチャレンジしているものなので、誤りを含む可能性が普段の記事よりも格段に高めです。
#### D-STARを使ってみる
##### Step-1. 概要の把握
D-STARのイメージを、最初に次の2つの資料を読み込んで掴んでみる。
- 資料1: [はじめよう、楽しもう、D\-STAR® \| 個人のお客様 \| アイコム株式会社](https://www.icom.co.jp/personal/d-star/?open=1)
- 資料2: [初心者のためのD-STAR入門 (PDF)](https://www.jarl.com/oita/pdf/D-Star%20Manual.pdf)
[資料2のページ5](https://www.jarl.com/oita/pdf/D-Star%20Manual.pdf#page=5)の図式を解釈すると、通信経路はこの3つの種類となっている。
1. 直接通信: 無線局Aと無線局Bが自身の電波で直接通信する
2. 山かけ通信 (ひとつのリピータだけを使う交信): 無線局Aと無線局Bが共通のリピータR0と電波で通信することで、無線局Aと無線局Bが通信する
3. GW (ゲートウェイ) 通信: 山かけ通信のリピータがインターネット上で2つに引き伸ばされたイメージ。インターネット経由で接続されているリピータR1とリピータR2があり、リピータR1と無線局Aが電波で通信し、リピータR2と無線局Bが電波で通信することにより、無線局Aと無線局Bがインターネット+電波で通信する
```goat
D-STAR KanriServer
|
.-. .- R0 -. .- R1 -- GW --+-- GW -- R2 -.
| | | | | |
| | | | | |
A B A B A B
```
3つの種類を模式的な図にすると上記の通り。3つ目の「GW (ゲートウェイ) 通信」の場合には、インターネット部分に「D-STAR管理サーバ」が噛んでいるので、事前に管理サーバへの登録作業が必須なんだろうと理解できる。
##### Step-2. D-STAR管理サーバへの登録
1. [D\-STARシステム](https://www.d-star.info/) > [D-STAR利用申込み画面](https://www.d-star.info/usr/usr_agree.php) へ進み、自身の無線局のコールサイン、メールアドレス、氏名などを登録する
2. 登録完了後に事務局での手続きが終わるとメールが届くという記載があるが、私の場合は数日経ってもメールが届かなかった (具体的には、ある日曜の夜に登録して木曜の夜までには届かなかった)
3. しかしながら [D\-STARシステムログイン](https://www.d-star.info/usr/usr_login_disp.php) にはログインできたので先へ進むとしよう
4. [D-STAR管理サーバーへの機器情報の登録について](https://www.jarl.com/d-star/kikitouroku.htm) を参考に、使用する機器を登録する
- 今回は「ICOM ID-52」の1台を登録した
##### Step-3. 無線機 (リグ) での設定
1. [資料2のページ8](https://www.jarl.com/oita/pdf/D-Star%20Manual.pdf#page=8)を参考に、自局設定で自身の無線局のコールサインを登録する
2. [資料2のページ9](https://www.jarl.com/oita/pdf/D-Star%20Manual.pdf#page=9)を参考に、簡単設定機能 (DR) をONにし、TOは初期状態 (CQCQCQ=山かけCQ) のまま、FROMは決定キーを使って選択肢からひとつ選び、次の状態にする
```
TO: CQCQCQ
FROM: 現在地から電波が届く範囲内の最寄リピータ
```
3. [資料2のページ12](https://www.jarl.com/oita/pdf/D-Star%20Manual.pdf#page=12)を参考に、PTTボタンを押して離しての「カーチャンク」をやってみる
4. カーチャンクを行った結果、次の3つのことが確認できれば、リピータまで電波が届き、かつ登録したコールサインが認識OKだという確認になると思われる
1. PTTボタンを離した後、無線機の画面下部にリピータからの応答として「UR?」という文字が表示されること
2. [D\-STAR Repeater Monitor](http://log.d-star.info/usr/monitor.html)の最新の行付近に、「My Call」として自身の無線局のコールサインが表示されること
3. [管理サーバーへの「テーブル書き換え要求」エラー詳細](http://log.d-star.info/usr/TrustErrorLog.html) に自身の送信に関するエラーが表示されていないこと
#### dmonitorを動かしてみる
##### Step-1. dmonitorを使う場面のイメージ作り
D-STARが使えるようになったら、次に、「dmonitor」というアプリケーションをラズパイで動作させる。これはインターネット経由でD-STARリピータの状況などがモニターできるものらしいが、私が普段よく遊んでいるようなUbuntu上のメジャーなOSSなどとは異なり、ウェブ上では、dmonitorに関する情報が整理されていて豊富、というわけではなさそう。よって、説明書に登場する用語もまだよく分からない私にとって未知数なアプリケーションなのだが、とりあえず動かしたらわかるだろう……の精神で進める。
- [Index of /doc/dmonitor](http://app.d-star.info/doc/dmonitor/)
- : Dmonitor バーションV02.00 (テスト版) の説明書
- [大好き\! アマチュア無線/第9回 ラズパイ4Bでdmonitorを楽しみましょう\!|2020年11月号 \- 月刊FBニュース アマチュア無線の情報を満載](https://www.fbnews.jp/202011/daisuki2/)
###### どこでもお手軽D-STARモニタリング
ちなみに、dmonitorを使うと下記のような、モバイルしながら「どこでもお手軽D-STARモニタリング」を実現できるぞという直感があり、これを具現化してブログに書くぞというのが本記事執筆のモチベーションである (爆)。
|項目|内容|
|---|---|
|持ち物|スマホ, ノートPC, D-STAR対応ハンディ無線機, ラズパイ, モバイルバッテリー|
|移動範囲|アマチュア無線の電波は届かなくても、スマホの電波は届く場所 (極端な話: 巷のカフェなど)|
次のようにすると実現できるだろう、と想定をしている。
1. スマホでのWiFiテザリングをONにして, ラズパイとノートPCをインターネットへ接続する
2. ラズパイのデスクトップ画面をノートPCで開く (リモートデスクトップ接続を利用)
3. ラズパイでdmonitorを起動する
4. ラズパイと無線機をBluetooth接続またはUSB接続する
5. dmonitorを通じて聞こえる様々な場所の交信状況を、カフェでまったりしながら無線機でモニターする
##### Step-2. リモートデスクトップ接続可能なラズパイの準備
上記の[dmonitorの説明書のページ1](http://app.d-star.info/doc/dmonitor/dmonitor_02.00.pdf#page=1)によると、指定のOSは「Raspberry Pi OS (32-bit) Bookworm」である。我が家にあるラズパイの中から、このOSを動作させることが可能で、かつパワフル過ぎず消費電力が低い「Raspberry Pi 3 Model B」を選び出し (「Raspberry Pi 3 Model B+」あたりでも良いであろう)、次のように準備した。
1. リモートデスクトップ接続を実現する[RustDesk](https://rustdesk.com/)を導入し、ラズパイのデスクトップ画面を他のPCから操作できるようにした
- RustDesk導入手順は別記事に書いた: [リモートデスクトップソフトウェア「RustDesk」をRaspberry Pi OSへ導入する方法 \[2024-06-12\]]()
2. [Tailscale](https://tailscale.com/)も導入し、ラズパイの接続環境を問わず他のPCのブラウザからdmonitor画面を確認したり、SSHログインできるようにした
- Tailscale導入方法に関するウェブ情報は他に多くあるのでここでは省略
##### Step-3. dmonitorのインストール
ラズパイへSSHログインした端末画面、もしくはラズパイのデスクトップ環境での端末画面にて、dmonitorのインストールを進める。
1. [dmonitorの説明書のページ3](http://app.d-star.info/doc/dmonitor/dmonitor_02.00.pdf#page=3)を参考に、次のコマンドを実行する
```bash
$ curl http://app.d-star.info/debian/bookworm/dmonitor_setup | bash
```
2. 確認事項に答える
```
========================================================
本プログラムはD-STAR委員会の著作物です
D-STAR委員会の承諾なしで再配布しないでください
また、Raspberry Piとの抱き合わせ等の販売をしないで下さい
========================================================
上記条件に同意します y/N:Y
V02.00の解説書を読まれ、動作環境を確認されましたか y/N:y
```
3. 約100個のパッケージがインストールされる
- インストール中の画面を見ていると、dmonitorはどうやら一部にPerlを使用しているアプリケーションであろうと推察できる (個人的にはとても懐かしい)
4. インストールされたdmonitorのパッケージ情報を、`apt show dmonitor`で確認する
```bash
$ apt show dmonitor
Package: dmonitor
Version: 02.00
Priority: optional
Section: hamradio
Maintainer: Satoshi Yasuda <7m3tjz@jarl.com>
Installed-Size: 352 kB
Depends: libc6 (>= 2.34), libssl3 (>= 3.0.0), libusb-0.1-4 (>= 2:0.1.12), perl:any, libcgi-application-perl, nkf, lighttpd, surf, wiringpi, bluetooth, pi-bluetooth, bluez, blueman, expect, rsyslog
Homepage: http://app.d-star.info/
Download-Size: 85.2 kB
APT-Manual-Installed: yes
APT-Sources: http://app.d-star.info/debian/bookworm Packages
Description: D-STAR repeater monitor
D-STAR Rpeater monitor program
access point multi_forward program
```
5. インストールされたdmonitorのファイルを`dpkg -L dmonitor`で確認する
- ファイルの種類は、大まかに言うと、サービスファイル, 実行ファイル, ローカルウェブサーバ用のファイル などだなと分かる
##### Step-4. dmonitorの起動
1. 必須ではないが安心のため、ラズパイの80/tcpがopenでウェブサービスが稼働していることを確認する (`nmap`コマンドを使う確認方法などがあるがここでは省略)
2. 他のPCのウェブブラウザにて、`http://ラズパイのLAN環境でのIPアドレス/` (例えば192.168.1.NNN) を開く
3. dmonitorの初回起動画面が確認できる (この段階ではまだ未設定なので`接続コールサインが日本のコールサインでないか最初に空白がある等、設定が間違っています。`という表示が出ている)
4. [dmonitorの説明書のページ3](http://app.d-star.info/doc/dmonitor/dmonitor_02.00.pdf#page=3)を参考に、接続コールサインを設定する
- 画面上部の \[システム ツール\] (下線は見えないがクリック可能) をクリックし、次に \[dmonitor設定\] をクリックする
- [dmonitorの説明書のページ5](http://app.d-star.info/doc/dmonitor/dmonitor_02.00.pdf#page=5)を参考に、次の内容を入力して \[登録\] ボタンを押す
|項目|内容|備考|
|---|---|---|
|接続リグ|`ICOM`|無線機はICOM ID-52なのでICOMで良かろう|
|LCD|`NONE`|ラズパイに外付けLCDを付けていないならNONE ([dmonitorの説明書のページ19](http://app.d-star.info/doc/dmonitor/dmonitor_02.00.pdf#page=19)を参照)|
|接続コールサイン|`XX0XXX`|自身のコールサインを入力する (入力例の「XX0XX 」は空白を加えて8文字化されている)|
|GPS自動送信|`抑止`||
1. ラズパイの再起動が行われ、再起動後のdmonitorの画面は、左側の黄色エリアに「レピータ 一覧」も表示された次のような状態になる
#### dmonitorに無線機を接続してモニターする
##### Step-1. 無線機と接続する
USB接続の場合は次の通り。
1. ラズパイと無線機ID-52とをデータ通信対応のUSBケーブルで接続し、無線機の画面の左上に「USB COM」と表示されることを確認する (表示されない場合、USBケーブルを他のデータ通信対応のものに取り替えたりしてみる)
2. 無線機を MENU > DVゲートウェイ > ターミナルモードにする
3. ブラウザで表示しているdmonitor画面`http://ラズパイのLAN環境でのIPアドレス/`を再読み込みする
4. 無線機が反応して「ぴっ」などと音が出ればOK
###### /dev/ttyAMA0について
dmonitor画面の左下領域に「/dev/ttyAMA0が見つかりません」というようなエラーが表示された場合、エラー解消には次の手段が有効かもしれない (しかし自分が行った解決方法をメモし忘れたので不正確かもしれない)。
- ラズパイにログインし、`/dev/dstar`のシンボリックリンク先が`/dev/ttyAMA0`になっていることを確認する
```bash
$ ls -al /dev/dstar
lrwxrwxrwx 1 root root 7 Jun 30 02:01 /dev/dstar -> ttyACM0
```
- なっていない場合は、`sudo rm /dev/dstar ; sudo ln -s /dev/ttyAMA0 /dev/dstar`を行う
- [dmonitorの説明書のページ25](http://app.d-star.info/doc/dmonitor/dmonitor_02.00.pdf#page=25)では、あらかじめ準備されているスクリプトの実行`sudo /usr/bin/rig_port_check`が案内されている
###### Bluetooth接続は私の場合はNG
ラズパイとID-52とのBluetooth接続は、一応試してみたものの成功しなかった。そもそもdmonitorが、説明書にあるID-705の他にID-52とのBluetooth接続に対応しているのかどうかが分かっていない。
- 参考にしたのは、ID-705に関する[dmonitorの説明書のページ11](http://app.d-star.info/doc/dmonitor/dmonitor_02.00.pdf#page=11)
##### Step-2. 任意のリピータに接続する
1. 次の2箇所のどちらかの上に表示されている、任意のリピータのコールサインのリンクをクリックする (ここでは一例としてリピータ「京都伏見430」をクリック)
- 背景黄色の「リピータ 一覧」の表
- 「使用中リピータ一覧」をクリックして開く別ウィンドウの表
2. リピータに接続が行われたら、画面左下の白背景部分に「Connected to 'JP3YJE A' '京都伏見430'」が表示される
3. さらに無線機の画面には「MSG: LINK TO JP3YJE A」と表示され、当該リピータが使用中の時にはそこでの交信音声が聞こえる
ここまで実現できれば、当初の目標の「どこでもお手軽D-STARモニタリング」は叶えられたと言えよう。
#### まとめ・感想
D-STARを始めるまでは、ハンディ無線機で受信できる限られた範囲のいわば近所の交信状況しかモニターできなかった。しかしD-STAR+dmonitorでは、交信が活発な時間帯 (早朝が意外に激しいんだな) だと一般のいくつかのラジオ局から選ぶような感覚で、全国で使用中のリピータを選択でき、そこで交信が行われているか耳を傾けることができる。しかも音声はノイズ無く明瞭に聴こえるので、遠方との距離感が意識から遠ざかる。とにかく日本中のアマチュア無線ユーザの声がモニターできるので、まず聞いているだけでおもしろい。
ちなみに、ラズパイに「4G/LTE対応モデム」を挿してインターネット接続を4G/LTE通信で行うようにして、携帯電話の電波が届く範囲ならどこででもD-STARのGW (ゲートウェイ) 通信ができる、モバイルバッテリーで駆動可能なdmonitorのポータブルシステムも作ってみた。dmonitor画面はノートパソコンのブラウザを使って操作する想定だ (参考: [リモートデスクトップソフトウェア「RustDesk」をRaspberry Pi OSへ導入する方法 \[2024-06-12\]]())。このシステムはたとえば、平時は車に載せておいたりするとおもしろいかもしれない。
##### 追記 \[2026-03-22\]: dmonitorの簡単インストーラーを作りました
公式にはBookworm (Debian 12) にのみ対応のdmonitor V02.00を、Trixie (Debian 13) にインストールできるようにしたスクリプトを作り、GitHubで公開しています。詳しくは次の紹介記事をご覧ください。
- [アマチュア無線: dmonitorをRaspbian GNU/Linux 13 (trixie) に簡単インストールするスクリプトを作った \[2026-03-22\]]()
#### 参考情報: dmonitor使用に際してやっておくと有用なこと
私の環境および使い方でdmonitorを使う場合に、やっておくと有用なことがいくつかあった。
##### 参考-A) ラズパイの電源をいつでも切れるようにする
ラズパイの電源をshutdown処理なしにいつでも切れるようにするためには、物理メディアのデータ破壊のきっかけとなる、物理メディアへの書き込みを行わないようにすることが必要だ。これはラズパイのファイルシステムをOverlay File System化 (OverlayFSを有効化) することで可能なので、次の手順で行う。
1. ラズパイで`sudo raspi-config`を実行する
1. 「4 Performance Options」を選択する
1. 「P2 Overlay File System Enable/disable read-only file system」を選択する
1. 「Would you like the overlay file system to be enabled?」で「Yes」を選択する
1. 「Would you like the boot partition to be write-protected?」で「Yes」を選択し、表示に従ってラズパイをrebootする
OverlayFSを無効化する (物理メディアへの書き込みを行えるようにする) 場合は、同じように「P2 Overlay File System Enable/disable read-only file system」から、有効化の逆を選択する。
##### 参考-B) dmonitor_startの自動起動を止めるには
ラズパイ起動後のデスクトップ画面に現れるdmonitor_startは、dmonitorのサーバプログラム本体ではなくクライアントの一種のようで、これを動かしていなくてもdmonitorは別PCのブラウザから利用可能である。dmonitor_startの自動起動を止めるためには、ファイル`/etc/xdg/lxsession/LXDE-pi/autostart`の最後の行「`@lxterminal -e /usr/local/bin/dmonitor_start`」をコメントアウトすればよい。
```bash
$ cat /etc/xdg/lxsession/LXDE-pi/autostart
@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash
@lxterminal -e /usr/local/bin/dmonitor_start # ←この行をコメントアウト
```
##### 参考-C) URL中のホスト名 (IPアドレス) を正しくする
dmonitorのCGIプログラムの中では、ウェブサーバ自身のホスト名として、「`hostname -I`」の実行結果の1番目に現れるIPアドレスを採用している。しかしウェブサーバは一般的にこのIPアドレスのみでサービスしているとは限らない (たとえばラズパイに[Tailscale](https://tailscale.com/)を導入してTailscale経由でdmonitorを扱う場合は、「`hostname -I`」での2番目のIPアドレスがTailscale上のIPアドレスで、これがURL中のホスト名になるべきである)。そこで、どのIPアドレスでサービスした場合でも対応できる、CGIプログラムとして正しい作法である環境変数`SERVER_ADDR`からホストのIPアドレスを取り出すロジックへ、dmonitor全体を改造する。
###### 改造対象のファイル
```bash
$ cd /var/www/cgi-bin/
$ grep -l -R 'hostname -I 2>&1 |' * | sort # 下記の21ファイルがヒットする
```
上記grepでヒットする21ファイルのうち実際に改造が必要なファイルは、`$result` (後述) をURLの一部として用いている、下記の表で「★必要」としている15ファイルである。
|/var/www/cgi-bin/以下のファイル|改造の必要性|
|---|---|
|CI-VStore|不要|
|DmonitorStore|★必要|
|DvapStore|★必要|
|DvmegaStore|★必要|
|FileExpand|★必要|
|NodeStore|★必要|
|debug_dmonitor_log|不要|
|debug_messages|不要|
|debug_rpt_conn_log|不要|
|debug_syslog|不要|
|dmonitor_reboot0|★必要|
|dmonitor_upd|不要|
|menu|★必要|
|redirect|★必要|
|repActive|★必要|
|repDmon|★必要|
|repMon|★必要|
|repScan|★必要|
|repUpd|★必要|
|simple_redirect|★必要|
|update_log|★必要|
###### Perlスクリプトの改造内容
上記の表で「★必要」となっている15ファイルについて、`$result`を導出している既存部分 (8行) をコメントアウトし、`$result = $ENV{"SERVER_ADDR"};`の1行を追加する。
###### 改造前の当該ブロック
```perl
open my $rs , "hostname -I 2>&1 |";
my @ip = <$rs>;
close $rs;
my $result = join '' , @ip;
my $num = index ($result, ' ');
$result = substr($result, 0, $num);
$result =~ s/\s+//g;
$result =~ s/[[:cntrl:]]//g;
```
###### 改造後の当該ブロック
```perl
###open my $rs , "hostname -I 2>&1 |";
###my @ip = <$rs>;
###close $rs;
###my $result = join '' , @ip;
###my $num = index ($result, ' ');
###$result = substr($result, 0, $num);
###$result =~ s/\s+//g;
###$result =~ s/[[:cntrl:]]//g;
$result = $ENV{"SERVER_ADDR"};
```
#### 参考リンク
- D-STAR
- [運用ログ表示システム](http://log.d-star.info/usr/usr_menu.php)
- [D\-STAR レピーターシステム \| 製品情報 \| アイコム株式会社](https://www.icom.co.jp/lineup/products/D-STARsystem/)
- [D\-STAR dmonitor 情報 \[Install/Update方法などの情報\]](https://jr1uti.sakura.ne.jp/dmonitor/)
- [D\-STAR dmonitor のセットアップ](https://jr1uti.sakura.ne.jp/dmonitor/install/dmonitor_setup.html)
---
### 静的サイトジェネレーターHugoでMermaid記法を使うための設定方法 - 2024-06-28
URL: https://remoteroom.jp/diary/2024-06-28/
#### 公式サイトを参考に
Hugo用のMarkdown原稿にMermaid記法での図を書き、ブログ記事に取り入れたくなった場合。どのようにファイルを用意すればそれが実現できるのかのメモ。
- 公式サイト: [Code block render hooks \| Hugo > Examples](https://gohugo.io/render-hooks/code-blocks/#examples)
HugoでMermaid記法を使うには、公式サイトの上記ページの、`For example, to create a code block render hook to render Mermaid diagrams:`という行以下に示されている2ファイルのコードを、自身のサイトのHugoファイルに反映すれば良い。
- 新規作成: `layouts/_default/_markup/render-codeblock-mermaid.html`
```html
{{ .Inner | htmlEscape | safeHTML }}
{{ .Page.Store.Set "hasMermaid" true }}
```
- 既存ファイルの末尾の`
H1です
H2です
test1
test2
<いじわるタグ>
test3
`の手前に追加: `layouts/_default/baseof.html` (themeがmainroadの場合は`themes/mainroad/layouts/_default/baseof.html`)
````html
{{ if .Store.Get "hasMermaid" }}
{{ end }}
````
##### 例: Mermaid記法で描くsequenceDiagram
- 引用元: [Diagrams \| Hugo > Mermaid diagrams](https://gohugo.io/content-management/diagrams/#mermaid-diagrams)
```mermaid
sequenceDiagram
participant Alice
participant Bob
Alice->>John: Hello John, how are you?
loop Healthcheck
John->>John: Fight against hypochondria
end
Note right of John: Rational thoughts
prevail!
John-->>Alice: Great!
John->>Bob: How about you?
Bob-->>John: Jolly good!
```
---
### 【読んだ本】 マネー・ボール〔完全版〕 - 2024-06-14
URL: https://remoteroom.jp/medialog/2024-06-14_book-b00cpw2z9u/
従来の見方が実はうまく行っていないことに気づき、検証によってそれを示すこと。より確からしい見方を掴むこと。その見方を経営の基軸にすること。
という汎用的な発想の種まで得ることができた、資金に乏しい野球チームが勝率を上げる様子が単におもしろいだけでなく、私の当初の予想を超える深みが備わっていたノンフィクション作品。
本編を最後まで読んだあと、普通なら書籍としてはそこで終わるだろうに、本書ではその次に『出版後日談』の章が来ていて「おや?」と不思議に思った (この章が追加されているために〔完全版〕なのだろうと推測する)。なんらかの新規軸が現れたとき、それについて半端な把握しかせぬまま検証が伴わない勝手なことを公に向かって発言するたぐいの人って、どこの組織体にもいるのだな……と思わされた。だがしかし、このような従来型を支持する流布が蔓延しているときは、パラダイムシフトがそのすぐ先に控えていることも少なからずある。繰り返すが、より確からしい見方を掴むこと。
---
### リモートデスクトップソフトウェア「RustDesk」をRaspberry Pi OSへ導入する方法 - 2024-06-12
URL: https://remoteroom.jp/diary/2024-06-12/
#### デスクトップ画面をリモート操作できるOSS
様々なOSのデスクトップ画面を、インターネット経由で遠隔操作できるようにする「RustDesk」というソフトウェアがあります。有名どころであるTeamViewerと同等の働きをするOSS (オープンソースソフトウェア) です。このRustDeskを、ラズパイのデスクトップ画面を遠隔操作するために導入する方法をメモします。
- [RustDesk – The Open Source Remote Desktop Access Software](https://rustdesk.com/)
##### テスト環境
|項目|内容|
|---|---|
|ハードウェア|Raspberry Pi 3 Model B|
|OS|[Raspberry Pi OS (32-bit) with desktop](https://www.raspberrypi.com/software/operating-systems/), Release date: March 15th 2024, Debian version: 12 (bookworm)|
|外部ディスプレイ|HDMI端子に接続|
|Boot / Auto Login設定|デフォルトの「Desktop Autologin」 (起動するとデスクトップ環境へ自動ログインする状態)|
余談: 今回は具体的には、ちょっと古めのラズパイ3の上でアマチュア無線関係のdmonitorというGUIアプリをheadless運用で使ってみたいので (これについては別記事に書きました: [アマチュア無線初心者として: D-STARとdmonitorをやってみたり改造したり \[2024-06-30\]]())、その前準備としてRustDeskを導入します。
#### RustDesk導入手順と画面の例
1. microSDカードに焼いたRaspberry Pi OSを用いて、ラズパイを起動します
2. OSを最新化するために`sudo apt update`と`sudo apt full-upgrade`を実施します
3. CPUとOSに合うRustDeskのパッケージを からダウンロードします
- RustDeskのパッケージは、デスクトップ画面を操作する側と操作される側のものが統合されています (パッケージ1つでどちらにもなれる)
- 今回のラズパイ3の場合は「ARMv7 (32-bit) Ubuntu」版 (.deb) をダウンロードします
- 記事執筆時点での最新バージョンは「1.2.3-2」でした
4. `sudo apt install ./rustdesk-1.2.3-2-armv7-sciter.deb`を実行して、RustDeskのdebパッケージをラズパイにインストールします
5. ラズパイのデスクトップ環境にて、画面左上のラズパイマーク > Internet > RustDeskを起動します
6. RustDeskのウィンドウの左側に表示されているIDとOne-time passwordを読み取り、その認証情報を用いてお手元のPCのRustDeskからアクセスすると……
7. ラズパイのデスクトップ画面が、お手元のPCからリモート操作できます
8. RustDeskの各種設定変更はID右側の「︙」のメニューにて、パスワード関連の変更はpassword右側の「✐」のメニューにて行えます
9. PC間でファイル転送を行う機能も備わっています
RustDeskの、中継サーバのself-hostやその他詳細については、下記公式ドキュメントなどを参照するのが良さそうです。
- [Docs of RustDesk :: Documentation for RustDesk](https://rustdesk.com/docs/en/)
##### HDMIダミープラグでのheadless運用
外部ディスプレイをHDMI接続しない状態で起動したラズパイへ、RustDeskから接続しようとすると、RustDeskに「No Display」と表示されて接続ができません。これは、一般的なリモートデスクトップ接続ソフトと同様にRustDeskにおいても、操作されるPCにおいて転送データの元となる実際のデスクトップ画面が必要なのですが、ディスプレイを接続しない状態では画面が存在しないためです。
しかしこの制限はいくつかの方法で回避でき、シンプルかつわかりやすい方法は、「ダミープラグ」と呼ばれるものを操作されるPCに挿しておくことです。これだけで、ディスプレイ無しでの運用 (headless運用) が可能になります。
---
### 【読んだ本】 月は無慈悲な夜の女王 - 2024-06-03
URL: https://remoteroom.jp/medialog/2024-06-03_book-b00dm4zh3q/
このSFに描かれている、人間の居住地としての月と地球の相互関係は、工学面での進化の度合いを想像するにあと50年ぐらい先、それぐらいの未来には現実化しているかもと私は感じた。ただし計算機の変容に関しては、20年も経たない間に本作が描写する世代へ、ひょっとしたら行き着きそうな気もしている。寂しさを抱き、友だちの概念を思考に用いるかようにみえる計算機は自然と生まれるのかもしれない。計算機の中のジェンダー傾向を、計算機がジョークをどのように捉えるかによって外部から推測できるかもしれない。ちなみに読後に調べてびっくりしたのだが、本作は1965〜1966年に発表されたものだそうだ。なんという先見性!
途中から壮大な活劇に変わった本作を読み終えた後なら、邦題の言い回しに、なるほどなあと納得したのだった。月に百万人単位で居住できるようになる時、月の政府のどのような政策が人々の不満を高めて反乱を招くのか。そのような問いかけを自分に課して、一言でいうとSFらしいトーンの語りに乗ってイメージを抱いていくのは素直に面白かった。
---
### Macの内蔵SSD使用容量を、富岳超え?の「222.71PB」にしてみた 〜clonefileの実験で〜 - 2024-06-03
URL: https://remoteroom.jp/diary/2024-06-03/
#### 溢れているがそうではない
MacBook Airの内蔵SSDのストレージ領域を表示した時、使用済み容量の値がストレージ容量の値を超過していることもあるという。実際に見せてもらったことがあるのは「`使用済み 1.02TB / 994.66GB`」という値だ。ちなみに、ストレージ領域の詳細と棒グラフは、macOSの左上のりんごマーク > システム設定 > 一般 > ストレージ と辿れば確認できる。
- [Macの使用済み/利用可能ストレージ領域を表示する \- Apple サポート \(日本\)](https://support.apple.com/ja-jp/guide/mac-help/syspf9b375b9/mac)
使用済み容量が超過するなんて、そんな奇天烈な使用状況を生じさせている原因は何だろう?と私は興味を持った。iCloud Driveが介入しているわけでもなさそうだし、macOSにおいて、ファイルの「透過的圧縮」が行われるとは聞かないし、NetAppストレージのような「重複排除」の話も聞かない。そこでウェブ情報を色々調べてみたところ、macOSの標準ファイルシステム Apple File System (APFS) にはクローンという機能が備わっていることを知り、この機能をよく使っている環境ほど、容量超過の表示は起こりうるのでは?と、仮説を立てた。ならば実験してみよう。
#### 使用済み容量を超過させる実験
##### クローンを使えば
Apple File System (APFS) について、詳しくは次のページを参照。ストレージの利用効率を高める「クローン」についての記述もある。
- [Apple File System \- Wikipedia](https://ja.wikipedia.org/wiki/Apple_File_System)
クローンの効果を単純化した例で考えてみる。APFSの上で、例えばサイズが100MBの既存のファイルを複製し、新たに9個のファイルを作る場合。このときの複製動作が実際のところクローン動作であれば、クローンは追加容量を必要としないので、10個のファイルの物理的な、実際の使用容量は合計でも (ほぼ) 100MBのはずだ。一方、論理的には100MBのファイルが10個に増えたのだからデータ量は合計で1,000MBになる。
##### 実験の目標と方法
今回の実験ではクローン機能を活用して、明らかな`「使用済み」の容量>ストレージ容量`な状況を作り出すことが目標だ。具体的な方法としては、対象ストレージに保存可能でかつできるだけ大きい数百GBサイズの実体ファイルを最初に用意し、それを`cp -c` (`-c`はクローンファイルとしてコピーする、macOS独自と思われるオプション) で自動的に大量作成するスクリプトを実行する。
ちなみに、神戸ポートアイランドにあるスーパーコンピュータ「富岳」のストレージ容量は、第2階層の共有ファイルシステムの領域で「150PB」なのだそうだ。私はミーハーなので、この富岳よりも大きい値を、ストレージ容量が1TBのMacBook Airのストレージ使用状況に表示させることができたらば実験は成功とする。
##### 実験の結果
`test_clonefile.sh`というbashスクリプト ([下記参照](#%E5%AE%9F%E9%A8%93%E7%94%A8%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88-test_clonefilesh)) を作成し、このスクリプトをストレージ容量1TBのMacBook Air (M1, 2020) のmacOS Ventura 13.6環境で実行したところ、実験終了時には「222.71PB」という奇天烈な、使用済み容量の表示を実現できた。ちなみにスクリプト実行の所要時間は63分38秒。もしかしたら5倍の時間をかけたら、1,024PBを超えたEB (エクサバイト) の世界がMacBook Airの上で垣間見れたのかもしれない。
||容量 (使用済み/ストレージ容量)|使用済み容量|
|---|--:|---|
|実験開始時|262.29GB / 994.66GB|←これを1 (基準) とすると|
|実験終了時|222.71PB / 994.66GB|←見かけ上は約91万倍|
#### 実験用スクリプト: test_clonefile.sh
このbashスクリプト`test_clonefile.sh`は、ランダムデータが埋め込まれたサイズ200GBのファイルを実際に作り、そのファイルのクローンを1,048,576個作成する。ストレージ上の実際の使用容量は約200GBに留まるものの、約100万個という大量のファイルをファイルシステム上に作成することには違いなく、それなりにSSDを痛めつける可能性がある。もし試してみる場合にはストレージ障害に十分ご注意ください。
```bash
###!/usr/bin/env bash
set -euox pipefail
### test_clonefile.sh (Ver.20240601) for macOS APFS
### clonefileでの見かけ上と実際の容量消費を確認するスクリプト
DIR_TMP='./tmp_cloneworld'
FILE_ORIGIN=realfile.tmp
FILE_SIZE_UNIT=1024M
FILE_SIZE_COUNT=200 # -> 1024MB*200 = 200GB per file
###COPY_REPEAT=1024 # -> 200GB*1024 = 200TB
COPY_REPEAT=1048576 # -> 200GB*1024*1024 = 200TB*1024 = 200PB
### 使用する容量を表示
echo "実体ファイルの消費容量: ${FILE_SIZE_COUNT} * ${FILE_SIZE_UNIT} bytes"
TMP_SIZE=$(expr ${FILE_SIZE_COUNT} \* ${COPY_REPEAT})
echo "clonefileの消費容量: ${TMP_SIZE} * ${FILE_SIZE_UNIT} bytes"
### 作業ディレクトリDIR_TMPを作成
mkdir -p ${DIR_TMP}
### 実体ファイルFILE_ORIGINを作成
dd if=/dev/urandom bs=${FILE_SIZE_UNIT} count=${FILE_SIZE_COUNT} of=${DIR_TMP}/${FILE_ORIGIN}
### 実体ファイルを指定回数、clonefileとして複製する
for i in $(seq -f "%.0f" 1 ${COPY_REPEAT}); do
j=$(printf "%08d" ${i})
FILE_COPY=clonefile_${j}.tmp
cp -c ${DIR_TMP}/${FILE_ORIGIN} ${DIR_TMP}/${FILE_COPY}
done
### ストレージの使用量を表示
echo '# df -h'
df -h ${DIR_TMP}
### 作業ディレクトリDIR_TMPの使用容量を表示
echo '# du -sh'
du -sh ${DIR_TMP}
### 終了メッセージ
echo 'DIR_TMPの削除には時間がかかります。次のコマンドで手動で行ってください。'
echo "rm -rf -v ${DIR_TMP}/"
```
#### 参考リンク
- [富岳 \(スーパーコンピュータ\) \- Wikipedia](https://ja.wikipedia.org/wiki/%E5%AF%8C%E5%B2%B3_(%E3%82%B9%E3%83%BC%E3%83%91%E3%83%BC%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF))
- [dyorgio/apfs\-clone\-checker: An utility to check if two files are clones in macOS APFS\.](https://github.com/dyorgio/apfs-clone-checker)
---
### TailscaleのSubnet routes設定はどこに保存されるのかを調べた - 2024-06-02
URL: https://remoteroom.jp/diary/2024-06-02/
#### ローカルストレージ? クラウド?
- [Tailscale · Best VPN Service for Secure Networks](https://tailscale.com/)
Subnet routes機能を用いたTailscaleの運用における、こんな内容の検証が必要になった。
> OverlayFS化してmicroSDカードの書き換えを停止しているラズパイをLAN-A環境に置いている。ラズパイにはTailscaleをインストールしてSubnet routeとして設定し、LAN-B環境からLAN-A内の機器へアクセスするためのいわば踏み台にして利用中である。
>
> このラズパイに、LAN-A環境へのSubnet routes設定を新規で1つ追加する時、次のOS起動時に備えてラズパイのOverlayFSを一旦解除しての設定作業が必要があるのかどうか。つまり、Subnet routeとなるマシンのローカルストレージの恒久的な書き換えが必要とされるのかどうかを調べたい。
##### 実験の方法
「ローカルストレージの恒久的な書き換えが必要とされるのかどうか」の検証は、ラズパイの実機を持ち出さなくても、仮想マシンのイメージの世代を入れ替えることで可能だと思い、次のような実験方法を考えた。
- Step-1. Ubuntu Server 24.04 LTSの仮想マシンXを1台用意し、Tailscaleのインストールを行った後、念のため仮想マシンXのイメージをVM1として保存する
- Step-2. 仮想マシンXがLAN内のIPアドレスA (例: 192.168.1.151/32) へのSubnet routeとなるよう設定して動作確認した後、イメージをVM2として保存する
- `sudo tailscale up --advertise-routes=192.168.1.151/32`
- Step-3. 仮想マシンXがLAN内のIPアドレスB (例: 192.168.1.191/32) へのSubnet routeとなるよう設定して動作確認した後、イメージをVM3として保存する
- `sudo tailscale up --advertise-routes=192.168.1.151/32,192.168.1.191/32`
- Step-4. 仮想マシンXのイメージをVM2に戻してから起動した時、仮想マシンXはIPアドレスBへのSubnet routeとして機能するのかどうかを確認する
##### 実験の結果と考察
上記実験をやってみた結果、Step-4の時点での仮想マシンXは、IPアドレスBへのSubnet routeとしては機能しない状態であった。もちろん、IPアドレスAへのSubnet routeとしては機能する。このことから、TailscaleのSubnet routes設定を変更する時には、Subnet routeとなるマシンのローカルストレージに何らかの情報が保存されるので、恒久的な書き換えは「必要」だと判断できる。
また、Step-4の時点でTailscale Admin Consoleを見ると、IPアドレスAは通常表示で、IPアドレスBはグレーアウトかつ`⚠`な表示になっていた。IPアドレスBはこの時点の仮想マシンXが知らないものであるから、Admin ConsoleがTailscaleネットワークでの接続履歴を表示する機能を有すること、かつ、TailscaleはSubnet routeマシンのローカル設定との整合性を確認しながら動作しているんだなということも推測できる。
###### 参考画像: Step-3と4でのAdmin Console > Edit route settings
#### 参考リンク
- [Subnet routers and traffic relay nodes · Tailscale Docs](https://tailscale.com/kb/1019/subnets#connect-to-tailscale-as-a-subnet-router)
---
### 【観た映画】 ANON アノン (吹替版) - 2024-05-23
URL: https://remoteroom.jp/medialog/2024-05-23_movie-b07p682smy/
- 視聴: [YouTube](https://www.youtube.com/watch?v=uwb5uByGhCU)
原題『Anon』。『[ガタカ]()』、『[TIME/タイム]()』と観賞してきた流れに続いて、アンドリュー・ニコル監督の作品としてこれも選択。
接続、記録、脆弱、Hacking、多段proxy、消しゴムマジック、改竄。このようなキーワードを頭の片隅に思い浮かべながら、瞬間瞬間がスチル写真のテイストのようにも捉えられる映像と、駆け引きがもたらしてくる緊迫感に浸った。体制に沿わない行いは闇商売にもなりうる、というエッセンスが取り込まれているところに私は『ガタカ』を感じて面白がりつつ、本作も、今時にふさわしい、問いかけがある映画だと思った。プライバシーの具体化のためのR15+表現なのかもしれないし、最後の台詞がきっと映画に託されたメッセージなのではなかろうか。オープン性と匿名性の節度の決定権は、どこにあるべきなのか。
#### 鑑賞リンク
---
### LibLib: v2でDocker対応しました 〜神戸市立図書館・神戸市電子図書館で借りている本と予約本の情報をJSON化〜 - 2024-05-20
URL: https://remoteroom.jp/diary/2024-05-19/
#### 簡単に動かせるようになりました
拙作の「神戸市立図書館・神戸市電子図書館で借りている本と予約している本の情報をJSON化するスクリプト」 [https://github.com/mah-jp/liblib](https://github.com/mah-jp/liblib) に関して、新版リリースのお知らせです。
LibLib v2.0.0を先ほど公開開始しました。これまでのv1ではPythonの動作環境やモジュール類をユーザ自身の作業で用意する必要があり、近寄りがたい雰囲気がありました (汗)。v2では、全体的な作りをDocker環境での動作を前提としたものに変更し、`docker compose up`コマンド一発で、Dockerコンテナが用意されてコンテナ内でスクリプトの実行が行われ、図書館サイトから情報を取り出した結果のJSONファイル取得まで行うことができます。Dockerが動作する環境であれば、↓これだけでOKです。
```bash
$ git clone https://github.com/mah-jp/liblib
$ cd liblib
$ cp ./env/sample.env ./env/HOGEHOGE.env
$ vim ./env/HOGEHOGE.env # 中身を編集してご自身のID,Passwordを記入
$ FILE_ENV=HOGEHOGE.env docker compose up
```
ニーズのほどは全く分かりませんが、神戸市立図書館・神戸市電子図書館をご利用で、しかも借りている本・予約している本の情報をJSONで取得したいぞという稀有な方、ぜひ使ってみてください。
P.S. Dockerに関して、私はこれまで配布物を単に使う側で、Dockerfileやcompose.ymlをほぼ作ったことがなかったので、それなりに苦労したし勉強にもなりました。
#### 参考リンク
- [mah\-jp/liblib: 神戸市立図書館・神戸市電子図書館で借りている本と予約している本の情報をJSON化するスクリプト \(Docker対応版\)](https://github.com/mah-jp/liblib?tab=readme-ov-file)
---
### 【読んだ本】 知能犯の時空トリック (官僚謀殺シリーズ) - 2024-05-16
URL: https://remoteroom.jp/medialog/2024-05-16_book-4909735135/
本作は、前回読んだ『[知能犯之罠]()』に続くシリーズ物ということで、どのような点を引き継いでの新しい小説になっているのか、興味があった。ある技量を持った人間がそれを活かし、身近な人に至った官僚の悪事を制裁するべく怨念にもとづいて殺人を繰り返す、という話の流れと、幕切れの際に表現される様式はとても似ている。登場人物のだれか一人にずっと感情移入して物語へ真剣に入り込むという感覚には、あまりならなかった。技巧的なトリックを効かせた謎解きの進行を楽しむ、そんなひとときを得るもの。
---
### 【観た映画】 TIME/タイム (吹替版) - 2024-05-04
URL: https://remoteroom.jp/medialog/2024-05-04_movie-b07cxywycz/
- 視聴: [YouTube](https://www.youtube.com/watch?v=MCqttZi7qE8)
原題『In Time』。先日観賞した『[ガタカ]()』に続く、アンドリュー・ニコル監督の作品として選択。その共通性が直接的な描写で分かり、ニヤッとしたのは、各作品に登場する二人ともが海を泳ぐシーンである。これには隠喩としてきっと何らかの意味が含められているに違いない。
時間というものが、労働や物やサービスと交換可能な価値に変換されて流通している世界。時間の交換可能性は経済を生み、資産の継承が可能になり貧富の偏りが維持強化され、居住エリアが分離される社会構造が成立している。また、自分の時間がゼロになるとバッテリー残量が無くなったかのように生命が終わるため、貧しい者は毎日が残り時間ギリギリのその日暮らしにあがき、富む者は年齢的には不老不死が保証されたようなリッチな生活様式を取り得る。
本作を観賞しつつ、秀逸なストーリーだなと私が心底感じたのは、異世界の設定に、要素は違えど現世界にも古今東西に存在しているこのような特性を持たせているところ。それは現世界での、富が集中する機構や、生命に関わる貧富の差に思いを馳せることになるもので、いわゆる示唆に富む映画という言葉を使いたくなる。
#### 鑑賞リンク
---
### Raspberry Pi 5: Proxmox VE 8系のインストール手順 - 2024-05-01
URL: https://remoteroom.jp/diary/2024-05-01/
#### 小さな仮想化プラットフォームとして
- [Raspberry Pi 5: まずはお試し\! ファンレスケースとUSBスティック型SSDの組み合わせで起動してみた \[2024-04-29\]]()
先日の上記記事でお試しを開始したRaspberry Pi 5 Model B (8GB) を、これから我が家の仮想化プラットフォームとして活用できるか探るべく、[Proxmox Virtual Environment (Proxmox VE; PVE)](https://www.proxmox.com/en/proxmox-virtual-environment/overview) をインストールする手順の紹介です。ラズパイ5にPVE 8系をインストールする手順の情報が (日本語の世界では) どうも見つからなかったので、書いてみます。
PVEのインストールには、おそらく2種類の方法があります。
- 方法-A. 何らかのOSの上にProxmox VEをパッケージとしてインストール
- 方法-B. Proxmox VEとOSがセットになっているISOからインストール ([公式のISO Installer](https://www.proxmox.com/en/downloads)と同様の方法)
本記事ではこの2つのうち、方法-Aを主に取り上げます。方法-Bも可能であると実際にやってみて確認できましたが (後述)、方法-Aのほうが私の求める最終型に近かったため、方法-Bは我が家の本番では不採用です。
#### 方法-A. Raspberry Pi OSの上にProxmox Portをインストール
arm64のラズパイ5へインストール可能なPVEのパッケージは公式には無いため、次の「jiangcuo/Proxmox-Port」をありがたく利用します。
- GitHubリポジトリ: [GitHub \- jiangcuo/Proxmox\-Port: Proxmox VE arm64 riscv64 loongarch64](https://github.com/jiangcuo/Proxmox-Port/)
本記事のインストール手順は基本的に、上記GitHubリポジトリのWikiにある次の2ページを参考にしています。
- Wiki > Debian bookwormへのインストール方法: [Install Proxmox VE on Debian bookworm · jiangcuo/Proxmox\-Port Wiki](https://github.com/jiangcuo/Proxmox-Port/wiki/Install-Proxmox-VE-on-Debian-bookworm)
- Wiki > ラズパイに関する特記事項: [RaspberryPi · jiangcuo/Proxmox\-Port Wiki](https://github.com/jiangcuo/Proxmox-Port/wiki/RaspberryPi)
また、今回構築するProxmox VEの環境は次の表のとおりです。手順にはこの情報を含めつつ記述します。
|項目|内容|
|---|---|
|OS|Raspberry Pi OS Lite (64-bit), Debian version: 12 (bookworm)|
|ホスト名|raspi5|
|使用するネットワーク接続|内蔵NICでの有線接続|
|IPアドレス|192.168.100.5/24|
|Gateway|192.168.100.1|
|DNSサーバ|192.168.100.1|
|OS/PVE導入先メディア|USB-SSD ([Buffalo SSD-PST250U3-BA](https://www.buffalo.jp/product/detail/ssd-pst250u3-ba.html))|
##### Section-1. PVEインストール前の下準備
1. Raspberry Pi OS Lite (64-bit) をラズパイ5へインストールします (ここはDHCPでOK)
```
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
```
2. 有線接続の名前「Wired connection 1」がスペース含みでかつ長いので、`nmcli`コマンドを使って短い「eth0」へ変更します
- 変更前のデフォルト状態を確認:
```
$ nmcli connection
NAME UUID TYPE DEVICE
Wired connection 1 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX ethernet eth0
lo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX loopback lo
```
- 変更コマンド&変更後の状態を確認:
```
$ sudo nmcli connection modify 'Wired connection 1' connection.id eth0
$ nmcli connection
NAME UUID TYPE DEVICE
eth0 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX ethernet eth0
lo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX loopback lo
```
3. eth0のIPアドレスを`nmcli`コマンドを使って固定します
- 変更前の状態を確認:
```
$ nmcli -f ipv4 connection show eth0
ipv4.method: auto
ipv4.dns: --
ipv4.dns-search: --
ipv4.dns-options: --
ipv4.dns-priority: 0
ipv4.addresses: --
ipv4.gateway: --
(以下省略)
```
- 変更コマンド:
```
$ sudo nmcli connection modify eth0 ipv4.addresses 192.168.100.5/24
$ sudo nmcli connection modify eth0 ipv4.gateway 192.168.100.1
$ sudo nmcli connection modify eth0 ipv4.dns 192.168.100.1
$ sudo nmcli connection modify eth0 ipv4.method manual
$ sudo nmcli connection up eth0 # この時点で既存のネットワーク接続が切れます
```
- 変更後の状態を確認:
```
$ nmcli -f ipv4 connection show eth0
ipv4.method: manual
ipv4.dns: 192.168.100.1
ipv4.dns-search: --
ipv4.dns-options: --
ipv4.dns-priority: 0
ipv4.addresses: 192.168.100.5/24
ipv4.gateway: 192.168.100.1
(以下省略)
```
4. `/etc/hosts`ファイルを編集します
- Ref:
- 編集内容: PVEホスト名と実際のIPアドレスを対応付ける, 「127.0.1.1」の定義を削除する
- 編集前の状態を確認:
```
$ cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 raspi5
```
- 編集後の状態を確認:
```
$ cat /etc/hosts
127.0.0.1 localhost
192.168.100.5 raspi5
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
#127.0.1.1 raspi5
$ hostname --ip-address
192.168.100.5
```
5. LXC Containerのmemory/swap情報を正しく反映させるためのパラメータを追記します
- Ref:
- `/boot/firmware/cmdline.txt`を編集して既存の1行の末尾に次の文字列を追加します (2行目ではなく1行目の最後です)
```
cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1
```
6. kernelを指定のタイプへ変更し、OSを再起動します
- Ref:
- `/boot/firmware/config.txt`を編集して末尾に次の1行を追加します
```
kernel=kernel8.img
```
- 現在のkernelリリース番号を確認した後、OSを再起動します
```
$ uname -r
6.6.28+rpt-rpi-2712
$ sudo shutdown -r now
```
- 再起動後のkernelリリース番号の末尾が「-v8」に変わっていることを確認します
```
$ uname -r
6.6.28+rpt-rpi-v8
```
##### Section-2. PVEのインストール
1. Proxmox-Portのrepositoryを登録し、apt情報を更新し、導入済みのパッケージを最新化します
- Ref:
```
# echo 'deb [arch=arm64] https://mirrors.apqa.cn/proxmox/debian/pve bookworm port' >/etc/apt/sources.list.d/pveport.list
# curl -L https://mirrors.apqa.cn/proxmox/debian/pveport.gpg -o /etc/apt/trusted.gpg.d/pveport.gpg
$ sudo apt update
$ sudo apt full-upgrade
```
2. PVEのパッケージをインストールします
- Ref:
```
$ sudo apt install ifupdown2
$ sudo apt install proxmox-ve postfix open-iscsi # 500MBほどのダウンロードが行われる
```
- 「Postfix Configuration」画面では:
- General email configuration type: 「Local only」を選択
- System mail name: 表示されている「raspi5」のまま
- 「Configuration file '/etc/apt/sources.list.d/pveport.list'」では:
- 「Y or I : install the package maintainer's version」を選択
3. インストール完了後、OSを再起動します
4. rootユーザのパスワードを新規設定します
```
$ ssh 192.168.100.5
$ sudo -s
# passwd
```
5. 手元のPCから を開き、PVEのGUI管理画面へ「User name: root, Password: 先程設定したパスワード」でログインします
6. (必須なのかどうかよく分かりませんが手元のPVE公式版 (amd64) と同じ状態にしたいため) 存在していないNetwork BridgeをGUI管理画面で1つ新規作成します
- 作業内容: 「Datacenter > raspi5 > System > Network」に移動し、「Create」で「Linux Brigde」を選択して下記のvmbr0の内容を入力し、「Apply Configuration」を押します
- vmbr0の設定:
|Name|Type|Active|Autostart|VLAN aware|Ports/Slaves|Bond Mode|CIDR|Gateway|
|---|---|---|---|---|---|---|---|---|
|vmbr0|Linux Bridge|Yes|Yes|No|eth0||192.168.100.5/24|192.168.100.1|
##### Section-3. PVEの動作確認 〜LXC Container編〜
インストールできたProxmox VE arm64版の上でCT (LXC Container; コンテナ) を一つ動作させてみます。LXC Containerで用いるイメージ (rootfs.tar.xz) の取得は次のリンク先から可能です。以下の例ではRockyLinux 9 arm64版のイメージを取得しています。
- LinuxContainers.org:
1. PVEのCT Templatesにイメージを保存します
- 作業内容: 管理画面の左メニュー「Datacenter > raspi5 > local (raspi5) > CT Templates」に移動し、「Download from URL」を押し、下記のように入力して「Download」を押します
- URL: (任意のimageのURLを貼り付ける) https://images.linuxcontainers.org/images/rockylinux/9/arm64/default/YYYYMMDD_HH%3AMM/rootfs.tar.xz
- File name: (任意) rockylinux-9-arm64_rootfs.tar.xz
2. PVEにコンテナを作成します
- 作業内容: 管理画面の右上「Create CT」を押し、下記のように入力し、「Next」を何度か押したあと「Finish」を押します
- Generalタブ:
- Hostname: (任意) rockylinux-test
- Password, Confirm password: (任意)
- Templateタブ:
- Template: rockylinux-9-arm64_rootfs.tar.xz
- Networkタブ:
- IPv4: DHCP
3. 作成したコンテナを起動します
- 作業内容: 管理画面の左メニューで「rockylinux-test」を選択し、右上の「Start」を押す
4. 起動したコンテナにコンソールログインします
- 作業内容: 「Console」を選択し、右側黒画面のプロンプトに「Username: root, Password: CT作成時に設定したパスワード」を入力します
#### 方法-B. Proxmox VEをISOでインストール (今回は不採用)
Proxmox VE 8.1をRaspberry Pi 5へISOでインストールしている動画が、YouTubeにありました。ラズパイ5でUEFIを実現するrpi5-uefiを用いるようです。
- 紹介動画 \[2024-01-11\]: [Installing Proxmox 8\.1 on Raspberry Pi 5 \- YouTube](https://www.youtube.com/watch?v=oe1_JVl63a0)
- rpi5-uefi: [GitHub \- worproject/rpi5\-uefi: EDK2 firmware images for Raspberry Pi 5](https://github.com/worproject/rpi5-uefi)
私も実際に、動画を見ながら必要なものを揃えてやってみたところ、たしかに簡単に、Proxmox VE ISOのGUIインストーラーを用いたProxmox VEのインストールが可能でした。
- 必要なもの:
- メディア: 例えば次の3つです (ラズパイに挿せるメディアであればおそらく組み合わせは自由)
1. FAT32フォーマットしたmicroSDカード: 最新版リリース のZIPファイルを展開して現れる3ファイルを保存したもの
2. USB-Memory: で得られるProxmox VE ARM64版のISOを焼いたもの
3. USB-SSD: Proxmox Port (Proxmox VE) のインストール先&後に起動デバイスとなるもの
- USB接続NIC (Linuxが標準対応するチップを搭載したもの。手元にあった[PLANEX USB-LAN1000R](https://www.planex.co.jp/products/usb-lan1000r/)はOK)
ただし、下記のように気づいた点が2つあり、これは私にとってメリットがないので、方法-Bは採用しないことにしました。
- 気づいた点:
1. Proxmox VEのインストールのみではラズパイ5の内蔵NICが使用できない (NICドライバを別途インストールすれば良いのだろうけど)
2. rpi5-uefiを保存しているmicroSDカードをラズパイ5の起動時に挿しておく必要があるっぽい
#### 参考サイト
記事中からリンクしたもの以外で、参考にしたサイトです。
- Debian BookwormでのIPアドレスの固定・NetworkManager関係:
- [NetworkManager コネクション名を変更する方法 \| WordPressをRaspberryPi4で始める方法](http://www.momobro.com/rasbro/tips-rp-nm-change-name/)
- [固定IPアドレスを設定する方法\(bookworm\) \| WordPressをRaspberryPi4で始める方法](http://www.momobro.com/rasbro/tips-rp-nm-fixed-ip-address/)
- `/etc/hosts`の編集を忘れていて、`pve-manager`がインストールできないエラーに遭遇した時:
- [素のDebianにProxmoxをインストールしようとして失敗してしまうとき│チラシの裏](https://www.takosuke.net/when-trying-to-install-proxmox-on-bare-debian-and-it-fails/)
- [\[SOLVED\] \- Problem with installing Proxmox\-VE on Debian \| Proxmox Support Forum](https://forum.proxmox.com/threads/problem-with-installing-proxmox-ve-on-debian.44316/)
また、Raspberry Pi 4 + Proxmox VE 7 に関しては過去に同様の記事を書いていました。
- [仮想化プラットフォームProxmox VEをラズパイに移植した「Pimox」を試す \[2022-11-07\]]()
---
### espanso + VSCodeで置換動作がおかしい件の解決方法 - 2024-04-30
URL: https://remoteroom.jp/diary/2024-04-30/
#### なにかが干渉している
テキスト入力におけるパワフルツール、espansoを日々いくつもの環境で愛用しています。それがいつ頃からか、Visual Studio Code (以下VSCode) 上で妙な挙動をするようになり悲しかったのですが、念願叶って解決できたのでメモです。
- espanso公式サイト: [Espanso \- A Privacy\-first, Cross\-platform Text Expander](https://espanso.org/)
妙な挙動とは、「`:espanso`」が「Hi there!」ではなく「:espansoH」に、「`:date`」が「2024-04-30」ではなく「:date2024-」に置換されるような挙動です。発生条件はこの3つが重なっているときのような感じです。
1. UbuntuまたはmacOS上のVSCodeで (Windowsでは未確認)
2. 拡張機能「[Markdown All in One](https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one)」を導入していて
3. markdownファイルを編集している時?
##### 解決方法
espansoがすでに動作中の環境にて。
1. VSCodeのエディタ画面のどこかで「`#detect#`」と入力する
2. espansoのウィンドウが現れ、アプリケーション情報が表示される
- Ubuntuの場合:
```
title: '● 2024-04-30.md - content - Visual Studio Code'
exec: '/usr/share/code/code'
class: 'Code'
```
- macOSの場合:
```
title: '2024-04-30.md — content'
exec: '/Applications/Visual Studio Code.app'
class: 'com.microsoft.VSCode'
```
3. コマンドライン上で`espanso path`を実行して設定ファイルのpathを確認する (以降の`$CONFIG`に当てはめる)
4. espansoの設定ファイル`$CONFIG/config/vscode.yml`を新規作成して次の内容を保存する。内容は、VSCodeをclassで指定し、espansoのbackendの動作モードをVSCodeの上では (デフォルトの「auto」ではなく) 「clipboard」にせよ、というもの。当環境ではOS間で設定ファイルを共有しているので各OSでのVSCodeのclassをOR指定している
```
# VSCode (Ubuntu, macOS)
filter_class: "^Code$|^com.microsoft.VSCode$"
backend: clipboard
```
5. espansoが設定ファイルを自動的に再読み込みする
6. VSCodeのエディタ画面で「`:date`」を入力すると意図通り「2024-04-30」に置換されることを確認する
#### 参考リンク
- [VSCode issue on macOS · Issue \#675 · espanso/espanso](https://github.com/espanso/espanso/issues/675#issuecomment-941045203)
- espanso:
- [Configuration Basics \| Espanso](https://espanso.org/docs/configuration/basics/)
- [App\-specific configurations \| Espanso](https://espanso.org/docs/configuration/app-specific-configurations/)
- [Options \| Espanso](https://espanso.org/docs/configuration/options/)
---
### Raspberry Pi 5: まずはお試し! ファンレスケースとUSBスティック型SSDの組み合わせで起動してみた - 2024-04-29
URL: https://remoteroom.jp/diary/2024-04-29/
#### 新作の感触は?
日本では2024年02月に発売開始され、またしても私は勢いで購入したRaspberry Pi 5 Model B。これをファンレスのアルミ製ケースと小指の先ぐらいの小さなUSBスティック型SSDと組み合わせて、ちょうど先日リリースされたばかりの[Ubuntu Desktop 24.04 LTS](https://ubuntu.com/desktop)を起動してみた、の巻です。
|種別|商品名|購入価格 (税込)|購入店|備考|
|---|---|--:|---|---|
|SBC|[Raspberry Pi 5 (8GB)](https://www.raspberrypi.com/products/raspberry-pi-5/)|15,290円|[スイッチサイエンス](https://www.switch-science.com/products/9250)||
|ケース|[EDATEC Passive Cooling CNC Case](https://www.edatec.cn/en/ac/pi5-case.html)|2,706円|[スイッチサイエンス](https://www.switch-science.com/products/9401)||
|USB-SSD|[Buffalo SSD-PST250U3-BA](https://www.buffalo.jp/product/detail/ssd-pst250u3-ba.html)|4,950円|[ソフマップ・ドットコム](https://www.sofmap.com/product_detail.aspx?sku=25362863)|セール実施時に購入|
##### 写真: 開封の儀
ラズベリー色が特徴的ないつもの箱。Raspberry Pi 5 / 8GB (技術基準適合証明あり版) を購入しました。技適シールは本体の箱に貼られている状態です。
こちらの白い箱は、[高そうな放熱性能](https://www.digikey.jp/ja/blog/edatecs-two-fan-less-cnc-cases)とかっこよさに惹かれて選んだアルミニウム製のケースです。基板に密着するサーマルパッド (放熱シート) がケース内部の上下に予め貼り付けられています。
ケースの同梱物は小さなビニール袋に収められています。その中にはおそらく「H1.5mm」規格と思われるネジ類の他に、黒いプラスチック製の短い棒のようなものが入っており、用途が最初は不明だったのですが分かりました。ということで捨ててはいけません!
この黒い棒は、Raspberry Pi 5の基板上に横向きに設けられている白い電源ボタンを、ケースの外側から押すための突起になります。忘れずに取り付けておきましょう。
ネジ4本を締め上げて完成させた本体 + ケースの総重量は実測で208g。本体 + ケース + USB-SSD だと212gでした。手にずっしりくる重さ感覚は良きです。
##### OSのインストール (供給電力には注意)
Raspberry Pi 5を起動するOSを準備します。既存のPCで[Raspberry Pi Imager](https://www.raspberrypi.com/software/)を起動し、OSの選択肢の中から「Ubuntu Desktop 24.04 LTS」のイメージを選び、USBスティック型SSDに焼きます。
Raspberry Pi 5に外部ディスプレイをHDMI接続し、USBスティック型SSDを青いUSB 3.0端子に差し、次に、USB Type-C経由で電源供給するとラズパイが起動し始めます。
ただし今回の実験では、5V/5Aという大電流を供給できない適当なUSB電源を使っており、かつUSB端子に接続したデバイス (ある程度の電力を消費する) からOSを起動しようとしているため、次のような警告画面「`USB boot requires high current (5 volt 5 amp) power supply.`」が表示されてbootが一時中断されました。
ここは初回なのでとりあえず「`press the power button to temporarily enable usb_max_current_enable`」を行って起動を継続します。話の順番が前後しますが、Ubuntuのインストールに成功した後にはconfig.txtを次のように編集しておきましょう。なお、実験に使用したUSB-SSDは省電力なので問題はありませんでしたが、ある程度以上の供給電力を要求するUSBデバイスが接続されていると、本当に電力不足で起動できないことも考えられますのでご注意。
```
$ diff /boot/firmware/config.txt{.original,}
55a56,58
>
> # CUSTOM
> usb_max_current_enable=1
```
##### いくつか測定してみた
###### USB-SSDの読み書き速度
USB-SSD (Buffalo SSD-PST250U3-BA) の読み書き速度を比較するため、SBC本体のみを交換して比較すると次の通りです。
|SBC本体|方向|R/W Speed (5回の平均値)|比較|
|---|---|--:|--:|
|Raspberry Pi 5 Model B|Read|355.16MB/sec|1.42倍|
|Raspberry Pi 4 Model B|Read|249.51MB/sec|--|
|Raspberry Pi 5 Model B|Write|245MB/sec|1.39倍|
|Raspberry Pi 4 Model B|Write|176MB/sec|--|
- 読み込み速度の測定方法: `for i in $(seq 5); do sudo hdparm -t /dev/sda2; sleep 5; done`
- 書き込み速度の測定方法: `for i in $(seq 5); do dd if=/dev/zero of=/tmp/testimg bs=1M count=1024; sleep 5; done`
###### 消費電力
Raspberry Pi 4/5の消費電力も測定してみました。全体的に5のほうが高めですが、しかし両者の効率性を比較するならば、本来調べるべきは「一定量の処理を完遂するのに要する消費電力量」という電力効率かもしれません。
|SBC本体|状態|消費電力|備考|
|---|---|--:|---|
|Raspberry Pi 5 Model B|OS起動後アイドル状態|4.8〜4.9W|USB-SSDを接続|
|Raspberry Pi 4 Model B|OS起動後アイドル状態|3.7〜4.0W|USB-SSDを接続|
|Raspberry Pi 5 Model B|`yes >/dev/null` 4並列|10.7W|USB-SSDを接続|
|Raspberry Pi 4 Model B|`yes >/dev/null` 4並列|6.7〜7.0W|USB-SSDを接続|
###### CPU温度・クロック
Raspberry Pi 4/5のCPU温度とCPUクロックは、次のコマンドでモニタ可能です。
```
#### Raspberry Pi 5での一例
$ sudo vcgencmd measure_temp
temp=47.2'C
$ sudo vcgencmd measure_clock arm
frequency(0)=2400004352
```
```
#### Raspberry Pi 4での一例
$ sudo vcgencmd measure_temp
temp=46.7'C
$ sudo vcgencmd measure_clock arm
frequency(48)=1500398464
```
#### 感想
様々なベンチマーク記事を参照してもわかるように、SoCがBCM2712に更新されたRaspberry Pi 5は、BCM2711の4と比べて順当にパワーアップしている感触があります。我が家においてはこの有り余るパワーをどう使うのがふさわしいかを考えてみると、負荷が一時的に高くなる可能性がある仕事を平準化して24時間割り当てられるとメリットありそう。そうしますと、Raspberry Pi 5にはProxmox VEなどインストールして仮想基盤として稼働させ、複数の本番系サーバサービスをその上で動かす運用がまず思い浮かびます。そして我が家の現行サーバであるRaspberry Pi 4は、各種テスト用のおもちゃとして活用し尽くす、という方向性になりそうな気がします。
Raspberry Pi 5の基板からの発熱については、実験中の室温とCPU温度の関係性を見る限り、今回用いたファンレスのケースならばそのまま日常運用してもよさそうですが、もし不安ならば、ファン付きのケースに収めて運用するのが良いかもしれません。ちなみに私の場合は下記のファン付き公式ケースを実は最初に購入し、その後に見つけたファンレスのケースにメカニカルな魅力を感じたため、まずは後者で運用してみようかと思っています。
|種別|商品名|購入価格 (税込)|購入店|備考|
|---|---|--:|---|---|
|ケース|[Raspberry Pi 5用公式ケース Red/White](https://www.raspberrypi.com/products/raspberry-pi-5-case/)|1,672円|[スイッチサイエンス](https://www.switch-science.com/products/9251)||
#### 参考サイト
- [Raspberry Pi 5 実機レビュー(ベンチマーク編) \| Japanese Raspberry Pi Users Group](https://www.raspi.jp/2023/09/raspberry-pi-5-benchmark-review/)
- [Raspberry Pi 5のUSBブート \| Takeshi Yonezu](https://tkyonezu.com/iot/raspberry-pi-5%E3%81%AEusb%E3%83%96%E3%83%BC%E3%83%88/)
- [【Hothotレビュー】改めて見る、「Raspberry Pi 5」の実力と使いどころ \- PC Watch](https://pc.watch.impress.co.jp/docs/column/hothot/1584619.html)
---
### uConsole: raspotifyを使ってSpotifyの再生先デバイスにする - 2024-04-27
URL: https://remoteroom.jp/diary/2024-04-27/
#### 手元にあるなら音源再生にも
ガジェットとして最近あまりかまってあげられていない手元の[ClockworkPi uConsole Kit RPI-CM4 Lite](https://www.clockworkpi.com/uconsole)を、Spotifyの再生先デバイス (Spotify Connect Client) に指定できると面白いかも、とふと思いついて実際にやってみたメモ。本記事の内容は基本的にRaspberry Piにも適用可能なはず。
#### raspotifyの導入手順
Debian系OSを対象にしている次のSpotify Connectクライアント「raspotify」を、Raspberry Pi OSがベースであろうuConsole RPI-CM4のOSへ導入する。
- GitHub: [dtcooper/raspotify: A Spotify Connect client that mostly Just Works™](https://github.com/dtcooper/raspotify)
- 公式ドキュメント (Wiki): [Basic Setup Guide · dtcooper/raspotify Wiki](https://github.com/dtcooper/raspotify/wiki/Basic-Setup-Guide)
Spotify Connectの利用には[Spotify Premium](https://www.spotify.com/jp/premium/)のサブスクリプションが必要とのこと (当方はサブスク中)。また、uConsoleには[HyBi FC5](https://store.hiby.com/products/hiby-fc5)というUSB-DACを接続し、Spotifyで再生する音源をヘッドホンで聴く前提である。
##### Step-0. uConsoleの環境を確認
記事執筆時点でのuConsoleのOSとkernelは次の通り。
```
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
```
```
$ uname -a
Linux uconsole 5.10.17-v8+ #5 SMP PREEMPT Thu Jun 29 13:36:01 CST 2023 aarch64 GNU/Linux
```
##### Step-1. インストール
上記の公式ドキュメントに沿って、次のコマンドでraspotifyのインストールを行う。
```
$ sudo apt-get -y install curl && curl -sL https://dtcooper.github.io/raspotify/install.sh | sh
```
##### Step-2. サウンドデバイスの確認
認識されているサウンドデバイスを次のコマンドで一覧表示する。
```
$ librespot -d ?
(省略)
Device:
hw:CARD=FC5,DEV=0
Description:
HiBy FC5, USB Audio
Direct hardware device without any conversions
Supported Format & Sample Rate Combinations:
Format: S16 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
Format: S24_3 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
--------------------------------------------------------------------
Device:
plughw:CARD=FC5,DEV=0
Description:
HiBy FC5, USB Audio
Hardware device with all software conversions
Supported Format & Sample Rate Combinations:
Format: S16 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
Format: S24 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
Format: S24_3 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
Format: S32 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
Format: F32 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
Format: F64 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
--------------------------------------------------------------------
Device:
sysdefault:CARD=FC5
Description:
HiBy FC5, USB Audio
Default Audio Device
Supported Format & Sample Rate Combinations:
Format: S16 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
Format: S24 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
Format: S24_3 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
Format: S32 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
Format: F32 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
Format: F64 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
--------------------------------------------------------------------
Device:
front:CARD=FC5,DEV=0
Description:
HiBy FC5, USB Audio
Front output / input
Supported Format & Sample Rate Combinations:
Format: S16 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
Format: S24_3 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
--------------------------------------------------------------------
Device:
iec958:CARD=FC5,DEV=0
Description:
HiBy FC5, USB Audio
IEC958 (S/PDIF) Digital Audio Output
Supported Format & Sample Rate Combinations:
Format: S16 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
Format: S24_3 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
--------------------------------------------------------------------
Device:
dmix:CARD=FC5,DEV=0
Description:
HiBy FC5, USB Audio
Direct sample mixing device
Supported Format & Sample Rate Combinations:
Format: S16 Sample Rate(s): 48kHz
--------------------------------------------------------------------
```
##### Step-3. 設定ファイルの編集
`/etc/raspotify/conf`を編集して、次の4行を表の状態にする。
|変数名 (左辺)|値 (右辺)|
|---|---|
|LIBRESPOT_DISABLE_AUDIO_CACHE|※行自体を「#」でコメントアウトする|
|LIBRESPOT_BITRATE|"320"|
|LIBRESPOT_CACHE_SIZE_LIMIT|"16G"|
|LIBRESPOT_DEVICE|"hw:CARD=FC5,DEV=0"|
※`LIBRESPOT_DISABLE_AUDIO_CACHE`は、この行の存在自体が変数名のフラグ状態を示し、行が存在することがLIBRESPOT_DISABLE_AUDIO_CACHE=Trueを意味する。今回はAUDIO_CACHEを使用したいので、この行を存在させないことが必要である。
`/etc/raspotify/conf`の編集前と編集後の差分は次のようになる。
```
### diff /etc/raspotify/conf.original /etc/raspotify/conf
33c33
< LIBRESPOT_DISABLE_AUDIO_CACHE=
---
> #LIBRESPOT_DISABLE_AUDIO_CACHE=
58a59
> LIBRESPOT_BITRATE="320"
82a84
> LIBRESPOT_CACHE_SIZE_LIMIT="16G"
96a99
> LIBRESPOT_DEVICE="hw:CARD=FC5,DEV=0"
```
##### Step-4. サービス再起動&状態確認
raspotifyのサービスはインストール時から自動起動しているが、Step-3で設定を変更したのでサービスを再起動し、状態を確認する。
```
### systemctl restart raspotify.service
### systemctl status raspotify.service
● raspotify.service - Raspotify (Spotify Connect Client)
Loaded: loaded (/lib/systemd/system/raspotify.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2024-04-27 12:01:48 JST; 52s ago
Docs: https://github.com/dtcooper/raspotify
https://github.com/librespot-org/librespot
https://github.com/dtcooper/raspotify/wiki
https://github.com/librespot-org/librespot/wiki/Options
Main PID: 39964 (librespot)
Tasks: 2 (limit: 4088)
CPU: 2.081s
CGroup: /system.slice/raspotify.service
└─39964 /usr/bin/librespot
Apr 27 12:01:48 uconsole systemd[1]: Started Raspotify (Spotify Connect Client).
```
raspotifyの起動状態に問題がなければ、uConsoleと同一のLAN内でSpotifyのアプリを起動すると、uConsole上で起動しているraspotifyが、アプリのデバイス一覧に「raspotify (uconsole)」という名前で現れる。そのデバイスを選択してからアプリで音源を再生し、uConsoleに接続したUSB-DAC経由で音源が再生されれば目的達成だ。
---
### ISOFIX対応ブースターシートを車に取り付けた - 2024-04-25
URL: https://remoteroom.jp/diary/2024-04-25/
#### 良い機会だから固定化
身体が大きくなってきた子どもに合わせて、車の後席に付けているチャイルドシートを、腰下部分のみの状態、すなわちブースターシートへ変更することにした。
既存のチャイルドシートを変形させてブースターシートの状態にすることも可能ではあるのだが、これはレトロセダン時代から使っている、ISOFIX非対応のもの。後付けのシートは、その運動エネルギーの負荷が子どもにかからないように、やはり車にがっちり固定したい。そこでISOFIX対応のタイプを調達して取り付けてみたので簡単に写真レポートです。
|種別|商品名|購入価格 (税込)|購入店|備考|
|---|---|---|---|---|
|ブースターシート|Jovikids WD020 (ブラック)|7,000円|Amazon.co.jp|スマイルSALE期間中に購入|
##### 説明動画・取扱説明書について
写真を撮り忘れたが、購入店から届いたダンボール箱の中には、ビニール袋に包まれたブースターシート本体と英語版の取扱説明書、そしてQRコードが記載されたカードが同梱されていた。QRコードのリンク先は公式サイト上の [ジョビキッズ](https://www.jovikids.com/ja/pages/%E3%82%B8%E3%83%A7%E3%83%93%E3%82%AD%E3%83%83%E3%82%BA) というページになっており、[取り付け方法の説明動画](https://www.jovikids.com/ja/pages/wd020-%E4%BD%BF%E7%94%A8%E8%AA%AC%E6%98%8E%E6%9B%B8)や、[日本語版の取扱説明書 (PDF)](https://cdn.shopify.com/s/files/1/0571/4883/3968/files/WD020JP_a7b1186c-fea3-45b9-9ba0-4ebe3a2c342f.pdf) を閲覧することができる。
しかし私はカードのQRコードに特に気を配らないまま、英語版の取扱説明書を斜め読みした後に、ブースターシートをなんとなくの雰囲気で取り付けた。QRコードのリンク先の動画を最初に観ておけば、取り付け方法に迷うことはきっとないでしょう。
#### 写真: 取り付けの様子
シートの下に敷く保護マットは、チャイルドシート用に使っていた次のものを半分に折って再利用している。
##### 所感
1. 座面は意外に高くて、車のシートから着座位置が15cm近く上がる。きっと見晴らしが良くなるでしょう
2. 座面のクッション性はあまり豊かではない。もし子どもが疲れるようだったら、取り外し式のカバーの下に、丸型の薄いクッションでも別途追加すると良いかもしれない
3. 車種 (SNT33) に固有の話として、リアシートをスライドさせて最後尾に下げた状態だとシートベルトが子どもの身体から離れ気味になり、肩に当てることが難しくなる。シートベルトをしっかり効かせるためには、リアシートの前後位置と背もたれの傾きを、子どもの体格に合わせて最適化しておくことが必要そうだ
###### 追記 \[2024-04-30\]: “もちもち”なクッションを追加
上記の所感2については、ニトリのデコホームで[“もちもち”な丸型クッション](https://www.nitori-net.jp/ec/product/5785682s/)を見つけたので、ブースターシートのカバー下にこれを追加してみた。サイズは「幅35×奥行35×高さ4cm」で、まあまあ丁度良い。
#### 参考写真
これまで使用していたチャイルドシートは
[RECARO J1 Neo Smile](https://web.archive.org/web/20231208102826/https://www.recaro-kids.jp/child-seats/child-seats/j1-neo-smile.html) であった。
---
### 【観た映画】 ガタカ - 2024-04-20
URL: https://remoteroom.jp/medialog/2024-04-20_movie-b09fkg9pmt/
- 視聴: [YouTube](https://www.youtube.com/watch?v=Pg5FEYQ1yUw)
原題『Gattaca』。私の大のお気に入りで過去にも観ており、今回は再履修だ。数日前に職場で雑談している中で、現在は顔写真が付いているマイナンバーカードが、未来には遺伝情報を内蔵してそれを用いた個人認証が行われることもあり得るか?というアイデアが出てきた時、私はこのSFの世界観を思い浮かべた。そして、未来のひとつを提示している本作の観賞を皆に激しく薦めたのであった。本作が公開されたのは1997年。それから20年以上経過した現在では、ヒトのDNA配列の解読は進んでいると聞くし、DNA配列は手のひらサイズの機器 ([ナノポアシークエンサー](https://www.nhk.jp/p/zero/ts/XK5VKV7V98/episode/te/Z5M8ZJ7362/)) で読み取れるそうである。現実が本作へと一歩一歩近づいており、映画の世界を「ありえない。非現実的だ」と完全否定することはあまりできそうにない。
改めて本作 (4K版) を観て思ったのは、まず絵作りについてで、高解像度を使い切るギーク感は無く、色合いや全体的な雰囲気が美しく調和していること。音的にエンジンが内燃機関じゃなさそうな車が、外観的にはいつの時代のものなのか不明だったりして、ミステリアスなところも惹かれる。また、肝心のストーリーは整理されていてかつ密度感もあるなあと再認識。本作は、遺伝子の乗り物ともいわれる人間が自分や子孫の人生を考えるときに立ち返る、原点になるような映画だと思う。
#### 鑑賞リンク
---
### 【読んだ本】 知能犯之罠 (官僚謀殺シリーズ) - 2024-04-12
URL: https://remoteroom.jp/medialog/2024-04-11_book-490973502x/
本作の舞台は「中国」となっている。ストーリーからは、伝え聞く中国の文化の特性と同じものが、所々強く滲み出ていた。そしてそれが、犯人が仕掛ける各種の罠を機能させる不可欠な要素となるように、ストーリーが巧みに構成されていると感じられた。このような、挑戦的で、かつ当該国の社会状況における問題提起も含む重層的な内容が、本作の読み応えを作っている。
犯人は、人間心理と官僚社会の力学を熟知しており、狙った落とし穴へと事が運ぶ (落ちる) ように、力学を使って人々を操る。その技がおもしろいので私は昼夜の空き時間、ページめくりに勤しむしかなかった。後半のある時点からは結末が予想できて、ほぼその通りにストーリーは終わった。
---
### 【読んだ本】 ラザルス:世界最強の北朝鮮ハッカー・グループ - 2024-04-09
URL: https://remoteroom.jp/medialog/2024-04-10_book-b0bzvyj7k1/
本書の内容は強めに頭に残したいと思い、2回読んでみた (読了: 2023-12-28, 2024-04-05)。「隠者の国」と称される朝鮮民主主義人民共和国 (北朝鮮; DPRK: Democratic People's Republic of Korea) について、取材に基づき大変詳しく書かれている第二章がまずは圧巻であった。ハッキングが国家主導であるならば、その行為自体や投入技術だけではなく全体像や背景まで把握するために、国の成り立ち・歴史、国際関係、[出身成分](https://ja.wikipedia.org/wiki/%E5%87%BA%E8%BA%AB%E6%88%90%E5%88%86)という階級制度、生活の困窮状況について本章のレベルで知ることが重要であるし、知ることによって未来に起こるハッキングの脅威を予測する精度もきっと高まる。自分が今まで知らなかったことがとりあえず多すぎる、という事実に打ちのめされることが、大規模なハッキングに対する心構えの第一歩なのかもしれない。
おそらくほとんどのITシステムへは、関係者を騙すことができれば容易に侵入開始できる。人間の性は古今東西問わず普遍的な脆弱性であるから、ソーシャルエンジニアリングの汎用性は高い。さらにそこへ最先端の純技術的なハッキングが加われば、IT無しには成立しなくなった現代社会へ、信じられないような損害をもたらすことができる (攻撃者にとってそれは多大なる利益だ)。本書のタイトルとなっているラザルスグループ (Lazarus Group) が黒幕だと推定されている事件が、ほんの数年の間に怒濤の勢いで規模を拡大しながら起こっていることに本当に驚く。
#### 参考リンク
- [北朝鮮のハッカー集団「ラザルス」とは何者か?|NHK](https://www3.nhk.or.jp/news/special/sci_cul/2022/12/special/lazarus/)
- [“北朝鮮がAI使用しサイバー攻撃強化のおそれ”\(油井’s VIEW\) \- 国際報道 2024 \- NHK](https://www.nhk.jp/p/kokusaihoudou/ts/8M689W8RVX/blog/bl/pNjPgEOXyv/bp/pLVGglxke2/?cid=bs22hk-tw-240325-4)
また、[北朝鮮の宣伝媒体に触れるには(メモ) \| 栗本 拓幸 \| Hiroyuki Kurimoto Official site](https://hiroyuki-kurimoto.jp/archives/1496) ([2023-09-26時点のIntetnet Archive](https://web.archive.org/web/20230926231100/https://hiroyuki-kurimoto.jp/archives/1496))によると、YouTubeチャンネルの「[dprknow](https://www.youtube.com/@nuiral)」と「[dprknow 2](https://www.youtube.com/@dprknow2196)」に掲載されている動画は、北朝鮮を研究している研究者が北朝鮮発信の動画に日本語字幕を付けたものだそうだ。
---
### CVE-2024-3094: XZ Utilsにバックドアが仕込まれたという脆弱性の自分用メモ - 2024-03-30
URL: https://remoteroom.jp/diary/2024-03-30/
#### 手元にも来とる……
XZ Utils (xz/liblzma) にバックドアが仕込まれたという脆弱性 CVE-2024-3094 が、その発生経緯と威力の面でやばそうで、かつ、自分の手元のPC (macOS) にも、脆弱性のある版が知らないうちにインストールされていたことが衝撃的なので、自分に関わる部分でのメモを残す。
- `nvd.nist.gov`: [NVD \- CVE\-2024\-3094](https://nvd.nist.gov/vuln/detail/CVE-2024-3094)
- `www.cisa.gov`: [Reported Supply Chain Compromise Affecting XZ Utils Data Compression Library, CVE\-2024\-3094 \| CISA](https://www.cisa.gov/news-events/alerts/2024/03/29/reported-supply-chain-compromise-affecting-xz-utils-data-compression-library-cve-2024-3094)
- `www.tenable.com`: [Frequently Asked Questions About CVE\-2024\-3094, A Backdoor in XZ Utils \- Blog \| Tenable®](https://www.tenable.com/blog/frequently-asked-questions-cve-2024-3094-supply-chain-backdoor-in-xz-utils)
- `www.helpnetsecurity.com`: [Beware\! Backdoor found in XZ utilities used by many Linux distros \(CVE\-2024\-3094\) \- Help Net Security](https://www.helpnetsecurity.com/2024/03/29/cve-2024-3094-linux-backdoor/)
- `www.redhat.com`: [Urgent security alert for Fedora 41 and Fedora Rawhide users](https://www.redhat.com/en/blog/urgent-security-alert-fedora-41-and-rawhide-users)
- `www.jpcert.or.jp`: [XZ Utilsに悪意のあるコードが挿入された問題(CVE\-2024\-3094)について](https://www.jpcert.or.jp/newsflash/2024040101.html) (追記: 2024-04-01T15:03:28+09:00)
#### Homebrew (macOS) の場合
##### 対応前 \[2024-03-30\]
手元の2台のMacbook AirにはHomebrewを導入していて、けっこう頻繁に`brew update`を叩いて更新している。その環境では xz が 5.6.1 にアップデートされてしまっていた。
```bash
#### 追記: 【推奨】一般的により安全なバージョン確認方法
$ brew list --version xz
xz 5.6.1
```
```bash
#### 追記: 【非推奨】最初に掲載していたバージョン確認方法
$ xz -V
xz (XZ Utils) 5.6.1
liblzma 5.6.1
```
##### 対応内容 \[2024-03-30\]
そこで、2台とも次の手順をやってみて xz を 5.4.6 へダウングレードした。
```bash
#### 追記: 【推奨】Homebrewに従うxz更新(downgrade)方法
$ brew update && brew upgrade
$ brew list --version xz
xz 5.4.6
```
```bash
#### 追記: 【非推奨】最初に掲載していたxz更新(downgrade)方法
$ brew update
$ brew unlink xz
$ brew install xz
$ xz -V
xz (XZ Utils) 5.4.6
liblzma 5.4.6
```
巷で紹介されているswitchや、uninstallをしなかった理由は次の通り。
- 私の手元のbrewコマンドでは`brew switch`が使えない模様
- `brew uninstall xz`は他のパッケージへの影響範囲が広すぎて実施を控えた
なお、Homebrew側でダウングレードの対応がなされていた後なので、上記手順のみで 5.4.6 へ変更できた可能性がある。
###### 対応内容部分に関する追記集
###### 追記: \[2024-03-31T00:53:39+09:00\]
下記のご指摘、確かに……。調査時にそこまで考えなかった。
より安全なのは、xzのバージョンを直接実行で調べるのではなく、各環境のパッケージマネージャを介して調べる方法。具体的には次のような方法になると思われる。
- apt-get, yum, zypperの場合: [CVE\-2024\-3094\-checker/CVE\-2024\-3094\-checker\.sh at main · FabioBaroni/CVE\-2024\-3094\-checker](https://github.com/FabioBaroni/CVE-2024-3094-checker/blob/main/CVE-2024-3094-checker.sh)
- Homebrewの場合: `brew list --version xz`でバージョン番号を読み取る
下記のツイートにある方法も参考になる。
#### backdoorに関する周辺情報 (仕込みの意図や拡張性 etc.)
##### 追記: \[2024-03-30T23:18:08+09:00\]
CVE-2024-3094 の要因となったcommitの主が、xzリポジトリ以外に行った過去のpull requestの、内容の再精査が行われているらしい。
1. [Added error text to warning when untaring with bsdtar by JiaT75 · Pull Request \#1609 · libarchive/libarchive · GitHub](https://github.com/libarchive/libarchive/pull/1609)
2. [libarchive: pull the fix for a suspicious commit by LeSuisse · Pull Request \#300114 · NixOS/nixpkgs · GitHub](https://github.com/NixOS/nixpkgs/pull/300114)
##### 改訂: \[2024-03-31T22:39:50+09:00\]
xz/liblzmaの、問題となっているコードを詳細に解析しているところ、およびそのリンク集。1は今回の脆弱性の最初の報告である。
1. [oss\-security \- backdoor in upstream xz/liblzma leading to ssh server compromise](https://www.openwall.com/lists/oss-security/2024/03/29/4)
2. [xz/liblzma: Bash\-stage Obfuscation Explained \- gynvael\.coldwind//vx\.log](https://gynvael.coldwind.pl/?lang=en&id=782)
3. kill switchの存在について:
- [liblzma backdoor strings extracted from 5\.6\.1 \(from a built\-in trie\) · GitHub](https://gist.github.com/q3k/af3d93b6a1f399de28fe194add452d01)
- [zeno: "@q3k I got too curious about w…" \- Warsaw Hackerspace Social Club](https://social.hackerspace.pl/@zeno@piaille.fr/112185928867901151)
4. [Ken Thompsonの\(loginへの\)トロイの木馬の現代\(open\-ssh\)版 \- 間違いだらけの備忘録](https://gunshot.hatenablog.com/entry/20240330/1711776136)
5. [xz\-utils backdoor situation · GitHub](https://gist.github.com/thesamesam/223949d5a074ebc3dce9ee78baad9e27)
以上。なにか新しいことがあれば追記します。
---
### ソースコードの循環的複雑度 (CCN) を調査するLizardというツール - 2024-03-27
URL: https://remoteroom.jp/diary/2024-03-27/
#### Cyclomatic Complexityとは
ソースコードをreviewする機会はあるものの、作法や手加減の具合がまだまだよくわかっていない私。ほとんど書いたことがない言語を見ることもあるし (爆)。そんな私に役立ちそうな、循環的複雑度 (Cyclomatic Complexity) という指標を今日は教えてもらった。
- [循環的複雑度 \- Wikipedia](https://ja.wikipedia.org/wiki/%E5%BE%AA%E7%92%B0%E7%9A%84%E8%A4%87%E9%9B%91%E5%BA%A6)
たとえば自分でプログラムを書く際に、この循環的複雑度というものを手元のコマンドで可視化できると、「コードのここんとこ流れが複雑すぎるんじゃないか?」という見直し判断の一つの指標にできて良さそうだ。探してみると、CCN (Cyclomatic Complexity Number) を簡易的にはじき出してくれる「lizard」というOSSなツールを発見したのでメモです。
##### Lizardのコマンド
- [lizard · PyPI](https://pypi.org/project/lizard/): 単体コマンドおよびPythonモジュールとして「`pip install lizard`」で導入可能
- [lizard\-analyzer — Homebrew Formulae](https://formulae.brew.sh/formula/lizard-analyzer): brewでは「`brew install lizard-analyzer`」で導入可能
- [terryyin/lizard: A simple code complexity analyser without caring about the C/C\+\+ header files or Java imports, supports most of the popular languages\.](https://github.com/terryyin/lizard): ソースコードはこちら
##### Lizardのオンラインサービス
- [lizard\.ws](http://www.lizard.ws/): ただし記事執筆時点では「`Error connecting the analysing server.`」が表示される
#### Lizardを軽く試す
CCNをlizardを使って調査する一例として、pythonで書かれた、とある自分のコードを生贄にします。
1. 下記リポジトリの現時点のcommitをcloneする
- [mah\-jp/liblib: 神戸市立図書館・神戸市電子図書館で借りている本と予約している本の情報をJSON化するスクリプト+返却期限が近い本と取り置き中の予約本を通知するスクリプト](https://github.com/mah-jp/liblib)
```
$ git clone https://github.com/mah-jp/liblib
$ cd liblib
$ git checkout 88df4052f7a8aa42ae4730e25257f9b65c3ccab8 .
Updated 0 paths from 05cf7d5
```
2. lizardコマンドを導入済みの環境にて、Pythonを対象とするコマンドを次のように実行する
```
$ lizard --languages python ./*.py
================================================
NLOC CCN token PARAM length location
------------------------------------------------
5 1 64 2 5 do_login@22-26@./book2json_d-library.py
15 6 105 2 15 wait_element@28-42@./book2json_d-library.py
58 14 592 0 61 main@44-104@./book2json_d-library.py
46 3 604 4 51 run@18-68@./book2json_opac.py
38 7 503 2 40 parse_html@70-109@./book2json_opac.py
2 1 20 0 2 get_datetime@111-112@./book2json_opac.py
4 1 31 1 4 cut_space@114-117@./book2json_opac.py
4 1 46 1 4 pickup_orderstatus@119-122@./book2json_opac.py
3 1 27 1 3 pickup_library@124-126@./book2json_opac.py
3 1 36 1 3 pickup_title@128-130@./book2json_opac.py
8 3 77 2 8 pickup_date@132-139@./book2json_opac.py
7 3 55 2 9 pickup_reserve@141-149@./book2json_opac.py
39 15 323 1 43 main@12-54@./json2alert.py
3 file analyzed.
==============================================================
NLOC Avg.NLOC AvgCCN Avg.token function_cnt file
--------------------------------------------------------------
114 26.0 7.0 253.7 3 ./book2json_d-library.py
157 12.8 2.3 155.4 9 ./book2json_opac.py
51 39.0 15.0 323.0 1 ./json2alert.py
===============================================================================================================
No thresholds exceeded (cyclomatic_complexity > 15 or length > 1000 or nloc > 1000000 or parameter_count > 100)
==========================================================================================
Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt Warning cnt Fun Rt nloc Rt
------------------------------------------------------------------------------------------
322 17.8 4.4 191.0 13 0 0.00 0.00
```
3. 用語の意味は下表の通り。CCNだけに着目してもなんとなくわかる。なるほど……。orz
|項目名|内容|
|---|---|
|NLOC|lines of code without comments|
|CCN|cyclomatic complexity number|
|roken|token count of functions|
|PARAM|parameter count of functions|
1. ちなみに、中身のウェブスクレイピング部分をseleniumからplaywrightへ切り替えている、開発中でまだ未公開の`book2json_d-library.py`だとCCNは次の通り。流れの複雑度が下がっていることが、実際のコードも感覚的にそうだし、指標にも現れているようです
```
==============================================================
NLOC Avg.NLOC AvgCCN Avg.token function_cnt file
--------------------------------------------------------------
144 12.8 2.5 150.0 8 ./book2json_d-library.py
```
##### 感想
CCNという指標、そしてそれを簡易的に調査できるLizardというツールを今回知ることができ、新しい世界を垣間見た気がして、コード品質分析ツール方面への関心が高まりました。もちろんこのLizardの出力は、ソースコードの読みやすさを考える際の一種の参考として捉えるべきものと理解もしつつ。
#### 参考リンク
Lizardの紹介・使いこなし。探せば詳しい記事が色々見つかります。
- [lizardを使ってCCNというコード品質の指標を学ぶ](https://zenn.dev/koya6565/articles/20230330_lizard-ccn)
コード品質を分析する、SonarQubeという本格ツールもあるらしい。
- [Code Quality, Security & Static Analysis Tool with SonarQube \| Sonar](https://www.sonarsource.com/products/sonarqube/)
---
### 仮説: case-sensitiveなファイルシステム (例: ext4) でのng serve時にファイル名が大文字小文字違いのファイルが同居していると小文字のファイルが404 Not Foundになる? - 2024-03-25
URL: https://remoteroom.jp/diary/2024-03-25/
#### 謎解き orz
Node.js初心者・Angular初心者でありつつAngularアプリの動作確認を行う必要があったとき。`ng serve`するとExpressというウェブサーバがローカル起動されますが、このサーバのファイル名の大文字小文字の扱いに関して、いわゆる“おま環”と思われる現象に遭遇しました。この現象は他の人の環境 (macOS環境) では再現できず、私のメイン環境 (Ubuntu環境) では再現できてしまう。また、私の別環境 (macOS環境) では再現できない。ウェブ検索しても原因がわからなかったのですが、どうやら実行環境の「ファイルシステム」の仕様に関係するような気がして頭を捻った結果、再現手順が作れましたので、下記に掲載します。
具体的にはこれは、記事タイトルに挙げている「case-sensitiveなファイルシステム (例: ext4) でのng serve時にファイル名が大文字小文字違いのファイルが同居していると小文字のファイルが404 Not Foundになる?」という仮説を検証する問題になります。再現手順で用いるAngularアプリとしては`ng serve`が試せればおそらくなんでも良いわけで、Angular公式リポジトリ https://github.com/angular/examples にある「walk-my-dog」を用いています。
- GitHub: [angular/examples](https://github.com/angular/examples)
- GitHub: [examples/walk\-my\-dog at main · angular/examples](https://github.com/angular/examples/tree/main/walk-my-dog)
本記事に辿り着いた方のなにかの参考になりましたら幸いです。
##### Case-1. Ubuntuのext4領域での再現手順
- ext4: デフォルトではファイル名の大文字小文字を区別するcase-sensitiveなファイルシステム
###### Step-1. Terminal-A: 環境確認・ext4領域に移動
```bash
$ npm version | grep -E 'npm|node'
npm: '8.19.2',
node: '16.17.1',
v8: '9.4.146.26-node.22',
```
```bash
$ cd
$ df -Th .
Filesystem Type Size Used Avail Use% Mounted on
/dev/nvme0n1p2 ext4 457G 322G 112G 75% /
```
###### Step-2. Terminal-A: ソース取得してcase-sensitiveなファイル作成してserve
```bash
$ git clone https://github.com/angular/examples
$ cd ./examples/walk-my-dog/
$ ls -al ./src/assets/dog-walker-logo.*
-rw-r--r-- 1 mah mah 2976 3月 25 23:03 ./src/assets/dog-walker-logo.svg
$ cp -ip ./src/assets/dog-walker-logo.{svg,SVG}
$ ls -al ./src/assets/dog-walker-logo.*
-rw-rw-r-- 1 mah mah 2976 3月 25 23:21 ./src/assets/dog-walker-logo.SVG
-rw-rw-r-- 1 mah mah 2976 3月 25 23:21 ./src/assets/dog-walker-logo.svg
$ npm install
$ ng serve
```
###### Step-3. Terminal-B: Case-SensitiveなファイルのHTTPステータスを確認
###### 小文字のファイルが「404 Not Found」?! 存在するのになぜ??
```bash
$ curl -I http://localhost:4200/assets/dog-walker-logo.svg
HTTP/1.1 404 Not Found
X-Powered-By: Express
Access-Control-Allow-Origin: *
Content-Security-Policy: default-src 'none'
X-Content-Type-Options: nosniff
Content-Type: text/html; charset=utf-8
Content-Length: 166
Date: Mon, 25 Mar 2024 14:27:49 GMT
Connection: keep-alive
Keep-Alive: timeout=5
```
###### 大文字のファイルは「200 OK」
```bash
$ curl -I http://localhost:4200/assets/dog-walker-logo.SVG
HTTP/1.1 200 OK
X-Powered-By: Express
Access-Control-Allow-Origin: *
Content-Type: image/svg+xml
Accept-Ranges: bytes
Content-Length: 2976
ETag: W/"ba0-06SevQUxlDl5sFFmZNn8+H9NSZE"
Date: Mon, 25 Mar 2024 14:28:14 GMT
Connection: keep-alive
Keep-Alive: timeout=5
```
###### Step-4. Terminal-A: 大文字のファイルを削除して再serve
```bash
(Ctrl+C でng serveを停止する)
$ rm ./src/assets/dog-walker-logo.SVG
$ ls -al ./src/assets/dog-walker-logo.*
-rw-rw-r-- 1 mah mah 2976 3月 25 23:21 ./src/assets/dog-walker-logo.svg
$ ng serve
```
###### Step-5. Terminal-B: HTTPステータスを再確認
###### 小文字のファイルが「200 OK」に変わっている
```bash
$ curl -I http://localhost:4200/assets/dog-walker-logo.svg
HTTP/1.1 200 OK
X-Powered-By: Express
Access-Control-Allow-Origin: *
Content-Type: image/svg+xml
Accept-Ranges: bytes
Content-Length: 2976
ETag: W/"ba0-06SevQUxlDl5sFFmZNn8+H9NSZE"
Date: Mon, 25 Mar 2024 14:30:30 GMT
Connection: keep-alive
Keep-Alive: timeout=5
```
謎です。まるで「ファイル名小文字のファイルへのgetリクエストに、ファイル名大文字のファイルの存在が影響する (ファイル名小文字のファイルへのgetを邪魔する)」かのよう。どうしてこのような挙動をするのだろう?
##### Case-2. Ubuntuのntfs3領域では
- ntfs3 (NTFS): ファイル名の大文字小文字を区別するcase-sensitiveなファイルシステム
```bash
$ df -Th .
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ntfs3 233G 72M 233G 1% /media/mah/TEST_NTFS
```
Ubuntuのext4領域での再現手順と同じ結果になる。
#### 参考) 上記再現手順が実施できなかった環境
##### MacのAPFS領域 (not 「大文字/小文字を区別」)
- Apple File System (APFS): デフォルトではファイル名の大文字小文字を区別しないcase-insensitiveなファイルシステム
```bash
$ npm version | grep -E 'npm|node'
npm: '10.2.3',
node: '20.10.0',
v8: '11.3.244.8-node.25',
```
```bash
$ cd ~/tmp/
$ diskutil info / | grep 'File System'
File System Personality: APFS
```
- `cp`時にファイル名の大文字小文字違いが同一視されるためエラーになる
```bash
$ cp -ip ./src/assets/dog-walker-logo.{svg,SVG}
cp: ./src/assets/dog-walker-logo.SVG and ./src/assets/dog-walker-logo.svg are identical (not copied).
```
- なお、この`cp`をpassして進めた場合、`npm install`, `ng serve` はノーマルな操作であって特に問題ない
##### Ubuntuのvfat領域
- vfat (FAT): ファイル名の大文字小文字を区別しないcase-insensitiveなファイルシステム
```bash
$ df -Th .
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 vfat 233G 28M 233G 1% /media/mah/TEST_FAT
```
- `cp`時にファイル名の大文字小文字違いが同一視されるためエラーになる
```bash
$ cp -ip ./src/assets/dog-walker-logo.{svg,SVG}
cp: './src/assets/dog-walker-logo.svg' と './src/assets/dog-walker-logo.SVG' は同じファイルです
```
- なお、この`cp`をpassして進めると、`npm install`でsymlinkが使用できない旨のエラーが発生して`ng serve`まで進めない
```bash
$ npm install
(途中省略)
npm ERR! code EPERM
npm ERR! syscall symlink
npm ERR! path ../@angular/cli/bin/ng.js
npm ERR! dest /media/mah/TEST_FAT/examples/walk-my-dog/node_modules/.bin/ng
npm ERR! errno -1
npm ERR! Error: EPERM: operation not permitted, symlink '../@angular/cli/bin/ng.js' -> '/media/mah/TEST_FAT/examples/walk-my-dog/node_modules/.bin/ng'
npm ERR! [Error: EPERM: operation not permitted, symlink '../@angular/cli/bin/ng.js' -> '/media/mah/TEST_FAT/examples/walk-my-dog/node_modules/.bin/ng'] {
npm ERR! errno: -1,
npm ERR! code: 'EPERM',
npm ERR! syscall: 'symlink',
npm ERR! path: '../@angular/cli/bin/ng.js',
npm ERR! dest: '/media/mah/TEST_FAT/examples/walk-my-dog/node_modules/.bin/ng'
npm ERR! }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.
```
---
### 「PiKVM」にLTE対応USBドングルを挿して“モバイルできるリモートKVM”を作る - 2024-03-23
URL: https://remoteroom.jp/diary/2024-03-23/
#### リモートKVMのモバイル化
本記事は次の記事の続編です。
- [リモートKVMをラズパイで実現する「PiKVM」を試した \[2021-12-19\]]()
前回の最後にはこんな予想を書きました。
> さらに、データ通信用USBモデムがPiKVMで認識できるものであれば、インターネット環境が利用できないところでの機器の遠隔操作も可能だと思います。
そこで今回は、仕入れたLTE対応USBドングル ([実は1個壊してしまったorz]()ので2個目です) を使って、2年以上前のこの予想が実現できるかどうかを確認してみます。いわばお手軽な「モバイル回線対応のリモートKVM」を作ってみる実験です。
#### 作ってみよう
実験に際して揃えた材料は次の通り。前回と同じく、ラズパイやUSBドングルは一般的な市販品のみ使い、PiKVMの純正ハードウェアは (出費を抑えるため) 使わずにどこまで出来るか作戦でいきます。
|必要な材料|今回の選択|
|---|---|
|Raspberry Pi 4 Model B|4GBモデル|
|MicroSDカード|64GB|
|HDMI to USBドングル; ビデオキャプチャデバイス|[THANKO SHDSLRVC](https://www.thanko.jp/view/item/000000003615)|
|LTE対応USBドングル|[PIXELA PIX-MT110](https://www.pixela.co.jp/products/network/pix_mt110/)|
|SIMカード (microSIM)|IIJmio タイプD|
|各種ケーブル|適当にあった物|
|PiKVMを接続する機器 (以下、接続機器)|[Raspbery Pi 400](https://www.raspberrypi.com/products/raspberry-pi-400/) + [Kali Linux](https://www.kali.org/docs/arm/raspberry-pi-400/)|
##### Phase-1. LTE対応USBドングルでの通信を可能にする
1. ラズパイ4にPiKVMイメージを導入して起動する
- 今回の構成に最も近い [Flashing PiKVM OS image \- PiKVM Handbook > Download the image](https://docs.pikvm.org/flashing_os/#download-the-image) > DIY PiKVM V2 Platform > Raspberry Pi 4 > [For HDMI-USB dongle](https://files.pikvm.org/images/v2-hdmiusb-rpi4-latest.img.xz) のイメージをダウンロードし、microSDカードに焼く
1. SIM設定が完了しているLTE対応USBドングル「PIXELA PIX-MT110」をPiKVMに挿す
- LTE対応USBドングルが`ID 15a9:0046 Gemtek 4G Modem`として認識される
```
[root@pikvm ~]# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 003: ID 15a9:0046 Gemtek 4G Modem
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
```
- ネットワークインターフェースとして`eth1`が増えている
```
[root@pikvm ~]# ip a
(途中省略)
4: eth1: mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 80:02:9c:XX:XX:XX brd ff:ff:ff:ff:ff:ff
```
2. 上記のeth1を設定する
- PiKVMをrwモードへ切り替える
```
[root@pikvm ~]# rw
+ mount -o remount,rw /
+ mount -o remount,rw /boot
+ set +x
=== PiKVM is in Read-Write mode ===
```
- eth0用設定ファイルを元にして、Name部分のみ変更したeth1用ファイルを作成する
```
[root@pikvm ~]# cd /etc/systemd/network/
[root@pikvm network]# sed 's/Name=eth0/Name=eth1/' ./eth0.network > ./eth1.network
[root@pikvm network]# diff ./eth0.network ./eth1.network
2c2
< Name=eth0
---
> Name=eth1
```
- PiKVMをroモードへ戻す
```
[root@pikvm network]# ro
+ mount -o remount,ro /
+ mount -o remount,ro /boot
+ set +x
=== PiKVM is in Read-Only mode ===
```
3. PiKVMを再起動する
4. eth1の状態を確認する→DHCPサーバであるUSBドングルからIPアドレスを取得できている
```
[root@pikvm ~]# ip addr show eth1
4: eth1: mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
link/ether 80:02:9c:XX:XX:XX brd ff:ff:ff:ff:ff:ff
inet 192.168.0.42/24 metric 10 brd 192.168.0.255 scope global dynamic eth1
valid_lft 3175sec preferred_lft 3175sec
inet6 fe80::8202:9cff:feXX:XXXX/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
```
##### Phase-2. Tailscaleを導入する
- [Tailscale VPN \- PiKVM Handbook](https://docs.pikvm.org/tailscale/)
Tailscaleの導入方法は、PiKVMサイトの上記ドキュメントで詳しく説明されているので、ここではその手順をそのままなぞっています。
1. PiKVMのパッケージを更新する
```
[root@pikvm ~]# pikvm-update
(再起動が実施される)
```
2. tailscaleをインストールする
```
[root@pikvm ~]# rw
[root@pikvm ~]# pacman -S tailscale-pikvm
[root@pikvm ~]# systemctl enable --now tailscaled
[root@pikvm ~]# tailscale up
```
3. tailscaleの認証 (表示されるURLをウェブブラウザで開く) を行い、PiKVMドキュメントのお勧め通り`Disable key expiry`も行う
4. PiKVMを再起動する (再起動するとroモードに戻る)
5. Tailscaleの動作状態を確認する
- `tailscale0`インターフェースを確認する
```
[root@pikvm ~]# ip addr show tailscale0
5: tailscale0: mtu 1280 qdisc fq_codel state UNKNOWN group default qlen 500
link/none
inet NNN.NNN.NNN.NNN/32 scope global tailscale0
valid_lft forever preferred_lft forever
inet6 fd7a:115c:a1e0::a3XX:XXXX/128 scope global
valid_lft forever preferred_lft forever
inet6 fe80::5191:72ea:9aXX:XXXX/64 scope link stable-privacy proto kernel_ll
valid_lft forever preferred_lft forever
```
- tailscaleコマンドでIPアドレスを確認する
```
[root@pikvm ~]# tailscale ip
NNN.NNN.NNN.NNN
fd7a:115c:a1e0::a3XX:XXXX
```
6. PiKVMと同じtailnetに所属するマシンから、`https://NNN.NNN.NNN.NNN/` (tailscale上のPiKVMのIPアドレス) へアクセスできることを確認する
Phase-1, Phase-2 が完了すれば、PiKVM化しているラズパイへは、それにLTE対応USBドングルが挿してあるだけでインターネットからアクセスできるはずです。これにて、携帯電話の電波の圏内であればどこに置いても使える「モバイル回線対応のリモートKVM」が完成しました。
##### 注意: パケット残量には余裕が必要
LTE対応USBドングルでは一般的に従量課金もしくは通信量に上限があるデータ通信回線を使用するはずで、PiKVMの画面転送によるパケット使用量の増加には注意しておいてください。
今回の実験において、PiKVMを1Gbps LANに有線接続し、接続機器 (Raspberry Pi 400) の1920x1080画面出力をHDMI to USBデバイスでキャプチャして別PCのブラウザでモニターした際、下記写真のように左上部に文字があって他は真っ黒な画面を表示している時に、PiKVMからは常時5〜6Mbpsのデータ送信が行われていました。仮に6Mbpsだと→45MB/min→23分で1GBを消費する計算になります。
ちなみに本実験時の画面転送はMJPEG形式です。PiKVMでは転送効率が良いH.264も選択可能なようですが、[H\.264 / WebRTC \- PiKVM Handbook](https://docs.pikvm.org/webrtc/) によると `USB capture devices are not supported` となっています。
#### 接続機器をPiKVM経由でインターネット通信させる
##### Phase-3. 「Ethernet-over-USB」機能の有効化
- [Ethernet\-over\-USB \- PiKVM Handbook](https://docs.pikvm.org/usb_ethernet/)
PiKVMのEthernet-over-USB機能を使うと、接続機器自体を有線 (LANケーブル) や無線 (Wi-Fi) でネットワーク接続していない状態でも、USB接続したPiKVMを経由してネットワーク通信させることができます。設定手順はPiKVMサイトの上記ドキュメントで詳しく説明されているので、ここではざっくりと書きます。
1. PiKVMをrwモードに切り替える
2. IPv4のパケット転送を有効化する
```
[root@pikvm kvmd]# echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/99-kvmd-extra.conf
```
3. `/etc/kvmd/override.yaml`の末尾に次のブロックを追記する (`forward_iface: eth1`はLTE対応USBドングルのeth1経由で通信させるという設定)
```
otg:
devices:
ethernet:
enabled: true
driver: ecm
otgnet:
firewall:
allow_tcp: [80, 443]
forward_iface: eth1
commands:
post_start_cmd_append:
- "--dhcp-option=6,8.8.8.8"
iface:
ip_cmd:
- /usr/bin/ip
net: 10.65.0.0/28
```
4. kvmd-otgnetサービスをenableする
```
[root@pikvm kvmd]# systemctl enable kvmd-otgnet
Created symlink /etc/systemd/system/multi-user.target.wants/kvmd-otgnet.service -> /usr/lib/systemd/system/kvmd-otgnet.service.
```
5. PiKVMを再起動する
6. 次のことを確認する (今回の接続機器のOSはKali Linuxなので、Linux環境を前提とした確認方法です)
- 接続機器の`usb0`インターフェースがUP状態で、`10.65.0.0/28`に該当するIPアドレスがDHCPで付与されていること
- 接続機器からインターネットへの通信ができること
- PiKVMから接続機器のIPアドレスへ、SSH等のネットワークアクセスができること
#### まとめ・感想
ラズパイを用いて実現するリモートKVM・IP-KVMの「PiKVM」。このモバイル回線対応は、作業工数面において意外に簡単に行えると分かりました。ほぼどのような遠隔地にある機器の操作に使えるのはもちろん、ネット接続する手間が不要なシンプルさを生かして、自分が移動して操作するのはおっくうな距離にある機器にササッと接続しておいて使うのも、結構ありな気がします。
また、モバイル回線対応ということは、リモートKVMを介して操作される機器が移動しがちな形態にも対応可能なわけで、直感ですがそれっぽい面白い用途があるかもしれないと思いました。
##### 参考リンク: PiKVMの純正ハードウェア
- [GitHub \- pikvm/pikvm: Open and inexpensive DIY IP\-KVM based on Raspberry Pi > Variants](https://github.com/pikvm/pikvm?tab=readme-ov-file#variants)
---
### 【読んだ本】 人間非機械論 サイバネティクスが開く未来 - 2024-03-18
URL: https://remoteroom.jp/medialog/2024-03-18_book-b0c6js59dg/
最初は図書館で借りたものの、内容がこんなに濃厚だと貸出延長しても読み終えられないわ……と判断したので本書は購入した。一度読み通しただけではあまり掴めていないと感じるものの、人間や生物における“自律”という言葉の意味や、たとえば「情報が飛び交っている」と言った場合の“情報”の意味を、自分が新たに捉え直すための栄養は本書から取り入れることができたと思う。また、ぼんやりとしか知らなかった“構成主義”を文脈で触れることができたり、“間主観的 (intersubjective)”という言葉を仕入れることができたりと、知的な興奮が絶えなかった。
CPU/GPUをぶん回してたどり着く演算結果と、人間や生物が生まれながらにして会得する物事の理解の仕方とは、いったい何が違うのか。人間としてはこれを今後十数年のうちにうまく把握しなければ、自我の意味付けにも影響しそうな気がするわけだが、そんな時は、本書が解説している、人間・生物非機械論としてのサイバネティクス・パラダイムに着目してみるのは一つの道だと思う。
---
### Rancher DesktopとVirtualBoxを共存させるためのkernelモジュールのやりくり - 2024-03-14
URL: https://remoteroom.jp/diary/2024-03-14/
#### これってぶつかるんだ
先日 [macOSでのDockerはRancher Desktopが良さげ \[2024-03-05\]]()という記事を公開した後、自分のx86_64のUbuntu環境にもRancher Desktopをインストールした。そして数日後に、同じ環境でVirtualBoxが起動しなくなっていることに気づいた。暫定的ながらVirtualBoxを起動できるようにする方法が分かったので、記録メモです。
今回のポイントを先に示すと、Rancher DesktopとVirtualBoxが、次の表のようにkernelモジュールの要・不要に関して干渉する関係になっているために、この2種類のアプリが同時には利用できないということのようです。
|アプリ名|kvm, kvm_* モジュール|モジュールadd状態では|モジュールremove状態では|
|---|---|---|---|
|Rancher Desktop|必要|起動: 正常|起動: 失敗|
|VirtualBox|不要|起動: 失敗|起動: 正常|
#### 各パターンでのエラー内容
今回用いた環境は次の通り。
|項目|内容|
|---|---|
|Platform|x86_64|
|OS|Ubuntu Server 22.04.4 LTS (Jammy Jellyfish)|
|Racher Desktop|Version 1.13.0|
|VirtualBox|Version 7.0.14 r161095 (Qt5.15.3)|
##### A. Rancher Desktopを起動可能な環境でのVirtualBoxエラー
###### CPU: Intel
- エラー内容:
```
VD: Backend 'VBoxIsoMaker' does not support async I/O (VERR_NOT_SUPPORTED).
VirtualBox can't operate in VMX root mode. Please disable the KVM kernel extension, recompile your kernel and reboot (VERR_VMX_IN_VMX_ROOT_MODE).
終了コード: NS_ERROR_FAILURE (0X80004005)
コンポーネント: ConsoleWrap
インターフェース: IConsole {6ac83d89-6ee7-4e33-8ae6-b257b2e81be8}
```
- kernelモジュール読み込み状態:
```
$ lsmod | grep kvm
kvm_intel 487424 2
kvm 1409024 1 kvm_intel
irqbypass 12288 1 kvm
```
###### CPU: AMD (Ryzen)
- エラー内容:
```
VirtualBox can't enable the AMD-V extension. Please disable the KVM kernel extension, recompile your kernel and reboot (VERR_SVM_IN_USE).
終了コード: NS_ERROR_FAILURE (0X80004005)
コンポーネント: ConsoleWrap
インターフェース: IConsole {6ac83d89-6ee7-4e33-8ae6-b257b2e81be8}
```
- kernelモジュール読み込み状態:
```
$ lsmod | grep kvm
kvm_amd 208896 2
kvm 1409024 1 kvm_amd
irqbypass 12288 1 kvm
ccp 135168 1 kvm_amd
```
##### B. VirtualBoxを起動可能な環境でのRancher Desktopエラー
- ウィンドウ内のエラー内容:
```
Rancher Desktop is unable to start
Rancher Desktop cannot start because requirements are missing or not configured:
- Nested virtualization not enabled on this host
Please ensure all requirements are met and try again. Rancher Desktop will now close.
```
- kernelモジュール読み込み状態:
```
$ lsmod | grep kvm
(該当無し)
```
#### エラー解消方法
##### A. VirtualBoxの起動前には不要なモジュールをremoveしておく
- CPU: Intel
```
$ sudo modprobe -r kvm_intel
$ sudo modprobe -r kvm
```
- CPU: AMD (Ryzen)
```
$ sudo modprobe -r kvm_amd
$ sudo modprobe -r kvm
```
##### B. Racher Desktopの起動前には必要なモジュールをaddしておく
- CPU: Intel
```
$ sudo modprobe kvm
$ sudo modprobe kvm_intel
```
- CPU: AMD (Ryzen)
```
$ sudo modprobe kvm
$ sudo modprobe kvm_amd
```
#### 参考リンク
- [\[ubuntu\] Virtualbox OSE not working due to 'VMX root mode' > post7433343](https://ubuntuforums.org/showthread.php?t=1102142&s=3dae38df726e2284ef2f4f46f009dc33&p=7433343#post7433343)
---
### macOSでのDockerはRancher Desktopが良さげ - 2024-03-05
URL: https://remoteroom.jp/diary/2024-03-05/
#### Dockerさまさま
今日は某クラウド向け環境構築のために、おそらく人生で初めて自分用のDockerfileを書いてみて、CLIなアプリの動作環境をDockerで構築することの素晴らしさを理解した。今までは、Dockerで動かすことを前提としている、他者のアプリを実行するときのみDockerを用いていた。Dockerでの開発環境・動作環境の構築って、素早く壊しては作れるし可搬性があるし、なんて楽なんだ〜!! 世間より数年遅れで気づいた自分に呆れるが、調べながら実際に手を動かすことによってやっとそれを強く理解したのだから仕方がない。
というわけで、手元の持ち歩きパソコンのM1 MacでもDocker環境を整えたくなり、最新の情報を調べてやってみたというのが今回のメモである。
#### 「Rancher Desktop by SUSE」のインストール
##### macOS (Apple Silicon) 環境の場合
macOS (Apple Silicon) でDockerする場合、巷では今「[Rancher Desktop by SUSE](https://rancherdesktop.io/)」がナウいらしい。昔から「[Docker Desktop](https://www.docker.com/products/docker-desktop/)」が有名だがここでは前者を選択だ。理由は省略。
- [Rancher Desktop by SUSE](https://rancherdesktop.io/)
macOS (Apple Silicon) 環境へのインストール手順は次の通り。
1. 既存のDocker環境があるならばアンインストールしておく (Docker Engineならこの手順: [Install Docker Engine on Ubuntu \| Docker Docs > Uninstall Docker Engine](https://docs.docker.com/engine/install/ubuntu/#uninstall-docker-engine))
2. 上記サイトの「Download for macOS (Apple Silicon)」リンクからdmgファイルをダウンロードし、macOS環境にインストールする
3. 起動画面の「Welcome to Rancher Desktop by SUSE」の設定項目「Configure PATH」は、デフォルトは「Automatic」であるが私は「Manual」を選択した
4. 別途、自身の環境の`~/.bashrc` (bashの場合) に次の数行を追加しておく (私はこのファイルを複数の環境で使い回しているので分岐を加えている)
```
# Rancher Desktop
if [ -d "$HOME/.rd/bin" ] ; then
export PATH="$HOME/.rd/bin:$PATH"
fi
```
5. 初期設定を適宜行うとインストール完了
6. バックグラウンドでVMセットアップ等が実行され、その進捗はウィンドウ下部のステータスバーで把握できる
7. `~/.bashrc`を読み直したターミナルで`docker version`してみると、Dockerが利用可能になっていることが確認できる
```
$ docker version
Client:
Version: 24.0.7-rd
API version: 1.42 (downgraded from 1.43)
Go version: go1.20.10
Git commit: 72ffacf
Built: Wed Nov 1 18:41:50 2023
OS/Arch: darwin/arm64
Context: rancher-desktop
Server:
Engine:
Version: 23.0.6
API version: 1.42 (minimum version 1.12)
Go version: go1.20.11
Git commit: 9dbdbd4b6d7681bd18c897a6ba0376073c2a72ff
Built: Fri Nov 17 20:59:57 2023
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: v1.7.2
GitCommit: 0cae528dd6cb557f7201036e9f43420650207b58
runc:
Version: 1.1.12
GitCommit: 51d5e94601ceffbbd85688df1c928ecccbfa4685
docker-init:
Version: 0.19.0
GitCommit:
```
8. [hello\-world \- Official Image \| Docker Hub](https://hub.docker.com/_/hello-world)を使ってコンテナ実行を確認
```
$ docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
478afc919002: Pull complete
Digest: sha256:d000bc569937abbe195e20322a0bde6b2922d805332fd6d8a68b19f524b7d21d
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
(以下省略)
```
##### Ubuntu環境の場合
この「Rancher Desktop by SUSE」はかなり良くできていそうなアプリなので、Ubuntu環境でも使えるかなと調べてみたところ、.debパッケージでのインストールも可能だと分かった。後日やってみよう。
- [Installation \| Rancher Desktop Docs > Installation via .deb Package](https://docs.rancherdesktop.io/getting-started/installation/#installation-via-deb-package)
#### 参考リンク
- [Rancher Desktopの使い方|Docker Desktopとの違いや移行手順を解説 \- カゴヤのサーバー研究室](https://www.kagoya.jp/howto/cloud/container/rancher_desktop/)
---
### NginxからBrotli配信するまでの設定手順 〜Ubuntu 22.04+Nginx 1.24.0〜 - 2024-03-03
URL: https://remoteroom.jp/diary/2024-03-03/
#### 圧縮率が高いらしいBrotli
Hugo + Nginxで構築している当ウェブサイトのコンテンツ配信 (静的ファイル配信) を、従来からの非圧縮とGzip形式に加え、新しくBrotli形式でも行えるようにしたい。「[Brotli](https://ja.wikipedia.org/wiki/Brotli)」というのは比較的最近の圧縮形式で、予め辞書を持っているなどの工夫により、HTMLテキスト等の圧縮にめっぽう強いらしい。
参考までに、GzipとBrotliを用いて、当ウェブサイトのある時点での`/index.html`などを圧縮した結果は次のようになる。Brotli \[Best\] は Gzip \[Zopfli\] よりも高い圧縮率を得られてファイルがよく縮む上に、圧縮と展開の処理にやたら時間がかかるという感じはしない。
|ファイル名|圧縮形式 \[レベル\]|サイズ (bytes)|圧縮率|
|---|---|--:|--:|
|/index.html|非圧縮|55,201|--|
|/index.html.gz|Gzip \[Zopfli\]|9,112|16.5%|
|/index.html.br|Brotli \[Best\]|7,943|14.4%|
|/index.xml|非圧縮|248,649|--|
|/index.xml.gz|Gzip \[Zopfli\]|60,988|24.5%|
|/index.xml.br|Brotli \[Best\]|51,417|20.7%|
|/css/style.css|非圧縮|16,795|--|
|/css/style.css.gz|Gzip \[Zopfli\]|3,838|22.9%|
|/css/style.css.br|Brotli \[Best\]|3,427|20.4%|
#### 設定手順
今回設定するウェブサーバのPlatformとOSは次の通り。
|項目|内容|
|---|---|
|Platform|x86_64|
|OS|Ubuntu Server 22.04.4 LTS (Jammy Jellyfish)|
##### Step-1. Nginxの最新安定版1.24.0をインストール
記事執筆時点でのUbuntu 22.04デフォルト状態におけるNginxのバージョンは「nginx 1.18.0-6ubuntu14」で、これは[2020年4月にリリース](https://nginx.org/en/CHANGES-1.18)されたもの。安定はしているだろうがやや古めに感じるので、今回はBrotli対応とともに次の方針で最新安定版でのNginx環境を整えることにする。
1. Nginxの公式リポジトリからNginx本体のUbuntu用最新パッケージ「nginx 1.24.0」をインストールする
2. 次に、Brotli対応に必要なNginxモジュールだけを別途buildする
この方針のメリットは、仮に \[2\] Brotli対応モジュールのbuildがどうしても成功しない場合でも、\[1\] Nginx安定最新版 (1.24.0) はパッケージインストールなのでほぼ確実に成功し、その利点は間違いなく享受できる点だ。一方でデメリットもあり、それは、Nginx本体のバージョンアップがなされた場合、そのバージョンに合わせてモジュールのbuildをおそらく再度行う必要があるだろう点だ。(その時の自分のためにこの記事を書くとも言える)
###### Step-1-1. パッケージでインストール
Nignx最新安定版のインストールを、下記のリンク先のどちらかのドキュメントにしたがって行う。運用の安定性を重視して、インストール時には「mainline nginx packages」ではなく、「stable nginx packages」を選択する ([stableとmainlineの違いについてはこちら](https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/#stable_vs_mainline))。
- [nginx: Linux packages > Ubuntu](https://nginx.org/en/linux_packages.html#Ubuntu)
- [Installing NGINX Open Source \| NGINX Documentation > Installing Prebuilt Ubuntu Packages](https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/#installing-prebuilt-ubuntu-packages) > Installing a Prebuilt Ubuntu Package from the Official NGINX Repository
###### Step-1-2. バージョン確認
Nginxインストール後にバージョンを確認しておく。
```
$ nginx -v
nginx version: nginx/1.24.0
```
##### Step-2. Brotli対応moduleの準備
###### Step-2-1. ngx_brotliをcmake
Nginx 1.24.0に適用したBrotli対応モジュールをbuildする前段階として、次のリンク先の「Statically compiled」に記載されているコマンド群の上半分を実行する。なお、実行環境にはcmakeが必要だ。
- [GitHub \- google/ngx\_brotli: NGINX module for Brotli compression](https://github.com/google/ngx_brotli?tab=readme-ov-file#installation)
具体的に、上記リンク先を引用しつつ、実行結果も織り交ぜると次のような流れとなる。
```
$ cd ~/tmp/
$ git clone --recurse-submodules -j8 https://github.com/google/ngx_brotli
$ cd ngx_brotli/deps/brotli
$ mkdir out && cd out
$ cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" -DCMAKE_INSTALL_PREFIX=./installed ..
(途中省略)
-- Build files have been written to: /home/mah/tmp/ngx_brotli/deps/brotli/out
$ cmake --build . --config Release --target brotlienc
(途中省略)
[ 24%] Linking C static library libbrotlicommon.a
[ 24%] Built target brotlicommon
(途中省略)
[100%] Linking C static library libbrotlienc.a
[100%] Built target brotlienc
$ cd ../../../..
```
###### Step-2-2. Nginxのconfigure argumentsを確認
Step-1でインストールしたNginxの「configure arguments」を確認しておく。当環境では1,500文字ほどの量になる。
```
$ nginx -V
nginx version: nginx/1.24.0
built by gcc 11.2.0 (Ubuntu 11.2.0-19ubuntu1)
built with OpenSSL 3.0.2 15 Mar 2022
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -ffile-prefix-map=/data/builder/debuild/nginx-1.24.0/debian/debuild-base/nginx-1.24.0=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -flto=auto -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'
```
###### Step-2-3. Brotli対応moduleをmake
Nginx 1.24.0に適用したBrotli対応モジュールをbuildするために、Nginxのソースをダウンロードしたあと、次のリンク先の「Dynamically loaded」に記載されているコマンド群を実行する。
- [GitHub \- google/ngx\_brotli: NGINX module for Brotli compression](https://github.com/google/ngx_brotli?tab=readme-ov-file#installation)
具体的には次のような流れになる。以下で実行する`./configure`の行には、上記Step-2-2`nginx -V`の結果から確認できる、`configure arguments:`に続いている`--prefix=...`から始まるパラメータすべてを挿入しておくこと。
```
$ cd ~/tmp/
$ wget https://nginx.org/download/nginx-1.24.0.tar.gz # URLは https://nginx.org/en/download.html を適宜参照
$ tar xvzf nginx-1.24.0.tar.gz
$ cd nginx-1.24.0
$ ./configure 【Step-2.2で調べた「configure arguments」】 --with-compat --add-dynamic-module=../ngx_brotli
(途中省略)
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre= option.
```
↑「error: the HTTP rewrite module requires the PCRE library.」とのことなので、`libpcre3-dev`をインストールしてから再度configure。
```
$ sudo apt install libpcre3-dev
$ ./configure 【Step-2.2で調べた「configure arguments」】 --with-compat --add-dynamic-module=../ngx_brotli
(途中省略)
./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl= option.
```
↑「error: SSL modules require the OpenSSL library.」とのことなので、`llibssl-dev`をインストールしてから再度configure。
```
$ sudo apt install libssl-dev
$ ./configure 【Step-2.2で調べた「configure arguments」】 --with-compat --add-dynamic-module=../ngx_brotli
(途中省略)
./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib= option.
```
↑「error: the HTTP gzip module requires the zlib library.」とのことなので、`zlib1g-dev`をインストールしてから再度configure。
```
$ sudo apt install zlib1g-dev
$ ./configure 【Step-2.2で調べた「configure arguments」】 --with-compat --add-dynamic-module=../ngx_brotli
(途中省略)
adding module in ../ngx_brotli
+ ngx_brotli was configured
checking for PCRE2 library ... not found
checking for PCRE library ... found
checking for PCRE JIT support ... found
checking for OpenSSL library ... found
checking for zlib library ... found
creating objs/Makefile
Configuration summary
+ using threads
+ using system PCRE library
+ using system OpenSSL library
+ using system zlib library
nginx path prefix: "/etc/nginx"
nginx binary file: "/usr/sbin/nginx"
nginx modules path: "/usr/lib/nginx/modules"
nginx configuration prefix: "/etc/nginx"
nginx configuration file: "/etc/nginx/nginx.conf"
nginx pid file: "/var/run/nginx.pid"
nginx error log file: "/var/log/nginx/error.log"
nginx http access log file: "/var/log/nginx/access.log"
nginx http client request body temporary files: "/var/cache/nginx/client_temp"
nginx http proxy temporary files: "/var/cache/nginx/proxy_temp"
nginx http fastcgi temporary files: "/var/cache/nginx/fastcgi_temp"
nginx http uwsgi temporary files: "/var/cache/nginx/uwsgi_temp"
nginx http scgi temporary files: "/var/cache/nginx/scgi_temp"
```
↑ここまで行くとconfigure成功なので、moduleをmakeする。makeが成功するとmoduleが生成されていることが確認できる。
```
$ make modules
(途中省略)
make[1]: Leaving directory '/home/USER/tmp/nginx-1.24.0'
$ find . -name 'ngx_http_brotli_*_module.so'
./objs/ngx_http_brotli_static_module.so
./objs/ngx_http_brotli_filter_module.so
```
上記2ファイルのファイルサイズは、`ngx_http_brotli_filter_module.so`が約1.7MB、`ngx_http_brotli_static_module.so`が約77KBになるようだ。
###### Step-2-4. Brotli対応moduleを設置する
次のコマンドでBrotli対応moduleを`/usr/lib/nginx/modules/`へコピーする。
```
$ sudo cp ./objs/ngx_http_brotli_{filter,static}_module.so /usr/lib/nginx/modules/
```
##### Step-3. Nginxの設定をBrotli対応に書き換える
NginxをBrotli対応に設定する部分は、各ウェブサーバの設定によって詳細が異なってくると思うので、ここでは詳細については言及せずにエッセンスだけ記載する。一次情報源としては [GitHub \- google/ngx\_brotli: NGINX module for Brotli compression > Configuration directives](https://github.com/google/ngx_brotli?tab=readme-ov-file#configuration-directives) を参照すること。
1. `/etc/nginx/nginx.conf`のhttpブロックよりも上に、この2行を追加する
```
load_module modules/ngx_http_brotli_filter_module.so; # for compressing responses on-the-fly
load_module modules/ngx_http_brotli_static_module.so; # for serving pre-compressed files
```
1. `/etc/nginx/sites-enabled/`以下にあるウェブサイト設定ファイルの、HTTPSプロトコル (ssl) で配信しているserverブロックの中に、Brotliに関する次のような設定を追加する
```
# Brotli圧縮
brotli on;
brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/vnd.microsoft.icon;
brotli_static on;
```
1. Nginxの設定をテストしてエラーがないことを確認する
```
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```
1. Nginxの設定をreloadする
```
$ sudo systemctl reload nginx
```
##### Step-4. NginxがBrotli対応になっているか動作確認
wgetコマンドなどを使って実際にウェブサーバへアクセスし、NginxがBrotli対応になっているかの動作確認を行う。
```
#### gzipとbrに対応したクライアントに対するレスポンス
$ LANG=C wget --header="Accept-Encoding: gzip,br" -S https://remoteroom.jp/ 2>&1 | grep -E ' Content'
Content-Type: text/html; charset=UTF-8
Content-Length: 7943
Content-Encoding: br
#### gzipに対応したクライアントに対するレスポンス
$ LANG=C wget --header="Accept-Encoding: gzip" -S https://remoteroom.jp/ 2>&1 | grep -E ' Content'
Content-Type: text/html; charset=UTF-8
Content-Length: 9112
Content-Encoding: gzip
#### Accept-Encodingヘッダの値が無いクライアントに対するレスポンス
$ LANG=C wget --header="Accept-Encoding: " -S https://remoteroom.jp/ 2>&1 | grep -E ' Content'
Content-Type: text/html; charset=UTF-8
Content-Length: 55201
```
上記の結果から、Nginxが、クライアントのAccept-Encodingヘッダに応じて配信する圧縮形式を切り替えていることが確認できる。
なお、この例の`https://remoteroom.jp/`では、サイト更新の際に、HTMLファイルの`index.html`とは別に、Gzip圧縮済みの`index.html.gz`とBrotli圧縮済みの`index.html.br`を同ディレクトリ内に自動保存している。そのためこの動作確認では、Nginxによる都度ファイル圧縮の状況ではなく、すでに存在する各圧縮形式の静的ファイルの配信 (`gzip_static on;`, `brotli_static on;`) の状況をテストしていることになる。
#### まとめ
今回の試みは、Ngnixの運用において、最新の機能を享受するためにUbuntuのデフォルト状態から抜け出した形だ。たとえばウェブサイトをCDNで配信しているなら、自らmoduleを用意したりはしないだろうが、それを試行錯誤してやってみるのもまた一興である。
Brotliの圧縮効果については、[冒頭](#%E5%9C%A7%E7%B8%AE%E7%8E%87%E3%81%8C%E9%AB%98%E3%81%84%E3%82%89%E3%81%97%E3%81%84brotli)で確認したようにウェブ上のテキストファイルに関してはGzipよりも優れているようであり、テキスト割合高めの当ウェブサイトにはピッタリだ。閲覧者のブラウザがBrotli対応であれば、そのブラウジングがわずかながらでもよりさくさくになってくれることを期待したい。
---
### 【観た映画】 TENET (吹替版) - 2024-02-18
URL: https://remoteroom.jp/medialog/2024-02-18_movie-b08nzqvchz/
- 視聴: [YouTube](https://www.youtube.com/watch?v=X5LTC3Se0G4)
原題『Tenet』。本作の筋書きが時間に関するものであろうことは、予告編などから自明だとして。一方通行で戻れない時間の流れをそうじゃなくする映画は色々あって珍しくはないものの、本作では、抗おうとする出来事が自分の想像より大きすぎてそれ自体がまず楽しめるほどである点と、現実世界の進行がどんな具合になるかの映像化を試みている点を新鮮に感じた。もしも、映画『007』シリーズで時間の次元を行き来する筋書きのものがあるなら、この様な作品になるのかもしれないな、とふと考えた。
#### 鑑賞リンク
---
### HTMLデータをjqライクに処理するツール探し - 2024-02-07
URL: https://remoteroom.jp/diary/2024-02-07/
#### ちょうど合うものを
JSONデータの整形や特定部分の抽出に便利で重宝する、「[jq](https://jqlang.github.io/jq/)」というコマンドラインツールがある。このjqと同じような使い方で、巷の雑多なHTMLデータに対して適用できる、特定部分を抽出してくれるツールを探す必要があったので、検討したツール3つと簡単な処理の例をメモしておく。
今回のツールに求めた要件は次の2つである。`test_1.html` のHTMLソースを下記の[参考情報](#test_1htmlの内容)に示す。
1. `test_1.html` の `` と `
` に囲まれた部分を、可能であればそのまま (HTMLタグを含めたまま) 抽出できること
2. `test_1.html` にわざと混ぜた、規格外の「`<いじわるタグ>`」に対してエラーを吐かないこと
##### Tool-1. hxselect (html-xml-utils)
- 公式サイト: https://www.w3.org/Tools/HTML-XML-utils/README
- インストール方法: `sudo apt install html-xml-utils`, `brew install html-xml-utils` など
```
$ cat test_1.html | hxselect 'div[class="hoge"]'
hxselect: End tag doesn't match start tag
```
`test_1.html` の `` が `/` で閉じていないことで文句を言うようだ。そこで `/` を追加した `test_2.html` を用意したのだが、今度はいじわるタグで止まった。
```
$ cat test_2.html | hxselect 'div[class="hoge"]'
hxselect: End tag
doesn't match start tag <いじわるタグ>
```
##### Tool-2. heq: Yet Another 'jq for HTML'
- 公式サイト: https://github.com/atodekangae/heq, [jq の HTML 版を作った](https://zenn.dev/atodekangae/articles/d6df30539b6214)
- インストール方法: `pip install heq`
```
$ cat test_1.html | heq '`//div[@class="hoge"]`.text'
"\n\t\t\t\n\t\t\t\ttest1\n\t\t\t\ttest2\n\t\t\t\t\n\t\t\t\ttest3\n\t\t\t\n\t\t"
```
抽出部分からはHTMLタグが消されて、かついじわるタグも同じように消されての出力となった。なお、かつメタ文字への変換が働いているが、そのまま無変換で出力する方法が分からなかった。
##### Tool-3. htmlq: Like jq, but for HTML.
- 公式サイト: https://github.com/mgdm/htmlq
- インストール方法: `brew install htmlq`, `sudo snap install htmlq` など
```
$ cat test_1.html | htmlq 'div[class="hoge"]'
```
この出力は今回の私が求めている形だ。いじわるタグを「`<いじわるタグ>`」に変換してくれる点は、実際のブラウザ表示の再現になっておりありがたい。
#### 参考情報
##### test_1.htmlの内容
```html