# RemoteRoom > Masahiko OHKUBO (大久保 正彦) の個人サイト これはサイト全体をAI(LLM)から読みやすくするための全文ページです。(https://llmstxt.org/ の標準に基づいています) ## 👤 Author - おおくぼまさひこ - Bluesky: @mah-jp.bsky.social / 個人的な記録や思いをつらつらと。福岡長崎育ち、神戸在住。 ## 📝 All Articles (すべての記事) ### 【読んだ本】 銃を置け、戦争を終わらせよう 未踏の破局における思索 - 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が写真の解析を微妙に誤っていそうだ。 #### 今後の更新予定 実は下記のペースで進めると、技能試験日までに練習完了が間に合わない。どこかでは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-??,??\] #### 参考リンク - [第二種電気工事士の試験概要 \| 第二種電気工事士試験 \| 電気工事士 \| 一般財団法人 電気技術者試験センター](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 }} ``` - 既存ファイルの末尾の``の手前に追加: `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"]'

test1
test2
<いじわるタグ>
test3

``` この出力は今回の私が求めている形だ。いじわるタグを「`<いじわるタグ>`」に変換してくれる点は、実際のブラウザ表示の再現になっておりありがたい。 #### 参考情報 ##### test_1.htmlの内容 ```html これはテストファイルです

H1です

H2です

test1
test2
<いじわるタグ>
test3

``` ##### test_2.htmlの内容 `test_1.html` との差は、「``」を「``」に置換しているのみ。 ```html これはテストファイルです

H1です

H2です

test1
test2
<いじわるタグ>
test3

``` --- ### EC-CUBEサイトの複製をデータベースのdumpでやってみた - 2024-01-26 URL: https://remoteroom.jp/diary/2024-01-26/ #### VMをコピーすれば簡単だけどもあえて テスト環境のEC-CUBEサイトを複製して、同じEC-CUBEサイトをもう一つ構築する必要が生じた。サイト構築の方法としては、サーバ (仮想マシン) のイメージを丸ごと複製する方法をまず思いつくし、新サーバにEC-CUBEを新規導入した後、EC-CUBEのデータベースを複製する方法もありえるはず。今回は初めての機会として後者の方法でやってみた。扱う環境は次の通り。 |項目|複製元|複製先| |---|---|---| |OS|Ubuntu 22.04|Ubuntu 22.04| |EC-CUBE|4.2.1|4.2.1 (※)| |データベース|PostgreSQL 14.10|PostgreSQL 14.10| |特記事項|商品登録を多少行っただけの状態。プラグインは導入無し。Web APIでGraphQLを利用している。|| - (※) 記事執筆時点でのEC-CUBE最新版は4.2.3。複製元が4.2.1で複製先が4.2.3という組み合わせの場合、今回行った複製方法のみでは、複製先のEC-CUBEのインストーラー実行途中にエラーが表示されて進めなくなる。ログによると双方のデータベース構造に違いがあるためのようであった。\[2024-01-26\] ##### Step-1. 複製元EC-CUBEでの作業 1. PostgreSQLのデータをdumpしてファイル化する ``` $ pg_dumpall -h localhost -U --no-role-passwords -f ``` 2. dumpファイルを複製先サーバへ転送する ##### Step-2. 複製先EC-CUBEでの作業 作業で楽をするために、拙作のansible-playbook「[EC-CUBE4の公式パッケージをUbuntu環境に導入する時短ansible-playbook 〜PostgreSQL/Nginx/Let's EncryptのSSL証明書とともに〜](https://github.com/mah-jp/ec-cube4_installer)」 (以下、ec-cube4_installerと表記) を用いている。 1. PostgreSQLのセットアップを行う (必要があればセットアップ前に初期化も行っておく) - セットアップ: ec-cube4_installerの[sudo_4_setup-postgresql.ansible.yml](https://github.com/mah-jp/ec-cube4_installer/blob/main/tasks/sudo_4_setup-postgresql.ansible.yml)相当の内容 - 初期化: ec-cube4_installerの[sudo_9_destroy-postgresql.ansible.yml](https://github.com/mah-jp/ec-cube4_installer/blob/main/tasks/sudo_9_destroy-postgresql.ansible.yml)相当の内容 2. PostgreSQLへ複製元のdumpファイルを流し込む ``` $ psql -h localhost -U -d -f ``` 3. EC-CUBEのインストールを行う (途中の「データベースの初期化を行わない」にはチェックを入れて (ONにして) 進める) - インストール: ec-cube4_installerの[sudo_5_install-eccube.ansible.yml](https://github.com/mah-jp/ec-cube4_installer/blob/main/tasks/sudo_5_install-eccube.ansible.yml)相当の内容 4. インストーラーの終盤にてエラーが発生してEC-CUBE管理画面へ遷移できない (ログには次のエラーが出ていた) 時は、[下記小ネタ](#%E5%B0%8F%E3%83%8D%E3%82%BF)のキャッシュクリアコマンドを実行する ``` Unable to generate a URL for the named route \"admin_api_oauth\" ``` 5. EC-CUBE管理画面へ遷移できたら、必ず最初に、管理者パスワードの変更を実施すること! - データベースの複製のみでは管理者認証情報はうまく継承されないようなので、ここでパスワード変更を行うことによって正規の情報を上書きするようなイメージである 6. EC-CUBEが、商品画像の表示以外の面では問題なく使用できることを確認する 7. 商品画像も複製するため、複製元の `/html/upload/save_image/` 以下のファイルを複製先の同じディレクトリに保存する #### 小ネタ ##### Symfonyのキャッシュクリア ``` $ /bin/console cache:clear --no-warmup #### 必要に応じて管理者権限で $ sudo /bin/console cache:clear --no-warmup ``` ##### EC-CUBEのログの確認 EC-CUBEのログファイルは `/var/log/` 以下に保存されるので、状況を詳細調査する場合にはここを参照すること。 #### 参考リンク - [【公式】EC\-CUBE|ECサイト構築・リニューアルならECオープンプラットフォームEC\-CUBE](https://www.ec-cube.net/) --- ### 「GoProクラウド」に上げたメディアファイルを一括ダウンロードするCLIのコマンドを試した - 2024-01-08 URL: https://remoteroom.jp/diary/2024-01-08/ #### 自動アップロードは便利だが逆はどうしよう 2023年12月某日より、アクションカメラの「[GoPro HERO12 Black Creator Edition](https://gopro.com/ja/jp/shop/cameras/hero12-black-creator-edition/CHDFB-121-master.html)」が我が家の装備に加わった。遊び甲斐がたっぷりありそうなこの撮影機材を家族全員が楽に存分に活用できるように[GoProサブスクリプション](https://gopro.com/ja/jp/shop/subscribe-to-gopro-subscription/GoProPlusYearly.html)を契約し、GoProの充電中に、GoPro内に保存したメディアファイル (撮影した動画など) が容量無制限の専用クラウドストレージ「GoProクラウド」へ自動的にアップロードされるように設定した。たとえば4K動画を数分間撮影するとどうやらSDカード容量を数GBは消費するので、頻繁にメディアファイルをクラウドへ逃がせるようにしておくことは必然的かもしれない。 一方、クラウドからのメディアファイルのダウンロードに関しては、GoProクラウドのメディアライブラリー には「一度にダウンロードできるのは25ファイルまで」という制限事項があったり、まず第一にGUI操作を前提とした作りとなっていてCLI派には使い勝手がいまいち。ダウンロードをバッチ処理したい自分としては色々悩ましいものがある。 そこで、GoProクラウドのダウンロード機能をCLIで扱えるツールを探してみたところ次のものを発見し、メディアファイルの一括ダウンロードが実際に行えることが分かったのでメモを残します。 - [mvisonneau/gpcd: GoPro Cloud Downloader](https://github.com/mvisonneau/gpcd) #### gpcd (GoPro Cloud Downloader) の使い方 上記の[gpcdの公式ページ](https://github.com/mvisonneau/gpcd)を参照して手順を進める。 ##### Step-1. インストール方法 ###### Ubuntu (amd64) の場合 ``` $ export GPCD_VERSION=$(curl -s "https://api.github.com/repos/mvisonneau/gpcd/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') $ echo ${GPCD_VERSION} $ wget https://github.com/mvisonneau/gpcd/releases/download/${GPCD_VERSION}/gpcd_${GPCD_VERSION}_linux_amd64.deb $ sudo dpkg -i gpcd_${GPCD_VERSION}_linux_amd64.deb #### インストールしたgpcdにpathが通っていることを確認 $ which gpcd ``` ###### macOSの場合 ``` $ brew install mvisonneau/tap/gpcd #### インストールしたgpcdにpathが通っていることを確認 $ which gpcd ``` ##### Step-2. 実行方法 gpcdに認証情報をどのように渡すのか、公式ページには具体的な方法の記述はなさそう。私なりにやってみてうまくいった方法を記録する。 1. Chrome系ウェブブラウザを使って、GoProサイトにサインインした状態で を開く 2. を開いた状態でブラウザ画面を右クリックして \[検証\] メニュー > \[Network\] タブを選択する 3. 画面をreloadし、\[Network\] タブの Name=`media-library/` の行を選択し、右タブで \[Headers\] を選択し、\[Request Headers\] グループの中にある、key「Cookie:」に対応しているvalue文字列 (2000文字ぐらい) をコピーする 4. コピーした文字列の中から `gp_access_token=XXXXX...; ` のXXXXX...部分 (1200文字ぐらい) を抽出する 5. ターミナル画面で次のexportとgpcdコマンドを実行する ```bash $ export GPCD_BEARER_TOKEN=XXXXX... # XXXXX...は抽出した内容へ置き換える $ gpcd list ``` 6. 次のような実行結果が表示されると、GoProクラウドのメディアライブラリーからファイル情報が取得できていると分かる ```bash $ gpcd list LRwgeNRiRe9J3 | 2024-01-07 00:27:10 +0000 UTC | GX010132.MP4 - Video (2160p) wTvJ3VmqhgJJj | 2024-01-06 12:21:02 +0000 UTC | GX010131.MP4 - Video (2160p) znKsYadg9nnpg | 2024-01-06 11:37:32 +0000 UTC | GX010130.MP4 - Video (2160p) (以下省略) ``` 7. gpcdコマンドの`--from`と`--to`オプションを併用して用いると、たとえば次のように、日本時間 (+09:00) の2024-01-04に記録したメディアファイルのみを選択して、listもしくはdownloadが可能だ ```bash $ export TMP_DATE=2024-01-04 $ gpcd --from "${TMP_DATE}T00:00:00+09:00" --to "${TMP_DATE}T23:59:59+09:00" list # 一覧表示の場合 $ gpcd --from "${TMP_DATE}T00:00:00+09:00" --to "${TMP_DATE}T23:59:59+09:00" download # ダウンロードの場合 ``` ##### Step-3. ヘルプ内容 gpcdのヘルプは次の通りとなっている。一つのアイデアとしては、上記Step-2の`--from`と`--to`に`--local-path`を組み合わせることで、日毎のフォルダに分けて、GoProメディアファイルを自動保存していくようなバッチ処理も楽に実現できそうだ。 ``` $ gpcd NAME: gpcd - download bulk medias from GoPro Cloud USAGE: gpcd [global options] command [command options] [arguments...] VERSION: 0.0.1 COMMANDS: list list available medias download download medias help, h Shows a list of commands or help for one command GLOBAL OPTIONS: --api-endpoint value Go Pro Cloud API endpoint (default: "https://api.gopro.com/media/") [$GPCD_API_ENDPOINT] --local-path value where the medias should be downloaded (default: "./medias") [$GPCD_LOCAL_PATH] --bearer-token value Used to authenticate over your account [$GPCD_BEARER_TOKEN] --user-agent value (default: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0") [$GPCD_USER_AGENT] --from value filter for medias captured after this date --to value filter for medias captured before this date --max-concurrent-downloads value (default: 8) --help, -h show help (default: false) --version, -v print the version (default: false) ``` ##### 追記 \[2024-01-08\]: Livestreamの処理で終了してしまう gpcdでダウンロードする対象に「Livestream」が含まれている場合、[ダウンロードURLが見つからないためか](https://github.com/mvisonneau/gpcd/blob/d04b995c57f3697982d0d85d547a679907703e02/internal/cmd/download.go#L91)、次のようなエラーメッセージを表示してgpcd (v0.0.1) は終了してしまう。複数のメディアファイルをダウンロードしている最中であっても、その段階で終了する。Livestreamは無視して次のダウンロードに進んでくれる処理がベストなのだが、さてどうしようか。 ``` JPdFwunuAnyNM | 2023-12-27 10:54:42 +0000 UTC | - Livestream () 2024/01/08 20:27:46 unable to find a downloable URL for this media ``` #### 参考リンク GoProを使いこなすための、とても凝っているツールを紹介していると思われる次のリンクも発見した。ただし私の環境では `stack install` の途中でひとつエラーが発生し、不慣れなHaskellがらみで解決方法は分からなかったため、このツールの実行までは今回試せず。 - [Dustin Sallings](https://dustin.sallings.org/) > [GoPro Plus](https://dustin.sallings.org/2020/04/29/gopro-plus.html) - [dustin/gopro: Tools for making the most out of GoPro Plus\.](https://github.com/dustin/gopro) --- ### Nissan X-TRAIL (T33型): 遠出の前に、NissanConnectナビの地図更新をやってみた - 2023-12-31 URL: https://remoteroom.jp/diary/2023-12-31/ #### カーナビを最新にしとこう 普段行かない地域へのドライブを控えていることもあり、事前に、USBメモリによるカーナビの地図データ更新をやってみました。今回の車とナビについては次の通りです。 |項目|内容| |---|---| |車種|Nissan X-TRAIL (T33型) 6AA-SNT33|\ |装着ナビ|NissanConnectナビ| |NissanConnectの契約|スタンダードプラン+| 地図データの更新方法は、日産の次のページで案内されています。 - 公式案内1: [日産:エクストレイル \[ X\-TRAIL \] スペシャル 取扱説明書](https://www.nissan.co.jp/OPTIONAL-PARTS/NAVIOM/X-TRAIL_SPECIAL/E-POWER/2207/index.html) > 目次検索 > NissanConnectサービス > NissanConnect サービスを使う > 地図更新について - 公式案内2: [日産:NissanConnect サービス | もっと快適、通信で便利に! > OTA自動更新](https://www3.nissan.co.jp/connect/service_convenient.html#ota) > OTA地図自動更新 上記の「公式案内2」によると、「ナビで \[自動地図更新の設定\] をONにしていれば、自車位置エリアの地図に更新がある場合には車両搭載の通信機 (TCU) によりOTAで地図更新が可能で、更新中のナビ利用も可能」とわかります。しかしながら、地図更新中にはパワースイッチ (エンジン) をOFFにできないなど、車の扱いにやや気を使うところもあるので、当該エリアへ乗り入れる前に自力で、どうせなら一気に日本全国の地図データ更新をやってしまおうという魂胆です。 #### 地図データ更新手順 上記の公式案内1,2で案内されているURL https://nissan.mapupdate.info/ へアクセスし、画面の指示に従いながら手順を進めていきます。 ##### Step-1. USBメモリによる地図データ更新(日本) 最初の画面には、記事執筆時点で `地図の最新更新: GENP JN E.B (2023年 12月)` という記載があります。手順をこなせば、この状態まで更新されるということでしょう。 USBメモリに関しての注意点は次の通り。なお、3番目は私が最初USBメモリのパーティション構成をGPTにしてしまった故に、1度ハマってしまったところです。 1. (上記ページに記載の通り) USBメモリに使用可能な記憶領域が最低32GBあること 2. (上記ページに記載の通り) USBメモリはFAT32でフォーマットされていること 3. (おそらくこれが無難) USBメモリのパーティション構成はGPT (GUID Partition Table) ではなくMBR (Master Boot Record) とすること ##### Step-2. ナビゲーションシステムから地図情報を取得する ナビが保持している地図情報をUSBメモリに保存する必要があるようで、画面の指示に従って車のナビを操作します。実際のナビ操作は次の写真の通りです。 ##### Step-3. USBメモリからバージョン情報を地図データサーバにアップロードする Step-2でナビからUSBメモリに地図情報を保存すると、USBメモリには「dbupdate」フォルダができ、その中に`NavDBExport.info` というファイル (3.6KB) が保存されています。このファイルをサーバへアップロードします。 ##### Step-4. 地図データの選択 おそらくですが、ナビの現在の地図情報の状態がサーバで参照された上での、更新がある地図データが一覧表示されます。ここでは「日本全国版地図」を選択します。 ##### Step-5. 地図更新データのダウンロード ダウンロードするパソコンのストレージに空き容量が十分にあること (後述の展開作業も含めて50GBあれば大丈夫) を確認した上で、次の2つのファイルのダウンロードを開始します。 - `GENP_JN_E.B_1.zip` (21.0GB) - `NavDBUpdate.info` (2.5KB) 余談ですが、前者の20GB超えのファイルに関しては、私の環境の場合はダウンロード元が `https://s3.eu-central-1.amazonaws.com/...` (欧州のフランクフルト) となり日本から遠いためなのか、ダウンロード完了まで数時間が必要でした。 ダウンロード完了後、`NavDBUpdate.info` をUSBメモリの「dbupdate」フォルダの中へコピーします。また、`GENP_JN_E.B_1.zip`は解凍すると「dbupdate」フォルダが出現するので、その中身全てをUSBメモリの「dbupdate」フォルダの中へコピーします。 ##### Step-6. 保存したUSBメモリを接続して地図を更新する 画面の指示に従って車のナビを操作します。実際のナビ操作は次の写真の通りです。 地図更新データのインストールの所要時間は、画面表示では「28分」でしたが、実際は22分ほどで完了しました。更新実施後にナビのバージョン情報を確認すると `地図データバージョン: GENP JN E.B` と表示されており、Step-1で確認したバージョン番号と一致していることが確認できました。これにてUSBメモリによる地図データ更新は完了です。 #### 参考リンク - [日産:NissanConnect サービス |地図最新更新情報](https://www3.nissan.co.jp/connect/ota_map.html) --- ### 電気通信の工事担任者試験 (総合通信) に合格できたメモ - 2023-12-18 URL: https://remoteroom.jp/diary/2023-12-18/ #### 電気なんちゃらの資格は色々あって Part-2 > 電気通信の工事担任者は、電気通信回線に端末設備、又は自営電気通信設備の接続工事を行い、又は監督する役割を担っています。 - [電気通信の工事担任者 \| 日本データ通信協会 電気通信国家試験センター](https://www.dekyo.or.jp/shiken/charge/) 電気関係の資格は色々あって、という書き出しを過去の記事で用いたことがあります。いつだったかというと、[電気通信主任技術者試験 (伝送交換主任技術者) に合格できたメモ \[2023-08-01\]]() を書いたときでした。この“色々”の中には「電気通信の工事担任者」という国家資格もあり (詳しい説明は[Wikipediaの工事担任者](https://ja.wikipedia.org/wiki/%E5%B7%A5%E4%BA%8B%E6%8B%85%E4%BB%BB%E8%80%85)を参照)、今回はこの試験の試験種別「総合通信」に合格できたのでメモを残します。 #### 総合通信の受験履歴と所感 電気通信の工事担任者資格の試験種別「総合通信」には、次の3科目が存在します。 1. [電気通信技術の基礎](https://www.dekyo.or.jp/shiken/charge/guide-supplement/1317) 2. [端末設備の接続のための技術及び理論](https://www.dekyo.or.jp/shiken/charge/guide-supplement/1316) 3. [端末設備の接続に関する法規](https://www.dekyo.or.jp/shiken/charge/guide-supplement/1315) しかしながらこの資格試験には[様々な免除科目](https://www.dekyo.or.jp/shiken/charge/guide-supplement/1298)が設定されていて、3科目すべての受験を必ずしも要求されるわけではありません。たとえば前述の電気通信主任技術者 (伝送交換主任技術者) の有資格者は、「電気通信技術の基礎」と「端末設備の接続に関する法規」の科目が免除され、残りの科目「端末設備の接続のための技術及び理論」を受験して合格点を得られれば、電気通信の工事担任者試験 (総合通信) に合格となります。そこで私はこの科目免除を使って1科目受験をやってみて、次の表の形で済ませることができました。 |試験|受験料|科目と結果| |---|--:|---| |令和5年度第2回 (実施日: 2023-11-26)|1科目受験: 8,700円|【電気通信技術の基礎】 科目免除, 【端末設備の接続のための技術及び理論】 ✅合格, 【端末設備の接続に関する法規】 科目免除| 自己採点によると私の得点は合格点 (60点/100点) より数点多かった程度でほぼギリギリ。試験に向けてどのような勉強をしていたかというと、2023年9月からまったりと、下記の参考書を通読し、練習問題や過去問を何度かなぞって答えや解法を暗記した、あまり深くはない程度のものだったので、その緩さがギリギリの点数に表れたと言えましょう……。 ##### 追記 \[2023-12-29\]: 資格者証の交付手続き 試験合格が判明した後、電気通信の工事担任者 (総合通信) の資格者証の交付申請手続きを行いました。手続きは次のリンク先の案内に沿って、所定の申請書類を郵送で提出するというものです。私の場合は申請書送付から1週間ほどで資格者証が到着しました。 - [総務省|電気通信政策の推進|電気通信関係資格手続きの案内](https://www.soumu.go.jp/main_sosiki/joho_tsusin/denkishikaku.html) |日付|内容| |---|---| |2023-12-21(木)|資格者証交付申請書を近畿総合通信局へ送付| |2023-12-29(金)|資格者証の簡易書留が到着| #### 参考書 (総合通信向け) 私が用いた参考書は次の通り。学ぶべき内容が右ページに図や表の形でまとめられている、というのが本書の売りで、幾ばくかの図鑑感覚があります。試験対策としては、本書に掲載の練習問題に加えて、別のものを使って過去問を網羅しておいた方がよいかと思います。私の場合は試験日直前のタイミングで、公式サイトに掲載されている[過去問](https://www.dekyo.or.jp/shiken/charge/exam)の丸暗記をしました。 |科目|使用した参考書| |---|---| |電気通信技術の基礎|-| |端末設備の接続のための技術及び理論|| |端末設備の接続に関する法規|-| ちなみに、最初は本書の物理書籍版を購入したものの、かさばって持ち運びには難ありだと思ったので電子書籍版に切り替えましたが、この判断はほとんど失敗に近かった。本書の電子書籍版は固定レイアウトであるため、読みやすさはデバイスの画面サイズに著しく依存します。スマホやKindle Paperwhiteの画面サイズでは一部の文字が米粒以下になるほどで、B5サイズの物理書籍の方が間違いなく見やすいだろうと思います。 #### おまけ写真: 試験会場となった大学 --- ### 【読んだ本】 移民の子どもの隣に座る 大阪・ミナミの「教室」から - 2023-12-14 URL: https://remoteroom.jp/medialog/2023-12-14_book-b0cl482z4h/ 著者は移民を支援する教室にボランティアスタッフとして参加し、その何年間もの実体験を元に、アカデミックな言及もあるこのノンフィクションを記している。教室の場所はそれぞれ大阪ミナミと英国ロンドンの2カ所であり、人と人とが距離を取らざるをえないコロナ禍の時期は前者の時期と重なっている。 本書を読む際、論理の流れにおいては本当にひっかかるところがなくさらさらと進むが、描かれている状況を想像するために、読みが止まることも多かった。そのタイミングは大概、移民の人々が各々対峙する苦難を乗り越えようとしている様子を、その隣に座る著者の視座から丁寧に綴っているところで、私の涙腺はちょっと刺激されがちだったりする。 途中には「国際文化学部」という見覚えがある学部名が登場し、おやっ?と思って検索すると、著者は私が以前関わっていた某所の[広報誌](https://www.kobe-u.ac.jp/documents/info/public-relations/magazine/style/13/all.pdf#page=9)にも登場している方だった。そして本書で「[災害ユートピア](https://ja.wikipedia.org/wiki/%E7%81%BD%E5%AE%B3%E3%83%A6%E3%83%BC%E3%83%88%E3%83%94%E3%82%A2)」という言葉を初めて知ることができた。同時に、阪神・淡路大震災のあった1995年がボランティア元年と呼ばれていることを思い出した。災害ユートピアに関しては人間性のひとつの現れ方として興味が沸いているので、別の書籍を読んでみたいと思う。 また、下記は、本書の最後のほうに登場する一文である。日本の社会が移民をどう捉えているのかを考える上で、短いながらもなんと核心に迫っている言葉だろうかと衝撃を受けた。この“違和感”はなぜなのか?という問いを考えたいとき、そしてこの“違和感”をもたないほうへ社会を変えるヒントを得たいとき、本書は手に取る一冊になる。 > 「日系アメリカ人」という呼び名は広く受け入れられているが、「フィリピン系日本人」という表現に違和感をもつ人は多いだろう。 玉置 太郎. 移民の子どもの隣に座る  大阪・ミナミの「教室」から (p.291). 朝日新聞出版. Kindle 版. --- ### 【観た映画】 インターステラー (吹替版) - 2023-12-09 URL: https://remoteroom.jp/medialog/2023-12-09_movie-b00umb8dv0/ - 視聴: [YouTube](https://www.youtube.com/watch?v=t3n7XSGxohw) 原題『Interstellar』。音楽はHans Zimmerということであるが、たいがいの他の映画なら激しく高まっていく音楽が、本作では様相が違う。静かに荘厳に響いている。そして本作は手強くて、観た直後に感想をちゃちゃっと書くことができない。その手強さは、何を描いているかの解釈が難しいという類いではなくて、長い旅をし終わって達成感に満たされ過ぎて、もう何も言えない時に、その旅に対して抱くタフさの類いだ。『2001年宇宙の旅』のオマージュかなと感じられるシーンがいくつかあった。部屋を真っ暗にして一気に観て欲しい。 #### 鑑賞リンク --- ### Nissan X-TRAIL (T33型): 冬支度でスタッドレスタイヤ「iceGUARD 7」へ交換 - 2023-12-02 URL: https://remoteroom.jp/diary/2023-12-02/ #### ロングドライブに備えて 車のタイヤをノーマルタイヤからスタッドレスタイヤへ初めて交換したので、交換初日の簡単な感想とともにメモです。冷え込んで降雪や凍結するかもしれない地域へのドライブをそもそも冬は控えていた、昨年までのFRレトロセダンの時とは異なり、今は四輪駆動車なので、足下の冬支度を万全に整えておきたくなったのでした。 ##### 銘柄はどれを選ぶ? スタッドレスタイヤの銘柄としては[ヨコハマタイヤ iceGUARD 7](https://www.y-yokohama.com/product/tire/iceguard_7/)を選択。初心者かつミーハーな私はとりあえず名前を知っている[ブリヂストン BLIZZAK](https://tire.bridgestone.co.jp/blizzak/vrx3/)を最初指名してみたものの、「このサイズのVRX3は今期中の納期が未定になってます」とお店に言われたため、iceGUARD 7にしました。アイスガードには「SUV」向けという[iceGUARD SUV G075](https://www.y-yokohama.com/product/tire/iceguard_suvg075/)もあり、車の重量的にはどっちが最適なのかわからないが、ここは乗用車寄りの静粛性に期待してあえて「7」を選択です。 |種別|商品名|購入価格 (4本・税込・工賃別)|購入店| |---|---|--:|---| |スタッドレス|[YOKOHAMA TIRE iceGUARD 7 iG70A](https://www.y-yokohama.com/product/tire/iceguard_7/) (235/55R19)|214,170円|[SAサンシャインKOBE](https://www.woow-kobe.com/)| ちなみに交換前のノーマルタイヤは、純正装着の [HANKOOK VENTUS S1 evo3 SUV](https://www.hankooktire.com/us/en/tire/ventus/s1evo3suv-k127a.html) (235/55R19) です。 #### 感想 気温10度前後の晴れの日、舗装路面を数km走っての感想です。 - 路面から伝わるショックが小さくなり、乗り心地が優しくなったとすぐに分かった。同乗する家族には歓迎されそうだ - そしてあらら!?、静かになっている? - ステアリングの応答は少しだけ敏捷ではなくなった - 駐車する時などのほぼ停止時にステアリングを切っても、アスファルトとタイヤが擦れる音がしないぐらいになった (ノーマルタイヤの時はぎゅぎゅぎゅっと聞こえていた) スタッドレスタイヤとしての雪道での感触や摩耗のしやすさは、今の段階では判断できないものの、このiceGUARD 7はX-TRAIL (T33) の純正ノーマルタイヤと比較して、晴れた舗装路面での乗り心地は総じて快適な可能性が高く、予想外でした。ロードノイズの低さも電気駆動車の特徴を引き出す方向で良い感じです。 --- ### 【観た映画】 ワース 命の値段 (字幕版) - 2023-12-01 URL: https://remoteroom.jp/medialog/2023-12-01_movie-b0cbgd5hpz/ - 視聴: [YouTube](https://www.youtube.com/watch?v=mWolWZd1m24) 原題『Worth』。2001年9月11日の米国同時多発テロの11日後には、犠牲者の補償を目的の一つとした基金が設立されたそうだ。本作では、この補償の履行にあたって強い決定権を持つ“スペシャルマスター”に光を当てている。 失われた命に値段を付ける行為が、容易ではないことは軽く想像するだけでもわかる。決してひとつではない判断基準や様々な価値観を経済の次元に落とし込む困難さがあり、算出額を命へ戻すなんて検算ができればわかりやすいがそれは誰にもできない。 私はこの映画を観ながら、当事者と対話する意義の大きさ、公平さとは何なのか、税金は人を助ける道義のために使うべきものだな、というようなことを考えた。そして本作を観た後に下記の「ワーキングペーパー」を発見した。この資料では、9.11の被害を阪神・淡路大震災のものと比較し (注目すべきは、9.11の被害額は人的資本の毀損も含めて推定されている点だ)、映画にはあまり描かれていない基金の側面や、基金に関する研究者のひとつの見解を知ることができる。 - [ワーキングペーパー \| 研究調査部 \| 研究戦略センター \| 公益財団法人 ひょうご震災記念21世紀研究機構](https://www.hemri21.jp/research-strategy-center/research-investigation/r-d-working-paper/) > 平成19年度No.2 [林 敏彦 「米国同時多発テロと犠牲者補償基金」(2007.10.10)](https://www.hemri21.jp/contents/pdf/r_d_working_paper/wp2007002j.pdf) (PDF) #### 鑑賞リンク --- ### AIで物体検出してくれるOSSのNVR「Frigate」を試した - 2023-11-22 URL: https://remoteroom.jp/diary/2023-11-22/ #### 物体検出を試してみたい GIGAZINEの次の紹介記事を見つけ、カメラ映像に映っている物体が何かを機械学習モデルで認識してくれるというオープンソースのNVR「[Frigate](https://frigate.video/)」を手元で試してみたくなった。どこかの横断歩道のカメラ映像を使っている[デモサイト](https://demo.frigate.video/)もある。 - [カメラに写った動く物体をAIがリアルタイムに認識・解析するオープンソースのNVR「Frigate」 \- GIGAZINE](https://gigazine.net/news/20231121-frigate/) なお、NVRとは「ネットワークビデオレコーダー」の略だ。サーバにNVRソフトウェアを導入すると、ネットワークカメラの映像を束ねた監視カメラシステムが構築できる。 ##### 今回の実験の前提条件 Frigateを手元でとりあえず素早く試すことを目標に、手元の仮想化プラットフォームProxmox VE (PVE) の上にUbuntuの仮想マシンを構築し、その中でFrigateのdockerコンテナを動かすことにする。 仮想化プラットフォームのCPUは「AMD Ryzen 5 PRO 3400GE」で、別立てのGPUは無し。私は今回初めて存在を知ったハードウェアである、エッジAI用アクセラレータ「[Google Coral (TPU)](https://coral.ai/)」も持っていないので、必然的に一般的なサーバソフトウェアと同じハードウェア構成となる (PVEにUSBやPCI (GPU) Passthroughも設定しない)。すなわち、物体検出の演算には仮想マシンのCPUを用いる構成だ。 #### Frigateの導入手順 次のリンク先のFrigate公式ドキュメントを参考に導入を進める。 - [Introduction \| Frigate](https://docs.frigate.video/) ##### Step-1. Docker環境を用意する Dockerを動かす場所を用意する。既存のDocker環境でも良いだろうし、今回の実験では、前述の前提条件のように仮想のUbuntu Server (x86_64) の中に新規構築した。 1. 仮想マシンを「CPU: 8 core, Memory: 8GB, Storage: 64GB」で構成する 2. Ubuntu Server 22.04 LTSをインストールする 3. Dockerを公式手順で導入する (非Rootless modeにした) - https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository - https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user 4. ユーザ権限で `docker run hello-world` が動かせることを確認する ##### Step-2. RTSPソースを用意する RTSPでのVideoストリーミングが可能な、ネットワークカメラまたはカメラアプリを用意する。今回の実験では2台用意してみたが1台でも構わない。 |カメラ|ソース|備考| |---|---|---| |No.1|ネットワークカメラ「[ATOM Cam 2](https://www.atomtech.co.jp/products/atomcam2)」|アプリ上でこの設定をするとRTSP配信が可能になる: [Atomcam2の公式アプリがRTSP対応しました。 \| Astrotourism Lab](https://astrotourism.jp/2022/05/30/1135/)| |No.2|Androidアプリ「[RTSP Security Camera](https://play.google.com/store/apps/details?id=com.esona.webcamcloud)」|アプリを起動すると画面の真ん中にRTSPのURLが表示される| ##### Step-3. 設定ファイルを用意する Docker環境の母艦で作業を行う。 1. https://docs.frigate.video/frigate/installation/#docker の「version: "3.9"」で始まるファイルの内容を、任意のpathに `docker-compose.yml` として保存する 2. 保存した `docker-compose.yml` の編集を行う - `shm_size` を https://docs.frigate.video/frigate/installation#calculating-required-shm-size の計算式にしたがって調整する。今回の実験ではざっくり `"128mb"` へ増量した (カメラNo.1 (1920x1080) = 26.95MB, カメラNo.2 (640x480) = 4.21MB, ログ = 30MB を全て含められるように) - volumes部分にある `/path/to/your/...` 2箇所を自身の環境に合わせて書き換える。今回の実験では `/path/to/your/` を `/home/hoge/frigate/` へ置換する形とする ```yaml version: "3.9" services: frigate: container_name: frigate privileged: true # this may not be necessary for all setups restart: unless-stopped image: ghcr.io/blakeblackshear/frigate:stable #shm_size: "64mb" # update for your cameras based on calculation above shm_size: "128mb" # update for your cameras based on calculation above devices: - /dev/bus/usb:/dev/bus/usb # passes the USB Coral, needs to be modified for other versions - /dev/apex_0:/dev/apex_0 # passes a PCIe Coral, follow driver instructions here https://coral.ai/docs/m2/get-started/#2a-on-linux - /dev/dri/renderD128 # for intel hwaccel, needs to be updated for your hardware volumes: - /etc/localtime:/etc/localtime:ro - /home/hoge/frigate/config.yml:/config/config.yml - /home/hoge/frigate/storage:/media/frigate - type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear target: /tmp/cache tmpfs: size: 1000000000 ports: - "5000:5000" - "8554:8554" # RTSP feeds - "8555:8555/tcp" # WebRTC over tcp - "8555:8555/udp" # WebRTC over udp environment: FRIGATE_RTSP_PASSWORD: "password" ``` 3. `/home/hoge/frigate/config.yml` として次の内容を保存する (部分ごとの説明は後述する) ```yaml mqtt: host: mqtt.server.com cameras: atomcam2: ffmpeg: inputs: - path: rtsp://hoge:fuga@192.168.1.XXX/live roles: - detect detect: width: 1920 height: 1080 android: ffmpeg: inputs: - path: rtsp://hoge:fuga@192.168.1.YYYY:NNNN roles: - detect detect: width: 640 height: 480 record: enabled: True retain: days: 3 mode: motion events: retain: default: 7 mode: active_objects detectors: cpu1: type: cpu num_threads: 3 cpu2: type: cpu num_threads: 3 objects: track: - person - bicycle - car - motorcycle - airplane - bus - train - car - boat - traffic light - fire hydrant - street sign - stop sign - parking meter - bench - bird - cat - dog - horse - sheep - cow - elephant - bear - zebra - giraffe - hat - backpack - umbrella - shoe - eye glasses - handbag - tie - suitcase - frisbee - skis - snowboard - sports ball - kite - baseball bat - baseball glove - skateboard - surfboard - tennis racket - bottle - plate - wine glass - cup - fork - knife - spoon - bowl - banana - apple - sandwich - orange - broccoli - carrot - hot dog - pizza - donut - cake - chair - couch - potted plant - bed - mirror - dining table - window - desk - toilet - door - tv - laptop - mouse - remote - keyboard - cell phone - microwave - oven - toaster - sink - refrigerator - blender - book - clock - vase - scissors - teddy bear - hair drier - toothbrush - hair brush ``` ###### cameras: - 公式ドキュメント: https://docs.frigate.video/configuration/cameras ここでは、atomcam2とandroidという2台のカメラを定義している。それぞれの `- path: rtsp://...` の行は、各RTSPソースのURLに書き換える。 ###### record: - 公式ドキュメント: https://docs.frigate.video/configuration/record カメラ映像が、一定期間、検出したオブジェクトごとに保存されるように適宜設定している。 ###### detectors: - 公式ドキュメント: https://docs.frigate.video/configuration/detectors 上記リンク先では「not recommended」となっているけれども、カメラの台数に合わせてCPU Detectorを2つ定義している。 ###### objects: - 公式ドキュメント: https://docs.frigate.video/configuration/objects 認識するオブジェクトを定義している (テストのためにありったけ定義した)。この定義を書かないデフォルト状態の場合、検出されるオブジェクトは「person」のみである。 ##### Step-3. 保存領域を準備する Docker環境の母艦にて、Frigateが保存領域として使用するディレクトリを作成する。 ```bash $ mkdir /home/hoge/frigate/storage/ ``` ##### Step-4. Frigateを起動する Docker環境でFrigateコンテナを次のように起動し、コンソール画面に特にエラーが表示されないことを確認する。 ```bash $ cd $ docker compose up ``` Dockerの母艦のIPアドレスの5000/tcp へウェブブラウザでアクセスすると、鳥 (アメリカグンカンドリ?) のアイコンが左上にある「FRIGATE」画面が確認できる。左メニューの「Cameras」を選択すると、接続しているカメラの映像が静止画で一覧できる。全カメラの動画を一覧したい場合は「Birdseye」を選択すれば良いようだ。 #### Frigateの物体検出はどんな感じか 左メニューの「Cameras」を選択し、次に右側で任意のカメラ映像を一度クリックする。そしてカメラ映像の右上に薄く現れているメニューを「Live」から「Debug」へ切り替えると、機械学習モデル (この場合はTensowFlow Liteのモデル) がカメラ映像に映った各物体をリアルタイム検出し、分類の確度とともに四角い枠で表示している様子を、毎秒5コマぐらいの動きで見ることができる。ほおお、すごい。 また、左メニューの「Events」を選択すると、物体検出の様子を時系列イベントとして閲覧できる。対象の物体部分がきっちり切り抜かれている画像がサムネイルとして並び、当該時間帯の動画もワンクリックで確認できる (我が家のピンク色のぬいぐるみが「Teddy Bear」と認識されているのはご愛嬌)。 #### 所感 機械学習モデルを使って物体が何かを認識することは昨今当たり前に行われている。Frigateはその機能が予め組み込まれているオープンソースなNVRソフトウェアであり、物体検出関連も含めてセットアップがとても簡単で驚いた。今回の実験では物体検出の演算にCPUのみを利用しており、GPU等を利用する場合はセットアップが実際どうなるか不明だけども。 以前試した下記記事のShinobiも面白かったが、それぞれに特色があり、こちらFrigateもなかなか実用的な予感がする ([Home Assistantへの統合方法](https://docs.frigate.video/integrations/home-assistant/)も案内されている)。機会があれば実戦投入して、NVRで物体検出が利用できると実際どのような利点があるのか、確かめてみたいと思う。 ##### 参考記事 - [監視カメラシステムを構築するOSS「Shinobi」を試した \[2022-05-24\]]() --- ### 【読んだ本】 防災アプリ 特務機関NERV: 最強の災害情報インフラをつくったホワイトハッカーの10年 - 2023-11-15 URL: https://remoteroom.jp/medialog/2023-11-15_book-b09q7xzv8q/ 登場人物らの行いや純粋な思いと、よどみない論理的な文体とが、本書の上で相乗作用していることは読み始めるとすぐに分かってくる。なぜなら、自分の中のなにかが自然と奮い立たされるから。 緊急時に、情報はそれがあるだけで危機を解決するものではない。しかし人を動かす力にはなり得る。「特務機関NERV」という特殊な名の下に、そのための情報発信を真摯に続けていく中で生ずる葛藤や様々なつながりが、劇的だ。かつ技術やアクセシビリティに言及した部分もとても興味深くて、私はこのドキュメンタリーを熱く読んだ。 #### 参考リンク - [「特務機関NERV防災」をApp Storeで](https://apps.apple.com/jp/app/%E7%89%B9%E5%8B%99%E6%A9%9F%E9%96%A2nerv%E9%98%B2%E7%81%BD/id1472338480) - [特務機関NERV防災 \- Google Play のアプリ](https://play.google.com/store/apps/details?id=app.nerv) --- ### 【読んだ本】 カリスマエンジニアが自動車評価の神髄を伝える 水野和敏が斬る!! - 2023-11-10 URL: https://remoteroom.jp/medialog/2023-11-10_book-b0clkh7dh5/ 月刊誌『ベストカー』の「水野和敏が斬る!!」コーナーの記事の2022年分と、今回向けの特別記事数編がまとめられたもの。YouTubeの[ベストカーチャンネル](https://www.youtube.com/@bestcartube) > [水野和敏が斬る!](https://www.youtube.com/playlist?list=PLYpK-akmQzrbDHL4_bNVbQ8B7LhfjCS3p)の予告動画の新着を毎回楽しみにしているもののベストカーは購読していない人 (=私) にとって、予告動画の数分間には収まり切れていない、気になる部分を吸収することができる内容であった。 目の前のクルマを、エンジニアリングの観点を基本にしつつ、商品開発という、会社組織の大きな活動の結果と捉えてどのような評価を行うか。私としては本コーナーの“ジャッジ”の結果ではなくて、水野氏の繰り出す様々な評価方法や判断が、面白くていつも見ている (読んでいる) 次第である。たとえば、一般人には読み取れない各車の構造上の特徴が語られていたりするのは、エンジニアリングの観点ゆえのものだと思える。また、本書で改めて気づいたのは、空力についてはどの記事でも工夫や要改善点を具体的に述べているほどで、これは実際に、クルマのエネルギー消費を大きく左右する喫緊の重要な要素なんだろうなあと切に感じる。 --- ### 【観た映画】 15時17分、パリ行き (吹替版) - 2023-11-05 URL: https://remoteroom.jp/medialog/2023-11-05_movie-b07d3g79jr/ - 視聴: [YouTube](https://www.youtube.com/watch?v=GVlH_0atrxs) 原題『The 15:17 to Paris』。映画の中の時間の矢は「[タリス銃乱射事件](https://ja.wikipedia.org/wiki/%E3%82%BF%E3%83%AA%E3%82%B9%E9%8A%83%E4%B9%B1%E5%B0%84%E4%BA%8B%E4%BB%B6)」という出来事に向かって進む。しかし映画はこの事件が実は主体ではなくて、登場する主人公三人の少年期からの交流や、抱いてきた葛藤を本筋として描いているように思えた。私は本作からメッセージやあたたかさを感じる。しかし一方で、一般的には評価は一様ではなく割れる作品だと断言できる。 ストーリの表層には絡まないと思われるシーンがいくつかあって、観終わった後にはそれがなぜか印象に残っているという、不思議な構成をしていた。このようなシーンの役割は何だろうかと考えてみると、それは、劇中の主人公らと、観客のひとりひとりがきっと過去に体験したことがあるような個人的な大小の類似の出来事とを結びつけさせ、観客側のエピソード記憶を呼び起こすためのトリガーではないか?という仮説を私は立てた。この仮説に基づけば、観客側にそのトリガーに引っかかるものが特に無ければシーンに伴う過去の感情を自分の中からは受け取れなくて、シーンの意図をおのおの想像することになる。このような構成が、“評価が割れる”と判断した理由だ。 また、本作の主人公三人は、実際に乱射事件に遭遇した本人らが演じており、その意味でも驚愕の映画である。終盤のシーン (おそらく実際の表彰式の場面) でフランス大統領が述べる言葉が、本作に託されたメッセージのひとつだと解釈した。今日時点の世界情勢を想いつつ、民主主義というものを考えさせられる。 #### 鑑賞リンク --- ### scrcpyで画面転送 / Android TVはウェブブラウザから画面をリモート操作される夢を見るか? - 2023-10-31 URL: https://remoteroom.jp/diary/2023-10-31/ #### scrcpy 〜Androidデバイスの画面を転送&操作するツール〜 Androidデバイスの画面をパソコン側にミラー表示し、パソコン側のキーボードやマウスを使ってAndroidデバイスの操作もできる「scrcpy」というツールがある。 - [Genymobile/scrcpy: Display and control your Android device](https://github.com/Genymobile/scrcpy) 以前からこのツールを時々使っていて、機器同士を接続して画面をミラーするという行為が個人的に面白いし、使い道がいろいろありそうに感じているので、今回取り上げてみる。 #### 基本編) Android画面をパソコンにミラー表示&操作 ##### Case-1. AndroidガラケーとUSBケーブル接続 たまたま手元にあったAndroidガラケー [SII 602SI Simply (NP603SI)](https://www.ymobile.jp/lineup/603si/) (Android 6) と、scpcpyは接続できるのかどうか。試している最中に、すでに同じことをやっている方を発見した。 - 参考ページ: [大須のパウでワイモバイルのジャンクSimply 603SIを1000円で買って改造して遊んでみた。AndroidのAPKがインストール出来るのでそれなりに遊べる。Wifiに対応していないのが弱点だが \- Togetter](https://togetter.com/li/2200040) ~~使い道が定まらない~~実験用のuConsoleをせっかくだから引っ張り出し、この端末とSimplyの組み合わせでscrcpyを試してみる。 ``` #### uConsoleにaptで導入したadbのバージョンを確認 $ adb version Android Debug Bridge version 1.0.41 Version 28.0.2-debian Installed as /usr/lib/android-sdk/platform-tools/adb ``` uConsoleのOSはRaspberry Pi OSベース、すなわちDebianベースである。そのせいかどうかは分からないが、上記の参考ページで説明されているUbuntuと同様に、次のファイル`/etc/udev/rules.d/80-np603si.rules`の追加が必要だった。(ちなみに、後述のCase-2で用いたMacOS環境へbrewで導入したscrcpyは、特別な設定なくSimplyと接続できた) ``` $ cd /etc/udev/rules.d/ $ sudo vim ./80-np603si.rules $ sudo chmod 644 ./80-np603si.rules $ cat ./80-np603si.rules SUBSYSTEM=="usb", ATTR{idVendor}=="2a9e", MODE="0666", GROUP="plugdev" ``` 上記ファイル`80-np603si.rules`の中に登場している「`2a9e`」は、SimplyのベンダーIDで、lsusbコマンドの出力においても確認できる。 ``` $ lsusb Bus 001 Device 005: ID 2a9e:0116 Android Android Bus 001 Device 004: ID 1eaf:0024 Leaflabs uConsole Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub ``` ###### 接続方法 1. Simply上の操作でAndroidの「開発者向けオプション」と「USBデバッグ」をONにする 2. SimplyとuConsoleをUSBケーブルで接続してからscrcpyを実行する ``` $ scrcpy --fullscreen # ついでに全画面表示を指定 ``` 3. Simply画面のミラー表示が開始される uConsole側にキー入力を行うことによってSimplyを操作することも可能だ。 ##### Case-2. AndroidスマホとWi-Fi接続 次に、Androidスマホ [Xiaomi Redmi Note 10 Pro (M2101K6G)](https://www.mi.com/jp/product/redmi-note-10-pro/) (Android 13) とMacOSとの間で、scrcpyによるWi-Fi接続を行ってみた。MacOSへのadbの導入にはbrewを使っている。 ``` #### MacOSにbrewで導入したadbのバージョンを確認 $ adb version Android Debug Bridge version 1.0.41 Version 34.0.5-10900879 Installed as /opt/homebrew/bin/adb Running on Darwin 22.6.0 (arm64) ``` ###### 接続方法 1. スマホ上の操作でAndroidの「開発者向けオプション」と「ワイヤレスデバッグ」をONにし、「ペア設定コードでデバイスをペア設定」を選択して接続情報を表示させる 2. 表示されているIPアドレス・ポート番号とWi-Fiペア設定コードに基づいて、Mac側で次のように`adb pair ...`を実行し、Macとスマホをペアリングする ``` $ adb pair 192.168.1.99:42683 474185 Successfully paired to 192.168.1.99:42683 [guid=XXX-XXXXXXXX-XXXXXX] ``` 3. ワイヤレスデバッグの「IPアドレス&ポート」に表示されているIPアドレス・ポート番号に対して次のように`scrcpy ...`を実行するとスマホ画面のミラー表示が開始される ``` $ scrcpy --tcpip=192.168.1.99:40263 --print-fps # ついでにFPS表示を指定 ``` なお、今回の組み合わせでは、Mac側の画面に対してマウスやキー入力を行ってもスマホ側に伝わらなかった。そのときのscrcpy起動画面にはJava関連っぽいエラーが表示されており、エラーの解消方法は不明である。 #### 応用編) scrcpy + Apache Guacamole で、Android TVの画面をウェブブラウザでリモート操作する ウェブブラウザからリモートデスクトップ接続することができる「Apache Guacamole」というツールについて、次の記事を先日書いた。 - [Apache Guacamole: ウェブブラウザからリモートデスクトップ接続するための踏み台 \[2023-10-22\]]() 実はこのApache Guacamoleと今回のscrcpyを、次のように組み合わせると、Android TVの画面をリモートからウェブブラウザ越しに操作できるのでは?と気づいた。 1. Ubuntu Desktopなどのデスクトップ環境で1つ専用のものを用意し、RDP接続可能なように設定する 2. そのデスクトップ環境を、Apache Guacamoleを通じて操作できるようにする 3. そのデスクトップ環境に、Android TVの画面をscrcpyを使って全画面表示する 実際にやってみた様子を次の画面キャプチャで示す。Android TVとしては [SONYのブラビア (KJ-49X8000H)](https://www.sony.jp/bravia/products/KJ-X8000H/) (開発者向けオプションの有効化などは実施済み) を用いている。こんな仕掛けは、決して広く需要があるわけではない、一部にしかウケない、特殊な業務用途 (謎) にしか役に立ちそうにないものではあるが、ざっと、作り方をメモしておく。 ##### Android TVの画面をウェブブラウザで操作する仕掛けの作り方 以下、デスクトップ環境としてUbuntu Desktopを利用する場合。Ubuntu Desktopマシンの起動後にscrcpyが自動実行され、Android TVの画面表示までが行えるように設定する。 1. Android TVのIPアドレスを固定しておく 2. Ubuntu Desktopのデスクトップ環境で一度、scpcpyとAndroid TVを接続してデバッグの承認操作などを行い、TVの画面がデスクトップ画面上に転送できるようにする 3. Ubuntu Desktopの \[アプリケーション表示\] > \[設定\] > \[ユーザー\] > \[自動ログイン\] を有効にする 4. \[アプリケーション表示\] > \[設定\] > \[共有\] > \[リモートデスクトップ\] にてリモートデスクトップ機能を有効にする 5. 自動ログイン有効時にリモート接続時のパスワードを固定化するためには、キーリングの暗号化がされていない必要があるので次の設定変更を行う (参考リンク: [Ubuntu22\.04 でリモート接続のパスワードが煩わしい: すらメモらんだむ](http://slapper.sblo.jp/article/189603656.html)) 1. \[アプリケーション表示\] > \[ユーティリティ\] > \[パスワードと鍵\] を起動する 2. 左メニューの \[パスワード\] を右クリックして「パスワードの変更」を選択する 3. 元のパスワードとして以前 (現在) のものを入力し、新しいパスワードは空白のままにして「続ける」を選択する 6. \[アプリケーション表示\] > \[設定\] > \[解像度\] でデスクトップサイズを1920x1080に固定する 7. 後述のshellスクリプト `loop_scrcpy.sh` を作成する 8. 後述の自動起動スクリプト `loop_scrcpy.sh.desktop` を作成する 9. Ubuntu Desktopマシンを再起動してみる - 問題がなければ、自動ログインによりデスクトップ画面まで進み、次にscrcpyが起動して、Android TVの画面がデスクトップ上に表示される状態になる 10. ウェブブラウザでApache Guacamoleを開き、Ubuntu Desktopのデスクトップ環境に接続する 以上の全てが実施できれば、目的の仕掛けが完成していることになる。 ##### 所感 Android TVの画面をウェブブラウザで操作するという今回の仕掛けは、「PoC (Proof of Concept)」として作ってみて実際に動かし、なんだかとても面白いぞと感じた。adbコマンドやscrcpyを直接使わなくても、言い換えれば使えないユーザであっても、Android TVの画面をリモートから確認できるようになる。また、Android TVを別のAndroidデバイスに置き換えると、別種の新しいことができるかもしれない。 他方、今回の実験環境において期待通りでなかったのは、画面の書き換え速度と操作に対する反応速度が芳しくなかった点だ。その大きな要因としては、Full HD (1920x1080) サイズの画面データの転送とそれに伴う変換処理を、`ブラビア → scrcpyを動作させた仮想マシンA (デスクトップ環境に描画) → Apache Guacamoleを動作させた仮想マシンB → 手元PCのブラウザ` という多段な経路で行っていることが考えられ、構成上“さもありなん”とも言える。 ##### 使用スクリプトなど ###### loop_scrcpy.sh - 設置場所とpermission設定: `/home/foobar/bin/loop_scrcpy.sh` (755) - スクリプト本体: ```bash #!/bin/bash # loop_scrcpy.sh # ブラビアに接続してscrcpyで画面表示 (Ver.20231020) HOST=$1 HOST_DEFAULT=XXX.XXX.XXX.XXX # Android TVの固定IPアドレス WAIT_SEC=10 # HOSTがカラだったらデフォルト値を使う if [ -z "${HOST}" ]; then HOST=${HOST_DEFAULT} fi while true do scrcpy \ --tcpip=${HOST} \ --disable-screensaver \ --print-fps \ --fullscreen \ --power-off-on-close \ #--no-power-on echo ${WAIT_SEC}秒後にscrcpyを起動します sleep ${WAIT_SEC} done ``` ###### loop_scrcpy.sh.desktop - 設置場所: `~/.config/autostart/loop_scrcpy.sh.desktop` - ファイル本体: ``` [Desktop Entry] Type=Application Exec=gnome-terminal -e "bash -c '/home/foobar/bin/loop_scrcpy.sh; $SHELL'" Hidden=false NoDisplay=false X-GNOME-Autostart-enabled=true Name[en_US]=loop_scrcpy Name=loop_scrcpy Comment[en_US]= Comment= ``` #### 参考リンク - [どのようにscrcpyがADBだけでAndroidの画面操作を実現しているのか \| CyberAgent Developers Blog](https://developers.cyberagent.co.jp/blog/archives/29686/) --- ### 【観た映画】 ザ・クリエイター/創造者 (字幕版) - 2023-10-29 URL: https://remoteroom.jp/medialog/2023-10-29_movie-b0cm831kwc/ - 視聴: [109シネマズHAT神戸](https://109cinemas.net/hatkobe/) - 公式サイト: [ザ・クリエイター/創造者|映画/ブルーレイ・デジタル配信|20世紀スタジオ公式](https://www.20thcenturystudios.jp/movies/thecreator) 原題『The Creator』。最近観た予告編の中で、いちばん観たいなと思っていた映画。それ以外の前知識なしで映画館の暗闇にひとり飛び込んだので、どういう展開で進むのだろうかとなかなかハラハラしながら浸った。 地域と思想を組み合わせた物語の構図、世界観を私はまず気に入った (まざっていないもの v.s. まざっているもの、この対立は古今東西である)。前半は程よくノリ良く進んだ気がするのだが、後半はそれ以上に“巻き”が進む。未来を描く本作の技術的考察における評価はよく分からないが、AIと人間性は分離するのか交わっていくのか、というテーマを投げかけるために、制作に大量の物量を注いだという点は理解できる。魅せようとする映像のパワーは感じられたし、高度化した機械を兵器としても描写する印象的なシーンも多い。この映画は、それが当たり前になる世界を前提としており、殺戮の意味や果てを問うている気もした。 #### 何気ない一枚 --- ### 国際宇宙ステーション (ISS) のSSTV電波を受信して画像を取り出すことができた - 2023-10-28 URL: https://remoteroom.jp/diary/2023-10-28/ #### 初受信のチャンス到来 アマチュア無線の資格を取ってからだったと思うが、地球を周回する国際宇宙ステーション (ISS) から、アマチュア無線機で受信可能な電波が発信されるイベントがあると知った。その電波は144MHz帯のFMで、SSTV (Slow Scan Television) のPD120という形式で符号化されていて、画像としてデコード (復号) することができる。電波を発信しているのはロシアのチーム`RS0ISS`で、画像の中にはロシア語やロシアにまつわる人物が現れることもあるようだ。 - [ISS Slow Scan TV \(SSTV\) \| AMSAT\-UK](https://amsat-uk.org/beginners/iss-sstv/) このイベントが直近では2023年10月上旬に予定されていたもののISS側の事情で延期され、最初の再実施が「Fri Oct 27 at 12:15 GMT」からなされるという。ならば、せっかくのチャンスなのでSSTVを初受信してみなければならない。 - [ISS SSTV Verification Test – Oct 27\-Nov 1 \| AMSAT\-UK](https://amsat-uk.org/2023/10/25/iss-sstv-verification-test-oct-27-nov-1/) ##### 用意したもの - 資格など: [アマチュア無線技士](https://www.nichimu.or.jp/denpa/shikaku/ama/index.html)の無線従事者免許証と無線局免許状 - 受信機: [ICOM ID-52](https://www.icom.co.jp/lineup/products/ID-52/) - ロッドアンテナ: [ダイヤモンド SRH789](https://www.diamond-ant.co.jp/product/ama/handy/handy_3srh.html) - Androidスマホ: ISSの上空通過時間の確認とSSTVの復号化に使用 受信機 (アマチュア無線機) は片手に収まるハンディタイプで、SSTVのデコードにはパソコンではなくスマホアプリを使う、という軽量でイージーな構成である。 #### SSTV受信手順 1. ISSの周回軌道・上空通過時間とSSTV送信のスケジュールについて、忘れることなく事前に情報収集しておく - [<期間中のパス多数! 日本時間の10月27日(金)夜から中断を挟んで11月2日(木)早朝まで>145\.80MHz(FM)で国際宇宙ステーション(ISS)からのSSTV画像送信に再チャレンジ \- hamlife\.jp](https://www.hamlife.jp/2023/10/25/iss-sstv-202310-retry/) 2. スマホアプリの[ISSディテクター](https://play.google.com/store/apps/details?id=com.runar.issdetector)を使って、観察地においてISSが上空を通過する日時 (長さは数分間しかない) を正確に把握する 3. 当該時刻にできるだけ見晴らしの良いところへ出向き、狙う波長に合わせて棒状のロッドアンテナの長さを約50cmに調整し、指向性を考えてアンテナの横側をISSへ向ける 4. 当該周波数 (今回の場合は145.800MHz) をFMモードでモニタリングしながら同時に受信機の機能を使って録音しておき、ピロピロ音が聞こえてくることを祈る 5. 受信と同時に、もしくは録音したピロピロ音をスマホアプリの[Robot36 - SSTV Image Decoder](https://play.google.com/store/apps/details?id=xdsopl.robot36)に聞かせて、画像が表示されてくれば受信成功である ##### 受信2回目の場景 ##### 受信3回目の場景 #### 感想 JAXAの次のページによると、国際宇宙ステーションは地上約400kmの宇宙空間に浮かんでいる。 - [国際宇宙ステーション(ISS) \| JAXA 有人宇宙技術部門](https://humans-in-space.jaxa.jp/iss/) したがってSSTVの受信とは、物理的には、400km離れた場所から出力25Wで送信される144MHz帯の電波をハンディ機で受信するだけのことなのだが、なんてったって本物の国際宇宙ステーションから発せられている稀な電波だし、受信には周回軌道・仰角や天候などの好条件が整う必要があるし、ピロピロ音のデコードまで成功しないと成果物の画像は得られないので、実験のロマン度は非常に高い (当社比)。 また、いくらか感傷的になるとするならば、この実験を楽しいと感じることからの連想で、離れた人間らが通信することの理由について考えたり、今はまだ人間と人間とが通信するしかない、他の相手を見つけていない、宇宙の深遠さに気づいたりすることもできる。 ##### 受信した画像 - 2023-10-28 01:40頃 JST: - 2023-10-28 09:50頃 JST: - 2023-10-29 09:02頃 JST: - 2023-10-29 09:06頃 JST: #### 参考リンク - [Welcome to the ARISS SSTV gallery](https://www.spaceflightsoftware.com/ARISS_SSTV/): 各地で受信された画像が閲覧できる --- ### 【読んだ本】 決戦!株主総会 ドキュメントLIXIL死闘の8カ月 - 2023-10-26 URL: https://remoteroom.jp/medialog/2023-10-26_book-b0b3496jkl/ 札束で殴り合うという表現があるが、それに倣うと本書は、会社の経営層が、会社法と内規に沿って株主の権利を使って殴り合う様のドキュメンタリーと言える。激しい言葉を使ったけども、もちろん実際は双方の論理を巡っての争い。どのような論理を用いて「なんのために争うのか」をオーディエンスへ説明し、形成されていく集合知からどれだけの高い評価を得るかが勝敗を決める。 登場人物らはきっとスーツをまとっているものの、あれやこれやの策略を巡らせ、布陣を整える。その行いとしては戦国時代の武将と似てるのだろうなと想像しながら、私は勢い良く読み進めた。本書に描かれているコーポレートガバナンス機能の成功例は、日本国では珍しいらしく、その意味でこの内容は貴重で実戦的と言えるのかもしれない。 --- ### Apache Guacamole: ウェブブラウザからリモートデスクトップ接続するための踏み台 - 2023-10-22 URL: https://remoteroom.jp/diary/2023-10-22/ #### はじめに 個人的に愛用しているApache Guacamoleの導入メモを記します (今後の自分が再構築する時用のメモでもある)。Apache Guacamole (以下、Guacamoleと表記) とは、ウェブブラウザを介してリモートデスクトップ接続 (RDP), VNC接続, SSH接続などを行えるようにしてくれる便利なソフトウェアです。マシン操作や管理のための接続環境を一カ所にまとめておくことができますし、どの接続方法を用いるにしても操作する側に必要なのはウェブブラウザのみとなります。 Guacamole導入の方針としては、gihyo.jpの次の記事 (公開日: 2020-04-01) を基本的に参考にして最小構成を用意しつつ、Guacamoleの動作に用いるDockerはRootless modeでセットアップする、というアレンジを加えることにします。 - [第613回 Apache Guacamoleを使ってWebブラウザからWindows 10にリモート接続する \| gihyo\.jp](https://gihyo.jp/admin/serial/01/ubuntu-recipe/0613) なお、Guacamole上のユーザ管理を行ったり、リバースプロキシを別途用意してGuacamoleへHTTPS接続できるようにすると、より実用性が高まりますが今回は省略します。 #### Guacamole導入手順 [Apache Guacamole](https://guacamole.apache.org/)を導入するサーバとして、今回はUbuntu Server 22.04.3 LTS (Jammy Jellyfish) を想定します。また、以降の手順で導入されるDocker EngineとApache Guacamoleのバージョンは記事執筆時点で次の表のようになります。 |ソフトウェア|バージョン|備考| |---|--:|---| |Docker Engine|24.0.6|2023-10-22時点| |Apache Guacamole|1.5.3|2023-10-22時点| ##### Step-1. Dockerの導入 1. Ubuntu Serverを1台セットアップします 2. [Install Docker Engine on Ubuntu \| Docker Docs > Install using the convenience script](https://docs.docker.com/engine/install/ubuntu/#install-using-the-convenience-script) を参考に、Dockerをインストールします ``` $ curl -fsSL https://get.docker.com -o get-docker.sh $ sudo sh ./get-docker.sh --dry-run $ sudo sh ./get-docker.sh ``` 3. 上記get-docker.sh実行完了後に表示される https://docs.docker.com/go/rootless/ のリダイレクト先 [Run the Docker daemon as a non\-root user \(Rootless mode\) \| Docker Docs](https://docs.docker.com/engine/security/rootless/) を参考に、Rootless modeの設定を行います - [Prerequisitesの確認](https://docs.docker.com/engine/security/rootless/#prerequisites) ``` $ id -u 1000 $ whoami testuser $ grep ^$(whoami): /etc/subuid testuser:100000:65536 $ grep ^$(whoami): /etc/subgid testuser:100000:65536 ``` - [Distribution-specific hintの実施](https://docs.docker.com/engine/security/rootless/#distribution-specific-hint) > Ubuntu ``` $ sudo apt-get install -y dbus-user-session # →今回の環境にはすでに導入済みだった ``` - [Installの実行](https://docs.docker.com/engine/security/rootless/#install) ``` $ which dockerd-rootless-setuptool.sh /usr/bin/dockerd-rootless-setuptool.sh $ dockerd-rootless-setuptool.sh install # →uidmapが導入されていない旨が表示された $ sudo apt-get install -y uidmap $ dockerd-rootless-setuptool.sh install (省略) [INFO] Make sure the following environment variable(s) are set (or add them to ~/.bashrc): export PATH=/usr/bin:$PATH [INFO] Some applications may require the following environment variable too: export DOCKER_HOST=unix:///run/user/1000/docker.sock ``` 4. 上記の出力メッセージにしたがって`~/.bashrc`の末尾に「`export 〜`」を2行追加します ``` $ vim ~/.bashrc $ tail -n 3 ~/.bashrc # CUSTOM export PATH=/usr/bin:$PATH export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock ``` ##### Step-2. Dockerの追加設定 上記手順でDockerをRootless modeで導入してそのままのデフォルト状態ですと、当該ユーザのセッションが存在している間のみDockerが実行される状態です (例: 当該ユーザがSSHログインしている間)。 今回の用途のように当該ユーザのセッション状態に関係なく、Guacamoleを常時サービスするためには、[systemd/User \- ArchWiki > Automatic start-up of systemd user instances](https://wiki.archlinux.org/title/systemd/User#Automatic_start-up_of_systemd_user_instances) を参考に、次の1の追加設定が必要です。 1. systemdのユーザインスタンスの自動起動を設定します ``` $ loginctl enable-linger ``` 2. サーバを再起動します 3. サーバ起動後、しばらくしてから最初に次のコマンドを実行し、「Active:」行の時間を読み取ると、ユーザのSSHログイン関係なく、サーバ起動直後からdocker.serviceが起動していることが分かります ``` $ ssh -l testuser <サーバのIPアドレス> 'systemctl --user status docker.service' ``` ##### Step-3. Guacamoleをdocker composeで導入 [第613回 Apache Guacamoleを使ってWebブラウザからWindows 10にリモート接続する \| gihyo\.jp](https://gihyo.jp/admin/serial/01/ubuntu-recipe/0613) を参考にしていきます。 1. サーバへ再びログインします 2. Guacamoleの関連ファイルを保存するディレクトリを作成してcdします ``` $ mkdir -p ~/docker/guacamole/ $ cd ~/docker/guacamole/ ``` 3. 参考ページの [Apache Guacamoleのセットアップ](https://gihyo.jp/admin/serial/01/ubuntu-recipe/0613#sec2) に記載されている内容でdocker-compose.ymlを作成します (`MYSQL_ROOT_PASSWORD` (1箇所) と `MYSQL_PASSWORD` (2箇所) の値を任意のパスワード文字列へ変更すること) ``` $ vim docker-compose.yml ``` ```docker-compose.yml # Ref: https://gihyo.jp/admin/serial/01/ubuntu-recipe/0613#sec2 version: "3" services: guacd: container_name: my-guacd image: guacamole/guacd restart: always guacamole_db: container_name: my-guacamole-db image: mysql restart: always environment: MYSQL_ROOT_PASSWORD: guacamole_root_password # NEED TO CHANGE MYSQL_DATABASE: guacamole_db MYSQL_USER: guacamole_user MYSQL_PASSWORD: guacamole_user_password # NEED TO CHANGE volumes: - ./dbdata:/var/lib/mysql - ./dbinit:/docker-entrypoint-initdb.d guacamole: container_name: my-guacamole image: guacamole/guacamole restart: always environment: GUACD_HOSTNAME: my-guacd MYSQL_HOSTNAME: my-guacamole-db MYSQL_DATABASE: guacamole_db MYSQL_USER: guacamole_user MYSQL_PASSWORD: guacamole_user_password # NEED TO CHANGE GUACAMOLE_HOME: /guacamole-home volumes: - ./home:/guacamole-home depends_on: - guacamole_db - guacd ports: - "8080:8080" ``` 4. 必要なディレクトリを作成し、データベースの初期化スクリプトを準備します ``` $ mkdir -p dbdata dbinit home/extensions $ docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > ./dbinit/initdb.sql ``` 5. 次のコマンドを実行すると、docker-compose.ymlの内容にしたがってGuacamoleが起動してきます ``` $ docker compose up -d (省略) ✔ Network guacamole_default Created ✔ Container my-guacamole-db Started ✔ Container my-guacd Started ✔ Container my-guacamole Started ``` ##### Step-4. GuacamoleでRDPアクセス 1. お手元のウェブブラウザで を開いてログインします - Guacamole管理者のユーザ名は「guacadmin」で、初期パスワードは「guacadmin」です 2. たとえばリモートデスクトップ接続可能なWindows 10 ProマシンへRDP接続する設定を行う場合、ページ右上の \[guacadmin ▼\] > \[設定\] > \[接続\] > \[接続の追加\] で次の接続情報を入力し、最後にページ最下部にある \[保存\] ボタンを押します - 接続の編集 - 名前 = たとえば「Win10」 - プロトコル = 「RDP」 - パラメータ - ネットワーク > ホスト名 = 「WindowsマシンのIPアドレス」 - 認証 > ユーザ名 = 「Windowsのユーザ名」, パスワード: 「当該ユーザのパスワード」 - サーバ証明書を無視する = チェックする - (個人的な推奨) ディスプレイ > サイズ変更方法 = 「"ディスプレイアップデート" 仮想チャンネル (RDP 8.1+)」 - (個人的な推奨) パフォーマンス > クリアタイプフォントの有効化 = チェックする 3. 「Win10」へ接続するために、ページ右上の \[guacadmin ▼\] > \[ホーム\] > \[Win10\] をクリックします 4. ウェブブラウザを介してWindows 10のデスクトップを操作できます (全画面表示も可能) 5. Ctrl+Alt+Shift (Macだと Control+Option+Shift) を押すことでGuacamoleのメニューを表示でき、接続の切断等が行えます ##### Step-5. (おまけ) GuacamoleでSSHアクセス 1. RDP接続と同様に、SSH接続をひとつ作成します 2. 作成したSSH接続を実施すると、ウェブブラウザ画面をターミナルとして接続先へアクセスできます #### 感想 今回の導入手順のメモの分量からも分かるように、Dockerの導入手順はまあまあの量がありますが、Dockerを用いたApache Guacamoleの導入自体は少ない手順で行うことができました。複数のマシンが色々と存在する一般のご家庭や業務の場に、接続環境を一元化できるGuacamoleをひとつセットアップしておくと便利に使えるのではないでしょうか。踏み台として用途に合うならとてもおすすめです。ちなみにGuacamoleでは、操作ログの保存 (スクリーンレコーディング) や、認証方法として二要素認証を取り込むこともできるようです。 - [Viewing session recordings in\-browser — Apache Guacamole Manual v1\.5\.3](https://guacamole.apache.org/doc/gug/recording-playback.html) - [TOTP two\-factor authentication — Apache Guacamole Manual v1\.5\.3](https://guacamole.apache.org/doc/gug/totp-auth.html) そして最後に重要なことを書きます。今回の記事執筆時に初めて気づいたこととして、guacamoleは「[ワカモレ](https://ja.wikipedia.org/wiki/%E3%83%AF%E3%82%AB%E3%83%A2%E3%83%AC)」と読むのだそうです。私は何年間も職場などでGuacamoleの布教に勤しんできたのに発音を間違って読んでいたらしい……。orz --- ### BlueskyとTwitterにクロスポストする一つの方法 - 2023-10-16 URL: https://remoteroom.jp/diary/2023-10-16/ #### 青い空と旧青い鳥でつぶやく [X (旧Twitter)](https://twitter.com/) から完全に乗り換えるわけではないけれども、Twitterほぼ一本だけに頼った“つぶやきSNS”の利用法はそろそろやめて、[Bluesky](https://bsky.app/)というサービスも使ってみようかなと、週末ふと考えた。Blueskyの招待コードは先日Facebookフレンドからいただいたものがあって、自分のBlueskyアカウントは既に作成してある。 私は複数の“つぶやきSNS”を使い分ける器用さは持たない故、気軽さを最優先に、TwitterとBlueskyへ投稿する内容は同じで構わないというスタンスのもと、いわゆるクロスポストを行えるスマホアプリやツールがないかなと探してみたところ、ちょうど良さげな「bluesky-crossposter」というツールをGitHubで見つけた。本記事はこのツールの動作を試した内容のメモです。 #### bluesky-crossposterの使い方 - [Linus2punkt0/bluesky\-crossposter: An app for crossposting your posts from bluesky to twitter and mastodon](https://github.com/Linus2punkt0/bluesky-crossposter) 今回見つけた上記リンクのbluesky-crossposterは、Blueskyへの投稿内容を読み取って自動的にMastodonとTwitterへ投稿してくれるPythonスクリプト。通常のPythonスクリプトとしても、また、一式をdocker環境で動作させることも可能となっている。ここでは後者のdockerを使う方法で、ついでにTwitterに加えてMastodonへのクロスポストも行うように設定してみた。 ##### Step-1. 設置と設定ファイルの準備 1. 適当なサーバなどにdocker環境を用意する 2. bluesky-crossposterリポジトリをgit cloneする ``` $ git clone https://github.com/Linus2punkt0/bluesky-crossposter $ cd bluesky-crossposter ``` 3. `env.sample`を複製して自身用の`.env`ファイルを新規作成する ``` $ cp env.sample .env ``` 4. `.env`ファイルを編集し、以下の変数に、Bluesky, Mastodon, X (旧Twitter) に関する各種の値を記入する - Bluesky: BSKY_HANDLEに自身のハンドル名を記入し、 にてアプリパスワードを1つ新規発行してBSKY_PASSWORDに記入する ``` BSKY_HANDLE="XXXXXXXX.bsky.social" BSKY_PASSWORD="XXXX-XXXX-XXXX-XXXX" ``` - Mastodon: - Mastodonへの投稿を実行する・しないのフラグがMASTODON_CROSSPOSTINGだと思われるが動作未確認 (デフォルト: TRUE) - MASTODON_INSTANCEには利用中のインスタンスが例えば `https://mastodon.social/` であればそれを記入し、 にて「write:statuses (投稿の送信)」権限と「write:media (メディアのアップロード)」権限の2つを持つ新規アプリを作成し、得られたアクセストークンをMASTODON_TOKENに記入する ``` MASTODON_INSTANCE="https://mastodon.social/" MASTODON_TOKEN="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ``` - Twitter: - Twitterへの投稿を実行する・しないのフラグがTWITTER_CROSSPOSTINGだと思われるが動作未確認 (デフォルト: TRUE) - にて「App permissions = Read and write」, 「Type of App = Web App, Automated App or Bot」, 「App info = 適当なURL」, 「Website URL = 適当なURL」のアプリを新規作成し (※OAuth 2.0はbluesky-crossposterでは使わない気がしますが入力欄が“入力必須”属性なのでとりあえず埋める)、得られた「API Key and Secret」と「Access Token and Secret」を以下の4つの変数に記入する ``` TWITTER_APP_KEY="XXXXXXXXXXXXXXXXXXXXXXXXX" TWITTER_APP_SECRET="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" TWITTER_ACCESS_TOKEN="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" TWITTER_ACCESS_TOKEN_SECRET="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ``` 5. (オプション) `.env`ファイルのその他部分を編集する - 実行間隔RUN_INTERVALのデフォルト値 ([3,600秒](https://github.com/Linus2punkt0/bluesky-crossposter/blob/main/run.sh)) を変更したい場合は記入する (Blueskyの[APIのレート制限](https://atproto.com/blog/rate-limits-pds-v3)に抵触しないように注意) ``` RUN_INTERVAL=900 ``` ##### Step-2. クロスポストの実行 1. bluesky-crossposterリポジトリのディレクトリで次のコマンドを実行する (これによりコンテナ名`bluesky-crossposter-crossposter-1`が起動してくると想定) ``` $ docker compose up -d ``` 2. dockerのpsコマンドでコンテナが起動していることを確認する ``` $ docker ps ``` 3. dockerのlogsコマンドでログを閲覧してまずはPythonやAPIに関するエラーが出ていないことを確認し、何らかのエラーが発生していれば問題を切り分けして対処する ``` $ docker logs -f bluesky-crossposter-crossposter-1 ``` 4. Blueskyへ投稿した内容が、MastodonとTwitterへクロスポストされることを確認する (初回起動時は最近の (POST_TIME_LIMITの時間内に行われた) Bluesky投稿がすぐにクロスポストされ、その後はRUN_INTERVALの時間間隔で新規投稿のチェックが定期実行される) 5. ログファイルはコンテナ内の`/logs/`ディレクトリに保存されていく ``` $ docker exec -it bluesky-crossposter-crossposter-1 ls -al /logs/ ``` ##### Step-3. 常用するならば - サーバ起動後にbluesky-crossposterコンテナが自動起動する設定を行っておくほうが良いだろう。お好みの方法で仕込むべし - Blueskyの新規投稿チェックを、[現状だと24時間ずっと同じ時間間隔](https://github.com/Linus2punkt0/bluesky-crossposter/blob/main/run.sh)で行っている。自分の投稿頻度に合わせて、かつAPIの利用回数を無駄遣いしないためには、投稿チェックの間隔を昼夜で可変にするような仕組みがほしい。そこは今後工夫してみようと思う #### 感想 長年使ってきたX (旧Twitter) であるが、日々のなんでもないつぶやきを投稿する場所として、使い勝手や情報環境的にTwitterがベストという流れでは最近なくなっている気がする。その観点から、今後の伸びしろが大きそうな (=第一にプログラミング的に色々できそうな) 別のサービスにつぶやいたものをTwitterにも流す、という投稿フローを今回試すことができて、私はなんだか安心した。これは、次のつぶやき場所をどうするかの目処が少し立ったことから来る安心感かもしれない。 --- ### Proxmox VE: 7系から8系へupgradeしてみたメモ - 2023-10-14 URL: https://remoteroom.jp/diary/2023-10-14/ #### 公式ドキュメントに沿って作業 自宅での実験場としている仮想化プラットフォーム (仮想化基盤) の[Proxmox Virtual Environment (Proxmox VE)](https://www.proxmox.com/en/proxmox-virtual-environment/overview) を、7系から8系へアップグレードしてみました。作業は次の公式ドキュメントに沿って進めまして、本記事には作業時の要点をメモしておきます。 - [Upgrade from 7 to 8 \- Proxmox VE](https://pve.proxmox.com/wiki/Upgrade_from_7_to_8) 以下の見出しに付与している番号は、公式ドキュメントでのセクション番号と対応させています。 #### 4 In-place upgrade 既存PVEのアップグレードをaptコマンドを使って行います。 ##### 4.1 Prerequisites 前提条件が9つ書かれていますので事前にクリアしておきます。 - PVE 7系の環境で`apt upgrade`を完了して7系最新版へ更新しました ``` $ pveversion pve-manager/7.4-17/513c62be (running kernel: 5.15.126-1-pve) ``` - 今回の環境ではCephは未使用です - 今回の環境ではclusterを組んでおらず、PVEノード1台のstandalone構成です - VMイメージ全てを外部ストレージにバックアップしました - root領域の空き容量は十分あります ``` $ df -h / Filesystem Size Used Avail Use% Mounted on /dev/mapper/pve-root 94G 8.3G 81G 10% / ``` ##### 4.3 Actions step-by-step アップグレード作業は、clusterに属するそれぞれのPVEノードのCLIで行う必要があります。また、作業はPVEの直接コンソールまたはSSH経由で行います。PVEのGUIで提供される仮想コンソールを通じて作業してはいけません (アップグレード途中で中断してしまうため)。 ###### 4.3.1 Continuously use the pve7to8 checklist script `pve7to8`というコマンドを使って、アップグレード前のPVE環境の事前チェックを行います。 ``` $ sudo pve7to8 = CHECKING VERSION INFORMATION FOR PVE PACKAGES = Checking for package updates.. PASS: all packages up-to-date Checking proxmox-ve package version.. PASS: proxmox-ve package has version >= 7.4-1 Checking running kernel version.. PASS: running kernel '5.15.126-1-pve' is considered suitable for upgrade. = CHECKING CLUSTER HEALTH/SETTINGS = SKIP: standalone node. = CHECKING HYPER-CONVERGED CEPH STATUS = SKIP: no hyper-converged ceph setup detected! = CHECKING CONFIGURED STORAGES = SKIP: storage 'google-cloud-storage' disabled. PASS: storage 'local' enabled and active. PASS: storage 'local-lvm' enabled and active. PASS: storage 'qnap' enabled and active. INFO: Checking storage content type configuration.. PASS: no storage content problems found PASS: no storage re-uses a directory for multiple content types. = MISCELLANEOUS CHECKS = (省略) = SUMMARY = TOTAL: 33 PASSED: 24 SKIPPED: 7 WARNINGS: 0 FAILURES: 0 ``` `pve7to8 --full`でもサマリーは同じ状態になりました。総じて問題はなさそうです。 ``` $ sudo pve7to8 --full (省略) = SUMMARY = TOTAL: 33 PASSED: 24 SKIPPED: 7 WARNINGS: 0 FAILURES: 0 ``` ###### 4.3.3 Update the configured APT repositories PVEが7.4-15以上になっていることを最終確認します。 ``` $ sudo apt update (省略) All packages are up to date. $ sudo apt dist-upgrade (省略) 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. $ pveversion pve-manager/7.4-17/513c62be (running kernel: 5.15.126-1-pve) ``` ###### 4.3.3.1 Update Debian Base Repositories to Bookworm ``` sed -i 's/bullseye/bookworm/g' /etc/apt/sources.list ``` 公式ドキュメントにある上記コマンドは、ファイル`/etc/apt/sources.list`内の、Debianのバージョンを示すコードネーム文字列「bullseye (Debian 11)」を「bookworm (Debian 12)」に置換せよという意味だと読み取れます。今回の環境では、PVEのデフォルト状態にtailscaleとzabbixのリポジトリを別ファイルで追加している状態だったので、下記のように、それらに関する別ファイルも同様に書き換えておく必要がありました。 ``` #### 別ファイル書き換えの例 $ grep -R bullseye /etc/apt/ $ sudo sed -i 's/bullseye/bookworm/g' /etc/apt/sources.list.d/HOGE1.list $ sudo vim /etc/apt/sources.list.d/HOGE2.list ``` ###### 4.3.3.2 Add the Proxmox VE 8 Package Repository 4.3.3.1で行った置換をチャラにすることになりますが、今回の環境はPVEを無償版として使用するので、`/etc/apt/sources.list`を、No-Subscription向けのリポジトリを記述した[Proxmox VE No-Subscription Repository](https://pve.proxmox.com/wiki/Package_Repositories#sysadmin_no_subscription_repo)の内容へとまるごと入れ替えます。 ``` $ cat /etc/apt/sources.list deb http://ftp.debian.org/debian bookworm main contrib deb http://ftp.debian.org/debian bookworm-updates main contrib ### Proxmox VE pve-no-subscription repository provided by proxmox.com, ### NOT recommended for production use deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription ### security updates deb http://security.debian.org/debian-security bookworm-security main contrib ``` ###### 4.3.3.3 Update the Ceph Package Repository 今回の環境ではCephは使用していませんが今後使用するかもしれないので、CephのNo-Subscription向けリポジトリを追加しておきます。 ``` $ sudo -s $ echo "deb http://download.proxmox.com/debian/ceph-quincy bookworm no-subscription" > /etc/apt/sources.list.d/ceph.list ``` ###### 4.3.3.4 Refresh Package Index 編集したリポジトリ情報を用いて`apt update`が問題なく行えるかを確認します (余談: 今回の環境におけるzabbixのリポジトリとしてUbuntu用を使っているのは何らかの運用上の都合ですかね?>過去の自分)。 ``` $ sudo apt update Hit:1 http://security.debian.org/debian-security bookworm-security InRelease Hit:2 http://download.proxmox.com/debian/pve bookworm InRelease Hit:3 http://download.proxmox.com/debian/ceph-quincy bookworm InRelease Get:4 https://repo.zabbix.com/zabbix/5.4/ubuntu focal InRelease [4,958 B] Hit:5 http://ftp.debian.org/debian bookworm InRelease Get:6 https://pkgs.tailscale.com/stable/debian bookworm InRelease Hit:7 http://ftp.debian.org/debian bookworm-updates InRelease Fetched 11.5 kB in 6s (1,869 B/s) Reading package lists... Done Building dependency tree... Done Reading state information... Done 625 packages can be upgraded. Run 'apt list --upgradable' to see them. ``` ###### 4.3.4 Upgrade the system to Debian Bookworm and Proxmox VE 8.0 PVEを実際にアップグレードするために`apt dist-upgrade`を実行します。 ``` $ sudo apt dist-upgrade (省略) 625 upgraded, 145 newly installed, 4 to remove and 0 not upgraded. Need to get 640 MB of archives. After this operation, 1,071 MB of additional disk space will be used. Do you want to continue? [Y/n] y ``` 実行中、公式ドキュメントに言及されている問い合わせが表示されます。今回の環境では次のような選択を行いました。 - `/etc/issue`: defaultのNを選択 - `/etc/lvm/lvm.conf`: LVMに関して特別な変更をしていないので上書きのYを選択 - `/etc/ssh/sshd_config`: 問い合わせが現れませんでした - `/etc/default/grub`: 新旧の差分を表示して確認したあと、上書きで問題ないと判断してYを選択 - `/etc/apt/sources.list.d/pve-enterprise.list`: 上書きのYを選択 (No-Subscription向けリポジトリへの変更は後ほどPVEのGUIでも行えるため) ###### 4.3.5 Check Result & Reboot Into Updated Kernel `apt dist-upgrade`の完了後に再確認の意味で`pve7to8`を実行しますと、表示されたのは「rebootをまだ行っていませんね」的なWARNINGSばかりだったので、PVEのアップグレードのやり残しはないと判断できました。 そしてPVEノードの再起動を行った後に`pveversion`でPVEのバージョン確認を行ったところ、以下のように8系へ更新できていることが確認できました。各VMの起動も正常でした。 ``` $ pveversion pve-manager/8.0.4/d258a813cfa6b390 (running kernel: 6.2.16-15-pve) ``` ##### 4.4 After the Proxmox VE upgrade ###### 4.4.1 For Clusters 今回のstandalone環境ではもちろん1台分で作業完了です。cluster構成を組んでいるのであれば、残りのPVEノードを1台ずつアップグレードせよとのこと。 #### 追記 \[2023-10-26\]: upgrade後に異常があったのでKernelだけ古いままにした 上記とは別の実験環境 (マザーボード上の有線NICのドライバとしてe1000eを使用するハードウェア) のProxmox VEを、7系から8系へupgradeしたところ、有線接続のネットワークが使えなくなる現象に遭遇してしまいました。原因究明よりも復旧を急ぐべき状態だったため、山勘でKernelだけをupgrade前のものに戻して起動したところ、正常にネットワークが使える状態に戻ることが分かりました。 |PVEバージョン|Kernelバージョン|状況| |---|---|---| |7系 (忘却)|5.15.126-1-pve|異常なし| |8系 (8.0.4)|6.2.16-18-pve|有線接続のネットワークが不通になる| |8系 (8.0.4)|5.15.126-1-pve|異常なし| とりあえず、PVEは8系だけどもKernelはひとつ前、という組み合わせで仮想化プラットフォームの利用を継続するためには、(起動時にGRUBで都度手動選択をするわけにはいかないので) デフォルトKernelをひとつ前のものへ切り替えておく必要があります。この切り替えが可能なコマンドとして、PVEには`proxmox-boot-tool`が用意されていると知り、次のように実行したところ、デフォルトKernelを切り替えることができました。 ``` ### proxmox-boot-tool kernel pin 5.15.126-1-pve Setting '5.15.126-1-pve' as grub default entry and running update-grub. Generating grub configuration file ... Found linux image: /boot/vmlinuz-6.2.16-18-pve Found initrd image: /boot/initrd.img-6.2.16-18-pve Found linux image: /boot/vmlinuz-5.15.126-1-pve Found initrd image: /boot/initrd.img-5.15.126-1-pve Found linux image: /boot/vmlinuz-5.15.30-2-pve Found initrd image: /boot/initrd.img-5.15.30-2-pve Found memtest86+ 64bit EFI image: /boot/memtest86+x64.efi Adding boot menu entry for UEFI Firmware Settings ... done ``` なぜupgrade後にネットワークが不通になったのか。~~今思えば、8系でNICの名前が変更されて再設定が必要になったからという可能性もあるかもしれません。~~ ←これは憶測に過ぎない。実際はkernelの変更に伴う何らかの問題と思われる。\[2024-05-28\] ##### 参考リンク - [Upgrade from 7 to 8 \- Proxmox VE > Network Interface Name Change](https://pve.proxmox.com/wiki/Upgrade_from_7_to_8#Network_Interface_Name_Change) - [Proxmox VEのkernel バージョン固定方法 \#kernel \- Qiita](https://qiita.com/disksystem/items/ec8d81548f3b106f74e7) - [Host Bootloader \- Proxmox VE > Override the Kernel-Version for next Boot](https://pve.proxmox.com/wiki/Host_Bootloader#sysboot_kernel_pin) - [ProxmoxVEでRealtekのNICが繋がらなくなる問題 \#proxmox \- Qiita > おまけ(Intel NICのdkms)](https://qiita.com/disksystem/items/5fb4c7af756214d10d6f#%E3%81%8A%E3%81%BE%E3%81%91intel-nic%E3%81%AEdkms) --- ### 【観た映画】 イコライザー THE FINAL (字幕版) - 2023-10-08 URL: https://remoteroom.jp/medialog/2023-10-08_movie-b0bzmlqrqf/ - 視聴: [109シネマズHAT神戸](https://109cinemas.net/hatkobe/) - 公式サイト: [イコライザー THE FINAL \| ソニー・ピクチャーズ公式](https://www.sonypictures.jp/he/11181648) 原題『THE EQUALIZER 3』。予想通り、本作に続く「[1]()」と「[2]()」の事前チェックはやはり必須となっているようだった。本作を経なければ主人公は引退できそうになく、そのために存在する締めの一品。世の中のすべての悪事は一掃できないけれども、タイミングがかち合って私に干渉が起こった分に関しては見過ごせず決して許さない、という価値観で突っ走るストーリー。これは、現実世界においても現実的な生き方のひとつであろう。ちなみに劇中に「American」という言葉が目立ったのは、気のせいなのか、鼓舞の意図なのかどうなのか。なお、一度観ただけでは伏線回収がちょっと確実にはできなかったところが私にはあったので、そこは数ヶ月後に行われるであろうネット配信でもう一回楽しむとしよう。 #### 何気ない一枚 --- ### 【観た映画】 イコライザー2 (吹替版) - 2023-10-03 URL: https://remoteroom.jp/medialog/2023-10-03_movie-b07kk278xx/ - 視聴: [YouTube](https://www.youtube.com/watch?v=LtykJImjMM4) 原題『THE EQUALIZER 2』。このシリーズを昨夜から連続鑑賞している。「2」である本作では、“過去に影がある無敵のおじさん”はタクシードライバーとして暮らしていて、その目線の先には街の影が存在しているという絵作りが印象的。友人の死に疑問を抱いたゆえに戦うことになってしまった相手の、欺きをどうやって見抜いたかなどの説明要素を、ストーリーの中で極力少なくしていて、見ている側に推測させるバランスに「1」と同じく心地良さを覚える。 #### 鑑賞リンク --- ### 【観た映画】 イコライザー (吹替版) - 2023-10-02 URL: https://remoteroom.jp/medialog/2023-10-02_movie-b00trupk9a/ - 視聴: [YouTube](https://www.youtube.com/watch?v=4bk4ji6-K9w) 原題『THE EQUALIZER』。過去に影がある無敵のおじさんが登場する。それは決して希有ではない設定であるが、どのような盛り上げ方でストーリーが進むのか、主人公の美学はどのように貫かれるのかがいわば映画の見所で、楽しむべきところだと思う。本作は、そうね、悪くないね。そして音楽が良かったように思う。後半戦、“ここまで観たらもうわかってるだろ?”って感じで、途中のシーンをばっさり切ったかのように破壊が行われるところ、作り的に豪快すぎて好き。 #### 鑑賞リンク --- ### 【読んだ本】 司法記者 - 2023-09-29 URL: https://remoteroom.jp/medialog/2023-09-29_book-b00jvlwrgo/ テンポよく読み進めることができるのであるが、進むにつれて「ひでえ内状だ……、このままだと冤罪を成立させかねない……」という切迫感も膨らんでいく。しかし後半から、Kindleでいうと進捗53%くらいのところから、フッと風向きが変わって雲間が見えてきた。 著者は実際に特捜検事の経験者でもあり、検察の捜査に関して詳しい解説が所々に挟み込まれている。また、強い権力を持った組織が、自らの願望に押されて舵を切れなくなって突進する構図も明らかにする。私は、事件の謎は事実のパズルを組み合わせることで解いてほしいし、それはパズルの凹と凸の組み合わせ方を調査と閃きによって変更して全体を整合させるべきで、パズルの形を潰して穴を埋めるように事実を捻じ曲げてはいけない、こう考えざるを得なかった。 --- ### まあるい月をお部屋で灯す 〜LunaPrimalという照明器具を買ってみた〜 - 2023-09-28 URL: https://remoteroom.jp/diary/2023-09-28/ #### 知ったきっかけ 先日訪れたスパイスカレー屋さんは店内の雰囲気が洒落ていた。料理の到着を待つ間には、天井からぶら下がっている照明器具の一つがリアルな月の形をしていることにこどもが気づいた。その乳白色の球面にはなんだか月面のように凸凹の濃淡がみえて、眺めて空想にふけるのに良さそう。照明としてはその時消えている状態で点灯したらどのような見栄えなのかは不明だったが、その場でのウェブ検索と家族会議の結果、自宅の寝室にあると素敵だねという結論に達してポチった。余談だがここ「[URa あいがけスパイスカレー](https://instagram.com/ura_spicecurry/)」のランチはかなりの絶品であった。 ##### 購入したもの [匠の誠品](https://takumi-seihin.com/)ブランドの[照明器具「LunaPrimal (ルナプライマル) 月ペンダントタイプ」](https://takumi-seihin.com/item/luna_pendantlight/)には、月の形をしているシェード部分のサイズ (直径) 別に、5種類 (20/25/30/35/45cm) が用意されている。我が家では小さすぎず大きすぎずのサイズ感である「直径35cm」のものを選んだ。また、寝室にすでに取り付けてあるライティングレールへ、[引掛シーリング](https://ja.wikipedia.org/wiki/%E5%BC%95%E6%8E%9B%E3%82%B7%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0)キャップ (プラグ) を持つLunaPrimalを接続するためには端子形状の変換が必要となるため、ライティングレール用引掛シーリングボディも別途購入した。 ちなみに他の商品として、木星の形をしたペンダントタイプや、タッチタイプ (ベッドサイド用)、リニアタイプ (磁力で浮く卓上ランプ) などもある。 - [商品一覧 \| 匠の誠品](https://takumi-seihin.com/item/) |商品名|購入時の価格(税込)|購入店|備考| |---|--:|---|---| |[匠の誠品 ルナプライマル 月ペンダントタイプ](https://takumi-seihin.com/item/luna_pendantlight/) 直径35cm|9,284円|[JANRI shop](https://mercari-shops.com/shops/5Ct4u5aTfFCfrMcgJXk4hj)|新品| |[東芝ライテック ライティングレール用引掛シーリングボディ(白) NDR7010](https://saturn.tlt.co.jp/pdocs/s/NDR7010)|545円+送料200円|[商材館 楽天市場店](https://item.rakuten.co.jp/denchiya-bekkan/ndr7010/)|新品| #### 開封の儀と点灯の様子 (写真) #### 感想 予想通りまずこどもに好評である。寝床につくとき、自分でリモコンに触って好みの状態に調光などして月の灯りを楽しんでいるようである。人類がまた月へ降り立つ未来などを空想してくれると本望だ (爆)。なお私は、寝室に大きな球体としての月が浮かんでいると、不思議な気持ちになることに気づいた。普段の夜空に浮かぶ実際の月を、遠すぎるので私はほぼ「2次元の円盤」として認識して「3次元の球体」としては認識していないから、月に見えるこの間近なオブジェクトの、別角度からも眺められる立体感覚が不思議さを生んでいるのかなと考えている。 スマートホームの関連でいうと、LunaPrimalは標準状態では他と連携した制御には対応していないと思われる (LED電球セットL-18WRのHacking方法があるかもしれないが調べていない)。そこでたとえば、既存のGoogle Homeの配下にLunaPrimalも追加して、いまあるIKEAスマート照明群と同様に、声やスマホアプリなどでLunaPrimalも制御したい場合はどうすればよいか。物理的に、シェードの中のE26口金のLED電球を、IKEAのスマート照明シリーズのものへ交換してしまえばこれは可能であろう。このスマートホーム対応型電球への交換は今後実施するかもしれない。 #### 追記 \[2023-10-01\]: カラー変更可能なスマートLED電球へ交換 上記の感想部分で予告していたように、LunaPrimalのLED電球を標準装備のものからIKEAのスマート照明シリーズの[TRÅDFRI](https://www.ikea.com/jp/ja/p/tradfri-led-bulb-e26-810-lumen-smart-wireless-dimmable-colour-and-white-spectrum-globe-90439162/)へ置き換えたので、LunaPrimalも我が家のスマートホームの一員となった。 |商品名|購入時の価格(税込)|購入店|備考| |---|--:|---|---| |[IKEA TRÅDFRI トロードフリ LED電球 E26 810ルーメン](https://www.ikea.com/jp/ja/p/tradfri-led-bulb-e26-810-lumen-smart-wireless-dimmable-colour-and-white-spectrum-globe-90439162/)|2,499円|[IKEA神戸](https://www.ikea.com/jp/ja/stores/kobe/)|新品| 電球の名前は「ムーンライト」としており、「Ok, Google. ムーンライトを30%にして」という声で明るさの変更が行えるようになって便利だ。また、アプリからタイマー制御を設定できるので、就眠時間に月の明かりを最低限にしたり、起床時間には徐々に明るくすることもできて実用度が増す。 なお、今回はお遊びでカラーの変更も可能なLED電球を選んだ。このLED電球は発光を電球色〜昼光色の範囲で変更するだけでなく、発光を多彩な色へ変えることができる。「Ok, Google. ムーンライトを●●色にして」と言うとちゃんと紫色や赤色の月になったのには驚いた。アプリから色を次々変えて遊んでいると、こどもには「ディスコみたい」と言われた。 --- ### 【観た映画】 グランツーリスモ - 2023-09-20 URL: https://remoteroom.jp/medialog/2023-09-20_movie-b0chnd2g43/ - 視聴: [OSシネマズ神戸ハーバーランド](https://www.oscinemas.net/cgi-bin/pc/site/det.cgi?tsc=21120) - 公式サイト: [グランツーリスモ \| ソニー・ピクチャーズ公式](https://www.sonypictures.jp/he/1183995) 原題『GRAN TURISMO』。この映画の感想の前置きとしては、プレステのゲームについてだとか「based on a true story」だとかが来るべきかもしれないがそこはさておき。もし気になる映画なのであれば、現時点で劇場公開中なのでスクリーン輝くシアター空間で、闇に没入してぜひご鑑賞ください。 ドラマとしては脚本の練り具合と編集の切れ味を感じさせる純度高い作りをしていて、制作者らが描きたいものが100%映し出されている、とシンプルに捉えることができた。そして実際は人それぞれなその捉え方によって、本作の中の登場人物の誰に自分を投影するのか、一番刺さってくる言葉やシーンはどこなのか、などが違いそうだなと思ったものの、本流のところでは誰にとっても欠かせない普遍的な栄養を供給している映画だとも思った。 #### 何気ない一枚 --- ### 【読んだ本】 脳の外で考える――最新科学でわかった思考力を研ぎ澄ます技法 - 2023-09-14 URL: https://remoteroom.jp/medialog/2023-09-14_book-b0b4jhvklg/ 本書は分量があって読み通すのに時間がかかり、さらに途中で別の参考書を読んだりしていたので既読部分の記憶が薄くなり、結局三・四ヶ月かけて2回読むことになった。猛暑を避けようとして車での通勤回数をついつい増やすと、これまで私は主に通勤電車の中で読書していた分、読書の機会が減ってしまうことを証明してしまった。 こうして2回読み込んで、エッセンスをできるだけ吸い取ろうとした本書は新鮮でおもしろかった。脳はコンピュータではなくて、脳は身体の中にある臓器のひとつだと捉えるべきもので、ヒトが進化してきた過程を踏まえて、脳が好む状況や存分に力を発揮する状況を作ることが大切なのだと理解できた。「脳の外で考える」は、脳にかかる負担を脳の外に負担させることが必要だという著者の主張の言い換えとなっている。 本書にて多数紹介されている、心理学、認知科学、神経科学といった分野で得られている新たな知見によれば、既成概念的には“あたりまえ”と思われる節があるかもしれない次のような行為は、 - 動かず寡黙に思考すること - プライバシーがない空間、自身の目指すアイデンティティが表せていない空間で思考すること (例: フリーアドレスなオフィスの飾ることが出来ない机) - 自分や仲間に向けたアイデアの外化を行わずに思考すること 脳の負担を上げてしまいそのパフォーマンスを抑制している可能性があるとか。思考をするべき時間における自分のモチベーションの作り方や環境整備、ひいてはオフィス空間や勉学のあり方を見直したくなってくる。自身の身体の感覚を使い、そしてまさに「脳の外で考える」ようにしていきたい。 P.S. 職場の近くの建物の2階に、おしゃれなカレーランチが食べられるカフェがあって、そこの窓向きの席に座ると外の樹木が大きく目に入り、青々とした枝葉が風を可視化するようにそろって揺れているのを眺めることができる。ここで独りランチしてからコーヒー片手にぼーっとしていると、アイデアをひらめいたり考えをなんとなくうまくまとめられることが顕著な気がするのだが、それはいつも偶然なのではなく、この環境では良い状態での集中が出来ているからかもしれない。 --- ### Surface Go 3: Windows 11とUbuntu 22.04 LTSのデュアルブート環境を構築する - 2023-09-05 URL: https://remoteroom.jp/diary/2023-09-03/ #### Ubuntuデスクトップをモバイルしたい 「持ち歩けるタブレットでUbuntuデスクトップ (x86_64) を使うとどんな感じなんだろう?」とモヤモヤ興味が出ていたところに、別件で、Kindleの電子書籍が読める10インチほどのタブレットがあれば幸せになれるかもと私は気づいてしまった。 これはもう早急な解決を要する喫緊の課題 (自爆)。そして次のような考えや実験を経て、一度は使ってみたいMicrosoftのハードウェア、そしてSIMを挿して4G/LTEの電波が使える「Microsoft Surface Go 3 LTE Advanced」の8GBモデルが現状ベストだから、こいつを買っちゃおうと決めた。 - 電子書籍を読むタブレットといえばiPadが安牌な選択であるが、家族がすでにiPad AirとiPad mini (共にLTEモデル) をどこでも便利そうに使っていて、私もiPadだと面白みがちょっと足りない - Surface Goシリーズは次のGo 4の発表が近い (2023年9月21日?) と噂されているものの、Ubuntu利用がメインならば最新ハードじゃないほうがOS対応の面で安定かなあと予想 - 某氏から借りることができた「Surface Go 2 LTE Advanced」を用いて実験したところ、Ubuntu Desktop 22.04に[Linux-Surface](https://github.com/linux-surface/linux-surface)を導入すると物理SIMでの4G/LTE通信はどうやら行えそうだと確認済み ##### 購入したもの ポイントが多めに付与される「ソフマップの中古の日」にSurface Go 3本体をまず購入し、その他必要なものはポイントも利用しつつ次のように揃えた。ちなみに今回の組み合わせでは、Surfaceの外観上の特徴となるタイプカバーにこだわった。店頭展示品に触れて試したときから[アルカンターラ](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%AB%E3%82%AB%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%A9_(%E7%B4%A0%E6%9D%90))の持つ質感に一目惚れだったし、バーガンディ (Burgundy) という濃い赤ワイン色を素敵に感じたのでここには妥協しなかった。 |商品名|購入時の価格(税込)|購入店|備考| |---|--:|---|---| |[Microsoft Surface Go 3 LTE Advanced](https://www.microsoft.com/ja-jp/biz/surface/newstyle-surface-2in1.aspx#primaryR3) 法人向け (Win10Pro/8GB/128GB) 8VI-00043|61,980円|ソフマップ店舗|中古, Office無し, 3,099ポイント還元| |[Microsoft Surface Go Signature タイプカバー](https://www.microsoft.com/ja-jp/d/surface-go-type-cover-qwerty/8vszf6wtwf29) 英字配列 (Burgundy) KCS-00041|15,300円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B07FDL1GXR?tag=remoteroom-22&linkCode=ogi&th=1&psc=1)|新品| |[Microsoft Surface Pen](https://www.microsoft.com/ja-jp/d/surface-%E3%83%98%E3%83%B3/8zl5c82qmg6b) (Black) EYU-00007|実質3,881円|ソフマップ店舗|中古, 元の価格6,980円に3,099ポイントを適用| |[ミヤビックス OverLay Plus 9H](https://www.miyavix.co.jp/film-info/09hl) 低反射 液晶・背面保護フィルムセット O9HLSURFACEGOTWO/S/2|3,132円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B088K3ZSXK?tag=remoteroom-22&linkCode=ogi&th=1&psc=1)|| |[ミヤビックス OverLay Protector](https://www.miyavix.co.jp/film-info/op) トラックパッド用保護フィルム OPSURFACEGO/2|998円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B07FKF8FL2?tag=remoteroom-22&linkCode=ogi&th=1&psc=1)|| |[YOUZIPPER Surface充電ケーブル/10cm SF-01](http://www.youzipper.com/computer.html)|1,580円|[ヨドバシ.com](https://www.yodobashi.com/product/100000001006540320/)|| #### WindowsとUbuntuのデュアルブートを実現する Surface Go 3にデュアルブート環境を作り、GRUBで起動OSをWindows 11またはUbuntu Desktop 22.04 LTSから選択できるようにする。これに必要な知見は[Linux-Surface](https://github.com/linux-surface/linux-surface) Wikiの次の2ページにまとまっているので、参考にしながら作業を進める。 - [Surface Go 2 · linux\-surface/linux\-surface Wiki](https://github.com/linux-surface/linux-surface/wiki/Surface-Go-2): ほとんどの内容はGo 2/3に共通らしくこちらに書かれている - [Surface Go 3 · linux\-surface/linux\-surface Wiki](https://github.com/linux-surface/linux-surface/wiki/Surface-Go-3): Go 3固有の内容が少し書かれている なお、容量が潤沢とは言えない128GBストレージにWindows領域を残す第一の理由としては、Surfaceのファームウェア更新や4G/LTE (WWAN) の利用実験をすんなり行うためには、基本的にWindows環境が必要だろうと予想するからである。 ##### デュアルブート環境の構築手順 1. Microsoftサイトの次のリンク先から「Surface Recovery Image」のWindows 11版をダウンロードしてUSBメモリに焼き、USBメモリを接続したSurface Go 3を「音量Downを長押ししたまま電源ON」でUSBメモリから起動して、Windows 11 Pro環境をリカバリーする (初期導入済のWindows 10を11へアップグレードする工数がこの上書き作業によって省ける) - [Surface Recovery Image Download \- Microsoft サポート](https://support.microsoft.com/ja-jp/surface-recovery-image) 2. インストール完了したWindows 11を通常起動し、デバイスの暗号化を「OFF」にする - 参考 (実際は無効化を行う): [デバイスの暗号化を有効にする \- Microsoft サポート](https://support.microsoft.com/ja-jp/windows/%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%AE%E6%9A%97%E5%8F%B7%E5%8C%96%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B-0c453637-bc88-5f74-5105-741561aae838#ID0EBD=Windows_10) 3. Windowsの高速スタートアップを「OFF」にする 4. Windowsで使用するSIMとして「SIM1」 (物理SIM; SIMカード) を選択する (一方の「eSIM」は文字通りeSIMを意味する) 5. Surface Go 3を「音量Upを長押ししたまま電源ON」で起動してUEFI (BIOS) に入り、Security > Secure Bootで (Secure Boot certificate keysetとして) 「None」を選択する 6. 同じくUEFIで、Boot configuration > Configure boot device orderを「1. USB Storage, 2. Internal Storage, 3. Windows Boot Manager, 4. PXE Network」の順番に変更する 7. Ubuntu Desktop 22.04 LTSを既存のWindowsとデュアルブートするOSとしてインストールする - 参考: [Windows 10とUbuntu 18\.04 デュアルブートする方法 \| パソコン工房 NEXMAG](https://www.pc-koubou.jp/magazine/35542) - Ubuntuインストーラが起動する際、画面の拡大率 (Scale) がデフォルトで200%となっていて、インストーラーのウィンドウの下方がSurface Go 3の画面からはみ出てしまい必要なボタンも見えない状態になる。この問題を避けるためには、いったん「Try Ubuntu」を選択してデスクトップ環境へ抜けて画面の拡大率を100%へ変更してから、デスクトップにアイコンがある「Install Ubuntu」を改めて起動するのが良い - 実験環境では導入済のWindowsがストレージを約36GB使用していた。Windows 11のシステム要件 (参考: [Windows 11 の仕様とシステム要件 \| Microsoft](https://www.microsoft.com/ja-jp/windows/windows-11-specifications?r=1)) では64GB以上なのでWindows領域を64GBと決め、残り64GB弱をUbuntu領域とした 8. WindowsとUbuntuの両方の環境で時計が一致するように、Ubuntu側でのハードウェアクロックの扱いを変更する - 参考: [Installation and Setup · linux\-surface/linux\-surface Wiki > Setting your clock to localtime to fix dual-boot time skew](https://github.com/linux-surface/linux-surface/wiki/Installation-and-Setup#setting-your-clock-to-localtime-to-fix-dual-boot-time-skew) ##### 標準UbuntuでSurface Go 3のハードウェアはどの程度使えるか Surface Go 3へUbuntu Desktop 22.04 LTS (ubuntu-22.04.3-desktop-amd64.iso) をインストールした後、気になるのは、Ubuntuのデフォルト状態でSurfaceのハードウェアがどの程度正常に使えるのか。本記事執筆時点での最新Kernel `6.2.0-31-generic` にしている状態で確認したところ、次のように先行きの明るいナイスな対応状況であった。 |機能|状態|備考| |---|---|---| |タイプカバーのキーボード|利用可能|| |タイプカバーのタッチパッド|利用可能|| |Wi-Fi|利用可能|| |Bluetooth|利用可能|| |タッチスクリーン|利用可能|| |Surfaceペンのペン先側|利用可能|筆圧感知していることをOpenBoardで確認| |Surfaceペンの消しゴム側|利用可能|消しゴムになることをOpenBoardで確認| |4G/LTE|未検証|| |カメラ|利用不可|カメラには特別なKernelが必要な旨が[Surface Go 2 · linux\-surface/linux\-surface Wiki](https://github.com/linux-surface/linux-surface/wiki/Surface-Go-2)の冒頭に記述されている| 4G/LTE機能とカメラ機能に関しては、[Linux-Surface](https://github.com/linux-surface/linux-surface)を追加導入してから後日確認するつもりだ (おそらくは問題ないはず)。Surfaceペンの筆圧検知と消しゴム機能の動作確認には「OpenBoard」というOSSを初めて使った。これは今後もSurface上でちょっとしたメモ書きする時に重宝するかもしれない。 - [OpenBoard, the best interactive whiteboard for schools and universities](https://openboard.ch/index.en.html) ###### Surfaceペンのトップボタンはどうか Surfaceペンの端にあるトップボタン (消しゴム側ボタン) については、Surface Go 3とのBluetooth接続時にボタンを押して発生するキーコードを`xev`コマンドで確認したところ、次のようになった。 |操作|キーコード|Windows上での動作| |---|---|---| |トップボタン短押し1回|keycode 198 (keysym 0x1008ffb2, XF86AudioMicMute)|「Microsoft Whiteboard を開く」| |トップボタン短押し2回|keycode 197 (keysym 0x0, NoSymbol)|「切り取り & スケッチを開く」| |トップボタン長押し|keycode 196 (keysym 0x1008ff49, XF86Launch9)|「付箋を開く」| ちなみにWindows上で上記の操作を行った時には、[「Microsoft Whiteboard を開く」「切り取り & スケッチを開く」「付箋を開く」という動作となる](https://support.microsoft.com/ja-jp/surface/surface-%E3%83%9A%E3%83%B3%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9-8a403519-cd1f-15b2-c9df-faa5aa924e98)らしいので、もし技術的に可能ならば、似たようなことをUbuntu上で行えるようにするのも面白いかもしれない。 ###### 追記 \[2023-09-05\]: Remapper Linux-Surface Wikiにて、Surfaceペンのトップボタン (消しゴム側ボタン) のremapperらしきものを発見した。 - [Utilities and Packages · linux\-surface/linux\-surface Wiki > Remapper for the Bluetooth (Eraser) Button of the Surface Pen](https://github.com/linux-surface/linux-surface/wiki/Utilities-and-Packages#remapper-for-the-bluetooth-eraser-button-of-the-surface-pen) #### 環境が出来上がったらディスク全体をバックアップ 実際にやってみたら痛感するわけだが、Surface Go 3をWindows 11 Proのリカバリーイメージで復元し、Surfaceのファームウェア更新を含む可能性があるWindows Updateをすべて適用し、その後にWindowsとUbuntuのデュアルブート環境を実現するまでにはかなりの時間がかかる。そこでぜひとも、環境が出来上がったらSurfaceのディスク全体 (Windows領域とUbuntu領域) を外部媒体へ一度フルバックアップしておきたい。万が一、環境が壊れてしまったとしても、バックアップがあればゼロから環境構築するよりは簡単に復元できるはずだから。 ディスク全体のバックアップ・復元のツールといえば「Clonezilla Live」が定番。Clonezilla LiveをUSBメモリから起動して、画面のメニューや指示に従っていけば特にひっかかるところはなく、操作説明は省略。 - [Clonezilla \- About](https://clonezilla.org/) - [Clonezilla Live on USB](https://clonezilla.org/liveusb.php) > uEFI boot mode (GPT): #### 参考リンク 今回のSurface Go 3でも叶えたい「Kindleの電子書籍をUbuntu環境で読む」件については、Wine環境の構築メモを次の記事にまとめています。 - [「Kindle for PC」をWineを使ってUbuntu環境へインストールするときに役立つメモ \[2023-08-31\]]() --- ### 「Kindle for PC」をWineを使ってUbuntu環境へインストールするときに役立つメモ - 2023-08-31 URL: https://remoteroom.jp/diary/2023-08-31/ #### バージョン探しの苦労 Ubuntuデスクトップの上でKindle書籍を読むために、Amazon謹製のWindows OS用「[Kindle for PC](https://www.amazon.co.jp/kindleapps)」を、Wineを使ってUbuntu上で動作させる手法が知られています。しかしこの環境構築の成否は、WineのバージョンとKindle for PCのバージョンの組み合わせによって様々でかなりシビア。いつも壁にぶつかる自分の未来のためにインストール実験のメモを残します。 以下では、Wine (WineHQ) に存在する「Stable」「Development」「Staging」という3つのブランチのうち、特に記載がなければ「Stable branch (安定版)」を用いて実験をしています。また、Kindle for PCの動作確認を細かくは行えないため、Amazonのアカウント情報を入力する「Kindleに登録」画面が正常に表示されるかどうかを、とりあえず実験の成否の判断基準としています。 #### インストール実験結果 実験を行うたびにここへ追記していく予定です。 ##### 実験日: 2023-11-21 - OS: Ubuntu 22.04.3 LTS (Jammy Jellyfish) - Kindle for PCの在処: - https://s3.amazonaws.com/kindleforpc/65323/KindleForPC-installer-1.39.65323.exe - https://s3.amazonaws.com/kindleforpc/70623/KindleForPC-installer-2.2.70623.exe |Wine (Stable) Ver.|winecfgでの設定|Kindle for PC|成否|動作状況|確認日| |---|---|---|---|---|---| |8.0.2|Windows 7|v1.39.1 (65323)|OK||2023-11-21| |8.0.2|Windows 7|v2.2 (70623)|NG|ファイルunpack後のインストーラーが起動しない (Windows 10の場合よりもマシで、エラー内容としてKRFDynamic.dllに関するものが表示される)|2023-11-21| |Wine (Stable) Ver.|winecfgでのWindows Ver.|Kindle for PC|成否|動作状況|確認日| |---|---|---|---|---|---| |8.0.2|Windows 10|v1.39.1 (65323)|OK||2023-11-21| |8.0.2|Windows 10|v2.2 (70623)|NG|ファイルunpack後のインストーラーが起動しない (エラー内容不明)|2023-11-21| #### 参考) 実験手順メモ ##### Step-1. 仮想環境でUbuntuを用意する 1. VirtualBox 7上に対象バージョンのUbuntuをインストールした仮想マシンを用意する (「Unattended Install」機能を活用することで手動入力が減らせる) - 参考: [第737回 VirtualBox 7\.0の新機能[Windows 11とUbuntu 22\.10の自動インストール編] \| gihyo\.jp](https://gihyo.jp/admin/serial/01/ubuntu-recipe/0737) 2. 初期ユーザがsudoできるようにする: root権限で実行→ `usermod -aG sudo ユーザ名` ##### Step-2. Wineインストールの下準備 - 参考: [Ubuntu WineHQ Repository \- WineHQ Wiki](https://wiki.winehq.org/Ubuntu) ``` sudo dpkg --add-architecture i386 sudo mkdir -pm755 /etc/apt/keyrings sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key #### Ubuntu 22.04の場合 sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/jammy/winehq-jammy.sources ``` ##### Step-3. Wineインストール - 参考: [Ubuntu 21\.10にKindleをインストール \- Qiita](https://qiita.com/relu/items/8fc87a895e17609012aa) ``` BRANCH_WINE=stable \ && sudo apt install --install-recommends -y winehq-$BRANCH_WINE winetricks \ && VERSION_MONO=$(iconv -cfutf16 /opt/wine-$BRANCH_WINE/lib64/wine/x86_64-windows/appwiz.cpl 2>/dev/null | grep -Pao '(?<=wine-mono-).+(?=-x86\.msi)') \ && VERSION_GECKO=$(iconv -cfutf16 /opt/wine-$BRANCH_WINE/lib64/wine/x86_64-windows/appwiz.cpl 2>/dev/null | grep -Pao '(?<=wine-gecko-).+(?=-x86_64\.msi)') \ && mkdir -p ~/.cache/wine \ && wget -nc https://dl.winehq.org/wine/wine-mono/$VERSION_MONO/wine-mono-$VERSION_MONO-x86.msi https://dl.winehq.org/wine/wine-gecko/$VERSION_GECKO/wine-gecko-$VERSION_GECKO-x86{,_64}.msi -P ~/.cache/wine/ \ && winetricks -q cjkfonts vcrun2013 \ && mkdir -p "$HOME/.wine/drive_c/users/$USER/AppData/Local/Amazon/Kindle" ``` ##### Step-4. Windowsバージョン選択 1. winecfgを起動する: `winecfg` 2. アプリケーションタブの「Windowsバージョン」で任意のバージョンを選択する ##### Step-5. Kindleインストール&動作確認 - 参考: [List all available versions of Kindle for Mac and Kindle for PC\.](https://gist.github.com/marccarre/645fe68da31678f9191cd3aafecfea1b) ``` wine ./KindleForPC-installer-X.XX.XXXXX.exe ``` ##### Step-6. Kindle動作確認後の掃除 1. Kindle for PCのアンインストーラー「Uninstall Kindle」を実行する 2. KindleとWine関連のプロセスを完全にkillする 3. Kindleが作成したディレクトリを削除する: `rm -rf ~/Documents/My\ Kindle\ Content/` 4. 再度の実験が必要であれば、Step-4またはStep-5へ戻る --- ### SESAMEタッチProの玄関ドアへの取り付けで工夫したこと - 2023-08-29 URL: https://remoteroom.jp/diary/2023-08-29/ #### スマートロックに指紋認証をプラス 2022年1月に、我が家の玄関にスマートロックの[SESAME 4](https://jp.candyhouse.co/collections/frontpage)を取り付けました。それ以降スマホのアプリと併用して大変便利に使っています。 - [後付けのスマートロックで玄関の鍵を「ひらけゴマ!」 \[2022-01-22\]]() そして2023年7月には指紋認証を実現するデバイスも追加して、家族の“指”でも玄関を解錠できるようにしました。追加したデバイスは次の「SESAMEタッチPro」というものです。既存のセサミと連動して、指紋認証のほか、最大16桁の暗証番号認証、手持ちのICカードを登録できるICカード認証によってスマートロックの解錠ができるようになります。 この記事では、SESAMEタッチProを金属製ドアに取り付ける際にちょっとばかし工夫したポイントを紹介します。 |商品名|購入時の価格(税込)|購入店| |----|---:|---| |[SESAMEタッチPro](https://jp.candyhouse.co/products/sesame-touch-pro) + 送料|4,378円 + 702円|[CANDY HOUSE JAPAN](https://jp.candyhouse.co/products/sesame-touch-pro)| |[TOSHIBA CR123AG 2P (2個入)](https://www.toshiba-lifestyle.com/jp/batteries/cr123ag/) 2パック|880円 x 2|[ヨドバシ.com](https://www.yodobashi.com/product/100000001002797186/)| ##### 利用開始までの流れ スマートロックのセサミをすでに利用している環境で、SESAMEタッチProを利用開始するまでの流れはおおよそ次の通りです。 1. SESAMEタッチProの裏蓋をプラスねじ2本を緩めて開ける - プラスねじは裏蓋から外れない構造になっている。ある程度ねじを緩めたら裏蓋を細いマイナスドライバーなどで浮かせて開ける 2. CR123Aの電池と本体側の電極に挟まっているシートを抜き取る - 電池ボックスにはCR123A電池が4本装填できるようになっていて、標準では2本の電池が付属している。私は電池交換の頻度をできるだけ減らしたいので、標準の電池2本を抜き取り、別の新品電池4本を装填した 3. SESAMEタッチProに通電すると「ピッ」という音がする 4. スマホの「セサミ」アプリを最新版へ更新する - iOS: [App Store > セサミ、ひらけゴマ !](https://apps.apple.com/jp/app/%E3%82%BB%E3%82%B5%E3%83%9F-%E3%81%B2%E3%82%89%E3%81%91%E3%82%B4%E3%83%9E/id1532692301) - Android: [Google Play > セサミ、ひらけゴマ](https://play.google.com/store/apps/details?id=co.candyhouse.sesame2&hl=ja&gl=US) 5. スマホの「セサミ」アプリを起動して新規デバイスとしてSESAMEタッチProを追加する 6. デバイスの追加ができたら、SESAMEタッチProのSesameOS (ファームウェア) を最新版へ更新する - SESAMEタッチProと同様に、関連するデバイスであるセサミ4/セサミ5などのスマートロック, WiFiモジュールのSesameOSも最新版へ更新する 7. スマホの「セサミ」アプリで下記の設定を行う (全てではなく解錠のトリガーにしたいものを選択すればOK) - 「ICカードの管理」 - 「指紋の管理」 - 「暗証番号の管理」 8. SESAMEタッチProを本番の場所へ取り付ける前に動作確認して、実際に施錠・解錠が問題なく行えることを確認する 9. SESAMEタッチProを本番の場所へ取り付ける - 必要な指紋の登録やICカードの登録が完全に完了するまで、SESAMEタッチProを指定の取り付け方法 (付属の両面テープ) で取り付けるのは現状やめておくべきと思う。万が一SESAMEタッチProをオールリセットして登録をやり直す場合、SESAMEタッチProの裏面のリセットボタンを押す必要があるためです。 ##### 通信に関して気づいたこと - SESAMEタッチProは、通常状態では、紐付けられたスマートロック「セサミ」とBluetoothで通信する - SESAMEタッチProは、スマホのアプリからアクセスされているときは、スマホとBluetoothで通信する - 私は当初勘違いしていたが、SESAMEタッチProはセサミとは異なり、**WiFiモジュールとは通信しないように思える** (SESAMEタッチProの役割が1mの範囲内にあるセサミの直接制御なのであればBluetooth通信のみで事足りて、インターネットアクセスの踏み台になるWiFiモジュールとの通信は不要だと考えられる) #### 金属製ドアへ取り付ける際の工夫 SESAMEタッチProは無加工もしくは多少の可逆的な加工を施すことで、我が家のような賃貸マンションの金属製ドアにダメージを与えず貼り付ける方法を探りました。結論から言うと磁力での取り付けとなり、引っ張ればドアから外れるため、SESAMEタッチPro自体が盗難されることは防止できません。あしからずご了承ください。 P.S. [SESAMEタッチProの公式ページ](https://jp.candyhouse.co/products/sesame-touch-pro)を2023-08-29に確認したところ、電池交換時に付属の両面テープを剥がなくてもよくなる「新しいバッテリーカバー」の発送予定についての記述があります。もしかすると、そのカバーによって標準の取り付け方法が変わる可能性はあります。 ##### A. ボツ案) マグネットシール Twitterで見かけたマグネットシールでの貼り付けを最初やってみました。しかしながら、我が家の場合にはSESAMEタッチProを玄関ドアに保持するほどの力がマグネットシールにはないことが判明し、ボツとなりました。SESAMEタッチProに電池を4本入れたために標準状態よりも重量が増したことが災いした可能性はあります。 ##### B. 採用案) ネオジム磁石 非常に強力かつ安価で、100円均一のお店で容易に入手できる磁石「[ネオジム磁石](https://ja.wikipedia.org/wiki/%E3%83%8D%E3%82%AA%E3%82%B8%E3%83%A0%E7%A3%81%E7%9F%B3)」を使ってみました。磁石を1つ、透明な裏蓋の中に入れ込み (裏蓋は多少膨らみます)、裏蓋の外側の対向位置に磁石をもう1つくっつけます。この状態ですと、SESAMEタッチProを、裏面の両面テープを剥がないまま、強力な磁力で金属製ドアにくっつけて一定位置にほぼ保持できます。 なお、ネオジム磁石は材質上割れやすいため、破損に備えてそのまま露出して使うのではなく、磁石全体をセロテープで覆って用いるなどの安全策を取ることをお勧めします。 --- ### テレビ等で採用されているwebOSのオープンソース版をラズパイで起動してみた - 2023-08-26 URL: https://remoteroom.jp/diary/2023-08-26/ #### webOS OSE (Open Source Edition) webOS OSE (Open Source Edition) と名付けられたwebOSのオープンソース版がラズパイで動かせると聞いて、どんなもんなのかなと、実際に起動を試してみました。 - [webOS Open Source Edition](https://www.webosose.org/) [Introduction \| webOS Open Source Edition](https://www.webosose.org/about/overview/introduction/) によると、webOSはスマート機器向けのソフトウェア・プラットフォームとのこと ([webOSがhpからLGへ売却された2013年のニュース](https://jp.reuters.com/article/jt8295938-hp-webos-idJPTYE91O05V20130225)、うっすら覚えている気もする)。たとえばテレビに搭載されているOSとしてはGoogle TVがまず有名ですが、シェアの上で現在おそらく、webOS TVはその好敵手に位置づけられると思います。そういえば[うちのテレビ]()はLG製でwebOSが搭載されているなぁ。 #### pre-buildイメージで実験 webOS OSE 2系 (以下webOS) の自前build ([Building webOS Open Source Edition](https://www.webosose.org/docs/guides/setup/building-webos-ose/)) を行うことは、時間と工数の関係上ちょっと難しいと予想したため、pre-buildされたイメージをダウンロードしてmicroSDカードに書き込み、それでラズパイが起動するかどうかを確認することにします。 webOSを動作させるラズパイとしては ([System Requirements](https://www.webosose.org/docs/guides/setup/system-requirements/))、Raspberry Pi 4が必要です。今回は手元に余っている「Raspberry Pi 400」で試してみます。 ##### インストールと動作確認手順 1. GitHubの [Releases · webosose/build\-webos](https://github.com/webosose/build-webos/releases) から `webos-ose-2-22-0-raspberrypi4-64.tar.bz2` または `webos-ose-2-22-0-raspberrypi4-64-devel.tar.bz2` をダウンロードします (今回は後者にします) 2. ダウンロードした `〜.tar.bz2` を展開して `〜.wic` を取り出します (アーカイブファイルはどうやら入れ子構造になっている) ``` $ tar -xvf ./webos-ose-2-22-0-raspberrypi4-64-devel.tar.bz2 webos-image-devel-raspberrypi4-64.rootfs.wic.bz2 README.md $ bunzip2 ./webos-image-devel-raspberrypi4-64.rootfs.wic.bz2 $ file ./webos-image-devel-raspberrypi4-64.rootfs.wic ./webos-image-devel-raspberrypi4-64.rootfs.wic: DOS/MBR boot sector; partition 1 : ID=0xc, active, start-CHS (0x40,0,1), end-CHS (0x3ff,3,32), startsector 8192, 148974 sectors; partition 2 : ID=0x83, start-CHS (0x3ff,3,32), end-CHS (0x3ff,3,32), startsector 163840, 11586764 sectors ``` 3. [Flashing webOS OSE \| webOS Open Source Edition](https://www.webosose.org/docs/guides/setup/flashing-webos-ose/) を参考に、`〜.wic` をmicroSDカードに書き込みます 4. microSDカードをラズパイに差し込んで起動します 5. [webOS OSE UI Guide \| webOS Open Source Edition](https://www.webosose.org/docs/guides/getting-started/webos-ose-ui-guide/) にしたがって、マウスとキーボード操作でwebOSのUIを嗜みます - 言語設定を日本語に切り替えることもできました - `only available on touch displays` なUIがいくつかあって、それらはタッチディスプレイではない今回の環境では試せなさそうです - USBカメラを接続すると「Camera App」でカメラ画像が表示されました (カメラの複数台接続もいけそうな雰囲気です) おまけ情報として。webOS OSEの開発ツール込み版 (`webos-ose-2-22-0-raspberrypi4-64-devel.tar.bz2`) を走らせたラズパイに関しては、次のことに気づきました。詳細はドキュメントに書いてあるのかもしれないがまだ確認していません。 - `ssh -l root IPアドレス` でSSHログインできる - `http://IPアドレス:8000/` で何らかのウェブサービス (API?) が動いている #### 参考リンク - [webOS \- Wikipedia](https://ja.wikipedia.org/wiki/WebOS) - [LGが「webOS」を他社にも提供へ Android TVの対抗馬となるか \- ITmedia NEWS](https://www.itmedia.co.jp/news/articles/2102/25/news091.html) --- ### ClockworkPi uConsole: SDRの第一歩 〜ドングルRTL-SDRを接続してFMラジオを聴いた〜 - 2023-08-07 URL: https://remoteroom.jp/diary/2023-08-07/ #### SDRというものに触れてみたい SDR、すなわち[Software Defined Radio (ソフトウェア無線)](https://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E7%84%A1%E7%B7%9A) という世界があることを私が初めて知ったのは、2017年4月の[総関西サイバーセキュリティLT大会(第2回)](https://sec-kansai.connpass.com/event/50957/)に参加して、[@v_avenger](https://twitter.com/v_avenger)さんによるLT「ハッカーの嗜み RTL2832UチップとSDR」を聞いたときです。 SDRはとても面白そうで衝撃を受けたことを覚えていますが、あれは6年も前のことなのか (苦笑)。SDRへの興味関心は種火のごとく生きていて2022年6月にまずは書籍『RFワールド No.44 GRCで広がるSDRの世界』を入手し、そして先日のuConsole購入をきっかけに、SDRできるUSBドングル「RTL-SDR Blog V3」も入手。いよいよ、手元でSDRを試せる準備が整いました。 そこで今回は、uConsoleにドングルRTL-SDRを接続し、FMラジオの電波を受信して音の復調を確認するまでをやってみました。 ##### 購入したもの |商品名・書籍名|購入時の価格|購入店| |---|--:|---| |RTL-SDR Blog V3 R860 (R820T2) RTL2832U 1PPM TCXO SMA Software Defined Radio with Dipole Antenna Kit|6,217円|[AliExpress](https://ja.aliexpress.com/item/32936334224.html)| |RFワールド No.44 GRCで広がるSDRの世界|(中古) 1,450円|[Amazon.co.jp](https://www.amazon.co.jp/dp/4789848574?tag=remoteroom-22&linkCode=ogi&th=1&psc=1)| RTL-SDRは様々なところから入手できそうですが、私がAliExpressで購入した理由は、RTL-SDR公式ページからしっかりリンクされているためです。 - RTL-SDR公式ページ: [Buy RTL\-SDR Dongles \(RTL2832U\)](https://www.rtl-sdr.com/buy-rtl-sdr-dvb-t-dongles/) - 上記ページからリンクされているAliExpressページ: [RTL\-SDR ブログ rtl sdr V3 R820T2 RTL2832U 1PPM tcxo sma rtlsdr ソフトウェアラジオ目的ダイポールアンテナ \- AliExpress](https://ja.aliexpress.com/item/32936334224.html) なお、上記AliExpressの商品と同等と思われる商品がAmazon.co.jpにも存在していますが、公式な品物かどうかは不明です。 ##### RTL-SDR with Dipole Antenna Kitの開封の儀 (写真) #### FMラジオを聴くまで ##### Step-1. RTL-SDRを接続 uConsoleにRTL-SDRを接続した状態での`lsusb`の出力は次の通りで、USBデバイスとしての認識は問題なさそうです。 ```bash $ lsusb Bus 001 Device 004: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T Bus 001 Device 003: ID 1eaf:0024 Leaflabs uConsole Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub ``` 余談として。実物を手にして初めて気づいたのですが、uConsoleのUSB-AポートにドングルRTL-SDRを直挿しすると、隣のUSB-Cのポートと干渉します。両方のポートを同時利用したい場合は、たとえばUSB type-Aの延長ケーブルなどが必要になります。 ##### Step-2. GNU RadioとGqrxをインストール ###### GNU Radio - [InstallingGR \- GNU Radio](https://wiki.gnuradio.org/index.php/InstallingGR) Raspberry Pi OSがベースであるuConsole標準OSのリポジトリに、定番の[GNU Radio](https://www.gnuradio.org/)は含まれていますので、aptコマンドでインストールしてみました。`rtl_test`によるRTL-SDRの認識も問題なし。 ```bash $ sudo apt install gnuradio # このときにrtl-sdrもインストールされたようだ $ 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 ``` なお、aptでGNU Radioがさくっとインストールできる点は良いのですが、記事執筆時点でのバージョンは「3.8.2.0」と古めのようです。今後もしこの古さが問題になるときには、別のインストール方法を検討することになるかもです。 ###### Gqrx 私のような初心者には、GNU Radioは初見で利用できるとっつきやすいソフトウェアとは言えません (深夜帯の脳みそにはなんのこっちゃかわからずギブアップです)。GNU Radioは次回のお楽しみにすることにして、とりあえずSDRが機能している証としての電波の「ウォーターフォール」っぽい表示が見たいので、[Gqrx](https://gqrx.dk/)をインストールします。インストール方法は公式ページに記載の通りです。 - [Gqrx SDR for the Raspberry Pi – Gqrx SDR](https://gqrx.dk/download/gqrx-sdr-for-the-raspberry-pi) > To install Gqrx from the Raspberry Pi software repository, open the Applications menu, select Preferences → Add / Remove Software, and search for Gqrx. After installation, Gqrx will be available in the Internet section of the Applications menu. ##### Step-3. GqrxでFM放送にチューニングを合わせる Gqrxをデスクトップ画面のアプリケーションメニュー > Internet から起動し、次の操作を行いますと、FM放送の音が聴けました。 1. 右側にあるModeを「WFM (Stereo)」に変更 2. メニューバー左端の▶ボタン「Start DSP Processing」を押す 3. 周波数を適当なFM放送電波に合わせる #### 所感 FMラジオは自分が10代のころから聴いて慣れ親しんでいるわけでその受信に新鮮味は無いはずなのですが、電波がリアルタイムに画面で見えるようになった小型コンピュータからその音が聞こえるところに、なんとも言えぬ新しさと不思議さを感じました。無線機化したuConsoleを持ち歩いて、様々な周波数の受信に励んでみたい気持ちです。また、GNU Radioを駆使するとテレビのワンセグ受信もできるようなので、次回以降にチャレンジしたいと思います。 --- ### ClockworkPi uConsole: "uConsole Keyboard Firmware Flash Program" を適用してみた記録 - 2023-08-06 URL: https://remoteroom.jp/diary/2023-08-06/ #### 気になる更新 uConsoleのフォーラムの次のページで、「uConsole Keyboard Firmware Flash Program」というものが紹介されておりました。 - [uConsole os Images \- uConsole \- clockworkpi](https://forum.clockworkpi.com/t/uconsole-os-images/10432) 内容としては `This firmware update fixes a bug related to the fn key and changes the volume key logic.` となっていたので、実際に、キーボード関連と思われるこのファームウェア更新を実施してみたのが今回のメモです。更新実行手順は、次の公式OS Imageページに記載のものを用いました。 - [uConsole/images at master · clockworkpi/uConsole](https://github.com/clockworkpi/uConsole/tree/master/images) ##### Step-1. tar.gzの取得と展開, 必要なパッケージの導入 ```bash hoge@uconsole:~/tmp $ wget https://github.com/clockworkpi/uConsole/raw/master/Bin/uconsole_keyboard_flash.tar.gz hoge@uconsole:~/tmp $ ls -al ./uconsole_keyboard_flash.tar.gz -rw-r--r-- 1 hoge hoge 38282 Aug 6 23:30 ./uconsole_keyboard_flash.tar.gz hoge@uconsole:~/tmp $ md5sum ./uconsole_keyboard_flash.tar.gz efc898b7bbd78d48f8d8e850c8480cfb ./uconsole_keyboard_flash.tar.gz hoge@uconsole:~/tmp $ tar zxvf uconsole_keyboard_flash.tar.gz uconsole_keyboard_flash/ uconsole_keyboard_flash/README.md uconsole_keyboard_flash/Makefile.armhf uconsole_keyboard_flash/upload-reset/ uconsole_keyboard_flash/upload-reset/upload-reset.c uconsole_keyboard_flash/upload-reset/upload-reset.o uconsole_keyboard_flash/flash.sh uconsole_keyboard_flash/Makefile uconsole_keyboard_flash/upload-reset.elf uconsole_keyboard_flash/uconsole_keyboard.ino.bin uconsole_keyboard_flash/Makefile.aarch64 uconsole_keyboard_flash/maple_upload uconsole_keyboard_flash/Makefile.amd64 uconsole_keyboard_flash/deb_packages/ uconsole_keyboard_flash/deb_packages/armhf/ uconsole_keyboard_flash/deb_packages/armhf/upload-reset.elf uconsole_keyboard_flash/deb_packages/aarch64/ uconsole_keyboard_flash/deb_packages/aarch64/upload-reset.elf uconsole_keyboard_flash/deb_packages/aarch64/.gitkeep hoge@uconsole:~/tmp $ sudo apt install -y dfu-util Reading package lists... Done Building dependency tree... Done Reading state information... Done The following NEW packages will be installed: dfu-util 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 34.5 kB of archives. After this operation, 119 kB of additional disk space will be used. Get:1 http://deb.debian.org/debian bullseye/main arm64 dfu-util arm64 0.9-1+b1 [34.5 kB] Fetched 34.5 kB in 0s (223 kB/s) Selecting previously unselected package dfu-util. (Reading database ... 106073 files and directories currently installed.) Preparing to unpack .../dfu-util_0.9-1+b1_arm64.deb ... Unpacking dfu-util (0.9-1+b1) ... Setting up dfu-util (0.9-1+b1) ... Processing triggers for man-db (2.9.4-2) ... ``` ##### Step-2. flashの実行 ```bash hoge@uconsole:~/tmp $ cd uconsole_keyboard_flash hoge@uconsole:~/tmp/uconsole_keyboard_flash $ cat ./flash.sh ###!/bin/bash sudo ./maple_upload ttyACM0 2 1EAF:0003 uconsole_keyboard.ino.bin hoge@uconsole:~/tmp/uconsole_keyboard_flash $ sudo ./flash.sh Failed to open serial device. /usr/bin/dfu-util -d 1EAF:0003 -a 2 -D uconsole_keyboard.ino.bin -R dfu-util 0.9 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2016 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to http://sourceforge.net/p/dfu-util/tickets/ dfu-util: Invalid DFU suffix signature dfu-util: A valid DFU suffix will be required in a future dfu-util release!!! Opening DFU capable USB device... ID 1eaf:0003 Run-time device DFU version 0110 Claiming USB DFU Interface... Setting Alternate Setting #2 ... Determining device status: state = dfuIDLE, status = 0 dfuIDLE, continuing DFU mode device DFU version 0110 Device returned transfer size 1024 Copying data from PC to DFU device Download [=========================] 100% 33912 bytes Download done. state(8) = dfuMANIFEST-WAIT-RESET, status(0) = No error condition is present Done! Resetting USB to switch back to runtime mode Waiting for /dev/ttyACM0 serial...Done hoge@uconsole:~/tmp/uconsole_keyboard_flash $ echo $? 0 ``` ##### Step-3. 動作確認 OSのデスクトップ画面において、今回のファームウェア更新後は、 - スピーカーマークがあるVolumeキーを単体で押すと音量が5ずつ下がり (-5) - FnキーとVolumeキーを同時に押すと音量が5ずつ上がる (+5) という動作をすることが確認できた。ファームウェア更新前がどうだったか、記録を取り忘れていたが、Volumeキーを押した時の音量がどこか解せない変化をしていたような気もします。 --- ### 電気通信主任技術者試験 (伝送交換主任技術者) に合格できたメモ - 2023-08-01 URL: https://remoteroom.jp/diary/2023-08-01/ #### 電気なんちゃらの資格は色々あって Part-1 > 電気通信主任技術者試験は、電気通信主任技術者として必要な最低限の専門的知識及び能力について行います。 - [電気通信主任技術者 \| 日本データ通信協会 電気通信国家試験センター](https://www.dekyo.or.jp/shiken/chief/) 電気関係の資格は色々あって、そのうちのマイナー?な「電気通信主任技術者」という国家資格の存在を、現場仕事の関係であったほうが良いかもしれないものの一つとして、たしか2022年の夏頃に初めて知りました (詳しい説明は[Wikipediaの電気通信主任技術者](https://ja.wikipedia.org/wiki/%E9%9B%BB%E6%B0%97%E9%80%9A%E4%BF%A1%E4%B8%BB%E4%BB%BB%E6%8A%80%E8%A1%93%E8%80%85)を参照)。範囲が電気通信全般にわたる資格って中身面白そうだなと私は興味が湧いて、2回目の挑戦で「伝送交換主任技術者試験」のほうに合格できたのでメモを残します。 #### 伝送交換の受験履歴と所感 |試験|受験料|科目と結果| |---|--:|---| |令和4年度第2回 (実施日: 2023-01-29)|全科目受験: 18,700円|【電気通信システム】 ✅合格, 【伝送交換設備及び設備管理】 ❎不合格, 【法規】 ❎不合格| |令和5年度第1回 (実施日: 2023-07-09)|2科目受験: 18,000円|【電気通信システム】 科目免除, 【伝送交換設備及び設備管理】 ✅合格, 【法規】 ✅合格| 1回目 (令和4年度第2回) の受験に際し、後述の参考書3冊をまず入手。しかし3科目のうち最初に勉強を始めていた「伝送交換設備及び設備管理」の内容がまったく頭に入らぬまま試験当日を迎えてしまい、時間切れのため未勉強のまま挑んだ「法規」を含めて、ちんぷんかんぷんであったことが素直に試験結果へ現れた。なお、「電気通信システム」は自分の既知の分野に近かったためかたまたま受かっていた。 2回目 (令和5年度第1回) の受験に際し、この資格試験はむずいから最大3回は挑戦することになっても致し方なし……という緩い気持ちになっていて、前回立ちはだかった科目「伝送交換設備及び設備管理」のまずは1つだけの合格を目指す作戦であった。しかしタイミング的に仕事の山とも重なって参考書を一度なめただけで終わっており、複数回振り返ることは出来なかったものの、合格点にはなんとか引っかかってくれたらしい。さらにラッキーだったのは「法規」で、こちらは試験当日まで手つかずで、試験日の昼休みに集中的に参考書の過去問の太字の部分を覚えたところ、たまたまそのあたりが多く出題されていたようで得点源になった。 私なりの所感として、電気通信主任技術者の資格試験では網羅しておくべき勉強範囲が広い (たとえば「光ファイバ伝送」「電話網」「発電装置」などはこれまでの業務で関わったことがなく、確かに某電話屋さん関係の資格とも言われるだけあるなぁと実感する)。そのため簡単に頭へ詰め込むわけにはいかず、まずは試験科目におけるどの出題範囲 (伝送交換の場合は[電気通信システム](https://www.dekyo.or.jp/shiken/chief/guide-supplement/337), [伝送交換設備及び設備管理](https://www.dekyo.or.jp/shiken/chief/guide-supplement/339), [法規](https://www.dekyo.or.jp/shiken/chief/guide-supplement/340)) にも興味関心を持てることが合格への最大の力になるだろうと思った。学習内容を知らなすぎるとそれを文字情報として頭が吸い込んでくれる感覚が驚くほど得られず、我ながらびっくりする。また、純粋な試験対策としては過去問をひたすらやりこむことが有効だと考える。 ##### 追記 \[2023-08-21\]: 資格者証の交付手続き 試験合格が判明した後、電気通信主任技術者 (伝送交換主任技術者) の資格者証の交付申請手続きを行いました。手続きは次のリンク先の案内に沿って、所定の申請書類を郵送で提出するというものです。私の場合は申請書送付から1週間ほどで資格者証が到着しました。 - [総務省|電気通信政策の推進|電気通信関係資格手続きの案内](https://www.soumu.go.jp/main_sosiki/joho_tsusin/denkishikaku.html) |日付|内容| |---|---| |2023-08-10(木)|資格者証交付申請書を近畿総合通信局へ送付| |2023-08-19(土)|資格者証の簡易書留が到着| #### 参考書 (伝送交換向け) 私が用いた参考書は次の通り。欲を言えばもっと図式を含む書籍があるのならば、そのほうが記憶に残りやすいかもしれない。 |科目|使用した参考書| |---|---| |電気通信システム|| |伝送交換設備及び設備管理|| |法規|| なお、どの書籍も最新の改訂版が発行されているようなので、鮮度的に新しい次のものがお勧めです。 |科目|最新版| |---|---| |電気通信システム|| |伝送交換設備及び設備管理|| |法規|| #### おまけ写真: 試験会場となった大学 --- ### ClockworkPi uConsole: RDP接続を行うためのxrdp設定方法, ホーム領域のeCryptfsでの暗号化方法 - 2023-07-23 URL: https://remoteroom.jp/diary/2023-07-23/ #### uConsoleを安心してモバイルしたい&楽したい 本記事は次の記事の続きになります。 - [ClockworkPi uConsole: 開封の儀と簡単レビュー \[2023-07-17\]]() [ClockworkPi uConsole](https://www.clockworkpi.com/uconsole)はストラップも付けられるその形状から、どんどん気軽に持ち歩くべきモバイル端末に思えます (上記Tweetの[@highvis_supply](https://twitter.com/highvis_supply)さんはモバイルを極めてらっしゃる)。ならば私は、もしもの時の紛失に備えて内部データを暗号化しておきたいし、uConsoleをGUI操作するときにはどこでも、可能ならば大きい画面やキーボードから遠隔操作して楽をしたい。そこで次の条件を満たすよう、uConsole環境を作り直してみることにしました。 1. uConsoleの画面ではclockworkPi提供のOS (Raspberry Pi OS) のGUIを利用し、かつuConsoleへRDP接続して同じGUIを利用できること 2. uConsoleのmicroSD領域の暗号化を可能な限り広い範囲で行うこと (少なくともホーム領域 ($HOME) は暗号化すること) 今回はこれらを実現するための作業手順をメモします。 |項目|内容| |---|---| |機種|[ClockworkPi uConsole Kit RPI-CM4 Lite](https://www.clockworkpi.com/product-page/uconsole-kit-rpi-cm4-lite)| |OSイメージ|[uConsole_CM4_v1.3g_64bit.img.7z](https://github.com/clockworkpi/uConsole/tree/master/images)| |microSDカード|これを機会に添付品32GBから手元にあったSanDiskの高耐久な64GBへ交換| |端末名|uconsole| |初期ユーザ|user1| |暗号化作業用の一時的なユーザ|user2| #### RDP接続できるようにする手順 ##### Step-0. 事前知識: RPi OSのxrdpに関する問題と対策 Raspberry Pi (4系?) に「Raspberry Pi OS (bullseye)」を組み合わせた環境で、xrdpを通常通り導入した後、最初に作られている初期ユーザのデスクトップ環境にはRDP接続できない事情?バグ?があるらしい。原因を突き止めようとした私の実験でも、RDP接続を行うユーザがグループrenderに所属しているか否かでRDP接続の動作が異なることまでは分かりました (調査で数時間を溶かしたのは痛かった)。 「render」というワードも加えて詳しく検索してみると、ラズパイ界隈では以前からある程度知られた問題らしくシンプルな対策方法も見つけたので、今回の手順にはこれを取り込んでいます。 - [My raspberry pi 4B can't use xrdp connection · Issue \#2060 · neutrinolabs/xrdp](https://github.com/neutrinolabs/xrdp/issues/2060#issuecomment-980071431) - [bullseye: xrdp not working for user "pi" \- Raspberry Pi Forums](https://forums.raspberrypi.com/viewtopic.php?p=2004088#p2004088) ##### Step-1. OSをインストールして最新状態にする 1. [uConsole/images at master · clockworkpi/uConsole](https://github.com/clockworkpi/uConsole/tree/master/images) から最新のOSイメージをダウンロードして、EtcherなどでmicroSDカードへ焼く 2. 最低限の設定を施しながらuConsoleへOSをインストール - 「Set Country」では、Country: Japan, Language: Japanese, Timezone: Tokyo, Use English Language: True, Use US Keyboard: True を選択 - 初期ユーザ名: `user1` - 「Set Up Screen」Reduce...は無効のままNextを選択 - 「Update Software」ではNextを選択 (更新の実施は任意ですが、今回の手順はここで実施したことを前提に書いています) 3. OS再起動後、ユーザuser1のGUI画面にAuto Loginして、Wi-Fiが見えていない状態になる 4. `sudo raspi-config`を実行 1. Hostnameを変更: 1 System Options > S4 Hostname > お好みのものを入力 2. Auto LoginなしのConsoleに切り替え: 1 System Options > S5 Boot / Auto Login > B1 Console 3. SSHサーバを有効化: 3 Interface Options > I2 SSH > Yes 4. Wi-Fiが見えていない問題の解消: 6 Advanced Options > AA Network Config > 1 dhcpcd (※dhcpd: 4G/LTEモジュールと併用した場合も問題ないかどうかは未検証です) 5. OS再起動を実施 (再起動後はSSHログインできるようになっている) ##### Step-2. RDP接続できるようにする 1. uConsoleにSSHログインする: `ssh -l user1 uconsole` 2. xrdpをインストールする: `sudo apt update; sudo apt install xrdp` 3. ユーザxrdpが証明書ファイル`/etc/xrdp/key.pem`を読み取れるように、ユーザxrdpをグループssl-certに所属させる: ```bash $ id xrdp uid=116(xrdp) gid=124(xrdp) groups=124(xrdp) $ sudo adduser xrdp ssl-cert Adding user `xrdp' to group `ssl-cert' ... Adding user xrdp to group ssl-cert Done. $ id xrdp uid=116(xrdp) gid=124(xrdp) groups=124(xrdp),118(ssl-cert) ``` 4. 前述の「RPi OSのxrdpに関する問題と対策」として設定ファイルを一部変更する ```bash ## Ref: https://github.com/neutrinolabs/xrdp/issues/2060#issuecomment-980071431 $ sudo cp -a /etc/X11/xrdp/xorg.conf{,.original} $ sudo vi /etc/X11/xrdp/xorg.conf $ diff /etc/X11/xrdp/xorg.conf{.original,} 54c54,55 < Option "DRMDevice" "/dev/dri/renderD128" --- > #Option "DRMDevice" "/dev/dri/renderD128" > Option "DRMDevice" "" ``` 5. OS再起動を実施 (再起動後はユーザuser1でRDP接続ができるようになっている) 6. (任意) uConsoleへ直接ログインする時の画面をDesktopへ変更する: - `sudo raspi-config`を実行してAuto LoginなしのDesktopに切り替え: 1 System Options > S5 Boot / Auto Login > B3 Desktop 7. 実際にmacOS環境からuConsoleへのRDP接続を試すとこうなります ##### Step-3. ついでにその他の私的な設定 1. Tailcaleをインストールする: - Tailscale経由だとネットワーク的な境界を全く気にせず、uConsoleへSSH接続やRDP接続できるようになる 2. 他へのアクセス用に、SSH鍵をPassphrase付きで生成する: `ssh-keygen -t ed25519` 3. lsの表示順を好みどおりにするためlocale設定を変更する: `sudo update-locale LC_COLLATE=C` #### ホーム領域をeCryptfsで暗号化する手順 eCryptfsという便利な仕組みがあり、ユーザのホーム領域を未使用時には暗号化した状態にして、ユーザがログインするときに復号化状態のホーム領域としてマウントするという動作が簡単に実現できるとのこと。uConsoleの紛失への備えとしては、内部データ全て (microSD領域全体) を暗号化することがセキュリティ的にベターであろうが、今回はeCryptfsを使ったホーム領域の暗号化のみを目標とします。 - [eCryptfs](https://www.ecryptfs.org/) - [eCryptfs \- ArchWiki](https://wiki.archlinux.jp/index.php/ECryptfs) なお、今回の手順のようにeCryptfsでホーム領域を暗号化した場合、「起動後のuConsoleでホーム領域がまだ復号化されていないときには、uConsoleへのSSHログインで公開鍵認証が利用できない」という弊害が生まれます。ユーザの秘密鍵が通常はホーム領域内 (`~/.ssh/`) に保存されているためです。パスワード認証でのSSHログインは従来通り可能です。 上記の弊害と暗号化のメリットのバランスを理解したうえで進めるとして、作業手順は次の通りです。 ##### Step-1. 作業用ユーザを準備する 1. 作業前に現時点のファイルシステム状態を確認する ```bash user1@uconsole:~ $ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 60G 5.8G 51G 11% / devtmpfs 1.7G 0 1.7G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 760M 1.3M 758M 1% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock /dev/mmcblk0p1 253M 43M 210M 17% /boot tmpfs 380M 20K 380M 1% /run/user/109 tmpfs 380M 24K 380M 1% /run/user/1000 ``` 2. eCryptfsのユーティリティパッケージをインストールする: `sudo apt install ecryptfs-utils` 3. 暗号化作業を行う一時的なユーザuser2を作成して、グループsudoに所属させる: `sudo adduser user2 && sudo adduser user2 sudo` 4. 初期ユーザuser1を完全にログアウトさせる 5. user2としてログインする: `ssh -l user2 uconsole` 6. 暗号化作業を行う準備が整っているか確認する ```bash ## user2がrootになれることの確認 user2@uconsole:~ $ sudo whoami [sudo] password for user2: root ## user1が実行しているプロセスがないことの確認 user2@uconsole:~ $ pgrep -u user1 (なにも表示されない) ``` ##### Step-2. ホーム領域を暗号化する 1. user1のホーム領域の暗号化を行う: `sudo ecryptfs-migrate-home -u user1` ```bash user2@uconsole:~ $ sudo ecryptfs-migrate-home -u user1 INFO: Checking disk space, this may take a few moments. Please be patient. INFO: Checking for open files in /home/user1 lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/109/gvfs Output information may be incomplete. Enter your login passphrase [user1]: ************************************************************************ YOU SHOULD RECORD YOUR MOUNT PASSPHRASE AND STORE IT IN A SAFE LOCATION. ecryptfs-unwrap-passphrase ~/.ecryptfs/wrapped-passphrase THIS WILL BE REQUIRED IF YOU NEED TO RECOVER YOUR DATA AT A LATER TIME. ************************************************************************ Done configuring. chown: cannot access '/dev/shm/.ecryptfs-user1': No such file or directory INFO: Encrypted home has been set up, encrypting files now...this may take a while. sending incremental file list ./ .Xauthority 110 100% 0.00kB/s 0:00:00 (xfr#1, ir-chk=1025/1027) .bash_history 1,360 100% 664.06kB/s 0:00:00 (xfr#2, ir-chk=1024/1027) (途中省略) Could not unlink the key(s) from your keying. Please use `keyctl unlink` if you wish to remove the key(s). Proceeding with umount. ======================================================================== Some Important Notes! 1. The file encryption appears to have completed successfully, however, user1 MUST LOGIN IMMEDIATELY, _BEFORE_THE_NEXT_REBOOT_, TO COMPLETE THE MIGRATION!!! 2. If user1 can log in and read and write their files, then the migration is complete, and you should remove /home/user1.dDSN7Xlq. Otherwise, restore /home/user1.dDSN7Xlq back to /home/user1. 3. user1 should also run 'ecryptfs-unwrap-passphrase' and record their randomly generated mount passphrase as soon as possible. 4. To ensure the integrity of all encrypted data on this system, you should also encrypt swap space with 'ecryptfs-setup-swap'. ======================================================================== user2@uconsole:~ $ ``` 2. 気持ちを落ち着ける (※ここではまだuConsoleのOS再起動をしてはならない) 3. 1の最後「Some Important Notes!」に表示されている作業を行う 1. 別の端末画面を開き、user1としてuConsoleにログインする: `ssh -l user1 uconsole` 2. user1として自分のホーム領域でファイルの読み書きが正常に行えるかを確認する - ファイルの読み書きが異常であればホーム領域をバックアップから戻す 3. user1として`ecryptfs-unwrap-passphrase`を実行して、表示される32文字の文字列を大切にメモしておく 4. user1のホーム領域の暗号化は問題ないと確認できたとして、OS再起動する ##### Step-3. ログイン時のホーム領域の状態を確認して、作業ユーザを削除する 1. user2としてログインしてファイルシステム状態を確認する (特に変わったところはない) ```bash user2@uconsole:~ $ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 60G 5.9G 51G 11% / devtmpfs 1.7G 0 1.7G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 760M 1.3M 758M 1% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock /dev/mmcblk0p1 253M 43M 210M 17% /boot tmpfs 380M 20K 380M 1% /run/user/109 tmpfs 380M 20K 380M 1% /run/user/1001 ``` 2. user1としてログインしてファイルシステム状態を確認する → `/home/user1/`にマウントが増えている ```bash user1@uconsole:~ $ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 60G 5.9G 51G 11% / devtmpfs 1.7G 0 1.7G 0% /dev tmpfs 1.9G 4.0K 1.9G 1% /dev/shm tmpfs 760M 1.3M 758M 1% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock /dev/mmcblk0p1 253M 43M 210M 17% /boot tmpfs 380M 20K 380M 1% /run/user/109 tmpfs 380M 20K 380M 1% /run/user/1001 tmpfs 380M 20K 380M 1% /run/user/1000 /home/user1/.Private 60G 5.9G 51G 11% /home/user1 ``` 3. user2はもう不要なので、user1でログインしている状態でuser2を削除する: `sudo deluser --remove-home --remove-all-files user2` 4. 問題なければバックアップされていたホーム領域 (例: `/home/user1.dDSN7Xlq`) を削除する ちなみに、eCryptfsで暗号化されたファイルの実体は`/home/.ecryptfs/$USER/.Private/`に保存されています。そこを覗いてみると、暗号化がファイル名・ディレクトリ名と中身のデータに対して実行されていることが分かります (ファイルをfileコマンドやhexdumpコマンドにかけると楽しい)。 ##### 課題: 暗号化したいものがホーム領域外にある場合 今回のeCryptfsを使用する方法では、暗号化の対象がユーザのホーム領域のみです。したがってたとえば、Wi-Fi (無線LAN) のパスワードが直に書かれているファイル`/etc/wpa_supplicant/wpa_supplicant.conf`は暗号化されないままです (wpa_passphraseというコマンドはあるが、これは人間に対する難読化を行うのみだという認識)。このファイルを暗号化領域に置くうまい方法がないか、一種のパズルを解くような感覚で少し思案中……。 #### 参考リンク - [Ubuntuのホームディレクトリを暗号化する \| Abillyz](https://abillyz.com/moco/studies/276) --- ### ClockworkPi uConsole: 開封の儀と簡単レビュー - 2023-07-17 URL: https://remoteroom.jp/diary/2023-07-17/ #### 購入予約から265日で到着 本記事は次の記事の続きになります。 - [ClockworkPi uConsole: 購入予約した \[2022-10-25\]]() 2022年10月に衝動的な購入予約をしていた、~~小さくて~~ごつい端末の[ClockworkPi uConsole](https://www.clockworkpi.com/uconsole)が到着しました。各部品がバラバラ状態の組み立てキットとなっており、さっそく組み立てました。OSの起動確認までが行えたので写真とともに紹介します。 ちなみに到着までは次のような時間経過でした。 |日付|内容| |---|---| |2022-10-25|clockworkpi.comにてuConsole Kit RPI-CM4 Lite (Type: WiFi+4G cellular, Core: Raspberry Pi CM4 104000 lite) を購入予約 (Order No. 190XX)| |2023-07-09|clockworkpi.comより「FedEx International Priority」で「YUEN LONG NT, HK」から発送する旨のメール連絡| |2023-07-17|uConsoleが兵庫県某所に到着| |2023-08-07|FedExから2,900円の請求書が到着 (内訳: 消費税+地方消費税+特別取扱手数料)| #### uConsole Kit RPI-CM4 Lite: 開封の儀 ##### 外箱と内容物の様子 - いかにも組み立てキットな中身です。基板は黒基調なものとなっており、精度も高そうでいい感じに思います ([Mac miniを分解した時]()を思い出した)。 ##### 組立工程 - 同梱の組み立てガイドを読み解きながら丁寧に進めていきます。最初のページには「Don't Panic」と書かれています。 - uConsoleキットにはL型の2.5mm六角レンチが同梱されていますが、止めるネジの本数が多いですので、T型の六角棒レンチがあると作業がはかどります。 - 別途用意が必要な「18650電池」2本は、次のリンク先で購入しました。二次電池はとにかく安全そうな物を使うべきに思います。 - [【楽天市場】【即日発送】KEEPPOWER 18650 P1835J 3500mAh 保護回路付き リチウムイオンバッテリー 日本製セル ケース付き 2本組 全長69mm:ユタカパワーバッテリー](https://item.rakuten.co.jp/yutaka-battery/battery-001/) ##### 完成状態と重さ, OSの起動確認 - 完成させるとネジが2,3本余ったのですが、きっと多めに同梱してくれている、そう考えることにしましょう。 - 重さは「18650電池」2本込みで548g (ちなみに裸のiPhone 14が172gらしいので約3台分) - OSイメージ入りのmicroSDカードとして「SanDisk 32GB」のものが同梱されています。それを問答無用で上書きして、下記リンク先でダウンロードできる最新のOSイメージを[Etcher](https://etcher.balena.io/)で焼きます (例: `uConsole_CM4_v1.3g_64bit.img.7z`)。 - [clockworkpi/uConsole](https://github.com/clockworkpi/uConsole) #### uConsole Kit RPI-CM4 Lite: 簡単レビュー - 何者にも似ていない特殊な外観 (こどもには「それ無線機?」と言われた) - 外装はAl-Mg (アルミマグネシウム合金) 製らしくてけっこう丈夫そうな感触 - キーボードはボタンが固めで「カチカチ」というクリック音が伴います。両手の親指を使ったスムースなタイピングには向いてなさそうだが、逆にゲームで多用するボタンは絶妙な位置に付いている感じ - 唯一のポインティングデバイスであるトラックボールの反応 (が時に気まぐれなところ) については、国内初のAndroid端末である[HT-03A](https://ja.wikipedia.org/wiki/HTC_Magic)のそれを思い出しました。まるで原点回帰のようで懐かしい…… - マウスボタンとしては左手親指の位置にある \[L\] \[R\] ボタンが対応することが最初分からなかった - SSHログインしてから操る場合の、Linuxとしてのスピードは遅いとは感じない - SSHサーバのON/OFF: ラズパイ印のMenu > Preferences > Raspberry Pi Configuration > Interfaces > SSH - 基本はRaspberry Pi OSなので[Tailscale](https://tailscale.com/)は標準的な手順でインストール可能 - 最初に`apt upgrade`した後にWi-Fiが見えなくなったが、`sudo raspi-config` > Advanced Options > Network Config > \[NetworkManager\]ではなく\[dhcpcd\]を選択 してOSを再起動することでWi-Fiが復活した - CPUの熱をバックシェル (背面のパネル) へ逃がす作りになっており、放熱性能は悪くないかもしれない 使い始め初日としてはOSの起動確認を行った程度で、まだ環境を作り込んだりはしていませんが、自分にとって、何に使えばいいか見当が付かない→つまり使い道を考えるのが楽しい端末であります。手元のAndroid端末であるクラムシェル型のGemini PDAと比較すると、Gemini PDAはキーボードをはじめ全体が現代的な作りでかつ繊細ですが、本体が変形しないuConsoleにはタフギアのような魅力を感じます。 ##### 技適マークについて uConsoleのWi-FiとCellularに関して、いわゆる「技適マーク」 (技術基準適合証明等の表示) の有無を調べてみました。 - [総務省 電波利用ホームページ|電波監視|技適マークのQ&A](https://www.tele.soumu.go.jp/j/adm/monitoring/summary/qa/giteki_mark/#:~:text=%E6%8A%80%E9%81%A9%E3%83%9E%E3%83%BC%E3%82%AF%E3%81%AF%E3%80%81%E9%9B%BB%E6%B3%A2,%E3%81%AB%E7%B0%A1%E7%95%A5%E5%8C%96%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82) - [総務省 電波利用ホームページ \| 技術基準適合証明等を受けた機器の検索](https://www.tele.soumu.go.jp/giteki/SearchServlet?pageID=jk01&NUM=002-210202&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&SK=0&DC=0&SC=1&as_fid=0eae6e01c28333303a85b85e682e82e21b8eb4e2#searchlist) ###### Core module (Wi-Fi) - Wi-Fiアンテナを接続するコアモジュールのRaspberry Pi CM4 (RPI-CM4) の基板上には技適マークは見当たりませんが、私の手元の物の場合はCM4の外箱に次の記載があり、この \[R\] は上記の機器検索ページでヒットします。 ``` [R]: 020-210202 [T]: D220018020 ``` - ただし、uConsoleに付属のWi-Fiアンテナと組み合わせた状態での適合については、現段階では判断可能な情報を見つけることが出来ていません。 - 対応策のひとつ: [総務省 電波利用ホームページ|その他|技適未取得機器を用いた実験等の特例制度](https://www.tele.soumu.go.jp/j/sys/others/exp-sp/) ###### 4G/LTE cellular modem Ext. module - 4G/LTEアンテナを接続する4G/LTEモジュール上のチップ「SIM7600G-H」に次の記載があり、この \[R\] は上記の機器検索ページでヒットします。 ``` [T]: AD200132003 [R]: 003-200160 ``` - また、uConsole公式サイトの4G/LTEモジュールの説明部分には次の記載があり、ここの「JATE」とは日本国の [一般財団法人 電気通信端末機器審査協会](https://www.jate.or.jp/) のことだろうと思います。 > The chip certifications: > > FCC, CE(RED), GCF, CCC, JATE, PTCRB, RCM, AT&T, Deutsche Telekom, ICASA, KC, REACH, Telec, Telstra, T-mobile, US Cellular, Verizon - ただし、uConsoleに付属の4G/LTEアンテナと組み合わせた状態での適合については、現段階では判断可能な情報を見つけることが出来ていません。 ##### 画面保護フィルムについて uConsoleに備わる1280x720ドットのIPS液晶画面は、サイズはきっちり5.0インチでガラス部分は実測で横111mm x 縦62mmでした。したがって、5.0インチ用の汎用的な画面保護フィルムを貼り付けるとちょうど良いのではないかと考えています。 ###### 追記: 画面保護フィルムによる画面反射の変化 \[2023-07-19\] uConsole用に購入した画面保護フィルム「[ミヤビックス 5インチ(16:9) 汎用サイズ OverLay Plus Lite](https://www.visavis.jp/shopdetail/000000038212/)」が手元に届きましたので、フィルム貼付け前と後で液晶画面の反射度合いがどう変わるのか、写真で示してみます。 上の3枚の写真は室内照明などほぼ同じ条件で撮影しました (ISO感度は変化してしまった)。今回選択した画面保護フィルムを貼り付けた状態だと、画面の反射がかなり拡散され、良好な感じのアンチグレア (低反射) に変わったことが分かります。これで少しは目に優しいuConsoleになったかと。 また、ドットの滲み度合いを確認するため、画面保護フィルム貼り付け後の、室内を真っ暗にした状態で実際に文字表示を行っている画面をマクロ撮影した写真は次のとおりです。 #### 参考サイト - [uConsole \| ClockworkPi](https://www.clockworkpi.com/uconsole) - [clockworkpi/uConsole: This code repository offers downloads for the latest images of various uConsole models, along with kernel patches, firmware for the keyboard and 4G expansion module, hardware schematics, assembly instructions, and essential technical documents\.](https://github.com/clockworkpi/uConsole) - [SIM7600G\-H \- キャセイ・トライテック \- マクニカ](https://www.macnica.co.jp/business/semiconductor/manufacturers/cathay/products/142129/) --- ### IT資産管理ツール「Ralph」のインストール時のエラーを回避する暫定手順 〜Ver.20230706〜 - 2023-07-06 URL: https://remoteroom.jp/diary/2023-07-06/ #### インフラ管理に使えるOSSといえば 「データセンターインフラ管理 (DCIM: Data Center Infrastructure Management)」や「設備資産管理 (EAM: Enterprise Asset Management)」といった類の管理を、システムを使って行いたい要件があり、まずは試しに、以前使っていたことがあるOSS「Ralph」の環境を数年ぶりに構築しようとしました。 - [Ralph: Lightweight Assets Management System for Data Center and Back Office](https://ralph.allegro.tech/) - GitHub: [allegro/ralph: Ralph is the CMDB / Asset Management system for data center and back office hardware\.](https://github.com/allegro/ralph/) ところが、本記事執筆時点 (2023-07-06) では、インストールを下記の公式マニュアルの手順通りに行ってもうまくいきません。具体的には、インストール手順の「[Ubuntu package](https://ralph-ng.readthedocs.io/en/stable/installation/installation/#ubuntu-package-bionic-and-newer-recommended)」のほうはURLが一部`404: Not Found`エラーになり、「[Docker installation](https://ralph-ng.readthedocs.io/en/stable/installation/installation/#docker-installation-experimental)」のほうは管理画面へのログイン時に`Server Error (500)`エラーが発生します。 - [Installation \- Ralph Asset Management System](https://ralph-ng.readthedocs.io/en/stable/installation/installation/) 数時間どうにか試行錯誤してみると、後者の「Docker installation」についてはインストールが成功する暫定的な手順を見つけたのでここに記録します。 ##### Docker installation の暫定手順 「[Docker installation](https://ralph-ng.readthedocs.io/en/stable/installation/installation/#docker-installation-experimental)」は、次の手順で進めるとインストールに成功してRalphの正常起動までたどり着けます。 ```bash git clone https://github.com/allegro/ralph.git cd ralph/docker cp -a docker-compose.yml{,.original} vim docker-compose.yml # Edit the value "80:80" to "8080:80" in nginx section if you wish ####docker compose build # This line does not need to be executed ####docker compose run --rm web /root/init.sh # This line does not need to be executed ####docker compose run --rm web ralph demodata # This line does not need to be executed docker compose up -d docker exec -it --user root docker-web-1 /bin/bash /var/local/ralph/docker-entrypoint.sh init # Initializing database /opt/ralph/ralph-core/bin/ralph demodata # Optional step for demodata exit open http://0.0.0.0:8080/ # ralph:ralph -> OK ``` 肝は、Ralph Web本体のDockerコンテナの中に入り、`docker-entrypoint.sh init`を手動実行してデータベースを初期化しているところです。本記事執筆時点での公式手順ではデータベースの初期化方法の記述が古いままで、ソースコードの実状に合わなくなっちゃっているようです。 ##### P.S. Issue #3774 GitHubのIssueに、このインストール失敗の話題が上がっていたのでコメントを付けました。願わくば、最終的に関連ファイルが上手に修正されて問題なくインストールできるようになると嬉しいです。 - [Server error 500 · Issue \#3774 · allegro/ralph](https://github.com/allegro/ralph/issues/3774#issuecomment-1622099420) #### 参考リンク - [無料で使える資産管理ツールおすすめ比較3選 \| OSSのデージーネット](https://www.designet.co.jp/ossinfo/selection/asset-management.html) --- ### 【観た映画】 風の谷のナウシカ - 2023-07-01 URL: https://remoteroom.jp/medialog/2023-07-01_movie-b003cp67xe/ - 視聴: [レンタルBlu-ray](https://geo-online.co.jp/store_info/item/1321445/) [前回のラピュタ]()に引き続いての家庭内上映会。それなりに歳をとってから観る本作の印象は、昔の私がその時抱いたものと違っていると思う。映画に込められたメッセージがどのようなものなのか、今はそれを取り出したい欲求が強い。ゆえに、船 (飛行機) が墜落して死傷者が出て、死者の埋葬をうかがわせる場面や、風の谷や船が侵略を受けそれに人々が体を張って抗う場面では、そこにこの世の中でも起こっている悲惨な状況を自然と重ねて視ることになる。人間の性〈さが〉はこのまま変わらなければ、自滅という運命を不可避にするのか、なんてことを考えさせられる。問題提起が濃厚な2時間である。 --- ### 【観た映画】 天空の城ラピュタ - 2023-06-24 URL: https://remoteroom.jp/medialog/2023-06-24_movie-b00k72ng0m/ - 視聴: [レンタルDVD](https://geo-online.co.jp/store_info/item/1503736/) メジャー作品をこどもに知っていて欲しいという私の気持ちに、こどもが興味を持っているモールス信号が登場するということも理由に上乗せして、1986年公開のこの作品をレンタル屋さんで選択。何度観たかわからない映画だが、観る者を強く引っ張ってくる導入部と音楽、まるで絵画が動いているような精緻な描き込み、文字通りに表情豊かな登場人物たち (ロボットには表情はないが相応の仕草が伴っている)、そして彼らがストーリーの中で生きているからこそ自然に感じとれる成長などから、本作はやはり至上の出来であるなあと思わされるのだった。 --- ### Python venvの利便性をDropboxディレクトリでも引き出す工夫 - 2023-06-23 URL: https://remoteroom.jp/diary/2023-06-23/ Pythonの仮想環境を含むディレクトリを、Dropboxを使って複数マシン間 (macOS, Linux etc.) で同期している場合に、役立つかもしれないメモです。 #### Dropboxディレクトリでvenvすると同期が [Pythonの仮想環境 (venv)](https://docs.python.org/ja/3/library/venv.html) を含むディレクトリを、Dropboxで特に特別扱いせずに同期すると、Dropboxの同期動作が遅くなることに気づきます。これはなぜなら、仮想環境には多数のファイルが存在するためです。さらに、Pythonの仮想環境の中身はPythonのバージョンやCPUアーキテクチャ (arm64, amd64 etc.) によって異なる可能性があり、これらは複数マシン間で同期せずに、各々のマシン専用のディレクトリとしておくほうが都合が良いはずです。 ということで、CLI上でPythonの仮想環境 (venv) を扱う際に、無意識的に、仮想環境を含むディレクトリをDropboxの同期対象外にする一つの方法をメモしておきます。 ##### Step-1. venv用alias定義でひと工夫する 私の場合はmacOSでもLinuxでもシェルとしてbashを利用しているので、`.bash_aliases`に次のような変数とaliasを定義しています。 ```bash #### OSの種類を特定 if [ "$(uname)" == 'Darwin' ]; then OS='Mac' elif [ "$(uname -o)" == 'Android' ]; then OS='Android' elif [ "$(expr substr $(uname -s) 1 5)" == 'Linux' ]; then OS='Linux' else OS='unknown' fi #### Python venv関係のaliasを設定 if [ ${OS} = 'Mac' ]; then alias venv-make='python3 -m venv venv && xattr -w com.dropbox.ignored 1 venv' alias venv-in='source venv/bin/activate' alias venv-out='deactivate' elif [ ${OS} = 'Linux' ]; then alias venv-make='python3 -m venv venv && attr -s com.dropbox.ignored -V 1 venv' alias venv-in='source venv/bin/activate' alias venv-out='deactivate' fi ``` `alias venv-make`の右辺で用いている、OSごとのxattr, attrコマンドが今回の味噌です。Dropboxサイトの次のページを参考にしています。 - [ファイルやフォルダを「無視」に設定する方法 \- Dropbox ヘルプ](https://help.dropbox.com/ja-jp/sync/ignored-files) ##### Step-2. 定義したaliasを用いてvenvを扱う Pythonのプログラム開発を仮想環境を用いて行う際には、次の手順で進めます。Dropboxの同期に関する拡張属性を変更するコマンドの、OSごとの違いはalias定義で吸収しているので、Dropboxの同期対象外にしたvenvを扱う手順はmacOSとLinuxとで共通化できます。 ``` #### 移動する cd /path/to/python-project #### (初回のみ) 仮想環境用のvenvディレクトリを作成し、かつそれをDropboxの同期対象外に設定する venv-make #### 仮想環境に入る venv-in #### 仮想環境へモジュールをインストールする pip install -r ./requirements.txt #### Pythonスクリプトを実行したりデバッグしたり python ./foobar.py vim ./foobar.py #### 仮想環境から出る venv-out ``` --- ### 【観た映画】 ザ・スーパーマリオブラザーズ・ムービー - 2023-06-18 URL: https://remoteroom.jp/medialog/2023-06-18_movie-b0ccy2dyxd/ - 視聴: [塚口サンサン劇場](http://www.sunsun.info/) 英語タイトル『The Super Mario Bros. Movie』。マリオブラザーズが配管工となって[水回りの修理屋](https://www.smbplumbing.jp/)をやる映画だと見聞きし、面白そうな予感がして家族と観に行った。蓋を開ければ、王道のストーリーが展開される冒険活劇。私は詳しくないのでほとんど拾えた気がしないのだが、歴代のマリオに関わる小ネタがたっぷり詰まっているとのこと。ひとつ驚いたところがあって、それは徹底的に、傷や血を見ない肉弾戦が描画されるところだ。 #### 予告編リンク --- ### VPN接続時に「bad control packet!」が発生して通信できない件の解消法 〜Ubuntu 22.04 LTS + L2TP/IPsec〜 - 2023-06-13 URL: https://remoteroom.jp/diary/2023-06-13/ #### UbuntuでのVPN 職場のデスクトップマシンとしてUbuntu 22.04 LTSを新規導入してからつまずいたことの一つ、L2TP/IPsecでのVPN接続に関して。L2TP/IPsecに必要なパッケージを導入しただけの状態ではVPN接続がうまく行かないようなので、その解消方法をメモしておきます。 |項目|内容| |---|---| |OS|Ubuntu 22.04.2 LTS (Jammy Jellyfish) のGNOMEデスクトップ環境| |VPNの接続方式|L2TP/IPsec| ##### 困った現象 1. Ubuntu標準ではVPN接続方式としてL2TP/IPsecが選択できないため、まずは次のコマンドでパッケージを導入する: `sudo apt install network-manager-l2tp network-manager-l2tp-gnome` 2. L2TP/IPsecでのVPN接続を行うと、接続後にIPアドレスは取得できているのに接続先のLANへの通信ができず、syslogには次のメッセージが流れる ``` $ tail -F /var/log/syslog | grep -E 'pppd|xl2tpd' (snip) Jun 13 ZZ:ZZ:ZZ ホスト名 NetworkManager[28364]: xl2tpd[28364]: check_control: Received out of order control packet on tunnel 699 (got 2, expected 3) Jun 13 ZZ:ZZ:ZZ ホスト名 NetworkManager[28364]: xl2tpd[28364]: handle_control: bad control packet! Jun 13 ZZ:ZZ:ZZ ホスト名 NetworkManager[28364]: xl2tpd[28364]: check_control: Received out of order control packet on tunnel 699 (got 2, expected 3) Jun 13 ZZ:ZZ:ZZ ホスト名 NetworkManager[28364]: xl2tpd[28364]: handle_control: bad control packet! ``` 3. どうやら、VPN接続後に余計なroutingが1個追加されてしまいルート設定がおかしくなるらしい ``` $ route -n | grep 接続先IPアドレス 接続先IPアドレス 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 # ←これが不要らしい 接続先IPアドレス ローカルIPアドレス 255.255.255.255 UGH 50 0 0 enp2s0 ``` ##### 解消方法 の内容を参考に、loggerのオプションを少し変更しています。 1. `sudo vim /etc/ppp/ip-up.d/0001routes`などで次の内容のファイルを作成する ``` #!/bin/sh # 0001routes # Ref: https://github.com/nm-l2tp/NetworkManager-l2tp/issues/132#issuecomment-1155098198 # This script is called with the following arguments: # Arg Name # $1 Interface name # $2 The tty # $3 The link speed # $4 Local IP address for the interface # $5 Peer IP address # $6 Optional 'ipparam' parameter specified to pppd logger -t 0001routes "Removing wrong vpn ip address on $1 for local $4 and peer $5." ip addr del $4 peer $5 dev $1 ``` 2. `sudo chmod +x /etc/ppp/ip-up.d/0001routes`で実行権限を付与する 3. L2TP/IPsecでのVPN接続を再度試みると、上記のスクリプト`0001routes`が実行されてsyslogに次のメッセージが出力され、`ip addr del ...`が行われたであろうことがわかる ``` Jun 13 ZZ:ZZ:ZZ ホスト名 0001routes: Removing wrong vpn ip address on ppp0 for local XXX.XXX.XXX.XXX and peer YYY.YYY.YYY.YYY. ``` 4. ルート設定の不具合が解消してVPN接続先と正常に通信できるはず ##### 追記 \[2023-06-14\]: openfortivpnと併用できない `/etc/ppp/ip-up.d/0001routes`の施策は、過去に次のリンクで紹介したopenfortivpnとどうも併用できません。必要なルート設定を削除してしまうということらしく、対策を考え中。 - [openfortivpn + OpenFortiGUI 〜FortiClient VPNの代替として〜 \[2022-12-15\]]() ##### 追記 \[2023-08-08\]: openfortivpnとの併用方法 上記の「openfortivpnと併用できない」問題は、ナイスな解法が思いつかず、結局のところ運用でカバーしています。具体的には、次のようなaliasを用意しておき、 ```bash alias forti-off='sudo chmod +x /etc/ppp/ip-up.d/0001routes' alias forti-on='sudo chmod -x /etc/ppp/ip-up.d/0001routes' ``` openfortivpnでVPN接続を行うときには`forti-on` (スクリプト`0001routes`を非実行化)、別のVPN接続へ切り替えるときには`forti-off` (スクリプト`0001routes`を実行化) を実行することにしています。 #### 参考リンク - [Something adds a ppp0 route to the gateway making the connection fail · Issue \#132 · nm\-l2tp/NetworkManager\-l2tp](https://github.com/nm-l2tp/NetworkManager-l2tp/issues/132) - [Ubuntu 22\.04にて L2TP/IPsec でVPNに接続するとbad control packetと言われる](https://zenn.dev/mbs_code/articles/13365f2e1734c4) --- ### ELECOM「はじめてのキーボード“キーパレット (KEY PALETTO)”」の写真と簡単レビュー - 2023-05-16 URL: https://remoteroom.jp/diary/2023-05-16/ #### つかえるデザイン GIGAスクール時代ということで、こどもは小学校ではキーボードの付いたWindows PCを使い、家ではタッチスクリーンでiPadを使っています。文字を打つのが好きそうでもあり、ITリテラシー的にキーボードをもっとメインにどっぷり使ってもらいたいなと私は以前から考えていたので、この度発売されたELECOMの「はじめてのキーボード“キーパレット”」を購入しました。[プレスリリース](https://www.elecom.co.jp/news/new/20230510-01/)で発見したこの製品はかなり使いやすそうで、価格も妥当に感じたので、実物を見ぬまま迷いなく衝動買いです。 - [はじめてのキーボード キーパレット|エレコム株式会社](https://www.elecom.co.jp/pickup/contents/00098/) - [はじめてのキーボード KEY PALETTO(BT) \- TK\-FS10BMKIBK](https://www.elecom.co.jp/products/TK-FS10BMKIBK.html) うちでは、こどもがiPadに接続して使う用途がメインになるはずなので、下記の4つのタイプのうち、「1) Bluetooth接続 iPad/iOS用 (TK-FS10BMKIBK)」を選択しています。 |タイプ|Amazon.co.jp| |---|---| |1) Bluetooth接続 iPad/iOS用|| |2) Bluetooth接続 Windows PC/Chromebook用|| |3) 無線接続 Windows PC/Chromebook用|| |4) 有線接続 Windows PC/Chromebook用|| #### 簡単レビュー - 単三電池がパッケージに同梱ではなくキーボード本体にすでにセットされている状態で、絶縁の紙を抜き取るだけで利用を開始できるのは素晴らしい - 本体の裏に、Bluetoothペアリング時の操作方法や、CapsLockキーとCtrlキーを入れ替えるスイッチの説明が書かれていて、説明書を読まなくても良さそう - 電源スイッチのON/OFFも色でわかりやすく識別できるようになっている - キータッチは軽めで、打つ力が強いとまあまあなカシャカシャ音がする - キーボード裏面の脚を出すと奥側の高さが1cmほど増すが、脚を出さなくても打ちやすい高さかもしれない - あえて言うならば、黄色いキートップの輝度が高いので白い文字が見にくい気もするけど、慣れるだろうと思う - キーボードの横幅は、持ち運びケースに収めた10.5インチiPad Airとほぼ同じで、組み合わせるとよく似合っている 付属の「ローマ字入力サポートカード」を打鍵時に見やすい位置に立てられる工夫があったりと、このシリーズのキーボードが文教分野を席巻するかもなと予感しちゃうほど、ユニバーサルデザインの思想に基づいて良く練られた製品だと感じました。競合製品も出てきて欲しいです。 #### 参考写真 ##### 開封の儀 ##### 利用シーン ##### 特徴的な部分 #### 購入リンク |タイプ|Amazon.co.jp| |---|---| |1) Bluetooth接続 iPad/iOS用|| |2) Bluetooth接続 Windows PC/Chromebook用|| |3) 無線接続 Windows PC/Chromebook用|| |4) 有線接続 Windows PC/Chromebook用|| --- ### Proxmox VEの仮想マシンイメージのクラウドバックアップをRcloneを使って実現する方法 - 2023-05-07 URL: https://remoteroom.jp/diary/2023-05-07/ #### バックアップを手堅く 1年ほど前、仮想化プラットフォーム (仮想化基盤) [Proxmox VE](https://www.proxmox.com/en/proxmox-ve) (以下「PVE」) の環境構築について書きました。 - [Proxmox VEで仮想化プラットフォームを簡単構築 \[2022-04-09\]]() このPVEの上で稼働している仮想マシンのイメージを、クラウドへバックアップしたくなったと想定します。PVEには様々な形式に対応した[ストレージ連携機能](https://pve.proxmox.com/wiki/Storage)が標準で備わっていますが、たとえば[Google Cloud Storage](https://cloud.google.com/storage)はその対応外です。 そこで、[Rclone](https://rclone.org/)というツールを使ってPVEサーバに[Google Cloud Storageをマウント](https://rclone.org/commands/rclone_mount/)した上で、PVE上のVMイメージをクラウドバックアップする仕組みを実現してみました。PVEのVMイメージを遠隔地バックアップする一つの方法としてご紹介です。今回のPVEの環境は次の通り。 |項目|内容|備考| |---|---|---| |PVE OS|Debian GNU/Linux 11 (bullseye)|| |PVE サーバ名|proxmoxve|| |PVE ユーザID|root|一般ユーザ権限を常用している場合は下記手順のコマンドに適宜sudoを加えてください| #### 設定手順 ##### Step-1. PVEサーバからGoogle Cloud StorageへアクセスできるようにRcloneを設定する 1. 手元のPCにてターミナル画面を開いて、53682/tcpのローカルポート転送を効かせた `ssh -L 53682:localhost:53682 root@proxmoxve` でPVEサーバに接続する (そのまま維持する) 2. PVEにrcloneをシェルでインストールする - 詳細: Rclone > Rclone downloads > Script download and install https://rclone.org/downloads/#script-download-and-install ``` ### sudo -v ; curl https://rclone.org/install.sh | sudo bash (snip) rclone v1.62.2 has successfully installed. Now run "rclone config" for setup. Check https://rclone.org/docs/ for more details. ``` 3. `rclone config` を実行してGoogle Cloud Storageと接続する (基本的にはdefault値を採用して進める) - VMイメージバックアップ専用のプロジェクトを事前にGoogle Cloudに作成しておくほうがわかりやすいし安全かもしれない - 詳細: Rclone > Google Cloud Storage https://rclone.org/googlecloudstorage/ - 途中、「Project number」としてはProject IDを入力する (数字とは限らない) - 途中、認証のために手元のPCで開くURLはこのようになる: (ポート転送しているのでターミナル画面に表示されるURLをそのまま使用できる) ``` No remotes found, make a new one? n) New remote s) Set configuration password q) Quit config n/s/q> n Enter name for new remote. name> google-cloud-storage 〜〜〜〜〜〜〜〜〜〜 Option object_acl. Access Control List for new objects. Choose a number from below, or type in your own value. Press Enter to leave empty. / Object owner gets OWNER access. 1 | All Authenticated Users get READER access. \ (authenticatedRead) / Object owner gets OWNER access. 2 | Project team owners get OWNER access. \ (bucketOwnerFullControl) / Object owner gets OWNER access. 3 | Project team owners get READER access. \ (bucketOwnerRead) / Object owner gets OWNER access. 4 | Default if left blank. \ (private) / Object owner gets OWNER access. 5 | Project team members get access according to their roles. \ (projectPrivate) / Object owner gets OWNER access. 6 | All Users get READER access. \ (publicRead) object_acl> 4 # rclone default / 他からもアクセスする場合は4以外を検討すること 〜〜〜〜〜〜〜〜〜〜 Option bucket_acl. Access Control List for new buckets. Choose a number from below, or type in your own value. Press Enter to leave empty. / Project team owners get OWNER access. 1 | All Authenticated Users get READER access. \ (authenticatedRead) / Project team owners get OWNER access. 2 | Default if left blank. \ (private) 3 / Project team members get access according to their roles. \ (projectPrivate) / Project team owners get OWNER access. 4 | All Users get READER access. \ (publicRead) / Project team owners get OWNER access. 5 | All Users get WRITER access. \ (publicReadWrite) bucket_acl> 2 # rclone default / 他からもアクセスする場合は2以外を検討すること 〜〜〜〜〜〜〜〜〜〜 Option location. Location for the newly created buckets. Choose a number from below, or type in your own value. Press Enter to leave empty. 1 / Empty for default location (US) \ () 2 / Multi-regional location for Asia \ (asia) 3 / Multi-regional location for Europe \ (eu) 4 / Multi-regional location for United States \ (us) (snip) location> ?? # https://cloud.google.com/storage/pricing での安いロケーションから例えばus-west1を選択 〜〜〜〜〜〜〜〜〜〜 Option storage_class. The storage class to use when storing objects in Google Cloud Storage. Choose a number from below, or type in your own string value. Press Enter for the default (REGIONAL). 1 / Default \ () 2 / Multi-regional storage class \ (MULTI_REGIONAL) 3 / Regional storage class \ (REGIONAL) 4 / Nearline storage class \ (NEARLINE) 5 / Coldline storage class \ (COLDLINE) 6 / Archive storage class \ (ARCHIVE) 7 / Durable reduced availability storage class \ (DURABLE_REDUCED_AVAILABILITY) storage_class> 4 ``` 4. `rclone mkdir google-cloud-storage:/example` を実行し、バケット`example`を作成する - バケットを作成する前に[Google Cloudの当該プロジェクトでの「課金を有効」にしておく (請求先アカウントをリンクしておく)](https://console.cloud.google.com/billing/projects?hl=ja&organizationId=0) 必要がある 5. Google Cloud Storageの管理画面にて、安全のため、作成したバケット`example`の「アクセス権の編集」を実行して「公開アクセス: 非公開」とする - 具体的には、「公開アクセスの防止」をクリックして「このバケットへの公開アクセスを禁止しますか?」にて \[確認\] (Yes) をクリックする 6. `rclone ls google-cloud-storage:/` を実行して、バケット`example`が表示されることを確認する ##### Step-2. PVEサーバにrcloneコマンドでGoogle Cloud Storageをマウントする 1. PVEサーバにて `mkdir /mnt/example` でマウントポイントを作成する 2. `rclone mount -v google-cloud-storage:/example /mnt/example` してエラーが発生しないことを確認する (実行後数秒してエラーが発生しないならば正常とみなし、Ctrl+Cで終了する) - `Fatal error: failed to mount FUSE fs: fusermount: exec: "fusermount3": executable file not found in $PATH` というエラーが出た場合は、`apt install fuse3` してから再度実行する 3. daemonモードに切り替えて `rclone mount --daemon google-cloud-storage:/example /mnt/example` した後、マウント状態を `df -h /mnt/example` で確認する ``` ### df -h /mnt/example Filesystem Size Used Avail Use% Mounted on google-cloud-storage:example 1.0P 0 1.0P 0% /mnt/example ``` 4. `echo HELLO > /mnt/example/hello.txt` した後、`ls -al /mnt/example/hello.txt` でファイルが一覧表示されることを確認する 5. `cat /mnt/example/hello.txt` でファイル内容が表示されることを確認する ``` ### cat /mnt/example/hello.txt HELLO ``` 6. `rm /mnt/example/hello.txt` でファイルが削除されることを確認する 7. `umount /mnt/example` でマウントを解除する ##### Step-3. PVEサーバのmountコマンドからrcloneを呼び出す設定をする 1. `which rclone mount.fuse` で2つのプログラムのpathを確認する ``` ### which rclone mount.fuse /usr/bin/rclone /usr/sbin/mount.fuse ``` 2. rcloneを、mount.fuseと同じpathにあるmount.rcloneとして呼び出すことができるように、`ln -s /usr/bin/rclone /usr/sbin/mount.rclone` する 3. `which mount.rclone` でmount.rcloneのpathを確認する ``` ### which mount.rclone /usr/sbin/mount.rclone ``` 4. `mount -t rclone google-cloud-storage:/example /mnt/example -o config=/root/.config/rclone/rclone.conf` した後、マウント状態を `df -h /mnt/example` で確認する 5. `umount /mnt/example && rm -r /mnt/example` でマウントの解除とマウントポイントの削除を実行する ##### Step-4. PVEサーバにGoogle Cloud Storageのフェイルセーフなautomountを設定する PVEサーバが仮想マシンのイメージをバックアップする際に、インターネット経由で利用するクラウドストレージ (Google Cloud Storage) のマウントが外れている・途中で外れる事態を想定しておく必要があるのでは……と考えた。 何らかの事故でマウントが外れた状態だと、特になんの対策もしていない場合、数十GB規模のバックアップがマウントポイントを作成しているローカルストレージに直接保存されていき、当該領域を食いつぶす可能性があり、PVEインストール時のデフォルトでは `/mnt` は `/` (ルートパーティション) に属しているので、最悪の事態としてはバックアップ動作がProxmox VE自体の動作に影響するかもしれない。 このような事態を発生させないためには、マウントポイントを作成する領域をPVEから隔離すれば良いはず。この方針に基づき、今回はあらかじめ、クラウドストレージ用のマウントポイントを数十MBといった容量小さめのtmpfs (オンメモリ) の中に作成しておき、クラウドストレージのマウントが意図通り行えていない場合にはVMイメージのバックアップをわざと早々に失敗させる、フェイルセーフ機構を仕込むことにした。 1. tmpfsを使うためのマウントポイントを `mkdir /mnt/tmpfs` で作成する 2. `/etc/fstab` に次の内容を追記する ``` ### CUSTOM tmpfs /mnt/tmpfs tmpfs defaults,size=64m 0 0 ``` 3. `mount /mnt/tmpfs` を実行した後、マウント状態を `df -h /mnt/tmpfs` で確認する (/mnt/tmpfsはtmpfs (オンメモリ) に存在する最大容量64MBの領域だと分かる) ``` ### df -h /mnt/tmpfs Filesystem Size Used Avail Use% Mounted on tmpfs 64M 0 64M 0% /mnt/tmpfs ``` 4. 「/mnt/tmpfsがオンメモリ領域ならばそこにマウントポイントを作成してGoogle Cloud Storageをマウントする」という意図である `df -t tmpfs /mnt/tmpfs >/dev/null && mkdir /mnt/tmpfs/Google-Cloud-Storage && mount -t rclone google-cloud-storage:/example /mnt/tmpfs/Google-Cloud-Storage -o allow_other,vfs_cache_mode=writes,config=/root/.config/rclone/rclone.conf` をワンライナーとして実行した後、2箇所のマウント状態を `df -h /mnt/tmpfs /mnt/tmpfs/Google-Cloud-Storage` で確認する ``` ### df -h /mnt/tmpfs /mnt/tmpfs/Google-Cloud-Storage Filesystem Size Used Avail Use% Mounted on tmpfs 64M 0 64M 0% /mnt/tmpfs google-cloud-storage:example 1.0P 0 1.0P 0% /mnt/tmpfs/Google-Cloud-Storage ``` 5. ユーザrootのcrontabで次の内容が実行されるようにする (4のワンライナーをreboot時に実行する内容である) ``` ### crontab -l @reboot df -t tmpfs /mnt/tmpfs >/dev/null && mkdir /mnt/tmpfs/Google-Cloud-Storage && mount -t rclone google-cloud-storage:/example /mnt/tmpfs/Google-Cloud-Storage -o allow_other,vfs_cache_mode=writes,config=/root/.config/rclone/rclone.conf ``` 6. 可能であれば、PVEサーバを再起動して `/mnt/tmpfs/Google-Cloud-Storage` がautomountされることを確認する 初めに述べた、クラウドストレージのマウントが意図通り行えていない場合のフェイルセーフ機構としては、次の点を考慮している。 - Linux起動時には `/etc/fstab` が解釈された後にcronの「@reboot」が実行されるので、今回のautomountは意図通りの順で実行されるはず - もし仮に、「`mkdir /mnt/tmpfs/Google-Cloud-Storage`」が失敗したらこのディレクトリは存在しないままであるため、本ディレクトリへのPVEによるバックアップ実行は自動的に失敗するはず - もし仮に、tmpfs領域での「`mkdir /mnt/tmpfs/Google-Cloud-Storage`」は成功し、次の「`mount -t rclone google-cloud-storage:/example /mnt/tmpfs/Google-Cloud-Storage ...`」によるクラウド領域のマウントは失敗している場合、`/mnt/tmpfs/Google-Cloud-Storage` はクラウド領域ではなくtmpfs領域 (最大容量64MB) のままということになる。この場合、PVEによるバックアップ実行は容量不足を招いて自動的に失敗するはず ##### Step-5. PVEにGoogle Cloud Storageを使用するバックアップ設定を追加する 1. PVEの管理画面にログインし、Datacenter > Storage > Add > Directory を選択し、次のような設定でストレージ領域として `/mnt/tmpfs/Googlg-Cloud-Storage/` を追加する 2. Datacenter > Backup > Add を選択し、次のような設定で任意の仮想マシンのバックアップジョブを追加する 3. 追加したバックアップジョブをまずは \[Run now\] で実行し、画面下部のTasksの当該行をダブルクリックして、バックアップが正常に完了したことを確認する 4. PVEサーバの `/mnt/tmpfs/Google-Cloud-Storage/dump/` (マウントしているGoogle Cloud Storage領域) にバックアップファイルが作成されていることを確認する ``` ### ls -alh /mnt/tmpfs/Google-Cloud-Storage/dump/ total 2.8G drwxr-xr-x 1 root root 0 May 7 23:34 . drwxr-xr-x 1 root root 0 May 7 23:25 .. -rw-r--r-- 1 root root 2.5K May 7 23:43 vzdump-qemu-107-2023_05_07-23_42_32.log -rw-r--r-- 1 root root 2.8G May 7 23:43 vzdump-qemu-107-2023_05_07-23_42_32.vma.zst -rw-r--r-- 1 root root 11 May 7 23:43 vzdump-qemu-107-2023_05_07-23_42_32.vma.zst.notes ``` 5. バックアップのテストは成功したとして、バックアップ本番時の領域使用量に関係する設定、具体的にはBackupのジョブごとのScheduleやRetention (バックアップの保持期間) や、Storageごとの設定にあるBackup Retentionを適切に設定する #### 感想 以上、オープンソースソフトウェアでかつ使い勝手の良い仮想化プラットフォーム「Proxmox VE」を活用していくための一つの情報です。ところどころ端折っているので、技術記事としては整っていない内容かもしれないと思う一方、私自身の勉強としては、Google Cloud Storage自体を今回の件で初めて使用し、フェイルセーフ機構を実現するためのtmpfsを使ったマウントポイントの工夫 (ベストかどうかは不明) を考えるのにもそれなりに頭をひねったので、このまま少しでも誰かの役に立てばいいや……という勢いで書きました。 --- ### 【観た映画】 ジュラシック・パーク - 2023-04-30 URL: https://remoteroom.jp/medialog/2023-04-30_movie-b0ccr921q3/ - 視聴: [Netflix](https://www.netflix.com/jp/title/60002360) 原題『Jurassic Park』。こどもの娯楽映画観賞の経験値を増やすべく、有名な本作を選んだのだが、分割して観るために途中で停めようなんて考える余裕なくリビングで一気に観た。制作にかけた熱量を感じさせる作りで私にとっても見応えがたっぷり。描かれているのは、人間が抱く、恐竜の未知なる生態への興味と、究極的には生きた恐竜を見てみたいという欲求。そしてそれに必ず対峙する、人間の想像を超える自然のしたたかさかな。絡み合ったコンピュータシステムを手懐けなければならないSE (システムエンジニア) の雇用問題も描かれている気がして、ちょっぴりしんみりな気持ちにも。 #### 鑑賞リンク --- ### Atuin (Magical Shell History) を導入して複数シェル環境の履歴を同期できるようにした - 2023-04-25 URL: https://remoteroom.jp/diary/2023-04-25/ #### Atuin: Magical shell history シェル環境での履歴管理を "magical" にしてくれるというツール「Atuin」を見つけたので、試してみました。 Atuinは、ターミナル画面からCtrl+Rで呼び出して使うシェル履歴管理ツールです (Ctrl+Rはシェル標準と同じキー)。履歴をEnd-to-Endで暗号化した上でクラウド同期する機能があり、複数のシェル環境をまたいで自身の履歴の使い回しができそう……というところに惹かれました。公式サイトは下記の通り。 - [Magical Shell History \| Atuin](https://atuin.sh/) - GitHub: [ellie/atuin: 🐢 Magical shell history](https://github.com/ellie/atuin) #### 1台目での導入手順 今回、Atuinを導入する1台目の環境は次の通り。 |項目|内容| |---|---| |OS|macOS Monterey 12.6.3| |シェル|bash 5.2.15| |ターミナルソフト|iTerm2| 私が激しくハマった2つの落とし穴と事前回避策を、最初に Step-0 として記述します。 ##### Step-0-1. bashの場合: 最新バージョンのbashへ切り替えよう たとえばmacOS標準のbashは3系で、3系だとAtuinのキー操作が意図通りに行えないように思われます (落とし穴その1……orz)。3系を使っていた場合にはHomebrewなどで最新のbash 5系をインストールしておきます。 macOS環境でのbashのバージョンを確認してみると3系でした。 ``` $ which bash /bin/bash $ /bin/bash --version GNU bash, version 3.2.57(1)-release (arm64-apple-darwin21) Copyright (C) 2007 Free Software Foundation, Inc. ``` そこで、Homebrewで最新のbashをインストールします。 ``` $ brew install bash $ which bash /opt/homebrew/bin/bash $ /opt/homebrew/bin/bash --version GNU bash, バージョン 5.2.15(1)-release (aarch64-apple-darwin21.6.0) Copyright (C) 2022 Free Software Foundation, Inc. ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. ``` 次に、ログインシェルをHomebrewでインストールしたbashへ変更します。たとえばターミナルソフトiTerm2の場合は、Preferences > Profiles > General > Command にて `Command: /opt/homebrew/bin/bash` を選択&入力します。 ##### Step-0-2. iTerm2の場合: Option Keyの設定を「Esc+」へ変更しておこう 今回の環境に固有の問題なのかもしれませんが、iTerm2の初期設定状態ではAtuinでのAltキーがうまく働きませんでした (落とし穴その2……orz)。そこで事前にiTerm2の設定の Preferences > Profiles > Keys を次のように変更しておきます。(参考: [Alt\-N jump back doesn't work on MacOS · Issue \#417 · ellie/atuin](https://github.com/ellie/atuin/issues/417)) |設定項目|変更前|変更後| |---|---|---| |Left Option Key|Normal|Esc+| |Right Option Key|Normai|Esc+| ##### Step-1. Atuinのインストール 公式サイトの [Getting Started \| Atuin](https://atuin.sh/docs) に沿って、Atuin (v14.0.1) の導入を進めます。ここではQuickstartの [With the default sync server](https://atuin.sh/docs#with-the-default-sync-server) の手順を実行します。すると、macOS環境では次のようにbrew経由でAtuinがインストールされました。 ``` #### 事前に内容確認 $ curl --proto '=https' --tlsv1.2 -sSf https://setup.atuin.sh | less #### インストール実行 $ bash <(curl --proto '=https' --tlsv1.2 -sSf https://setup.atuin.sh) (snip) Detected Mac! Installing with brew (snip) Thanks for installing Atuin! I really hope you like it. If you have any issues, please open an issue on GitHub or visit our Discord (https://discord.gg/dPhv2B3x)! Otherwise, Atuin is a hobby project - if you find it valuable, you can help us out! - ⭐️ Give us a star on GitHub (https://github.com/ellie/atuin) - 🚀 Contribute! We would love more regular contributors (https://github.com/ellie/atuin) - 🤑 Sponsor me! If you value the project + want to help keep the hosted sync server free (https://github.com/sponsors/ellie) ~ Ellie 🐢💖 ``` 上記の`install.sh`を実行すると、`~/.bashrc`の末尾には次の2行が追記されます。 ``` [[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh eval "$(atuin init bash)" ``` Atuinのデフォルトのホットキー「Ctrl+R」と「↑ (カーソルキーの上矢印)」のうち、私は後者は従来通りに使いたいので、`~/.bashrc`を若干編集して`--disable-up-arrow`を追加しました。 ``` ### Atuin (https://atuin.sh/) [[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh eval "$(atuin init bash --disable-up-arrow)" ``` ##### Step-2. Atuinの初期設定と動作確認 Step-1の [With the default sync server](https://atuin.sh/docs#with-the-default-sync-server) を続けます。この手順の場合、Atuin同期サーバとしてはデフォルトの、作者の方がホスティングしているサーバを借用することになります (参考: [同期せずにオフラインで利用する方法](https://atuin.sh/docs/#offline-only-no-sync), [同期サーバをSelf-Hostingする方法](https://atuin.sh/docs/self-hosting/))。 最初に次の一連のコマンドで、当該サーバへの自身のアカウントの新規登録を行い、現在のシェル履歴をAtuinにimportし、サーバとの同期を手動実行します。 ``` #### 最初の実行 (サーバへのアカウントの新規登録など) $ atuin register -u -e -p $ atuin import auto $ atuin sync ``` Atuinの状態を確認すると次のようになります。履歴の同期が実行されていることがわかります。 ``` $ atuin status [Local] Sync frequency: 1h Last sync: 2023-04-25 14:20:37.757696 UTC History count: 2065 [Remote] Address: https://api.atuin.sh Username: History count: 152 ``` AtuinのCUI画面を確認してみましょう。「Ctrl+R」を押すと次のようなターミナル全体に広がる画面で履歴の検索が可能になります。上下のカーソルキーで履歴の行を選び (赤色)、リターンキーで選択の確定です (即実行はされません)。また、行頭に数字がある履歴の行は`ALT+数字` (今回のmacOS環境の場合は`Option+数字`) を押すと選択できます。 Atuinを単独のシェル環境で利用するだけならば初期設定はここで終わりです。search_modeなどの様々なカスタマイズについては[Config \| Atuin](https://atuin.sh/docs/config/)を参照してください。 ##### Step-3. Atuinのkeyを確認 Atuinを2台以上のシェル環境で利用したい場合、複数環境での同期のために、最初にアカウントを新規登録した (1台目の) Atuinのkeyを知っておく必要があります (参考: [atuin sync \| Atuin > Key](https://atuin.sh/docs/commands/sync#key))。 ちなみに余談ですが、ここでいうkeyとは、ファイル`~/.local/share/atuin/key`自体のpathでも、このファイルの中に書かれているハッシュっぽい文字列でもありません。keyとは、次のように、コマンド`atuin key`が出力する複数の英単語からなる文字列です (落とし穴その3……orz)。 ``` $ atuin key abc def ghi jkl mno pqr stu vwx yz... ``` #### 2台目以降での導入手順 ##### Step-0. 環境確認 今回の2台目として、Atuinを次の環境へ導入します。 |項目|内容| |---|---| |OS|Ubuntu 22.04 LTS| |シェル|bash 5.1.16| |ターミナルソフト|gnome-terminal| 1台目と同様に、bashは最新バージョンであるか、ターミナルソフトでのAltキーの扱いは適切な設定であるか、確認しておきます。 ##### Step-1. Atuinのインストール 1台目と同様に、公式サイトの [Getting Started \| Atuin](https://atuin.sh/docs) に沿って、Atuin (v14.0.1) の導入を進めます。Ubuntu環境では次のように、途中でsudoが実行され、debパッケージでAtuinがインストールされました。 ``` $ bash <(curl --proto '=https' --tlsv1.2 -sSf https://setup.atuin.sh) (snip) Detected Linux! Checking distro... Ubuntu detected (snip) [sudo] hogehoge のパスワード: (snip) /tmp/tmp.D02rO5nH08.deb を展開する準備をしています ... (snip) $ apt list --installed atuin 一覧表示... 完了 atuin/now 14.0.1 amd64 [インストール済み、ローカル] ``` ##### Step-2. Atuinの初期設定と動作確認 1台目の初期設定時にアカウントは作成済みです。そのアカウント情報と1台目のkeyを用いて、次の一連のコマンドで、サーバへログインし、現在のシェル履歴をAtuinにimportし、サーバとの同期を手動実行します。 ``` #### 2度目以降の実行 (既存アカウントでログイン) $ atuin login -u -p -k "abc def ghi jkl mno pqr stu vwx yz..." $ atuin import auto $ atuin sync ``` 続いて、Atuinの状態を確認しておきます。 ``` $ atuin status ``` ##### Step-3. Atuinの同期を確認 Atuinの真骨頂であろう、複数のシェル環境をまたいで履歴の同期が行われるかを実験してみましょう。2台目のシェルで次の操作を行った後に、 ``` #### 2台目のシェルで実行 $ atuin status $ echo "2台目からのテスト" $ (Ctrl+Rして履歴に上記echo文が含まれていることを確認) $ atuin sync ``` 最初の1台目のシェルで次の操作を行ってみると、2台目での履歴が1台目にも反映されていることが確認できるものと思います。 ``` #### 1台目のシェルで実行 $ atuin sync $ (Ctrl+Rして履歴に「echo "2台目からのテスト"」が含まれていることを確認) ``` 上記の実験では`atuin sync`を行って同期を手動実行しましたが、[Config \| Atuin > sync_frequency](https://atuin.sh/docs/config/#sync_frequency) にあるように、デフォルトでは1時間ごとに自動で同期する設定となっています。したがって実際の使用感としては、シェル利用中に知らぬ間に同期している、という印象になるかと思います。 #### まとめ: ChatGPTへCLIで問い合わせる内容もAtuinで同期できそう まだ使い始めたばかりですが、あちこちでCLIを使うのが好きな人間 (私) にとって、Atuinはたしかに、マジカルなシェル環境をもたらしてくれる可能性が高いツールだと予想しています。ちゃちゃっと作るワンライナーの履歴を後々別の環境で呼び出せたりするのはまずありがたい。 また私は最近、流行りの[ChatGPT](https://openai.com/blog/chatgpt)への問い合わせを、下記の [ShellGPT (shell_gpt)](https://github.com/TheR1D/shell_gpt) というツールを使ってシェル環境から手早く行ったりしています。そのコマンド (いわばAIに対するプロンプト) も、Atuinの履歴同期によって使い回せるであろうことは確実に効率化に繋がります。 - [TheR1D/shell\_gpt: A command\-line productivity tool powered by ChatGPT, will help you accomplish your tasks faster and more efficiently\.](https://github.com/TheR1D/shell_gpt) 以上、今後のシェル生活で色々楽をするためにAtuinおすすめいたします。 P.S. シェル環境の履歴の同期方法を、思いつきで、ChatGPTへShellGPT経由で聞いてみました。回答にある`~/.bash_history`での履歴同期は正攻法だけども、ファイル単位となるし実用性はどうだろうなぁ。 #### 追記 \[2023-06-19\]: 同期機能ONならv14系からv15系への更新が必須 AtuinのTwitterアカウントにて、"hosted sync server" とv14系との同期を停止した旨のアナウンスが2023-06-19 03:29 (JST) に出ています。この影響を受けて、"hosted sync server" を利用している私の環境でもv14系での同期が行えなくなっていたので、v15系への手動更新を行いましたところ、同期機能が復旧しました。 なお、Atuin v15.0.0はその売りである同期機能に変更が入ったもので、2023-05-29にリリースされています。 - [Release v15\.0\.0 · ellie/atuin · GitHub](https://github.com/ellie/atuin/releases/tag/v15.0.0) #### 追記 \[2023-08-10\]: v16からARMバイナリも提供開始 「中身はラズパイな[uConsole]() CM4上でもAtuin使いたいよなぁ」と思って調べてみたところ、数日前にリリースされたv16でARM (aarch64) 用バイナリが提供されるようになっておりました。なんというグッドタイミング。`All future releases will have ARM binaries available.`だそうです。 - [Atuin v16 \- New foundations, workspaces, and more — Atuin](https://atuin.sh/blog/release-v16) 最新の標準インストール方法 `bash <(curl https://setup.atuin.sh)` は現状aarch64環境では転けてしまうようですが、Releasesからダウンロードするアーカイブには下記のようにatuinのARM用バイナリが含まれているので、このファイルにPATHを通して使えば良いようです。 ```bash $ wget https://github.com/atuinsh/atuin/releases/download/v16.0.0/atuin-v16.0.0-aarch64-unknown-linux-gnu.tar.gz $ tar xvf atuin-v16.0.0-aarch64-unknown-linux-gnu.tar.gz $ cd atuin-v16.0.0-aarch64-unknown-linux-gnu/ $ ls -al total 15772 drwxr-xr-x 3 mah mah 4096 Aug 10 02:01 . drwxrwxr-x 4 mah mah 4096 Aug 10 02:01 .. -rw-r--r-- 1 mah mah 1071 Aug 7 19:42 LICENSE -rw-r--r-- 1 mah mah 7978 Aug 7 19:42 README.md -rwxr-xr-x 1 mah mah 16125376 Aug 7 19:42 atuin # これが実行ファイル drwxr-xr-x 2 mah mah 4096 Aug 7 19:42 completions ``` --- ### ホイールを換えたらNissan X-TRAIL (T33型) はどう変わるのか - 2023-04-21 URL: https://remoteroom.jp/diary/2023-04-21/ 本記事は次の2つの記事の続きです。 - [試乗車 Nissan X-TRAIL 雑感+色選び \[2022-08-14\]]() - [Nissan X-TRAIL (T33型エクストレイル) 用に揃えたパーツ・アクセサリーと装着レビュー \[2023-03-07\]]() #### おまちかね装着 日産エクストレイル (T33; 6AA-SNT33) の一ヶ月点検を先日受けた際、納車時には間に合っていなかったディーラーオプションのNISMOホイール「アルミロードホイール LMX6S」が装着されました。 - [NISMO \| NEWパーツ 2022 > エクストレイル(T33)用アルミロードホイール LMX6S](https://www.nismo.co.jp/products/nismo_parts/NEW_PARTS/index_2022.html#a7) 元々の純正ホイールで1,500km弱を走ってきた後にこのホイールへ交換して、さて何がどう変わったと感じたのか、簡単にレビューです。タイヤ自体はサイズ不変で純正銘柄 ([HANKOOK VENTUS S1 evo3 SUV](https://www.hankooktire.com/us/en/tire/ventus/s1evo3suv-k127a.html) (235/55R19)) のままです。 ちなみに、私が機能面で着目していたのはホイールの重量の差で、LMX6Sのほうが純正のホイールよりも1本で2kg以上軽い。外観をノーマルから若干は変えてみたかったのもありますが、いわゆるバネ下を軽量化することを主な目的に本オプションを選択した、と言っても過言ではないです。 |ホイール|重量 (1本当たり)|情報源| |---|--:|---| |G e-4ORCE 純正ホイール (19x7.5J)|約13.5kg|[公式情報](https://faq2.nissan.co.jp/faq/show/57785?site_domain=default)| |NISMO LMX6S (19x7.5J)|11.2kg|[公式情報](https://www.nismo.co.jp/products/nismo_parts/NEW_PARTS/index_2022.html#a7)| #### 走りの印象面 交換前と交換後の乗り味を比較すると、私にはこのような印象の違いがありました。 1. 多用するECOモードでの走り出しの最初にちょっと重たげだった車体が、スッと前に出て、純正ホイールの時よりも動きが軽くなった感じがした。これをいきなり感じた自分の感覚が、逆に信じられなかった - ⚠︎追記 \[2025-08-17\]: 今となって思いついた仮説です。ホイール交換前後でタイヤの空気圧を厳格に統一していたわけではないので、交換後の空気圧が比較的に高かった可能性もあり、そのために転がりの軽さを感じたのかもしれません。 2. いつもの道で段差など越えた時の衝撃が柔らかくなっており、凹凸のいなしが軽くできるようになった感じ (運転者以外でも乗り心地や音の面で何らかの違いが分かるかもしれない) 特に2番目のほうは、エクストレイルが時々露呈してしまう弱点である、足回りのドタバタ感を軽減しているように思えます。 #### 外観面 (写真) 純正ホイールと比べて光沢部分が大きく減り、そしてホイールのスポークの間からブレーキディスクがよく見えるようになります。これをどう表現したらいいだろう、「車の機械感がアップ」? #### まとめ 条件を揃えた同時乗り比べではないので、誰にとっても絶対そうだと言い切るまでの自信は無いのですが、私にとっては今回のホイール選択は吉と出ました。具体的には、乗り味の快適さを高める変化が体感できました。もし最初からこのNISMOホイールが装着されていたら、変化を知る機会はなかったと思われます。その意味では、一般的には徳がない納品の遅れが「災い転じて福となす」結果になったというオチ。 --- ### LTE対応USBドングル PIXELA PIX-MT110 の分解写真、ただそれだけの記録 - 2023-04-17 URL: https://remoteroom.jp/diary/2023-04-17/ #### 故障したかな LTE対応USBドングルの[PIXELA PIX-MT110](https://www.pixela.co.jp/products/network/pix_mt110/)を某闇市から入手し、IIJmioのSIMを挿して1ヶ月ちょっと使っていました。孤立状態のラズパイにこのドングルを挿すだけでラズパイをインターネットデバイスへ変貌させることができたりと、ガジェット使い的にとても素敵なものです。 しかし本日、次の病状が出て使えなくなっていることに気づきました。 - PCのUSB端子に挿しても、USB接続のネットワークデバイスとしては認識されない (Linuxだと抜き差ししても`lsusb`が変化せずデバイスとして現れない) - PCのUSB端子やUSB ACアダプターから給電すると、PIX-MT110からWi-Fiの電波は出ていてWi-Fiアクセスポイントとしては利用できる (LTE回線を通してインターネットへアクセスできる) ファームウェアは本日時点の最新版 ([Ver.1.00.02.6590](https://www.pixela.co.jp/products/network/pix_mt110/update.html)) です。管理画面から設定を工場出荷状態へ戻してもダメで、とにかく原因不明。 #### 怪しいものは分解してみる癖 ちなみに、[PIX-MT110の公式サイト](https://www.pixela.co.jp/products/network/pix_mt110/)には次の記載があります。 > ※4 エンジン始動時には、シガーソケットからはずしてください。 ええっ!? PIX-MT110を車 (e-POWER車) に持ち込んでのエンジン始動時に、「シガーソケットに接続したUSB電源アダプターからPIX-MT110を外すこと」や、「車に標準装備のUSB端子からPIX-MT110を外すこと」を、たしかに私は怠っておりました。これが故障の原因の最有力候補になりうるのかい……? 故障のイメージとしては、USBの電力線は生きているが、信号線が機能していない、みたいな感じです。物理的な問題ならば分解すると何か分かるかも?と思い、とにかく次の写真のように分解しましたが、焼けている部品があったりするわけもなく、素人目には怪しいところは見当たりませんでした。orz #### PIX-MT110の分解写真 --- ### 【読んだ本】 裏切り (上)(下) - 2023-04-11 URL: https://remoteroom.jp/medialog/2023-04-11_book-4488211100-4488211119/ 推理小説の類なので詳細抜きの簡単な感想をば。当然ながら、真実がわかってくるまでは真実を追いかけることが必要で、ストーリーとしてそこまでが短くはない。作者が各登場人物の属性にどのような色づけをして描きたいのかは、後半の途中ぐらいから見えてきた。その意味合いでの私の推理は当たっていた。 --- ### 脆弱性検知ツール「Vuls」を試してみた 〜Docker+Vulsctlで簡単インストール/レポートのSlack通知〜 - 2023-04-09 URL: https://remoteroom.jp/diary/2023-04-09/ #### 第一歩はセキュリティの現状把握 管理下の各サーバがどのような脆弱性を内包しているか、サーバ管理者は最新の情報に照らして適時調査して把握しておく必要がある。この調査を簡単に行うためのOSS (オープンソースソフトウェア) な脆弱性検知ツールとして、対象サーバ側にエージェントが不要という「Vuls」を試してみることにした。VulsはIPAの[IPAテクニカルウォッチ「脆弱性対策の効果的な進め方(ツール活用編)」](https://www.ipa.go.jp/security/reports/technicalwatch/20190221.html)に取り上げられてもいる。 本記事でのVulsのインストールは、Vuls公式サイト [Vuls · Agentless Vulnerability Scanner for Linux/FreeBSD](https://vuls.io/) にある次のドキュメントに沿って進める。 - [Install with vulsctl · Vuls](https://vuls.io/docs/en/install-with-vulsctl.html) #### Vulsを動作させるまでの手順 ##### Step-1. ホストとしてUbuntuサーバを用意 Vulsを動作させる実験用のホストとして次のようなスペックの仮想マシンを用意し、Ubuntu Server 22.04 LTSをインストールする。 |項目|内容|備考| |---|---|---| |OS|Ubuntu Server 22.04 LTS|| |CPU|x86_64 (amd64), 8core|aarch64 (arm64) 環境でも動作OKでした| |メモリ|4GB|たとえば2GBでは不足でswapが発生、データベース処理が苦しそう| |ストレージ|32GB|DBファイル (sqlite3) のサイズが数GBに達する模様| |ユーザ名|TESTUSER|| ##### Step-2. Setup Docker (Rootless) ホストではDockerが動作している必要がある。Dockerの環境構築で楽するためにスクリプトでインストールする。 - [Install Docker Engine on Ubuntu > Install using the convenience script](https://docs.docker.com/engine/install/ubuntu/#install-using-the-convenience-script) ``` $ curl -fsSL https://get.docker.com -o get-docker.sh $ sudo sh ./get-docker.sh --dry-run ### Executing docker install script, commit: a8a6b338bdfedd7ddefb96fe3e7fe7d4036d945a apt-get update -qq >/dev/null DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null mkdir -p /etc/apt/keyrings && chmod -R 0755 /etc/apt/keyrings curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg chmod a+r /etc/apt/keyrings/docker.gpg echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable" > /etc/apt/sources.list.d/docker.list apt-get update -qq >/dev/null DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin >/dev/null $ time sudo sh ./get-docker.sh (snip) To run Docker as a non-privileged user, consider setting up the Docker daemon in rootless mode for your user: dockerd-rootless-setuptool.sh install Visit https://docs.docker.com/go/rootless/ to learn about rootless mode. (snip) real 0m27.630s user 0m0.002s sys 0m0.007s ``` Dockerはrootless modeで使ってみる。指示に沿ってDockerのインストールを進めると、今回の環境の場合は`uidmap`パッケージが必要とわかったので併せてインストールする。 ``` $ dockerd-rootless-setuptool.sh install [ERROR] Missing system requirements. Run the following commands to [ERROR] install the requirements and run this tool again. ###### BEGIN ########## sudo sh -eux < > # CUSTOM > export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock ``` ユーザの実行権限でDockerが起動していることを確認する。 ``` $ systemctl --user status docker.service ● docker.service - Docker Application Container Engine (Rootless) Loaded: loaded (/home/TESTUSER/.config/systemd/user/docker.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2023-04-07 14:33:37 UTC; 4min 21s ago (snip) ``` ###### 追記 \[2023-10-20\]: システム起動時にrootless modeのDockerを起動 システム起動時にrootless modeのDockerを起動させるためには、次のコマンドを実行する。 ``` $ sudo loginctl enable-linger TESTUSER ``` - 参考: [systemd/User \- ArchWiki > Automatic start-up of systemd user instances](https://wiki.archlinux.org/title/systemd/User#Automatic_start-up_of_systemd_user_instances) ##### Step-3. Clone Vulsctl 「Easy setup tool for Vuls」である[vulsctl](https://github.com/vulsio/vulsctl)をGitHubからクローンする。 ``` $ git clone https://github.com/vulsio/vulsctl.git $ cd vulsctl ``` ##### Step-4. Fetch Vulnerability Databases クローンしたリポジトリ内のdockerディレクトリに移動して、`update-all.sh`を実行する。脆弱性データベースの取得完了までは数十分の時間がかかる。 ``` $ cd docker $ time ./update-all.sh (snip) real 22m27.931s user 0m3.153s sys 0m2.466s ``` #### Vulsを使って脆弱性をスキャンする手順 ##### Step-1. config.tomlの準備 スキャンの対象サーバを定義するファイルとして、リポジトリ内のdockerディレクトリに`config.toml`を作成する。対象サーバはファイル内に複数記述することができる。リモートの対象サーバに対しては公開鍵認証を使ったSSHログインが行われるので、その際にyes/noのキー入力を要求されないように、事前にSSHログインを手動で行っておく (=ホストの`~/.ssh/known_hosts`に対象サーバを登録しておく)。 ``` $ cat config.toml [default] user = "TESTUSER" port = "22" keyPath = "/root/.ssh/id_ed25519" scanMode = ["fast"] [servers] #### localhostをスキャンする例 [servers.localhost] host = "127.0.0.1" port = "local" #### リモートサーバをスキャンする例 [servers.server1] host = "server1.example.com" port = "1234" [servers.server2] host = "server2.example.com" ``` ##### Step-2. configのテスト 脆弱性スキャンを実施する前に、configの内容をテストする。ちなみに上記の「known_hostsへの登録」を行っていないサーバがスキャン対象にある場合、本テストの段階でエラーが発生してくれるので対応する。 ``` #### vuls configtest の代わりとして $ ./config-test.sh ``` ##### Step-3. 脆弱性スキャンの実行とレポートの確認 次の3つのコマンドを実行すると、脆弱性スキャンが実施されて`results`ディレクトリにスキャン結果が保存され、レポートが確認できるTUI (Terminal-based User Interface) が表示される。 ``` $ ./scan.sh $ ./report.sh $ ./tui.sh ``` Web UIでレポートを確認する場合は、`tui.sh`の代わりに`vulsrepo.sh`を実行する。 ``` $ ./vulsrepo.sh $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 04f95db27414 ishidaco/vulsrepo "vulsrepo-server" 6 minutes ago Up 6 minutes 0.0.0.0:5111->5111/tcp, :::5111->5111/tcp suspicious_almeida ``` その後に`http://DockerホストのIPアドレス:5111/` へウェブブラウザでアクセスすると、Vulsのレポートを表や棒グラフの形で見ることができる。ちなみにVulsRepoのオンラインデモが で公開されているので、事前に実際の操作感を確認できる。 ##### 実用編: CVSSスコアが一定以上の最新レポートをSlack通知 公式ドキュメントの次の2つを参照すると、 - [Report · Vuls](https://vuls.io/docs/en/usage-report.html) - [config\.toml · Vuls > Slack section](https://vuls.io/docs/en/config.toml.html#slack-section) ずばり私がやりたい、「定期的に、“CVSSスコアが7.0以上 (深刻度が重要以上) のCVEに関してのみ、かつ、unfixed (未修正) なものは除外した内容”をSlack通知する」仕組みを実現するためには、まずはSlack からIncoming WebHooksを使うAppを新規追加して ([参考ページ](https://zenn.dev/hotaka_noda/articles/4a6f0ccee73a18#%E6%96%B0%E6%96%B9%E5%BC%8F%EF%BC%88slack-app))、`config.toml`に次のようなWebhook設定を追加し、 ``` #### config.tomlへの追加分 [slack] hookURL = "https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX" channel = "#alert_vuls" authUser = "vulsrepo" ``` さらに次の3つのコマンドを定期的にcronで実施すれば良い。 ``` $ ./update-all.sh $ ./scan.sh $ ./report.sh -cvss-over=7.0 -ignore-unfixed -to-slack ``` #### 感想 サーバに対する脆弱性スキャンを専用エージェントなしで、サーバ台数に関わらず一箇所から行えるVuls + Vulsctlというツールは、「なぜ今まで手元になかったのか」と逆に言いたくなるくらい必須の存在になりうると感じている。スケーラブルだし、良いものですね。(そしてもちろん、脆弱性対応はパッチを当てる運用までが大切!) #### 参考画面キャプチャ #### 参考リンク ##### Vlus - [Vuls · Agentless Vulnerability Scanner for Linux/FreeBSD](https://vuls.io/) - [VulsをDockerコンテナで動かす \- とことんDevOps \| 日本仮想化技術が提供するDevOps技術情報メディア](https://devops-blog.virtualtech.jp/entry/20220823/1661222723) - [IPAテクニカルウォッチ「脆弱性対策の効果的な進め方(ツール活用編)」 \| 情報セキュリティ \| IPA 独立行政法人 情報処理推進機構](https://www.ipa.go.jp/security/reports/technicalwatch/20190221.html) - [突然ですが君たちの脆弱性調査は間違っています \| Vuls Blog](https://vuls.biz/blog/articles/20220329a/) - [VulsでOSの判定に失敗する場合は環境変数のTERMを設定すると解消するかもしれない](https://zenn.dev/kyoshida/articles/db3cf5f5b0f63e) ##### その他 - [Slack:Webhook URL取得してSlackに通知する](https://zenn.dev/hotaka_noda/articles/4a6f0ccee73a18#%E6%96%B0%E6%96%B9%E5%BC%8F%EF%BC%88slack-app) --- ### 【読んだ本】 日経サイエンス2023年5月号(特集:対話するAI ChatGPT) - 2023-04-08 URL: https://remoteroom.jp/medialog/2023-04-08_book-b0bxq2hmq5/ ChatGPTが特集されると知り、3月末に近所の本屋で購入。本雑誌を久しぶりに読んで改めて感じたがやはりかなり面白い。科学全般の新しい話題に触れるためのガイドブックのようなものだ。そのなかの1つ、特集「対話するAI ChatGPT 言語モデルから生まれる知性」では、大規模言語モデルの仕組みが大枠で掴める説明がされているように思えた。ChatGPTって何だろう?と感じている様々な人へおすすめできる内容だ。なお、ChatGPTが得意とはしていない領域として「概念の理解」があると思うのだが、概念の最たるものともいえる数学の圏論の特集をChatGPT特集の次に持ってきているところは、雑誌のウイットなのかもしれない。 --- ### VS Code拡張機能「Markdown PDF」のPDF生成でmermaid図が展開されない問題の解決方法 - 2023-03-30 URL: https://remoteroom.jp/diary/2023-03-30/ #### たとえば仕様書を書くとき ```mermaid graph TD A[Client] --> B[Load Balancer] B --> C[Server01] B --> D[Server02] ``` 上記のような、mermaid記法で描く図を含むmarkdownテキストをVS Code上で作成し、VS Codeの拡張機能「[Markdown PDF](https://marketplace.visualstudio.com/items?itemName=yzane.markdown-pdf)」を使ってそのmarkdownテキストをPDFファイルへ変換したとき。mermaid記法の部分が図として解釈・展開されておらず、記法そのままのコード、つまり文字としてPDFファイルに反映されちゃう現象に遭遇した。 VS Codeの標準「Markdownプレビュー」ではmermaid記法部分がちゃんと図として表示されているのになぜ?と調べてみたところ、おそらくの原因と、その解決方法が分かったのでメモ。 ##### おそらくの原因 VS Codeの設定の `Markdown PDF` > `Mermaid Server` で指定されているデフォルトのURL ([公式ドキュメント](https://github.com/yzane/vscode-markdown-pdf/#markdown-pdfmermaidserver)) が、2023-03-30時点ではNot Foundになっているため。 ##### 解決方法 VS Codeの設定にある `Markdown PDF` > `Mermaid Server` の値を、たとえば下記の変更後のURLに変更する。こうするとMarkdown PDFがmermaid.min.jsを読み込み、PDFファイルにもmermaid記法の部分が図として展開される。 ||Markdown PDF > Mermaid Server| |---|---| |変更前 (デフォルト)|https://unpkg.com/mermaid/dist/mermaid.min.js| |変更後|https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js| #### 参考リンク 今回の問題を多少の時間をかけて自力で解決した後、次のIssue情報を発見した……。orz - [Markdown\-pdf: Mermaid Server VSCode URL no longer resolves · Issue \#312 · yzane/vscode\-markdown\-pdf](https://github.com/yzane/vscode-markdown-pdf/issues/312) --- ### Nissan X-TRAIL (T33型エクストレイル) 用に揃えたパーツ・アクセサリーと装着レビュー - 2023-03-07 URL: https://remoteroom.jp/diary/2023-03-07/ #### 弾む心のショッピング 昔、寿屋 (ことぶきや) という大型スーパーが九州地方にありました。“弾む心のショッピング”というのはそのスーパーでよく流れていた店内ソングのワンフレーズ。ウン十年前に聴いていた歌なのに耳に染みついたままです……。 さて。いよいよ我が家は近日中に[Nissan X-TRAIL (T33型エクストレイル)](https://www3.nissan.co.jp/vehicles/new/x-trail.html) に乗り始めるはず。 - [試乗車 Nissan X-TRAIL 雑感+色選び \[2022-08-14\]]() そこで、必要だろうなと考えるパーツ・アクセサリーの入手を弾む心でぽちぽちと進めています。これらを実際に車両へ取り付けた際には、実物の写真と簡単なレビューを追記していこうと考えています。\[2023-03-07\] ##### 追記 \[2023-03-21〜\] X-TRAILに乗り始めた初日から各パーツ・アクセサリーの取り付けを進めて使用感がわかってきましたので、簡単なレビューとして随時追記していきます。各表の中で▲印が付いている物はレビュー準備中のものです。\[2023-03-21\] #### パーツ・アクセサリーについてのコメント・写真 ##### a. 外観 |ID|種別|商品名|購入時の価格|購入店| |--:|---|---|--:|---| |a-1|ドアガード|[カーメイト CZ494](https://ps.carmate.co.jp/c/car/cz494)|817円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B086G8D1RQ)| |a-2|ドアガード|[星光産業 EW-142](https://www.seikosangyo.co.jp/exea/subpage14.php?no=24)|671円|[ヨドバシ.com](https://www.yodobashi.com/product/100000001004130339/)| |a-3|アルミロードホイール|[NISMO エクストレイル(T33)用アルミロードホイール LMX6S](https://www.nismo.co.jp/products/nismo_parts/NEW_PARTS/index_2022.html#a7)||日産ディーラー| ###### a-1. ドアガード \[2023-03-21\] →使用停止 \[2023-03-29\] 長さ3mのドアガード1セットで、X-TRAILのフロントドア2枚とリアドア2枚の縁をカバーすることができた。ちなみにリアドアの途中の曲率のきつさと厚みの関係上、リアドアの上部には貼らないことにした。外気温が低いときに両面テープの貼り付けを含む作業を行ってしまったためか、ガードを固定するための粘着性が完全な状態ではなさそう。時間が経つにつれて次第にガードがドアの縁に沿わずあちこちやや曲がったようになってきているが、ドアの縁は守れているから気にしない気にしない……。ぶっちゃけ、この貼り付けはプロに頼めるならそうしたい。→使用停止して[a-2](#a-2-ドアガード-2023-03-29)に切り替え ###### a-2. ドアガード \[2023-03-29\] 先日取り付けたドアガードa-1は、やはり私の施工が不完全で、両面テープとモールの粘着が所々ずれてきた。さらに、ずれてきたフロントドアのモールはリアドアを開くときに巻き込まれがちになってさらに外れそうになる。 それは本末転倒なので作戦を変更。ドアの縁全体に取り付けてドアを守るものではなく、局所的に守るドアモールa-2を仕入れた。長さ5cm程のドアガードを取り付ける、X-TRAILの前後のドアの金属部分の最も外側になる部分として、リアドアはホイールアーチに近いところのプレスラインの位置だと見定めた。フロントドアはドアの面の凹凸が少なめで判断しづらいのだが、ドアのラッチ (止め金具) が付いている高さの位置だと適当に決めて作業した。それぞれ、写真の黄色い丸のところにドアガードを取り付けている。 ###### a-3. アルミロードホイール \[2023-04-21\] NISMOアルミロードホイールLMX6Sに関しては、次の記事にまとめています。 - [ホイールを換えたらNissan X-TRAIL (T33型) はどう変わるのか \[2023-04-21\]]() ##### b. 光りもの |ID|種別|商品名|購入時の価格|購入店| |--:|---|---|--:|---| |b-1|バックランプ用LEDバルブ|[IPF 503BL](https://www.ipf.co.jp/products/501bl.html)|2個で6,300円|[Yahoo\!ショッピング](https://store.shopping.yahoo.co.jp/autowork/4951499018471.html)| |b-2|ウインカー用LEDバルブ|[PIAA LEW103](https://www.piaa.co.jp/category/4rin/light/backup-led/)|2個で6,812円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B09M82XYTF)| |▲b-3|ライセンスランプユニット|[fcl. FPRT-00064N](https://www.fcl-hid.com/shopdetail/000000001270) (C27専用)|2,090円|[楽天市場](https://item.rakuten.co.jp/fcllicoltd/hfprt-00064n/)| |▲b-4|LEDルームランプセット|[YOURS y408-036](https://item.rakuten.co.jp/atv-yours/y408-036/) (ゴールド)|3,416円|[楽天市場](https://item.rakuten.co.jp/atv-yours/y408-036/)| |b-5|反射材|grepo リフレクター 赤色|2個で596円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B09HC9Y7B7)| 1. 2. 3. (同じ品をAmazon.co.jpで発見できず) 4. 5. ###### b-1. バックランプ用LEDバルブ \[2023-03-21\] バックドアの内張りを剥がしてから電球を取り替える必要がある。取り替え前後の比較はしていないのだけど、X-TRAILにはバックカメラもあるから純正状態よりもほどほどに明るいほうが良いだろう。 ###### b-2. ウインカー用LEDバルブ \[2023-03-21\] もちろん周囲の状況にもよるが、爆光とまでは感じにくい、私としては好みの光量。このウインカー用LEDバルブには冷却ファンが内蔵されており、ファン内蔵タイプは初めて使うので、果たしてどんな音を発するものなのか不安ではあった。実際に取り付けて点灯させてみると、停止時の車内でも冷却ファンの音は聞き取れるのだが、音質的には高速ファンから想像される“甲高くて不快な音”では全くなくて、予想よりも音程が低い唸るような音であった。下記の動画の音では車外でどんなふうに聞こえるかが分かる。 ###### LEDへの交換前後での点滅の様子 ###### 車外で聞こえる冷却ファンの音 ###### b-5. 反射材 (リフレクター) \[2023-05-13\] 以前乗っていた車にはカーテシランプ (ドアランプ) が付いていて、ドアを開く際にドアの存在を周りに気づいてもらえる可能性が高いという安全面でのメリットを感じていた。X-TRAILにはカーテシランプが無いので代わりにドアに反射材を貼ってみようと、赤色の4枚入りのものを2組購入。左右のフロントドアに2枚ずつ、左右のリアドアに1枚ずつ、そしてバックドアに2枚を貼り付けた。結果として、これは安価な割には効果的なカスタマイズだなと勝手に満足。 ##### c. その他電気系 |ID|種別|商品名|購入時の価格|購入店| |--:|---|---|--:|---| |▲c-1|テーブルタップ|[Panasonic WHA25362WP](https://panasonic.jp/tap/p-db/WHA25362WP.html)|1,250円|[ヨドバシ.com](https://www.yodobashi.com/product/100000001001385997/)| |c-2|USB変換ケーブル|変換名人 CA2713 (USB 3.0 延長ケーブル 0.2m 下L型 ホワイト)|920円|[ヨドバシ.com](https://www.yodobashi.com/product/100000001007546501/)| |c-3|microSDカード|[KIOXIA KEMU-A064G](https://www.kioxia.com/ja-jp/personal/micro-sd/exceria-high-endurance.html) (64GB)|4,270円|[ヨドバシ.com](https://www.yodobashi.com/product/100000001005629029/)| 1. 2. 3. ###### c-2. USB変換ケーブル \[2023-03-21\] X-TRAILの後席の真ん中にUSBポートが用意されているが、たとえばUSB-A側に通常の直線的なケーブルを挿したままにしておくと、後席の乗員の足がケーブルを蹴って、車側のUSB端子が破壊されてしまう未来が見える気がした。そこで少しでも破壊が起こりにくいように、ケーブルの向きを下方向へ変えよう。ということで定番の変換名人である。写真のようにUSB端子部分の出っ張りが減ったので多少は安心だ。 ###### c-3. microSDカード \[2023-03-21\] 納車時に日産ディーラーの方から「ドラレコのmicroSDカードはドラレコ用に交換してください。また使用可能な最大容量は64GBですので」と聞いていたし、ドラレコが記録したはずの大事な動画が欠損という悲しい事態は避けたいので、素直にドラレコ用・産業用のmicroSDカードに交換した。KIOXIAのカードを選択したのは、個人的に緑色が好きだからというのが第一の理由。 ##### d. 運転関係 |ID|種別|商品名|購入時の価格|購入店| |--:|---|---|--:|---| |d-1|カーナビ保護フィルム|[X-TRAIL エクストレイル T33 MULTIFUNCTION SCREEN PROTECTOR for NISSAN / AF-NXT-T33](https://deff.co.jp/product/af-n)|4,979円|[Deff DIRECT STORE](https://www.shop-deff.com/c/car/carfilm/carfilm-nissan/AF-NXT-T33)| |d-2|インテリジェントミラー保護フィルム|[インテリジェントミラー MULTIFUNCTION SCREEN PROTECTOR for NISSAN / AF-NMR01](https://deff.co.jp/news/multifunctionscreenprotector)|2,979円|[Deff DIRECT STORE](https://www.shop-deff.com/c/car/carfilm/carfilm-nissan/AF-NMR01)| |d-3|キーケース|[日産 インテリジェントキーケースシリコンタイプ (X-TRAIL) KWA1000P30](https://shop.nissan.co.jp/product/detail/5629)|2,200円|[NISSAN ONLINE SHOP](https://shop.nissan.co.jp/product/detail/5629)| |▲d-4|停止表示灯|[AMON 6910 PURPLE SAVER(パープルセーバー)](https://www.amon.jp/products2/detail.php?product_code=6910)|2,036円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0B58HCPBX)| |▲d-5|非常信号灯|[AMON 6904赤 非常信号灯](https://www.amon.jp/products2/detail.php?product_code=6904)|722円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B08YDMSZSG)| |d-6|ペダルセット|[RAZO RP101 GT SPEC PEDAL SET AT-S](https://ps.carmate.co.jp/c/car/rp101)|4,191円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B001HY961M)| |d-7|遮光 車用サンシェード|[RUSEPIN 傘式サンシェード (XL,145×85cm)](https://www.amazon.co.jp/dp/B0BYYKXKFM)|3,380円の20%OFF|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0BYYKXKFM)| |d-8|電動コンプレッサー|[Kashimura KD-228](https://www.kashimura.com/goods/car/tpms/kd228.html)|4,550円|[ヨドバシ.com](https://www.yodobashi.com/product/100000001005959440/)| |d-9|タイヤ空気圧監視システム (TPMS)|[Kashimura KD-220](https://www.kashimura.com/goods/car/tpms/kd220.html)|5,819円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B099DYWKRC)| 1. (同じ品をAmazon.co.jpで発見できず) 2. (同じ品をAmazon.co.jpで発見できず) 3. 4. 5. 6. 7. 8. 9. ###### d-1. カーナビ保護フィルム \[2023-03-21\] どんなタイプの画面保護フィルムを選ぶかについてはノートPCやスマホの世界で散々悩んで苦しんできたから、カーナビでも同じように悩みたくはない。そこで一発で決めるべく、価格帯が高めではあるのだが「車載用ディスプレイ専用」を謳っている[Deff](https://deff.co.jp/product/af-n)の製品を選択した (PR記事: [スマホは貼るのに\!? カーナビ用フィルムなぜ貼らない? 「純正品質」のナビ専用保護フィルムがマジでスゴイ \- 自動車情報誌「ベストカー」](https://bestcarweb.jp/feature/tieup/452811))。このフィルムの形状は長方形ではなく貼り付け部分に合わせて微妙な台形をしているので、貼り付けの際にはフィルムの上下方向を間違えないように要注意。フィルムの効果として、貼る前後の比較はできていないが自分の経験と照らし合わせた印象としては、他車のどのカーナビよりもこれを貼ったX-TRAILのナビ画面は見やすい気がしている。 ###### d-2. インテリジェントミラー保護フィルム \[2023-03-21\] →未使用のまま \[2023-03-29\] カーナビ保護フィルムと同様に、「インテリジェントミラーも液晶画面だしね」という単純な考えでこの保護フィルムも購入したのだが、実際に貼り付けて使用するのは躊躇している。インテリジェントミラーを、走行中、単なる物理的なミラーとして使用する局面もあるかもしれないと気付いたからだ。その場合のミラーは反射面がクリアな鏡面であるべき。商品サイトにも次の記述がある。 > 電子ミラー利用時を想定したフィルムとなっています。通常のミラーでのご利用の際にはディスプレイが曇った映りとなりますのでご注意ください。 ###### d-3. インテリジェントキーケース \[2023-03-29\] X-TRAILのキーを金属製の小さなカラビナ型キーホルダーにぶら下げていると、じゃらじゃらと接触し合って傷が付きそうだ。キーをシリコン製のキーケースに入れておくと良いかもしれないと思って購入。触った感じがすべすべで気持ちいい。 ###### d-6. ペダルセット \[2023-04-29\] 運転感覚にほぼ不満がないX-TRAILであるが、ペダルの感触をノーマルから変えてみたらどうなるだろう?とふと思いついて、人生初のペダルセット (アルミ製) を購入。ペダルは安全上重要な部分であるから取付作業は慎重に行い、一時間程度は要したと思う。細かい部品を使っているので、最初のある程度は机上で組み立てたほうが良い。表面がゴム製のノーマルペダルの上にこのペダルセットを取り付けると、靴との摩擦がつるつるかつ一定な状態となり、スムースに踏み込み量を調整できるようになった気がする。また、ペダルが金属光沢を持つので足元のペダル位置がはっきり見えるようになるのは、思わぬ利点の一つ。 ###### d-7. 傘式サンシェード \[2023-05-12\] 日差し対策のサンシェードを探していたところ、「傘式」があると知ったので挑戦してみた。X-TRAILの大きさを考えてXLサイズ (145x85cm) を選択。物としては折りたたみ式の四角い日傘で、収納に便利な布袋が付属している。展開した様子は下記の写真の通りで、サイズ的にはどんぴしゃりであった。生地のシワシワは展開時間とともにだんだん伸びてくれるものと期待するし、折れるようになっている傘の柄はナビ画面の前方に置けるような位置関係になり、ちょうど良い。なお、狭い車内で傘を開くという行為にはそれなりの困難を伴うので、あちこちに当てないように気をつけながらやるべし。 ###### d-8. 電動コンプレッサー \[2023-05-22\] これまで乗っていた車では、ガソリン給油時のサービスステーションで毎回タイヤの空気圧をチェックするようにしていた。しかしX-TRAILは大きいタイヤを履いている上に足が長い (燃費が良いので給油する頻度が少なくなる) ため、自宅でも空気を充填できるようにこの電動コンプレッサーを購入。充電式バッテリーは内蔵していない、シガーソケットの12V電源を供給して動かすタイプである。電源コードの長さは3mで、X-TRAILの各4輪までの長さは十分だ。稼働音はポンプらしくまあまあ大きく、たとえば近隣の住居に近い、音が響く駐車場では夜間は使わないほうがよさそう。筒の先に付いているLEDライトは有能で、下記の写真のように作業時に重宝する。 ###### d-9. タイヤ空気圧監視システム (TPMS) \[2023-05-22\] 車内からタイヤの空気圧をモニターできるシステム (TPMS: Tire-Pressure Monitoring System) というものに以前から憧れていて、後付キットがあると知ったので、いわゆる「技適」マークが付いた電波法認証品を購入。車内に取り付けるモニター部分はUSB給電で動き、各タイヤのバルブに取り付けるセンサー部分には交換可能なCR1632電池が内蔵されていて、CR1632の想定寿命は約8ヶ月だそうだ。ちなみに送信周波数は429.5MHz。センサーの取り付け自体は簡単なのだが、なにしろ安全上の重要部品なのでセンサー部分からの空気漏れがないよう石鹸水を使って注意深く確認した。モニターの取り付け位置はまだ未定で、たまに覗けばいいやという気持ちなのでステアリングコラムの左側に貼り付けようと思っている。なおひとつだけ残念な点があった。X-TRAILのタイヤの指定空気圧は前後で異なるのだが、このTPMSの空気圧アラームの閾値は4輪共通の一つの値をセットするしかないようなので、ここのところは妥協が必要である。 ##### e. 車内充実用 |ID|種別|商品名|購入時の価格|購入店| |--:|---|---|--:|---| |e-1|コンテナボックス|[NISMO 折りたたみコンテナボックス 50L](https://shop.nissan.co.jp/events/18061101/)||| |e-2|ヘッドレスト|URI ヘッドレスト (レッドブラウン)|2,980円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B08VWRK4QX)| |e-3|スマートフォンクレードル|[TOPGO JC1](https://topgobrand.com/products/pole1)|2,699円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B082DWNSD4)| |e-4|ドリンクホルダー|[槌屋ヤック ZE30](https://www.yacjp.co.jp/products/detail/1335)|2,291円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B07NVGK4FC)| |e-5|トレイ|[槌屋ヤック ZE68](https://www.yacjp.co.jp/products/detail/1639)|1,582円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B09V742W9F)| |e-6|チャイルドシート保護マット|[Active Winner チャイルドシート保護マット](https://shop.activewinner.com/products/product-2) (キックガード無し)|2,160円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B01LYQ8E77)| |e-7|トレイ|beyond self センターコンソールトレイ|1,880円|[Amazon.co.jp](https://www.amazon.co.jp/dp/B0B7DN1CQ6)| |▲e-8|固定用ロープ|[DAISO 平型ロープ 1.5m](https://jp.daisonet.com/collections/tools0203/products/4549131374995)|110円|DAISO店舗| |e-9|フック|[GORDON MILLER シートフック](https://vrnvroomn.com/products/205402?variant=42442372546717) (GRAY)|1,121円|オートバックス店舗| |e-10|ティッシュケース|[GORDON MILLER コーデュラティッシュケース](https://vrnvroomn.com/products/204907?variant=42441598337181) (GRAY)|2,356円|オートバックス店舗| |e-11|USB電源付きリアトレイ|[EXEA EB-213](https://www.seikosangyo.co.jp/exea/subpage3.php?no=23)|2,710円-※|[Yahoo! ショッピング](https://store.shopping.yahoo.co.jp/aoaozz/jhaa48d91898c.html) ※e-12と合わせて1,000円OFFクーポンを使用| |e-12|リアトレイ|[EXEA EB-209](https://www.seikosangyo.co.jp/exea/subpage3.php?no=15)|1,719円-※|[Yahoo! ショッピング](https://store.shopping.yahoo.co.jp/aoaozz/jhac3cf7a6389.html) ※e-11と合わせて1,000円OFFクーポンを使用| 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ###### e-1. コンテナボックス \[2023-03-21\] X-TRAILの荷室用コンテナボックスとして、隠れたおしゃれ?のつもりでNISMOのロゴが入った50Lのものを某フリマサービスで調達した。これはぶっちゃけ自己満足の世界である。機能性としては特段何もないのだが気分は上がる。 ###### e-2. ヘッドレスト \[2023-03-21\] 後席において究極の居住性を求めてくるV.I.P. (=家族) のために、頭をやんわりと置けて寝られるクッションとして用意した。色はX-TRAILのナッパレザー/タンに合いそうだと思ったレッドブラウンを選択。実際の色は車内に馴染んでおり、マッチングはかなり良いのではと自負している。 ###### e-3,4. スマートフォンクレードル, ドリンクホルダー \[2023-03-21\] 置くだけ充電に非対応のAndroidスマホを、センター付近の、車の操作系を妨げない見やすい位置に設置したい、となると、X-TRAILの純正ドリンクホルダーを使って立てることをまず思いつく。しかしそれではドリンクホルダーを一つ塞いでしまって助手席使用時に困る。そこで、スマホ設置とドリンクホルダーを両立させるために上記の2つの製品を組み合わせることを考えた。両方のメーカーが推奨しない使い方であることには留意が必要だが、自分にとって理想的な設置の形が作れたのでかなり満足している。ちなみに、スマートフォンクレードルの両脇を広げる (スマホをリリースする) ボタンは、裏側上部にある。 ###### e-5. トレイ \[2023-03-21\] →未使用のまま \[2023-03-29\] うちの日常である後席2名乗車のその真ん中に、スマホや小物を置くちょっとしたテーブルを作ってみるかと妄想して、ドリンクホルダーにはめ込むトレイを調達した。しかし実際に取り付けをしてみると、今回の用途にはこのトレイはベストじゃないなと感じるところがあり、取り付けないことにした。つまり目論見失敗。orz 理想としては、センターアームレストに手を置いて伸ばしたその前方に、もっと大きな面積のトレイがあってほしい。つまり倒した状態のセンターアームレストのヘッドレスト辺りだ。そこで「くの字」型の板をセンターアームレスト本体とヘッドレストの間に挿すことで、取り外しも可能なトレイが作れるんじゃないかな?というのが現在のアイデアである。 ###### e-6. チャイルドシート保護マット \[2023-03-21\] X-TRAILの後席に設置した。サイズ的にはちょうどよく、今回は利用しないけれどもISOFIXの金具部分を隠さないように切れ目が入っている。嫌な匂いも特に感じなくて問題なし。 ###### e-7. センターコンソールトレイ \[2023-03-21\] X-TRAILのセンターコンソールボックスは深さがかなりある。容積としては大きいのに物の整理はしにくい!という事実に乗り始めてすぐ気づいたのでトレイを使うことにした。コイン類やカード類を分類して置ける構造をしていて良さげである。ちなみに、トレイがジャストサイズ過ぎて持ち上げるのは簡単じゃないので、センターコンソールボックスの底のほう (トレイの下部分) の活用はあまり出来そうにない。 ###### e-9,10. シートフック, ティッシュケース \[2023-03-21\] AUTOBACSの一ブランドだという「[GORDON MILLER](https://vrnvroomn.com/collections/gordon-miller)」の車内グッズを初めて購入した。色はナチュラルカラーともいえる4色が用意されていて、私はX-TRAILの車内に最も合いそうだと考えたGRAYを選択。ナップサックにありそうな、単純すぎないデザインが気に入っている。 ###### e-11,12. USB電源付きリアトレイ, リアトレイ \[2023-05-01\] 日産SERENA (C28型) の展示車両に乗る機会があり、その後席には便利そうな純正「パーソナルテーブル」 (折り畳みテーブル) が付いていた。X-TRAILにも真似して、長旅における後席V.I.P.のくつろぎのためにリアトレイを付けようと考え、市販品の中でベストと言えそうな2つのリアトレイ (EXEA EB-213, EB-209) を選択。USB電源付き (EXEA EB-213) のほうはシガーソケットからの電源供給が必要なので、前席ダッシュボードから配線している。 両方とも製品の謳い文句通りに、トレイの背中部分へ挿入する金属プレートの剛性によってトレイの背中を前席背面のほうへ寄せた状態を維持することができ、つまり後席の目線からはトレイが遠ざかってくれる。単に背中が鉛直方向へ垂れ下がる状態よりも、後席空間のすっきり感を邪魔していないと思う。ちなみに [星光産業 EB\-209 リアトレイ \(再レビュー3回目\)のパーツレビュー \| フリード\(フリード 乗り\) \| みんカラ](https://minkara.carview.co.jp/userid/1597493/car/3326384/12145964/parts.aspx) で紹介されている糸を使った工夫も後日トライしてみたい。 ##### f. 検討中のもの - DRL (デイタイムランニングライト) #### 参考リンク - [試乗車 Nissan X-TRAIL 雑感+色選び \[2022-08-14\]]() - [ホイールを換えたらNissan X-TRAIL (T33型) はどう変わるのか \[2023-04-21\]]() --- ### 【読んだ本】 空爆論: メディアと戦争 - 2023-02-23 URL: https://remoteroom.jp/medialog/2023-02-23_book-4000271776/ 空から爆撃を行う“空爆”について、飛行機が生み出された以降の過去から現在 (ウクライナ侵攻) まで、空爆を行う者の眼差しはどこにいる誰のものか、爆撃の対象は何か・どのような範囲であるか、爆撃の戦略的な意図はなにか、などを深く分析し、哲学的な側面から論じ切っているように思う。 本書ではおそらく認識に近い意味で“眼差し”という言葉が数多く使われている。私としては、眼差しを伴う空爆の意味合いを考え抜く研究の存在を本書によって知れたことが大きな収穫だ。そしてこの流れの中では自然と、第二次世界大戦での日本の“特攻”も空爆論の文脈で分析されることになる。つまり、特攻において眼差しはどう扱うのか。人間を特攻という行為に集団的に至らしめる国家・精神文化・戦況とはどのようなものなのか。私がこの分析を追いつつとても驚かされたのは、当時の連合国軍がすでに、テレビカメラを搭載して遠隔操縦で無人飛行が行えるドローン[TDR-1](https://ja.wikipedia.org/wiki/TDR-1_(%E8%88%AA%E7%A9%BA%E6%A9%9F))を開発し、1942年に初飛行を行っていた事実だ。これが持つ意味合いが特攻の意味合いと見事に対比されていることに、感銘を受けた。なお、ドローンTDR-1の動画はYouTubeで発見できたので以下でリンクする。 大戦中に東京や神戸など日本の都市部に対して遂行された大空襲、朝鮮戦争での空爆、9・11 (アメリカ同時多発テロ) も同様に、空爆を軸として戦争と世界を描いている本書の照準の範囲にある。拙い表現であるが、私の知り得なかった分野を垣間見せてくれる、手に取って読めたことに知的な興奮を感じる一冊だった。 #### 参考リンク - [【観た映画】 アイ・イン・ザ・スカイ 世界一安全な戦場]() - [U\.S\. NAVY WWII TDR\-1 DRONE OPERATIONAL TESTS IN SOUTH PACIFIC 30772 \- YouTube](https://www.youtube.com/watch?v=CwS669Ipgwc) --- ### EC-CUBE4の環境をPostgreSQL, Nginx, SSL証明書とともに構築するansible-playbookを作った - 2023-02-18 URL: https://remoteroom.jp/diary/2023-02-18/ #### ansibleでの構築に慣れたい ECサイトを構築するためのオープンソースソフトウェアといえば、筆頭に挙がるのがEC-CUBE。 - 公式サイト: [EC\-CUBE4 理想のショップは作れる"あなたのための" EC\-CUBEできました](https://www.ec-cube.net/product/4.0/) このEC-CUBE4 (ダウンロード版) を任意のUbuntuサーバに導入して動作させるまでの環境構築作業は、まずウェブサーバソフトウェアやデータベースやら設定してなんじゃかんじゃ……と、各作業は定型的なのだがどうしても工数が多い。 そこで、自分用の構築手順書の代わりにansible-playbookを書いてみました。GitHubの次のリポジトリに置いています。 - [mah\-jp/ec\-cube4\_installer: EC\-CUBE4の公式パッケージをUbuntu環境に導入する時短ansible\-playbook 〜PostgreSQL/Nginx/Let's EncryptのSSL証明書とともに〜](https://github.com/mah-jp/ec-cube4_installer) ##### playbook一覧 mah\-jp/ec\-cube4\_installerは、具体的には次のようなansible-playbookのセットです。順々に実行するとEC-CUBE環境が楽に整うはず、という構成になっています。ニーズがどの程度あるか全く見えませんが、もし良かったら試用してみてください。 |playbook名|内容| |---|---| |`sudo_1_setup-server.ansible.yml`|サーバとなるUbuntu環境の初期設定を行います。| |`sudo_2_setup-certbot.ansible.yml`|Certbotをセットアップして、Let's EncryptのSSL証明書を取得します (Google Cloud DNSの併用が前提の作り)。| |`sudo_3_setup-nginx.ansible.yml`|Nginxとphp-fpmをセットアップします。| |`sudo_4_setup-postgresql.ansible.yml`|PostgreSQLをセットアップして、EC-CUBEに必要なDBとユーザの作成を行います。| |`sudo_5_install-eccube.ansible.yml`|EC-CUBEのアーカイブを公式サイトからダウンロードしてサーバ上に展開し、composerの力を借りて必要なPHPモジュールも導入します。| |`sudo_6_switchenv-eccube.ansible.yml`|EC-CUBEの動作環境を切り替えます。ウェブインストーラーでの初期設定が完了した後に適用してください。| |`sudo_9_destroy-postgresql.ansible.yml`|【再初期化用】PostgreSQLに作成したEC-CUBE4用のデータベースとユーザを削除します。| #### 参考リンク - [mah\-jp/ec\-cube4\_installer: EC\-CUBE4の公式パッケージをUbuntu環境に導入する時短ansible\-playbook 〜PostgreSQL/Nginx/Let's EncryptのSSL証明書とともに〜](https://github.com/mah-jp/ec-cube4_installer) --- ### 【観た映画】 アイ・イン・ザ・スカイ 世界一安全な戦場 - 2023-02-12 URL: https://remoteroom.jp/medialog/2023-02-12_movie-b07kfddv1j/ - 視聴: [YouTube](https://www.youtube.com/watch?v=KaUDpxNxAtI) 原題『Eye in the Sky』。どういう巡り合わせだったのか覚えていないのだが、いま『[空爆論 メディアと戦争](https://www.iwanami.co.jp/book/b609306.html)』という本を読み進めようとしている。その序章でこの映画が引用されており、“空爆論”が論じられる世界状況の把握に繋がるだろうと考えてまずは本作を観てみることにしたのだ。 緊急事態でのオペレーションとして、法廷での審理を行わずにテロの容疑者をリモートから殺害するとしたら。未来の事件はまだ起こっていない。殺害時の付随的損害によって民間人が死亡する確率は許容値よりも高い。 本オペレーションの実施判断に関わり、そして実際に遂行する人間たちはさてどうするのか。マルチエンディングは存在しないのが通常の映画だし現実も同じだ。人間活動に葛藤と矛盾があることを認識したい時に相応しい映画となっている。 #### 鑑賞リンク --- ### LibLibを神戸市立図書館の新システムに対応させた - 2023-02-08 URL: https://remoteroom.jp/diary/2023-02-08/ #### 応用のためのJSON化 下記の記事で紹介してきた拙作スクリプト [https://github.com/mah-jp/liblib](https://github.com/mah-jp/liblib) に関してのお知らせです。 - [図書館で借りている本の情報をJSON化し、返却期限が近いものを通知するスクリプトのセット \[2021-07-14\]]() - [電子図書館の対応を追加 ~借りている本情報のJSON化スクリプト~ \[2021-07-18\]]() [神戸市立図書館](https://www.city.kobe.lg.jp/a09222/kosodate/lifelong/toshokan/index.html)にて先月行われたシステム変更に追従すべく、この度改造を行いました。具体的には、神戸市立図書館ウェブサイトから情報を抽出する`book2json_opac.py`を次のように変更しています。 - 2023年1月31日以降の新図書館システムのスマートフォン版サイトをHTML解析できるようにした - [selenium](https://www.selenium.dev/)をやめて[playwright](https://playwright.dev/)でスクレイピングを行うようにした なお、ウェブサイトに表示されうるパターンの全てを私個人が把握できてはいませんので、HTMLソースが想定外の内容になっていると、エラーが発生するかJSON出力がおかしくなると思います。 #### 参考リンク - [mah\-jp/liblib: 神戸市立図書館・神戸市電子図書館で借りている本と予約している本の情報をJSON化するスクリプト+返却期限が近い本と取り置き中の予約本を通知するスクリプト](https://github.com/mah-jp/liblib) --- ### 『BoTトーク』の開封の儀とレビュー 〜『みてねみまもりGPS』からの乗り換えです〜 - 2023-02-04 URL: https://remoteroom.jp/diary/2023-02-04/ #### 購入の動機 我が家では約2年間、子ども用GPS端末『[みてねみまもりGPS](https://mitene.us/gps) (第1世代)』を使ってきましたが ([レビュー記事 \[2021-03-10\]]())、このたび『[BoTトーク](https://www.bsize.com/bot/talk)』へと乗り換えました。 それは、GPS端末でありながら音声メッセージのやりとりができるという、BoTトークの新機能に着目したからです。BoTトークを使って実際に親とおしゃべりしている近所のこどもを私が見かけ、なんだかタイムラグのあるトランシーバー ([関連記事 \[2022-09-19\]]()) みたいで楽しそうだなぁ、と感じてしまったのです。というわけでぶっちゃけ親 (私) の趣味でのこの乗り換えは、はたして吉と出るか凶と出るか。 - [【公式】BoTトーク \| No\.1🥇こどもGPS \| トークできるGPS 新登場](https://www.bsize.com/bot/talk) #### 開封の儀 ##### 外箱と内容物 BoTトークを公式ウェブサイトで購入したところ、外箱にそのまま郵送ラベルがシールで貼られた簡素な状態で到着しました。これは余計なゴミが出なくてよし。内容物はGPS端末とマニュアルの2つ。 ##### 本体の様子 BoTトーク本体は、Google Nest/Homeシリーズを意識しているとしか思えないグレー&ホワイトのカラーリングをしています。クロス部分の仕上がりやそこに埋め込まれたLEDも含め、「これは新型のGoogleミニデバイスなんだよ」と言ってしまっても通用しそう。かわいいからよし。 ##### 充電時のLED状態 まずは充電します。USB Type-Cケーブルを用いてBoTトークへ給電すると、上部に円形に埋め込まれた12個のLEDが光り、かつ充電のレベルメーターのごとく赤→黄→緑と色づけされます。充電の進行具合が可視化されるのはとても分かりやすい。 #### 利用手順 ##### 1. 専用アプリをインストール スマホに次の専用アプリをインストールし、アプリを起動します。 - [「BoT | AIで子どもを見守るGPS」をApp Storeで](https://apps.apple.com/jp/app/bot-ai%E3%81%A7%E5%AD%90%E3%81%A9%E3%82%82%E3%82%92%E8%A6%8B%E5%AE%88%E3%82%8Bgps/id1216688438) - [BoT | AIで子どもを見守るGPS \- Google Play のアプリ](https://play.google.com/store/apps/details?id=com.bsize.bot) ##### 2. アカウントとGPS端末を登録 アプリにて、オーナー (契約者) となるアカウントを新規作成し、次にGPS端末の登録を行います。登録では、本体側面に印字されている7文字の英数字をアプリに読み込ませます。 GPS端末の登録が完了すると、アプリの画面に「GPS BoT」として表示されました。デモ用として「デモ太郎」という名前のGPS端末も最初から登録されています。 ##### 3. 地図・移動履歴画面 GPS端末の移動履歴は過去一週間分まで遡れます (ちなみに「みてねみまもりGPS」では過去90日分です)。また、画面上のGPS端末のアイコンを長押しすると、その場所のストリートビューをすぐに確認することができます。 ##### 4. トーク画面 BoTトークの真髄とも言えるトーク画面は、いわば、文字はやりとりせず音声のみでやりとりするチャット画面の見かけをしています。アプリ側では過去の音声を遡って再生できるようです。GPS端末側ではシンプルに、上部の真ん中にあるボタンを短押しすることで、もっとも新しい音声メッセージのみ再生可能です。また、GPS端末での音声メッセージの録音は、同じボタンを長押しすることで行えます。 ##### 5. モード・プランの選択画面 BoTトークの動作モードは、「頻度優先モード」「バッテリー優先モード」「機内優先モード」の3つから選択できるようになっています。初期状態では「頻度優先モード」だったのですが、少しバッテリー消費が早いなと感じたので現在は「バッテリー優先モード」を選択しています。 契約プランの変更もアプリ上で可能です。トーク機能を使わない場合の「GPSプラン (月額税別480円)」と、トーク機能を使う場合の「GPS&トーク (月額税別680円)」の2プランがあります。契約の途中でプランを切り替えられるのは経済的だなと思います。 ##### 6. 他のスマホでも見守る GPS端末を見守る人を増やしたい場合は、公式サイトのFAQにしたがって設定すればよいです。 - [ご家族(複数人)でお子様を見守りたい \- サポートセンター](https://bot.helpscoutdocs.com/article/592-article) #### 感想: こどもとゆるく繋がるGPS GPS端末としての位置情報の精度の観点では、当方の利用環境において、「みてねみまもりGPS」と「BoTトーク」とで顕著な違いは感じられません。どちらも見守り性能として問題なし。 しかし、後者が持つ音声メッセージ機能には、なにやら古くて新しい可能性を感じます。非同期の音声メッセージの交換を日常的に行える道具って、他になくてまず単純におもしろい。一般的なこども用GPS端末の用途は、親などがこどもの移動履歴を見守るためのものですが、BoTトークですと、外出中のこどもに向けてはもちろん、家に居るこどもに向けて、外出している家族が音声メッセージを送るという使い方もできます。 最後に持ち運び方法について。音声メッセージをやりとりする際にすぐに握って操作できるよう、BoTトークはこどもの首に掛けておくのがおそらく便利です。公式の[BoT Shop](https://shop.bot.app/shop)で販売されているシリコンケースも良さそうですし、我が家では100均ショップで入手したネックストラップで代用しています。 - [【公式】BoTトーク \| No\.1🥇こどもGPS \| トークできるGPS 新登場](https://www.bsize.com/bot/talk) - [サポートセンター](https://bot.helpscoutdocs.com/): FAQがたくさん掲載されています ##### おまけ: 「みてねみまもりGPS」「BoTトーク」の大きさ比較 --- ### 【読んだ本】 アルゴリズムの時代 機械が決定する世界をどう生きるか - 2023-01-30 URL: https://remoteroom.jp/medialog/2023-01-30_book-b09d35h1v5/ 本書は分かりやすく、現代の社会生活において動いている判断機構のどこそこに、アルゴリズムが介在していることを感じさせてくれる。また、稀な例なのかもしれないが、アルゴリズムの出力結果を疑わずそのまま従うことによって発生する弊害や事故にも意識を向けさせられる。 機械学習もアルゴリズムの一種だと考えるとして。ちょうど2022年12月頃から、ChatGPT ([ChatGPT: Optimizing Language Models for Dialogue](https://openai.com/blog/chatgpt/)) が高性能なチャットボットとして盛り上がってきている。ChatGPTは、私が試した範囲において、“文法的”には破綻していない答えを返すし (答えが論理的に正しいとは必ずしも言えないことに要注意。先ほど試してみたところ下記の画面キャプチャのように“数学的”には破綻している答えをでっち上げる才能もある)、内部の言語モデルに取り込まれている分野・情報に関しては全能の神と言っても過言ではないボットだ。恐ろしく知的な人間のごとく受け答えできることに驚きを隠せない。 ChatGPTに代表される卓越したサービスが登場して私にも容易に見えるようになったのは、絵画や文学や音楽といったアートな領域にも、機械学習から生み出される作品が溢れるだろうという近未来だ (実際溢れつつある)。アルゴリズムはきっと、過去の音楽を大量に取り込んで耳辺りの良い旋律の曲を無数に生み出していくだろう。このような状況はアートの本質を問うことに繋がり、本書の著者は、アートを作り出す者がその時抱いた〈感情〉がアートを受け取る者の感情を動かすのではなかろうか、といった問題提起をしている。 また、アルゴリズムを賢く使っていくための提案もある。アルゴリズムを人間の武器の一つとして捉え、出力の偏り (たとえば倫理に反する偏り) は必ず調整しやすいようにしておくというものだ。過去の踏襲とは異なる趣の未来を、人間の意志で作りたいなら、あえてその意志に基づいてアルゴリズムを導くべきだな、と私も思う。 --- ### #阪神淡路大震災 当時撮った写真に位置情報を付けました→ "#19950117 Great Hanshin-Awaji Earthquake (1995/01)" - 2023-01-17 URL: https://remoteroom.jp/diary/2023-01-17/ #### 「1.17」に振り返る記録 13年前になる2010年の「1.17」阪神・淡路大震災の日に、震災当時の写真をFlickrにまとめてこうツイートしました。かなりReTweetされ、沢山の方々に写真を見ていただくことができました。 今年も「1.17」として改めて、Flickrのアルバム ([\#19950117 Great Hanshin\-Awaji Earthquake \(1995/01\) HD Version / 阪神淡路大震災 \| Flickr](https://www.flickr.com/photos/mah_japan/albums/72157623617169629/)) にまとめている自分の写真を眺め、私がまだやってない事があると気付きました。それは撮影した写真に位置情報を付けて記録を残すこと。 当時は写真をフィルムカメラ ([長いズームレンズが付いたOLYMPUS L-3](https://www.olympus.co.jp/technology/museum/camera/products/l-series/l-3/)にたまたまポジフィルムを装填していた) で撮っていました。GPS内蔵のデジカメでもスマホでもないので、撮影場所については主に自分の記憶が頼りです。 そこで撮影場所が照合できた写真には、Flickr写真の説明欄に「Location:」としてGoogleマップ・ストリートビューのURLを掲載しました。各写真下部にある `www.google.com/maps/...` のURLをクリックすると、1995年の阪神・淡路大震災直後の写真の場景と、現在のストリートビューとを見比べることができます。なお、具体的にどこで撮ったのかもう不明な写真もあり、その点はご了承ください。 大きな地震は起こるものです。だからこそそれに備える人間と社会の力を信じ、いまの安全な暮らしが続けられるように、願ってやみません。 ##### 撮影日: 1995-01-17 (当日) ##### 撮影日: 1995-01-18 (翌日) #### 参考リンク - [\#19950117 Great Hanshin\-Awaji Earthquake \(1995/01\) HD Version / 阪神淡路大震災 \| Flickr](https://www.flickr.com/photos/mah_japan/albums/72157623617169629/) - [阪神・淡路大震災「1.17の記録」](https://kobe117shinsai.jp/) - [神戸の映像はまだか!阪神・淡路大震災 空白の時間帯に現場で起きていたこと|NHK取材ノート](https://www3.nhk.or.jp/news/special/note/article/20230116.html) - [阪神淡路大震災28年 将棋永世名人谷川浩司さん 神戸に住み続ける理由 \| NHK \| WEB特集 \| 阪神・淡路大震災](https://www3.nhk.or.jp/news/html/20230116/k10013950141000.html) --- ### MetaTrader 4: MQL4プログラミングに便利なVSCode機能拡張「compilemql4」をMac/Linux対応させる方法 - 2023-01-14 URL: https://remoteroom.jp/diary/2023-01-14/ #### MQL4の開発環境もVSCodeで 為替取引所ごとに配布されている「[MetaTrader 4 (MT4)](https://www.metatrader4.com/ja)」には、パソコン用としてはWindows版のほかにMac版がある。Mac版をダウンロードして試したところ、実行ファイルの実体はWindowsバイナリで、[Wine](https://www.winehq.org/)を介して動作させるように上手にパッケージされていた。ちなみに詳細は省くが、手元のLinux (x86_64) 環境においても、Wineを使ってWindows版のMT4を動作させることができた。 一方、MT4のエキスパートアドバイザー (EA) を記述するMQL4ファイルの編集は、私の常用環境でもあるMacとLinuxではどのように行えるかというと、原則的にはWindows版と同じでMT4付属の[MetaEditor](https://www.metatrader4.com/ja/automated-trading/metaeditor)で編集を行えばよい。だがやはり、開発環境としては鉄板のVisual Studio Code (VSCode) を使いたい。そこでVSCodeからMetaEditorを内部起動してMQL4ファイルをコンパイルする、下記の「compilemql4」というVSCode拡張機能が、Mac環境とLinux環境でも使えるかどうかを試行錯誤した。 - [compilemql4 \- Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=KeisukeIwabuchi.compilemql4) - [KeisukeIwabuchi/compilemql4: Easy to use mql4 compiler](https://github.com/KeisukeIwabuchi/compilemql4) 結論から述べると、compilemql4によるVSCode内からのMQL4コンパイル機能は、MacでもLinuxでも利用可能だ。設定方法は次の通り。 ##### Mac/Linux両対応の「CompileMQL4」設定方法 1. Mac環境なら公式MT4のMac版を、Linux環境 (x86_64) ならばWineを導入したうえで公式MT4のWindows版を導入する 2. VSCodeに拡張機能「[compilemql4](https://marketplace.visualstudio.com/items?itemName=KeisukeIwabuchi.compilemql4)」を導入する 3. 下記の自作スクリプト[`metaeditor_wrapper.sh`](#metaeditor_wrappersh)を適当なpathに保存して`chmod +x`する 4. VSCodeの設定にある \[CompileMQL4 configuration\] を次の内容にする (`Include Dir`と`Log Dir`を設定した場合の動作は現時点では想定していません) |設置項目|設定値| |---|---| |Compile After Save|ON| |Include Dir|(カラ)| |Log Dir|(カラ)| |Metaeditor Dir|`${HOME}/path/to/metaeditor_wrapper.sh`| 5. 編集を行うMQL4ファイルの保存場所としては、各OSにて次のpathがデフォルトのようだ |環境|MQL4ファイルの保存Path| |---|---| |Mac|`${HOME}/Library/Application Support/MetaTrader 4/Bottles/metatrader64/drive_c/Program Files (x86)/MetaTrader 4/MQL4/Experts/`| |Linux|`${HOME}/.wine/drive_c/Program Files (x86)/XMTrading MT4/MQL4/Experts/`| 6. 上記pathのMQL4ファイル (.mq4) を編集して保存すると自動で`metaeditor_wrapper.sh`→`metaeditor.exe`が呼び出されてコンパイルが行われる 今回は次の目的で、キモの部分をwrapperとしてbashスクリプトで記述し、VSCodeに行う設定自体はシンプルにすることを心掛けた。 - pathに含まれるスペースなどのメタ文字のエスケープ処理が、VSCode→compilemql4→OSの流れの中でどう行われているかいまいち分からなかったので、勝手知ったるbashスクリプトでいい感じにしたい - MacとLinuxの環境の差をスクリプトのif-thenの条件分岐で吸収したい (スクリプトそのものとVSCode設定を2つのOS間で同期している環境でも問題ないように) #### 蛇足 MQL4プログラミングの環境はこうして整備しつつあるが、肝心のエキスパートアドバイザー (EA) の中身はまだ書いたことがなく未着手だ。先日購入した下記の書籍などを参考にコツコツ進めていくつもり……。 #### ソースファイル ##### metaeditor_wrapper.sh ```bash ###!/bin/bash ### metaeditor_wrapper.sh (Ver.20230114) ### metaeditor.exeの起動にWineを使っている環境用 ### 動作確認したVSCodeの [CompileMQL4 configuration] ### - Compile After Save: ON ### - Include Dir: (カラ) ### - Log Dir: (カラ) ### - Metaeditor Dir: ${HOME}/path/to/metaeditor_wrapper.sh ARG_COMPILE="$1" ARG_LOG="$2" FLAG_OK=0 if [ "$(uname)" == 'Darwin' ]; then OS='Mac' elif [ "$(expr substr $(uname -s) 1 5)" == 'Linux' ]; then OS='Linux' else OS='unknown' fi if [ ${OS} = 'Mac' ]; then PATH_WINE='/Applications/MetaTrader 4.app/Contents/SharedSupport/metatrader4/MetaTrader 4/wine' PATH_METAEDITOR="${HOME}/Library/Application Support/MetaTrader 4/Bottles/metatrader64/drive_c/Program Files (x86)/MetaTrader 4/metaeditor.exe" FLAG_OK=1 elif [ ${OS} = 'Linux' ]; then PATH_WINE='/usr/bin/wine' PATH_METAEDITOR="${HOME}/.wine/drive_c/Program Files (x86)/XMTrading MT4/metaeditor.exe" FLAG_OK=1 fi if [ ${FLAG_OK} -eq 1 ]; then VALUE_COMPILE=$(echo "${ARG_COMPILE}" | awk -F':' '{print $2}') VALUE_LOG=$(echo "${ARG_LOG}" | awk -F':' '{print $2}') FILE_COMPILE=$(basename "${VALUE_COMPILE}") DIR_COMPILE="${VALUE_COMPILE%/*}" FILE_LOG=$(basename "${VALUE_LOG}") DIR_LOG="${VALUE_LOG%/*}" cd "${DIR_COMPILE}" "${PATH_WINE}" "${PATH_METAEDITOR}" /compile:"${FILE_COMPILE}" /log:"${FILE_LOG}" fi ``` #### 参考リンク - [【読んだ本】 MQL4プログラミング入門 ゼロからはじめる自動取引システム \[2023-01-12\]]() - [metatrader4 \- How to compile an MQL4 file with a command\-line tool? \- Stack Overflow](https://stackoverflow.com/questions/14539064/how-to-compile-an-mql4-file-with-a-command-line-tool) --- ### 【観た映画】 パディントン2 - 2023-01-14 URL: https://remoteroom.jp/medialog/2023-01-14_movie-b07cxq4b1q/ - 視聴: [Netflix](https://www.netflix.com/jp/title/80195897) 原題『Paddington 2』。パディントンが犯罪の容疑者になるストーリーで、前作と比べて、社会にある「善」「悪」の要素の描画が濃くなっている気がした。現実と物語の世界は異なるということの認識をしている/し始めていることを視聴者に要求しているわけで、対象とするこどもの年齢が上がっているのだろう。 最終的には追跡劇となる本作を、私も少しハラハラしながら観た。ちなみに次作『パディントン3』は2023年にクランクインとのこと。 --- ### 【読んだ本】 MQL4プログラミング入門 ゼロからはじめる自動取引システム - 2023-01-12 URL: https://remoteroom.jp/medialog/2023-01-12_book-b0bn9y2qyg/ 本屋の棚で目立っていたので手に取った。最近うっすら聞いたことがあった「MQL4」というものは、電子取引プラットフォーム[MetaTrader 4](https://www.metatrader4.com/ja)の取引アルゴリズムを記述するためのプログラミング言語だと初めて知った。文法はC言語に似ているらしい。本書の前半部分には「プログラムとは」のような基本もあって入門者に易しく、私は、後半部分の情報密度の高さが気に入って購入。 自動売買を行うための環境作りの手順が丁寧に説明されていて、実際に本書を片手に、為替取引所にリアル口座を作って、自宅のWindows環境に「MetaTrader 4 (MT4)」をセットアップして、「エキスパートアドバイザ (EA)」として自動売買のサンプルプログラムを用意し、「ストラテジーテスター」の中で過去データを使って動作検証 (バックテスト) するところまでの流れは難なく完了できた。もちろん、EAの実戦的なストラテジーについては、自分の頭脳でいろいろ研究するしかない。 --- ### 拒否済み迷惑電話に自動応答して相手にメロディ等を聴かせる仕掛けを作る - 2023-01-11 URL: https://remoteroom.jp/diary/2023-01-11/ #### 迷惑電話の対応策 ##### これまでは、無視 自宅の固定電話には迷惑電話がよく掛かってくるので、電話が掛かってきたらすぐに発信元の属性が推測できるよう、次の仕掛けを構築して日々運用してきた。[Asterisk](https://www.asterisk.org/)とはオープンソースのIP-PBXソフトウェアで、ひかり電話のようなIP電話環境に接続して好みのシステムを作ることができる。 - [Asterisk 18 LTSをUbuntu 20.04に導入する手順&ひかり電話HGWに接続して発信者番号を記録する方法 \[2021-12-30\]]() - [自宅ひかり電話で着信した電話番号等をAsteriskからLINEに通知する \[2021-12-31\]]() 自宅の仕掛けは具体的にどういうものかというと、固定電話が掛かってきたらほぼその瞬間に、発信元の電話番号にどんな口コミがあるかを直接確認できる[URL](https://www.jpnumber.com/)が家族LINEに通知されるので、そのURLを人間が閲覧して電話に出るべきかどうかを判断できるものだ。 そして発信元が仮に「不用品買取・訪問買取・押し買い」だったり「不動産売買・マンション投資」 (個人情報管理が緩かった時代の某母校の卒業アルバムがこのような界隈に流れている可能性を感じる) だったりといった電話番号で、我が家には不要な用件だろうと思われたら電話を無視する、という運用を行っている。 しかしながら、この対応策では積極的に迷惑電話を減らすことには繋がらないようだ。数週間経つと同じ電話番号からまた電話が掛かってくることは多い。そうするとその都度、家族LINEへの通知が実施され、前回と同じように発信元の属性を推測して無視する対応を取らなければならない。私は意義のない面倒くさいことの繰り返しが嫌いなのよ……。 ##### これからは、発信元のリソースを削る そこで改めて諸々調査すると、運用中のAsteriskに拒否リスト (blacklist) 機能があると分かったので、この機能を活用して前述の仕掛けを次のように進化させよう。 1. 電話の発信元の電話番号が、Asteriskの拒否リストに含まれている既知のものなら 2. 家族LINEへの発信元電話番号の通知は省略して、できるだけ素早くAsteriskが電話に自動応答する (Asteriskの着信応答動作が早いので家の固定電話機の着信音はほとんど鳴らない) 3. Asteriskが任意の音源ファイルの音を電話に数十秒間流して 4. Asteriskが自動的に電話を切る これならば、我が家に繰り返し迷惑電話を掛けてくる発信元のリソース、つまりは通話料金と時間を着信無視の対応よりも多く消費するはずだから、電話番号を発信対象リストから削除してくれるんじゃないかな……。そう願いたい。仮にもし、引き続き迷惑電話が掛かってきたとしても、Asteriskの自動応答によって私を含む家族がそれに気を遣うことはないが。 Asteriskの拒否リストへの電話番号登録はとりあえずAsterisk CLIを用いて手動で行う想定だ。2021年12月から約1年分の着信ログを精査すると迷惑電話だと判断できる電話番号は「19個」あったので、最初はこれらを登録しておけばよかろう。 #### Asterisk自動応答の設定方法 ##### Step-1: 音源ファイルの用意 後述の`extensions.conf`にて指定する、着信応答に使用する音源ファイルを適当に用意する。電話の場面に合うようなメロディでも良いし、好きな台詞をしゃべらせたAI音声でもよいだろう。ここではAsteriskで利用可能で音質劣化の少ないフォーマットの、サンプリングレート32kHzの音源ファイル (拡張子「sln32」) とした。 一般的なWAVファイル`input.wav`を`output.sln32`に変換する一連のコマンドは次のとおり。[Asterisk Audio and Video Capabilities \- Asterisk Project \- Asterisk Project Wiki](https://wiki.asterisk.org/wiki/display/AST/Asterisk+Audio+and+Video+Capabilities#AsteriskAudioandVideoCapabilities-SignedLinearPCM) > [Signed Linear PCM](https://wiki.asterisk.org/wiki/display/AST/Asterisk+Audio+and+Video+Capabilities#AsteriskAudioandVideoCapabilities-SignedLinearPCM) を参照しつつ、モノラル化 (`-c 1`) も追加している。 ``` sox input.wav -t raw -b 16 -r 32000 -c 1 output.sln mv output.sln output.sln32 ``` ちなみに我が家のAsteriskでは、色々なリアル店舗で良く耳にする、軽やかな[『呼び込み君』の「ポポーポポポポ♪ ポポーポポポポ♪」](https://mysound.jp/song/4541889/)がメロディとして流れるように設定した。 ##### Step-2: Asteriskの設定 Asterisk (当環境では18.9.0) の設定ファイル`/etc/asterisk/pjsip.conf`を、[2021-12-30の記事]()の内容にしておく。 次に、Asteriskの設定ファイル`/etc/asterisk/extensions.conf`を、[BLACKLIST関数](https://wiki.asterisk.org/wiki/display/AST/Asterisk+18+Function_BLACKLIST)を使った条件分岐を含む次の内容に書き換えて、ダイアルプランを再読み込みする (例: `asterisk -rx 'dialplan reload'`)。 ```ini [globals] COMMAND_LOGGER=/usr/bin/logger COMMAND_NOTIFY=/home/hoge/telppo/telppo.py ; https://remoteroom.jp/diary/2021-12-31/ FILE_SOUND_MUSIC=/var/lib/asterisk/sounds/何らかのメロディ ; 拡張子「sln32」の音源ファイルを用意する FILE_SOUND_UNAVAILABLE=/var/lib/asterisk/sounds/拒否る台詞 ; 拡張子「sln32」の音源ファイルを用意する [from-hikari] exten => s,1,GotoIf($[${BLACKLIST()}=1]?meiwakudenwa:normal) ; 未知の電話 (not BLACKLISTed) な時: same => n(normal),System(${COMMAND_LOGGER} -i -t telppo 'CALLERID=${CALLERID(num)} (not BLACKLISTed)') same => n,System(${COMMAND_NOTIFY} ${CALLERID(num)}) same => n,Ringing() same => n,Return() ; 迷惑電話 (BLACKLISTed) な時: same => n(meiwakudenwa),System(${COMMAND_LOGGER} -i -t telppo 'CALLERID=${CALLERID(num)} (BLACKLISTed,MeiwakuDenwa!)') same => n,Answer() same => n,Wait(1) same => n,Playback(${FILE_SOUND_MUSIC}) same => n,Playback(${FILE_SOUND_UNAVAILABLE}) same => n,Hangup() ``` 内部で呼び出しているプログラム`telppo.py`は、第1引数に書かれる電話番号を特定の宛先にLINE通知するための自作ツール。[2021-12-31の記事]()にてPythonソースを参照できる。 ##### Step-3: Asterisk拒否リストの編集 Asterisk CLIを直接操作して、拒否リストの登録内容確認、電話番号`050XXXXXXXX`を拒否リストに登録・登録解除する各コマンドは次のとおり。 ``` asterisk -rx 'database show blacklist' asterisk -rx 'database put blacklist 050XXXXXXXX "任意のコメント"' asterisk -rx 'database del blacklist 050XXXXXXXX' ``` 把握している迷惑電話の電話番号を、上記の登録コマンド (put) を用いて拒否リストへ複数登録し、正しく登録されたかは確認コマンド (show) で確認すればよい。 ##### Step-4: 着信をテスト Asteriskの拒否リストを使った動作をテストするため、たとえば自身の携帯電話の電話番号を一時的にAsteriskの拒否リストに登録してから、Asteriskへ携帯電話から発信する。想定通りに動作すれば、Asteriskが自動応答して携帯電話のスピーカーからは設定した音源ファイルの音が流れ、その後に電話が自動的に切れる。テスト完了後は登録解除をお忘れなく。 #### 実際の迷惑電話の着信ログ 進化させた上記の仕掛けを我が家の本番環境で運用開始した翌々日。本物の迷惑電話が平日お昼にさっそく掛かってきたことを、Asteriskサーバのsyslogで確認することができた。 ``` root@raspi4:~# grep MeiwakuDenwa /var/log/syslog Jan 10 12:56:00 raspi4 telppo[701391]: CALLERID=0503183XXXX (BLACKLISTed,MeiwakuDenwa!) Jan 10 12:57:08 raspi4 telppo[701734]: CALLERID=0503183XXXX (BLACKLISTed,MeiwakuDenwa!) Jan 10 12:58:21 raspi4 telppo[702003]: CALLERID=0503183XXXX (BLACKLISTed,MeiwakuDenwa!) ``` しかし不思議だ。なぜに1回きりではなく、同じ電話番号からの着信ログが短時間に3回分残っているのだろう? 我が家のAsteriskで設定しているメロディは『呼び込み君』、それに続く台詞はおふざけで「お掛けになった電話電話は現在使われておりません。番号をお確かめになってお掛け直しください」としている。再生時間は合計で約60秒だ。この長さを勘案すると、もしかして発信者は着信応答を面白がって、メロディやらを何回かフルコーラスで聞いてくれたのかもしれない。 #### 参考リンク - [Asteriskで迷惑電話対策 \| 道具眼日誌:古田\-私的記録](https://do-gugan.com/~furuta/archives/2011/01/asterisk_2.html) - [Asteriskでアナウンスを自動再生&ちょっとだけ留守番電話 \| Lonnie&Assocites co\.,ltd\.](https://www.lonnie.co.jp/voip/auto-voice/) - [呼び込み君 開発秘話 \| 群馬電機株式会社](https://www.gunmadenki.co.jp/pickup/yobikomikun/) 迷惑電話の対応を、疑似的にチャットボット化するならば次のアイデアも良さそうだ。 - [電話勧誘や電話詐欺対策の音声チャットボット「レニー」 \| カスペルスキー公式ブログ](https://blog.kaspersky.co.jp/35c3-lenny-voice-chatbot/22212/) - [HowTo: Pwn Telemarketers with Lenny \| Crosstalk Solutions](https://www.crosstalksolutions.com/howto-pwn-telemarketers-with-lenny/) --- ### コードレスクリーナのデザイン - 2023-01-09 URL: https://remoteroom.jp/diary/2023-01-08/ 自家用のコードレスクリーナを新調したので写真メインで簡単にご紹介。 #### はじめてのHiKOKI製品 家で使っているコードレスクリーナを吸引力がより強いものに替えたくなっていた。そこで、実物を確認せずに各種スペックと写真だけで選んで、[HiKOKI R36DB(SC)(XPG)](https://www.hikoki-powertools.jp/products/powertools/li-ion-cleaner/r36db/r36db.html) というコードレスクリーナ (掃除機) を発注した。色は「フォレストグリーン」。 ちなみになぜ突然に[HiKOKI](https://www.hikoki-powertools.jp/)かというと、仕事の現場では定番[マキタ](https://www.makita.co.jp/)の紙パック式クリーナーを使っていて、マキタと比較されがちな他社の業務用製品をあえて選択して使用感をレビューしておくのも良かろうと考えたため。 ##### 外観写真 内部構造にきれいに沿ったような、力感があるデザインが良いねえ。([先月読んだデザインについての本]()の影響なのか、真横から見た形を最初にそう思って、このコードレスクリーナの写真を載せたいがために本記事を書いています……) ##### 良い点 - サイクロン式なので、吸ったゴミがサイクロンの中でくるくる回って勝手に軽く固まってくれるため、捨てるのが楽。また、ゴミの量と様子が見えるので視覚的に楽しい - 先を照らすLEDライトが付いており暗所での掃除が多少やりやすい - 工具としてカッコいい (自己満足)。そして“傷ついてなんぼ”の色 #### 追記: 標準→弱→強の作動音 \[2023-01-09\] #### 参考リンク - [HiKOKI(ハイコーキ)](https://www.hikoki-powertools.jp/) > [マルチボルト(36V)コードレスクリーナ:R36DB](https://www.hikoki-powertools.jp/products/powertools/li-ion-cleaner/r36db/r36db.html) --- ### レンタカー Nissan Note 雑感3 - 2023-01-07 URL: https://remoteroom.jp/diary/2023-01-07/ 二泊三日鹿児島旅行のお供に、日産レンタカーで[Nissan Note](https://www3.nissan.co.jp/vehicles/new/note.html)を借りました。行程は一般道と自動車専用道路で、鹿児島空港から桜島あたりまで足を伸ばして150km弱を走行しています。 #### 簡単な感想 |項目|内容| |---|---| |車種|Nissan Note グレード不明 (6AA-E13)| |走行距離, 燃料消費量|142km, 6.35L| |満タン法での燃費|22.36km/L| E13型ノートを泊まり旅行時のレンタカーとして借りたのは、[2022年9月]()・[同年10月]()に続き今回が3度目です。ということで新鮮な驚きはあまりなくて。 - 今回のノートには「[プロパイロット](https://www2.nissan.co.jp/BRAND/PROPILOT/)」が装備されていなかった。ノートといえばプロパイロットという私の勝手な期待があっただけに残念 - 前回借りたときに調整方法がわからなかった「メーター画面とダッシュボード画面の輝度」は、ステアリングコラム左側の、ダッシュボード上にある物理ボタンで調整できた - 素性にほぼほぼ慣れてきて、基本的に運転しやすい、加速力も不足なく元気に走れる、今どきの良い小型車だなと再認識 ただし、明るくないハロゲンヘッドライトと、コンビニで淹れたカフェラテのカップには適していない後席のドリンクホルダーに関しては、自家用車だったら速攻で対策して不満を解消するでしょう。 #### 参考地図 (車で移動した範囲) #### 参考リンク - [レンタカー Nissan Note 雑感1 \[2022-09-17\]]() - [レンタカー Nissan Note 雑感2 \[2022-10-10\]]() --- ### 【観た映画】 ボス・ベイビー - 2023-01-04 URL: https://remoteroom.jp/medialog/2023-01-04_movie-b07lcn2r43/ - 視聴: [Netflix](https://www.netflix.com/jp/title/80146758) 原題『The Boss Baby』。かわいい毒がある。マネジメントのエッセンスが語られるところ、おもろい。一緒に観たこども (独りっ子) が主人公ら二人の最終的な関係をどう思ったか、気になるところでもある。 #### 鑑賞リンク --- ### 【観た映画】 パディントン - 2023-01-01 URL: https://remoteroom.jp/medialog/2023-01-01_movie-b077x3m7q1/ - 視聴: [YouTube](https://www.youtube.com/watch?v=BX4CnRgEBwk) 原題『Paddington』。こどもといっしょに観賞。探検家の登場から始まるなど、冒険要素がいっぱいだ。クマが同居する非日常な日常に、私は意外にも深く没入した。次作も観てみたい。 #### 鑑賞リンク --- ### SONY WI-1000XM2にシリコン製イヤーピースAZLA SednaEarfit MAXを組み合わせてみたレビュー - 2022-12-26 URL: https://remoteroom.jp/diary/2022-12-26/ #### ネックバンド型の世代交代 ネックバンド型のノイズキャンセリング・イヤフォン、SONY WI-1000Xを愛用して4年10ヶ月。 - [3個目のノイズキャンセリング・イヤフォン、SONY WI-1000Xの所感 \[2018-02-14\]]() WI-1000Xは機能的には一応まだ大丈夫なのだが、コードは芯線が見えて切れそうだったりネック部分は擦れたりと外観的には相当劣化してきたため、心機一転で、同じタイプの新しいイヤホンを仕入れた。リアル店舗での買い物は久しぶりのような……。 #### SONY WI-1000XとWI-1000XM2の比較 ##### 外観・操作感 WI-1000Xのノイズキャンセリング性能とネックバンド型である点が気に入っていて、かつ、左右分離の完全ワイヤレスイヤホンは片方ポロッと無くしそうでそこまで踏み切れない。そんな私にとって、WI-1000Xの後継として、3年前に登場の機種だけども同じ[SONYのネックバンド型WI-1000XM2](https://www.sony.jp/headphone/products/WI-1000XM2/)を選択することはほぼ必然であった。 - WI-1000Xでは金属の弾性感とともに少ししか曲がらなかったネックバンドが、WI-1000XM2では柔らかくなってくねくね曲げられるのはとても良い変化だ。 - WI-1000XM2ではコードが柔らかいきしめんタイプになったのもきっと良い方向の変化だろう。WI-1000Xのコードは、経年劣化で硬化して曲がりにくくなってきていた。 - WI-1000Xではネックバンド左側の内側に付いていた操作ボタンが、WI-1000XM2ではイヤホンの左側コードの途中に集約された点については、慣れが必要みたいだ。前者だと指先が首元のほぼ定位置を探れば良かったが、後者だと指先が空中のコードを探す必要があって直感的にはまだ操れない。 ##### 装着感 装着感の耳の部分については、イヤホン2機種の比較というよりは、以前使っていたウレタン製イヤーピースと今回初めて使うシリコン製「[AZLA SednaEarfit MAX](https://www.aiuto-jp.co.jp/products/product_4036.php)」との比較となる。 - ウレタン製のイヤーピースは少し潰して耳に入れる必要があるが、シリコン製はその動作がほぼ不要なのは便利。具体的には、皮膚との摩擦が少ないので耳の穴にくくっと押し込めば楽に入り込んでくれる。 - 遮音性は、街中や乗り物の中ではまだテストしていないが、ウレタン製のほうが高いような気がしている。 - AZLA SednaEarfit MAXの耐久性は分からない。かなりいいお値段するので長持ちして欲しいな。 ちなみに「AZLA SednaEarfit MAX」は芯の部分まで含めてシリコン製なので、下記の写真のように押せば芯の部分も潰れる。実際に耳の穴に入れている状態だとイヤホンの軸の部分が硬いので、耳の中でここまで潰れることはないと思われる。装着感としては、全体がシリコン製であること等の工夫の効果か、耳によくフィットして馴染む。2,3時間付けていても耳が痛くならないくらい。 また、「AZLA SednaEarfit MAX」の形状とサイズの選択について。形状的には標準的な「Standard」・軸が短い完全ワイヤレスイヤホン用の「for TWS」・AirPods Pro専用の「for AirPods Pro」の3種類があり、そしてサイズはそれぞれ6〜7種類の展開だ。サイズについては、AZLA SednaEarfit MAXの公式ページ ([AZLA SednaEarfit MAX](https://www.aiuto-jp.co.jp/products/product_4036.php) > 「より多くの方にベストフィッティングさせるサイズ展開」) に詳細な寸法と各社純正イヤーピースとの大きさ比較が掲載されているので購入前に参考にできる。私はSONYの純正Mサイズより少し大きくても構わないと考えて、SednaEarfit MAXではStandard Mサイズを選択した。 ##### 楽曲の聴き比べ SONY WI-1000XとWI-1000XM2での楽曲の聴き比べをしてみた。曲は、Spotifyアプリの気まぐれマイライブラリから適当に選択。試聴時の条件は下記のように揃えた。 ||WI-1000X|WI-1000XM2| |---|---|---| |Firmware|4.5.2 (最新)|2.0.2 (最新)| |イヤーピース|AZLA SednaEarfit MAX (Standard) Mサイズ|(左に同じ)| |再生装置|Xiaomi Redmi Note 10 Pro|(左に同じ)| |接続方法|Bluetooth, LDAC|(左に同じ)| |[DSEE HX](https://helpguide.sony.net/mdr/wi1000xm2/v1/ja/contents/TP0002402481.html)|OFF|(左に同じ)| ###### 音源1: A Whole New World (Aladdin's Theme) - Spotify: [A Whole New World (Aladdin's Theme) / Peabo Bryson & Regina Belle](https://open.spotify.com/track/4tS8xQfyPGc7f4lJ1JP6BX?si=9b81efdd5d8a4b11) |WI-1000X|WI-1000XM2| |---|---| |声のかすれが大きい。塗りつぶされている。|WI-1000Xよりはやわらかだが、[別のリファレンスセット]()と比較すれば、WI-1000XM2での声の“さしすせそ”が厳しい部分 (つまりWI-1000XM2のBluetooth接続時の限界) が分かる。顔をこちらに向けて時に口を大きく開けているような、ボーカルの抑揚はわかりやすい。| |低音の残響が少ない。|冒頭から鳴っている、右→左へと飛ぶ低音の丸みがよく分かる。| |音場が狭い。|すこし遠目でより左右に開けている感じ。| |キラキラした音。|比較的落ち着いている音。| ###### 音源2: Midwest / Mathias Eick - Spotify: [Midwest / Mathias Eick](https://open.spotify.com/track/6YTrSDQB5Li5iGkQRNeYpn?si=29d8f33c56664e8f) |WI-1000X|WI-1000XM2| |---|---| |シンバルあたりの高音がちょっと演出されて前に出てきている気がする。音がどこで鳴っているか分かりにくい。バイオリンはざらざら聞こえて破綻気味。|トランペットがきれいに歌う。楽器が生々しい。バイオリンはやや厳しいがマシ。| ###### 音源3: Shadow Feet / Brooke Fraser - Spotify: [Shadow Feet / Brooke Fraser](https://open.spotify.com/track/0DD55tCwxn8CF5DkY1cjwg?si=d07dd65123f34e33) |WI-1000X|WI-1000XM2| |---|---| |音が近く、そして余韻があまりよく分からない。ドラムと声がざらざらしている。ハイトーンに聞こえる。|ライブ感がある。この曲が意図するボーカルと楽器のバランスとしては、こちらのイヤホンの音のほうが良いのではと思う。| #### 参考) 購入価格 |品名|価格(税込)|購入店| |---|--:|---| |ヘッドホン [SONY WI-1000XM2](https://www.sony.jp/headphone/products/WI-1000XM2/) (中古)|14,980円|[じゃんぱら 神戸店](https://www.janpara.co.jp/sale/search/detail/?SRCODE=54119020&SHPCODE=54) (※)| |イヤーピース [AZLA SednaEarfit MAX (Standard) Mサイズ](https://www.aiuto-jp.co.jp/products/product_4036.php)|2,980円|ヨドバシカメラ マルチメディア梅田| (※) 中古品購入後に公式情報の [WI\-1000XM2 \| ヘルプガイド \| 箱の中身を確認する](https://helpguide.sony.net/mdr/wi1000xm2/v1/ja/contents/TP0002399796.html) を参照したところ、「USB Type-C™ケーブル(USB-A - USB-C™)(約20cm)」・「ヘッドホンケーブル(約1.0m)」・「航空機用プラグアダプター」の、これら3品も欠品していることがわかった。じゃんぱらの販売ページに欠品としての記載が無かったので気付かず。よく調べれば良かったけどまあいいや。 #### 参考リンク - [WI\-1000XM2 \| ヘッドホン \| ソニー](https://www.sony.jp/headphone/products/WI-1000XM2/) - [SednaEarfit MAX|AZLA|株式会社アユート PCパーツ・VR・オーディオ等周辺機器 総合代理店](https://www.aiuto-jp.co.jp/products/product_4036.php) --- ### 【読んだ本】 だれでもデザイン 未来をつくる教室 - 2022-12-17 URL: https://remoteroom.jp/medialog/2022-12-17_book-4255012555/ 高校生と中学生に対して著者が行った、デザインの根幹についての体験型授業の内容が本書に収録されている。私は不覚にも、本書をほとんど飛行機と電車の中で読み進めてしまった。これは本来、隣にスケッチブックを広げて、ペンか鉛筆を片手に読むべきものだ。 言語としてのスケッチを身につける。楕円を綺麗に描く。分解する、構造を知る、作り方を知る。プロトタイプを作る。アイデアをプレゼンする。著者の語りかけが優しいし、遠慮がないために分かりやすい。随所に差し込まれているスケッチや写真がかっこよくて見惚れて、私の夢なのか小さな欲望なのかをくすぐられ、こうした生き生きしたスケッチを喋れるようになりたいと素直に思った。 --- ### openfortivpn + OpenFortiGUI 〜FortiClient VPNの代替として〜 - 2022-12-15 URL: https://remoteroom.jp/diary/2022-12-15/ 「Ubuntu (x86_64) のデスクトップ環境からFortinet VPNへ接続する際に、Fortinetの公式クライアント[FortiClient VPN](https://www.fortinet.com/support/product-downloads#vpn)を使わず、オープンソースなものを使ってみた」という内容のメモです。ちょっとだけ逸般の誤家庭にとって参考になるかもしれません。 #### Fortinet VPNへのSSL-VPN接続手順 ##### CLI (openfortivpn) での接続 SSL-VPN接続に必要な最小限の設定情報を見極めるため、まずは最初に比較的シンプルな、コマンドラインでのVPN接続を試します。 1. openfortivpnをパッケージで導入する ``` $ sudo apt install openfortivpn $ openfortivpn --version 1.17.1 ``` 2. VPN管理者からクライアント証明書 `CLIENT.p12` (PKCS #12) が配布されていたら、クライアント証明書からユーザ証明書 `USER.crt.pem` とユーザ鍵 `USER.key.pem` を取り出す ([参考ページ](https://github.com/adrienverge/openfortivpn/issues/12#issuecomment-245063240)) ``` ## ユーザ証明書 $ openssl pkcs12 -in CLIENT.p12 -out USER.crt.pem -clcerts -nokeys -legacy Enter Import Password:(Import Passwordを入力) ## ユーザ鍵 $ openssl pkcs12 -in CLIENT.p12 -out USER.key.pem -nocerts -nodes -legacy Enter Import Password:(Import Passwordを入力) ## 参考: 私の環境の場合、opensslコマンドに「-legacy」を付けない場合には次のエラーが発生した $ openssl pkcs12 -in CLIENT.p12 -out USER.crt.pem -clcerts -nokeys Enter Import Password:(Import Passwordを入力) Error outputting keys and certificates 4087D00B827F0000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:../crypto/evp/evp_fetch.c:349:Global default library context, Algorithm (RC2-40-CBC : 0), Properties () ``` 3. openfortivpnコマンドを直接実行してVPN接続を試す ``` $ sudo openfortivpn 接続先IPアドレス:接続先ポート番号 -u VPNユーザ名 --user-cert=USER.crt.pem --user-key=USER.key.pem VPN account password: (パスワードを入力) ERROR: Gateway certificate validation failed, and the certificate digest is not in the local whitelist. If you trust it, rerun with: ERROR: --trusted-cert XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ERROR: or add this line to your configuration file: ERROR: trusted-cert = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (snip) ``` 4. 正しい接続先を指定していて、上記のような「Gateway certificate validation failed」エラーメッセージが表示された場合、メッセージにあるように「`--trusted-cert=XXXXX...`」を追加した上でVPN接続を試してみる ``` $ sudo openfortivpn 接続先IPアドレス:接続先ポート番号 -u VPNユーザ名 --user-cert=USER.crt.pem --user-key=USER.key.pem --trusted-cert=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX VPN account password: (パスワードを入力) INFO: Connected to gateway. INFO: Authenticated. INFO: Remote gateway has allocated a VPN. Using interface ppp0 Connect: ppp0 <--> /dev/pts/4 INFO: Got addresses: [XXX.XXX.XXX.XXX], ns [XXX.XXX.XXX.XXX, XXX.XXX.XXX.XXX] INFO: Negotiation complete. INFO: Negotiation complete. local IP address XXX.XXX.XXX.XXX remote IP address XXX.XXX.XXX.XXX INFO: Interface ppp0 is UP. INFO: Setting new routes... INFO: Adding VPN nameservers... INFO: Tunnel is up and running. ^CINFO: Cancelling threads... (snip) ``` 5. 「INFO: Tunnel is up and running.」が表示されればVPN接続は成功している。接続を終了するにはCtrl+Cを入力する ##### GUI (OpenFortiGUI) での接続 1. [OpenFortiGUI \| Bits and Bytes](https://hadler.me/linux/openfortigui/) からOSに合うdebパッケージをダウンロードする - Ubuntu 22.04の場合: `openfortigui_0.9.8-1_amd64_jammy.deb` 2. OpenFortiGUIとそれに必要なパッケージをインストールする ``` $ sudo dpkg -i ./openfortigui_0.9.8-1_amd64_jammy.deb $ sudo apt --fix-broken install # 必要に応じて ``` 3. デスクトップ画面にてOpenFortiGUIを起動する (Xfce環境だと \[アプリケーション\] > \[インターネット\] > \[openFortiGUI\] で起動) 4. OpenFortiGUIにてメニューバーの \[ファイル\] > \[設定\] にある `SUDO -E Option: SUDO Preserve Env. (>=Ubuntu 19.10/Debian10 Fix)` をONにして \[保存\] する 5. OpenFortiGUIにてアイコンの \[追加\] > \[VPN\] をクリックし、「CLIでの確認」4で用いたVPN接続の設定を新規追加して \[保存\] する 6. OpenFortiGUIのVPN接続一覧から使用したいVPN接続設定を選択してアイコンの \[接続\] を押すと、VPN接続が実行される。状態が「切断」から「接続済み」へ変化すると接続成功。\[切断\] を押すと接続は切断される 7. 各VPN接続設定ごとに細かい設定も行えるようだ ###### 追記 \[2022-12-15\]: Network Manager 試してはいないが、下記リンク先で紹介されているやり方だと、元々あるデスクトップ環境のNetwork Managerと融合させることもできるのかもしれません。 - [Fortinet – openfortivpn under Ubuntu Linux \| GLITCHLIST](https://www.glitchlist.com/2020/04/03/fortinet-openfortivpn-under-ubuntu-linux/) #### 参考リンク - [adrienverge/openfortivpn: Client for PPP\+SSL VPN tunnel services](https://github.com/adrienverge/openfortivpn) - [OpenFortiGUI \| Bits and Bytes](https://hadler.me/linux/openfortigui/) - [GitHub \- theinvisible/openfortigui: VPN\-GUI to connect to Fortigate\-Hardware, based on openfortivpn](https://github.com/theinvisible/openfortigui) --- ### 【読んだ本】 正欲 - 2022-11-25 URL: https://remoteroom.jp/medialog/2022-11-25_book-b08xx6lhqx/ これは、レビューをどこかで見かけて読んでみようと思い立った小説で、図書館での本の貸出状況を調べると抜群に予約数が多いことに驚かされた。タイトルの『正欲』は、国語辞書には掲載されていない言葉だと思われるが、本書を読み終えた後には、“正しい欲”の意味だろうなとその字の通りに解釈してよさそうに感じる。 ぶっちゃけ、感想を体系的にはうまくまとめられない内容であった。他人を思う想像力には所詮限界があるんだぞ、そう諭されたように私は読後直後の自分を分析している。 そして本書の部分部分では、自分の過去の記憶や考えがふっと呼び起こされた。それは具体的には次の二つ。 - 男子校に六年間通っていた10代の頃の経験から、「群れるな」「集団の勢いは危ういこともある」という教訓もしくは主義のようなものを形成した。いわば“俺たちは集団になるととんでもないこともやってしまう”ことへの恐れだ。マジョリティについて考えさせられる過程でこの恐れを再び認識した。 - 21世紀へ変わった頃に、“The Internetは人々へ繋がりをもたらすことができる”地球規模のネットワークだと認識しはじめた。そうしてインターネットを使い続けて何万年か経てば、人間の性に影響する、たとえば「産まれた途端に世界と繋がっている感覚を持っている」ような、普遍的な認知の変化は生じるのだろうか。 --- ### Minecraft: 統合版クライアントともクロスプレイできるJava版サーバの構築方法など - 2022-11-14 URL: https://remoteroom.jp/diary/2022-11-14/ #### プレイ環境を問わずに遊びたい Minecraftのサーバを某所LAN内に立ててみている (関連記事: [Minecraft: マイクラサーバを多拠点利用するためのUDPポートフォワーディング \[2022-11-04\]]())。こどもが扱うNintendo Switchから接続するためにサーバの種類としては当初「Bedrock版」を選択したものの、自分のLinuxやmacOS環境から接続して遊べないことが致命的で悲しい。 良い解決方法はないのかと調べてみると、「Java版」サーバならば、パソコン (Linux, Mac, Windows) のJava版クライアントに加えて、Switchなどの統合版クライアントの両方から接続できるように実は拡張できるらしい。そこでごにょごにょやってみた。 今回行ったサーバ構築作業などを自分が後日思い出せるように、内容を簡単にメモしておきます。説明も簡素ですが、「こういうソフトウェアを使えばできるんだ」程度の情報として参考にはなるかと思います。 |種別|名称|役割| |---|---|---| |サーバの本体|PaperMC|Minecraft Java版サーバの一種| |サーバのplugin|Geyser|プロトコル変換を行ってJava版サーバへ統合版クライアントを接続可能にする| |サーバのplugin|Floodgate|Java版サーバへJava版アカウント無しで接続可能にする| ##### Step-1. クロスプレイなサーバの構築 Minecraftサーバとしてここでは「PaperMC」を選択する。PaperMCの次のドキュメントの手順に沿って、Java版・統合版を跨ぐクロスプレイを可能にするサーバの構築作業を進める。 - [Getting Started \| PaperMC Documentation](https://docs.papermc.io/paper/getting-started) 作業の見通しを良くするために、導入時に展開される全てのファイルではなく、以降の説明で操作対象になるファイルのみの階層構造を先に抜き出して書いておくと次の通り。 ``` ~/PaperMC/ +-- eula.txt +-- paper.jar +-- plugins/ +-- Geyser-Spigot.jar +-- floodgate-spigot.jar +-- server.properties +-- world/ +-- datapacks/ +-- coordinates hud v1.2.3.zip (後述) ``` 1. Minecraft Java版サーバ用に適当なサーバ環境を用意し、OpenJDKなどが使えるようにする (例: Ubuntu Server 22.04, OpenJDK 18) 2. https://papermc.io/downloads から最新のJARファイルをダウンロードする (例: `paper-1.19.2-270.jar`) 3. ダウンロードしたJARファイルを`paper.jar`に改名し、サーバ内の適当な新規ディレクトリに入れる (例: `~/PaperMC/`) 4. 設定ファイル等を生成させるために、1度目の「Running The Server」を実施する ``` $ cd ~/PaperMC/ $ java -Xms2G -Xmx2G -jar paper.jar --nogui (snip) You need to agree to the EULA in order to run the server. Go to eula.txt for more info. ``` 5. ディレクトリ内に自動生成されたファイル`eula.txt`の内容を確認した後に、ファイルを編集して「eula=false」を「eula=true」へ変更する 6. 2度目の「Running The Server」を実施し、「> 」のプロンプトが表示されるまで数十秒待つ ``` $ java -Xms2G -Xmx2G -jar paper.jar --nogui (snip) [XX:XX:XX INFO]: Done (11.157s)! For help, type "help" [XX:XX:XX INFO]: Timings Reset > ``` 7. 「> 」のプロンプトに「stop」を入力して、一度サーバを終了させる ``` > stop [XX:XX:XX INFO]: Stopping the server (snip) [XX:XX:XX INFO]: Closing Server $ ``` 8. ディレクトリ内にファイル`server.properties`やディレクトリ`plugins`などが自動生成されている 9. 次の2つのJARファイルをダウンロードして、ディレクトリ`plugins`内に保存する (SpigotはPaperMCと互換性があるマイクラサーバの一種) - `Geyser-Spigot.jar`: https://geysermc.org/ > 右上の「Download」 > 「Geyser-Spigot.jar」のリンク先 - `floodgate-spigot.jar`: https://geysermc.org/ > 右上の「Floodgate」 > README.md本文中の「Download」 > 「floodgate-spigot.jar」のリンク先 10. ファイル`server.properties`を編集して「enforce-secure-profile=true」を「enforce-secure-profile=false」へ変更する - この変更は、統合版クライアントでの接続時に発生するエラー「プロフィール公開鍵がありません。このサーバーでは安全なプロフィールが必要です。」を回避するため。参考リンク: [GEYSERMC WIKI > Common Issues > Missing profile key. This server requires secure profiles.](https://wiki.geysermc.org/geyser/common-issues/#missing-profile-key-this-server-requires-secure-profiles)) 11. 3度目の「Running The Server」を実施し、PaperMCとGeyserとFloodgateがすべて起動できることを確認する ``` $ java -Xms2G -Xmx2G -jar paper.jar --nogui (snip) [XX:XX:XX INFO]: Starting Minecraft server on *:25565 (snip) [XX:XX:XX INFO]: [floodgate] Loading floodgate v2.2.0-SNAPSHOT (b73-4f36112) [XX:XX:XX INFO]: [floodgate] Floodgateの起動に 357ms かかりました。 (snip) [XX:XX:XX INFO]: [Geyser-Spigot] Geyser を 0.0.0.0 で開始しました: 19132 (snip) > ``` ##### Step-2. サーバ接続の確認 この段階まで進めば、PaperMCで構築した今回のMinecraftサーバへ、次の2種類の接続が可能になっているはず。Java版・統合版のそれぞれのクライアントから、「マルチプレイ」でのサーバ接続が行えるかを確認してみよう。 |サーバ側のポート|説明| |---|---| |Java版サーバとしてのポート「25565/tcp」|パソコン (Linux, Mac, Windows) のJava版クライアントがサーバ接続に使用| |Bedrock版サーバとしてのポート「19132/udp」|Nintendo Switchなどの統合版クライアントがサーバ接続に使用| なお、下記の写真のように、プレイヤー画面に現れる「チャットメッセージの安全性の確認ができません / このサーバーで送信されたメッセージは変更される場合があり、元のメッセージを反映していない可能性があります。」という警告表示は、PaperMCのサーバ設定を「enforce-secure-profile=false」と変更したことによるものだ。 #### プレイヤー画面での現在位置座標表示 |種別|名称|役割| |---|---|---| |サーバのdatapack|Coordinates HUD|Java版ワールドで座標等を常時表示する| Redrock版サーバではプレイヤー画面に現在位置の座標を簡素なフォーマットで表示できていたが (コマンド: `/gamerule showcoordinates true`)、Java版サーバにおいては標準状態では表示できないらしい。そこで「Coordinates HUD」というdatapackを導入する。手順は次の通り。 1. 次のファイルを手元にダウンロードする - https://vanillatweaks.net/picker/datapacks/ > 「Coordinates HUD」をクリック > 右の「Download▼」から「Direct Download」を選択 > 例: `VanillaTweaks_d765342_UNZIP_ME.zip` 2. ダウンロードしたZIPファイルを展開して、中身のZIPファイル (例: `coordinates hud v1.2.3.zip`) をPaperMCサーバの`~/PaperMC/world/datapacks/`に置く 3. PaperMCを再起動する (ZIPファイル設置後の初回の起動時には次のログが現れた) ``` [XX:XX:XX INFO]: Found new data pack file/coordinates hud v1.2.3.zip, loading it automatically ``` 3. ワールドに接続してプレイヤー画面のコマンドで`/trigger ch_toggle`を入力する 4. プレイヤー画面の下部にXYZ座標・方角・時計が表示されるようになる #### 余談: プレイヤーの存在を実世界で把握 IoT絡みの一種のお遊びとして、某氏と共作して、某所LAN内のMinecraftサーバにログイン中のプレイヤーが1名以上になっている間は、某所にある上記写真の「ON AIR」ランプが点灯するようにした。 どのような仕組みを使っているかというと、下記1のツール「itzg/mc\-monitor」にてオンラインのプレイヤー数をMinecraftサーバから定期的に読み取り、その数値変化に応じて、改造した「ON AIR」ランプの中に仕込まれた下記2の「M5Stack ATOM Lite」をクラウド経由で制御し、ランプを点灯・消灯する流れとなっている。ATOM Liteを仕込む改造の部分は自分はまだよく把握しておらず、今後の研究課題だ。 1. [itzg/mc\-monitor: Monitor the status of Minecraft servers and provides Prometheus exporter and Influx line protocol output](https://github.com/itzg/mc-monitor) 2. [ATOM Lite — スイッチサイエンス](https://www.switch-science.com/products/6262) #### 参考リンク - [PaperMC – The High Performance Fork](https://papermc.io/) - [GeyserMC](https://geysermc.org/) - [GeyserMC/Floodgate: Hybrid mode plugin to allow for connections from Geyser to join online mode servers\.](https://github.com/GeyserMC/Floodgate/) - [Vanilla Tweaks \- Data Packs](https://vanillatweaks.net/picker/datapacks/) --- ### 【読んだ本】 0→100(ゼロヒャク)生み出す力 - 2022-11-11 URL: https://remoteroom.jp/medialog/2022-11-11_book-b0b4nm9q82/ 日産のR35 GT-Rのプロジェクト統括責任者で知られるエンジニアの水野氏と、がん治療の第一線に立つ医師の小泉氏とが、ほぼ交互にセクションを執筆しており、それらの内容が呼応する流れで本書は成り立っている。なぜこの二者が共著を出すことになったのか? R35 GT-Rが関係する話題には、とくに開発ストーリーについては、私は吸い寄せられるように関心を持ってきたのだけども、水野氏に関するある事実を本書で初めて知ったとき、「えっ」と声を出すほど驚いた。 本書から知ることができるのは、己に託してきた分野で卓絶した域まで達しているプロフェショナルは、特有の感覚で世界を見ているらしいということ。事象を、時間変化を伴う動画イメージで予知している (過酷な走行をするレースカーならば、どこの部品がどのように変化して真っ先に壊れるかが見える)。また、チームで仕事を為すために個々のメンバーの能力を縦と横にも拡張する方法を用いていて、そのようなチーム運営は分業制が前提である組織論に必ずしも沿うものではないと。 著者らが事を進めてきたのは「何のために」であるかという点も、本書を貫く重要な骨子である。それは顧客や患者のしあわせのため。たとえば極端な比較として、自分の趣味の世界では「ぼくのかんがえたさいきょうの……」を実現したい気持ちが主たる行動要因だったりもする。このような自己実現を目指す発想が、規模の小さくないものづくりの場を引っ張っていることもありうるのかも知れない。私も陥りがちだなと自戒しつつ、「何のために」のバランスは場面場面で突き詰めていかねばと思う。 #### 参考リンク - [【読んだ本】 バカになれ! カリスマ・エンジニア「ゼロからの発想術」 \[2017-01-22\]]() - [【読んだ本】 ベストカー水野和敏SPECIAL \[2017-01-29\]]() --- ### 仮想化プラットフォームProxmox VEをラズパイに移植した「Pimox」を試す - 2022-11-07 URL: https://remoteroom.jp/diary/2022-11-07/ #### 省電力な仮想化基盤を x86_64マシンで構築した自宅内のProxmox VE (Proxmox Virtual Environment) はサーバ実験などで重宝している (参考: [Proxmox VEで仮想化プラットフォームを簡単構築 \[2022-04-09\]]())。そのProxmox VEをRaspberry Pi 4でも動かせると知ったので試してみよう。ラズパイ4なら、搭載メモリ量やマシンパワーは抑えられてしまうけれども、x86_64マシンよりも省電力な仮想化プラットフォームになりうる。 ##### 用意したもの |項目|内容|備考| |---|---|---| |ラズパイ|Raspberry Pi 4 Model B (4GB)|余り物| |SATA SSD|Samsung SSD 850 EVO 500GB|余り物| |2.5インチHDDケース|USB 3.0接続のもの|余り物| #### 手順1) USB-SSDで起動するRaspberry Pi 4を用意する 今回の試みのひと工夫として、最初に、Raspberry Pi 4をmicroSDカードではなく外付けのUSB-SSDから起動するようにしておく。 ##### bootloaderを最新版に ラズパイ4本体のbootloaderを最新にしておくために、[ラズパイ4をUSB接続のSSDから起動する方法\(USBブート\) \| ラズパイダ](https://raspida.com/rpi4-ssd-usb-boot) を参考に次の作業を進める。 1. 「Raspberry Pi OS (64-bit) Lite」をmicroSDカードに焼いて、ラズパイ4を起動する 2. bootloaderを最新版に更新する: `sudo raspi-config` > 6 Advanced Options > A7 Boot ROM Version > E1 Latest: Use the latest version boot ROM software を選択 (再起動する) 3. boot順を変更する: `sudo raspi-config` > 6 Advanced Options > A6 Boot Order > B2 USB Boot: Boot from USB if available, otherwise boot from SD Card を選択 当環境の場合、bootloaderのバージョンは次のように変化した。 ``` #### bootloader更新前 $ vcgencmd bootloader_version Apr 29 2021 17:11:25 version c2f8c388c4ee37ad709ace403467d163e8dd91ce (release) timestamp 1619712685 update-time 1643339737 capabilities 0x0000001f ``` ``` #### bootloader更新後 $ vcgencmd bootloader_version 2022/10/18 11:57:44 version 23aa699d0e70ed543c1ddcd17bed6446bfb6866e (release) timestamp 1666090664 update-time 1667475307 capabilities 0x0000007f $ sudo rpi-eeprom-update BOOTLOADER: up to date CURRENT: Tue 18 Oct 10:57:44 UTC 2022 (1666090664) LATEST: Tue 18 Oct 10:57:44 UTC 2022 (1666090664) RELEASE: stable (/lib/firmware/raspberrypi/bootloader/stable) Use raspi-config to change the release. VL805_FW: Dedicated VL805 EEPROM VL805: up to date CURRENT: 000138a1 LATEST: 000138a1 ``` ##### USB-SSDを起動デバイスにする 上記で用意したmicroSDカードの内容をまるごとUSB-SSDへ複製する。(※今回はUSB-SSDで起動するOSとしてmicroSDカードと同じ「Raspberry Pi OS (64-bit) Lite」を想定しているため、この複製の手順を実施しています) 1. 作業用パソコンにmicroSDカードとUSB-SSDを接続し、それぞれのデバイス名を確認する。当環境ではコピー元 (microSDカード) = `/dev/sda`、コピー先 (USB-SSD) = `/dev/sdb` とわかる ``` #### 作業用パソコンにて $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT 〜(snip)〜 sda 8:0 1 14.9G 0 disk ├─sda1 8:1 1 256M 0 part /media/USER/boot └─sda2 8:2 1 14.6G 0 part /media/USER/rootfs sdb 8:16 0 465.8G 0 disk 〜(snip)〜 ``` 2. ddコマンドを使って、microSDカードの内容をUSB-SSDへコピーする (bsの値は適当) ``` #### 作業用パソコンにて sudo dd if=/dev/sda of=/dev/sdb bs=256M ``` 3. USB-SSDをラズパイ4に接続して電源をONすると、ラズパイ4がUSB-SSDから起動してくる 4. ラズパイ4起動後、ファイルシステムがUSB-SSDの全容量を使うように設定する: `sudo raspi-config` > 6 Advanced Options > A1 Expand Filesystem: Ensures that all of the SD card is available を選択 (再起動も選択する) 5. ラズパイ4再起動後にUSB-SSDの領域を確認すると次の通りで、sda2パーティションが拡張されてSSDの全容量を使用できている ``` $ sudo fdisk -l /dev/sda Disk /dev/sda: 465.76 GiB, 500107862016 bytes, 976773168 sectors Disk model: SSD 850 EVO 500G Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x0523bb15 Device Boot Start End Sectors Size Id Type /dev/sda1 8192 532479 524288 256M c W95 FAT32 (LBA) /dev/sda2 532480 976773167 976240688 465.5G 83 Linux ``` ##### メモ: USB起動対応済みのラズパイ4へのOS再導入 上記の設定を行って起動デバイスとしてUSB-SSDが利用できるようにしたラズパイ4で、OSの再インストールを行う時には、自分に染み付いているこれまでのラズパイの常識を忘れる必要がある。なぜなら、ラズパイ4をUSB-SSDから起動できるのだからmicroSDカードへのイメージ焼きはもう不要で、Raspberry Pi Imagerで任意のOSイメージを「USB-SSD」へ焼いてそのUSB-SSDからラズパイ4を起動すればよいので。 #### 手順2) Pimoxをインストールする Raspberry Piに移植されたProxmox VE (OSS仮想化プラットフォーム) の「Pimox」を、手順1で用意したラズパイ4にインストールする。 1. [pimox/pimox7: Proxmox V7 for Raspberry Pi](https://github.com/pimox/pimox7) にてハードウェア要件などを確認 2. ラズパイ4へSSHログインした画面もしくは直接の端末画面で [Install from "scratch", RPiOS64bit Interactive Automatic Installer](https://github.com/pimox/pimox7#install-from-scratch-rpios64bit-interactive-automatic-installer) を実施し、途中で次の問い合わせに答える - hostname (当環境では「pimox-1」にした) - static IP address and NETMASK - gateway - root's password 3. インストールが進行して15分ほどで、ラズパイ4の再起動がかかる段階まで達する 4. 再起動完了後、Pimoxの管理画面 `https://[PimoxのIPアドレス]:8006/` を開く 5. 遅くてもとにかく動き続けることを重視して、swap領域を100MBから1GBへ増やしておく ``` #### CONF_SWAPSIZE=100 の100を1024へ変更し、swapのサービスを再起動 sudo vim /etc/dphys-swapfile sudo service dphys-swapfile restart ``` Pimox管理画面を見る限り、本家Proxmox VEとの機能的な違いは見つけられない。妙な感覚なのだがついつい、小さい筐体の割に頼もしいなと思ってしまった。 #### 手順3) 仮想マシンを作成する (Ubuntu Server 22.04) Pimoxの上に仮想マシン (VM; Virtual Machine) を作ってみる。仮想マシンのOSとして、ここではUbuntu Server 22.04 LTS (ARMv8/AArch64) を選択した。 1. Pimox管理画面の左メニューを Datacenter > pimox-1 > local (pimox-1) と開き、右側の \[ISO images\] を選択する 2. \[Upload\] または \[Download from URL\] のボタンを使って、[Ubuntu 22\.04\.1 LTS \(Jammy Jellyfish\)](https://cdimage.ubuntu.com/releases/22.04.1/release/) にある64-bit ARM用の `ubuntu-22.04.1-live-server-arm64.iso` をPimoxのストレージに保存する 3. 次のドキュメントに沿って、上記ISOイメージで起動する仮想マシンを作成する - [pimox7/VM\-Configuration\.md at master · pimox/pimox7](https://github.com/pimox/pimox7/blob/master/docs/VM-Configuration.md) - ※x86_64の場合とISOイメージの読み込ませ方が大きく異なるので注意 (IDEではなくSCSIデバイスからISOイメージを読み込ませる、などのお約束がある) 4. 作成した仮想マシンにはQEMUゲストエージェントを導入しておく (Ubuntuなら`sudo apt install qemu-guest-agent`) さらに、仮想のUbuntu ServerへRDP接続 (リモートデスクトップ接続) を行いたいならば、次のコマンドを実施すればよい (参考: [Oracle Cloud InfrastructureのArmインスタンスでリモートデスクトップしたいのでxrdpを使う: Ubuntu編 \[2021-06-14\]]())。 ``` sudo apt install xrdp sudo apt install xfce4 sudo sed -i.original -e 's/allowed_users=console/allowed_users=anybody/g' /etc/X11/Xwrapper.config # ←「allowed_users」の行を置換 echo "xfce4-session" > ~/.xsession ``` #### 手順4) Containerを作成する (Rocky Linux 9) Pimox (Proxmox VE) には仮想マシン用のそれと同様にコンテナ用の管理機能も備わっているので、Pimoxの上にコンテナ (LXC Container) も作ってみる。コンテナのOS環境として、ここではRocky Linux 9 (arm64) を選択した。 1. 次のドキュメントに沿って、コンテナを作成していく - [pimox7/CT\-Configuration\.md at master · pimox/pimox7](https://github.com/pimox/pimox7/blob/master/docs/CT-Configuration.md) 2. Rocky Linuxの場合、執筆時点の最新の`rootfs.tar.xz`は、 から探っていくと次のURLだとわかる - https://uk.lxd.images.canonical.com/images/rockylinux/9/arm64/default/20221104_02:06/rootfs.tar.xz 3. そこでPimoxにSSHログインして下記のCLI操作を行うと、コンテナのテンプレートとして`rockylinux-9.tar.xz`が使用できるようになるので、コンテナを作成する ``` $ sudo wget -O /var/lib/vz/template/cache/rockylinux-9.tar.xz https://uk.lxd.images.canonical.com/images/rockylinux/9/arm64/default/20221104_02:06/rootfs.tar.xz $ ls -l /var/lib/vz/template/cache/ total 97308 -rw-r--r-- 1 root root 99642792 Nov 4 12:10 rockylinux-9.tar.xz ``` 4. コンテナのConsole画面でRocky Linuxにログインし、`uname -a`と`cat /etc/os-release`を実行したところ、Pimox環境のカーネルの上にRocky Linux 9環境が乗っていることが確認できる #### 感想 実はProxmox VE上にコンテナを作ったのは今回が初めて。コンテナをGUIで簡単に扱えそうだ。特にラズパイ4はRAMが4GBもしくは8GBと少なめであるし、隔離環境を作る類の実験がもしコンテナで済むなら、私としては新技術習得の意味も含めて、仮想マシンよりも軽量なコンテナに慣れていくほうが良さそうである。 また、冒頭に掲げた「省電力な仮想化プラットフォーム」の実現度合いについてはどうであるか。今回のシステム全体の消費電力をワットモニターで実測してみたところ、ラズパイ4に外付けSSDをUSB接続し、Pimox (Proxmox VE) で仮想マシン1個とコンテナ1個を稼働させて特に負荷はかけていない状態で、消費電力は「5W前後」であった。他との比較をしていないが、期待を裏切らない数値ではあると思う。 #### 参考リンク - [Proxmox VE \- Virtualization Management Platform](https://www.proxmox.com/en/proxmox-ve) - [GitHub \- pimox/pimox7: Proxmox V7 for Raspberry Pi](https://github.com/pimox/pimox7) - [Proxmox VEで仮想化プラットフォームを簡単構築 \[2022-04-09\]]() --- ### Minecraft: マイクラサーバを多拠点利用するためのUDPポートフォワーディング - 2022-11-04 URL: https://remoteroom.jp/diary/2022-11-04/ #### 試しがいのある接続 下図の某所LAN-X内にMinecraft Server (正確にはBedrock Dedicated Server) を立ててみたところ、最近Minecraftにはまりつつあるうちのこどもも、LAN-X内のマイクラサーバへ自宅内から繋ぐことになった。 その接続方法としては、「踏み台を作ってSSHトンネルを繋げてポートフォワードで余裕やろ……」と私は最初思ったのだが、マイクラ統合版を担う「[Bedrock Dedicated Server](https://www.minecraft.net/ja-jp/download/server/bedrock)」は、デフォルト設定ではIPv4通信を「19132/udp」で待ち受けているらしい。 えー、UDP通信なの! 単純なSSHポートフォワードはUDPを通さないはず。ということで他の接続方法を試行錯誤して、下図の「Nintendo Switch」から「Minecraft Server」までのUDP通信を通した作業内容をメモしておきます。 ```goat [LAN-X] .-.-PC-2 | .-Minecraft Server (Bedrock) | .-Game Console | + | | [Home] +-.-PC-1 .-Nintendo Switch .-Game Console ``` ##### 今回の接続方針 1. インターネット上のそれぞれ異なるLAN内にあるPC-1とPC-2を、インターネット向けのポート開放やVPNルータでの拠点間VPN接続を行わずに、「[Tailscale](https://tailscale.com/)」を使って仮想的に直接通信できるようにする 2. PC-1とPC-2の間で「[Secure Socket Funneling (SSF)](https://securesocketfunneling.github.io/ssf/)」を使ってUDP通信をフォワードできるようにし、Home内のマイクラからPC-1の19132/udpへ向けられた通信が、PC-2を経由してMinecraft Server (Bedrock Dedicated Server) の19132/udpへ届くようにする #### 作業内容 ##### マイクラサーバの構築 LAN-X内の適当な環境にMinecraft Server (Bedrock Dedicated Server) を構築する。 1. 公式サイト [Bedrock Dedicated Server](https://www.minecraft.net/ja-jp/download/server/bedrock) からZIPファイルをダウンロードする (今回の場合はUbuntu版の `bedrock-server-1.19.40.02.zip`) 2. ZIPファイルを展開し、`LD_LIBRARY_PATH=. ./bedrock_server` すると統合版サーバが起動する ##### PC-1の仕込み PC-1として、手持ちのマシンの中で最も省電力なRaspberry Pi 2を用意し、次の仕込みを行う。 1. [Raspberry Pi OS Lite (32bit)](https://www.raspberrypi.com/software/operating-systems/#raspberry-pi-os-32-bit) を導入する 2. PC-1のIPアドレスを固定する: `sudo vim /etc/dhcpcd.conf` 3. [Tailscale](https://tailscale.com/download/linux/rpi)を導入する: `curl -fsSL https://tailscale.com/install.sh | sh` 4. [Secure Socket Funneling (SSF)](https://securesocketfunneling.github.io/ssf/#download) のRaspberry Pi 2/3用バイナリを次の場所に保存する: `/home/USER/bin/ssf/` 5. 一般ユーザのcronとして次の内容を設定する (tmuxを介して実行している部分はお好みで変更をどうぞ) ``` @reboot sleep 60; cd /home/USER/bin/ssf/; tmux new-session -s ssf -d './ssf -g -U [Home内PC-1のIPアドレス]:19132:[LAN-X内Minecraft ServerのIPアドレス]:19132 [Tailscale上のPC-2のIPアドレス]' ``` 【備考】我が家の場合、自宅内 (Home) には24時間稼働しているRaspberry Pi 4がすでにあるので、それをPC-1としてTailscaleとSSFを動作させられたら無駄がない。しかしながらRaspberry Pi 4 (arm64) で動くSSFバイナリは用意されておらず、さらにSSFの自力ビルドがどうしても出来なかったので、今回はSSFバイナリが用意済みのOSで動くRaspberry Pi 2を別途投入した次第。 ##### PC-2の仕込み PC-2として、TailscaleとSSFが対応しているOSが動く適当なマシンを用意し、次の仕込みを行う。 1. 適当なOSを導入する (今回の場合はUbuntu Server 22.04 (x86_64) の仮想マシン) 2. PC-2のIPアドレスを固定する 3. [Tailscale](https://tailscale.com/download/)を導入する 4. PC-1と同様に、[Secure Socket Funneling (SSF)](https://securesocketfunneling.github.io/ssf/#download) のバイナリを導入する 5. PC-1と同様に、一般ユーザのcronとして次の内容を設定する ``` @reboot sleep 10; cd /home/USER/bin/ssf/; tmux new-session -s ssf -d './ssfd -S' ``` 【備考】試してはいないが、上記ではPC-2に仕込んでいるTailscaleやSSFサーバを、Minecraft Serverに同居させることは可能かもしれない。今回は管理上の事情で、Minecraft ServerとPC-2は別々の環境としている。 ##### 自宅内マイクラでの設定 1. 自宅内 (Home) のNintendo SwitchやパソコンでプレイするMinecraftにて、接続先サーバとして `[PC-1のIPアドレス]:19132` を指定する 2. 作業の全てがうまくいけば、LAN-X内のMinecraft Server (Bedrock Dedicated Server) 上のワールドでプレイできる 【備考】SwitchのMinecraftにかけられている制限を突破し、任意のマイクラサーバへ接続できるようにするには、何やらひと工夫要りましたがここでは省略。参考情報→[Pugmatt/BedrockConnect: Join any Minecraft Bedrock Edition server IP on Xbox One, Nintendo Switch, and PS4/PS5](https://github.com/Pugmatt/BedrockConnect) #### まとめ UDPのポートフォワーディングのために今回初めて用いた [Secure Socket Funneling (SSF)](https://securesocketfunneling.github.io/ssf/) は、クライアントからサーバへ8011/tcpで接続して独自のトンネルを作り、その中にUDP通信をいい感じに通してくれるスグレモノらしい。実は「いい感じに」という部分がミソで、私の実験では、たとえばNetcatコマンド (nc) を使った別のトンネル手法 ([UDPのパケットをSSHを通してトンネルする](https://shogo82148.github.io/blog/2012/12/28/tunneling-udp-via-ssh/)) では目標が達成できなかったことを書き添えておきます。 しかしまさかマイクラをきっかけに、以前から気になっていたUDPのポートフォワーディングに初挑戦するとは思わなかった。構想を試すことは楽しい。 ##### PC-1側のSSFクライアント実行例 ``` $ ./ssf -g -U [Home内PC-1のIPアドレス]:19132:[LAN-X内Minecraft ServerのIPアドレス]:19132 [Tailscale上のPC-2のIPアドレス] [info] [config] [tls] CA cert path: [info] [config] [tls] cert path: [info] [config] [tls] key path: [info] [config] [tls] key password: <> [info] [config] [tls] dh path: [info] [config] [tls] cipher suite: [info] [config] [http proxy] [info] [config] [socks proxy] [info] [config] [circuit] [info] [ssf] connecting to <[Tailscale上のPC-2のIPアドレス]:8011> [info] [ssf] running (Ctrl + C to stop) [info] [client] connection attempt 1/1 [info] [client] connected to server [info] [client] running [info] [microservice] [datagram_listener]: forward UDP datagrams from <[Home内PC-1のIPアドレス]:19132> to fiber port 84668 [info] [client] service OK ``` ##### PC-2側のSSFサーバ実行例 ``` $ ./ssfd -S [info] [config] [tls] CA cert path: [info] [config] [tls] cert path: [info] [config] [tls] key path: [info] [config] [tls] key password: <> [info] [config] [tls] dh path: [info] [config] [tls] cipher suite: [info] [config] [http proxy] [info] [config] [socks proxy] [info] [config] [circuit] [info] [status] [microservices][datagram_forwarder]: On [info] [status] [microservices][datagram_listener]: On [info] [status] [microservices][stream_forwarder]: On [info] [status] [microservices]][stream_listener]: On [info] [status] [microservices][copy]: Off [info] [status] [microservices][shell]: Off [info] [status] [microservices][socks]: On [info] [ssfd] listening on <*:8011> [info] [ssfd] running (Ctrl + C to stop) [info] [microservice] [datagram_forwarder]: forward fiber datagrams from fiber port 84668 to <[LAN-X内Minecraft ServerのIPアドレス]:19132> ``` #### 参考リンク - [Tailscale · Best VPN Service for Secure Networks](https://tailscale.com/) - [SSF \- Secure Socket Funneling \- Network tool \- TCP and UDP port forwarding, SOCKS proxy, Remote shell, Native Relay protocol, Standalone](https://securesocketfunneling.github.io/ssf/) - [UDPのパケットをSSHを通してトンネルする](https://shogo82148.github.io/blog/2012/12/28/tunneling-udp-via-ssh/): ←今回のケースでは目標達成できず --- ### スマホ+DACアンプでヘッドホンをグランド分離接続してみた効果 - 2022-10-29 URL: https://remoteroom.jp/diary/2022-10-29/ #### 基準器のアップグレード - [モニターヘッドホンを切り替え: SONY MDR-CD900STからMDR-M1STへ \[2022-05-29\]]() 2022年5月にヘッドホンをSONY MDR-M1STへ更新し、主にスマホで聴く音楽を新たな音で楽しみ始めた (初期の感想は上記ページに記録)。この新しいヘッドホンはLch/Rchのグランド分離接続が可能な端子を備えてはいるものの、スマホとの接続に関しては、出費の都合上とりあえず、Lch/Rchのマイナス側を共用する標準的な3.5mmステレオミニプラグを用いていた。 しかしながら、そんな中途半端な状態に自分の我慢が続くはずもなく。グランド分離接続に変えてアップグレードするぞ!と、小型DACアンプのHyBi FC5と比較的安価なバランスケーブルを9月末に購入。これによる音の変化をメモします。 #### 聴き比べの感想 |項目|内容| |---|---| |評価基準|音の細部までが掴めること| |再生装置|Xiaomi Redmi Note 10 Pro| |音源|Spotifyアプリでのいろいろな音楽| スマホとHiBy FC5 (DACアンプ) をUSB Type-C同士で接続し、その先のヘッドホンMDR-M1STとの接続を次の二通り試した。bit perfectとなるようスマホ側のボリューム設定は最大の100%に固定し、音量調整はHiBy FC5側で行っている。 1. 【HiBy FC5 + 3.5mmステレオミニプラグ接続】: スマホのヘッドホン出力では聞こえなかった微細な音が聴こえるようになる 2. 【HiBy FC5 + 下記3APLUSケーブルでのグランド分離接続】: 生身そのままで滑らか。引っかかる音がしない。自然でうるさく感じない。音楽をかき分けるような聴き方も好きな私にはぴったり ちなみに、HiBy FC5のボリューム設定は維持したままケーブルを1→2へつなぎ替えると、MDR-M1STでの聴感上の音量が上がると気づいた。駆動に関する何かが変わるようだ。 まとめとして。スマホに小型DACアンプを外付けしてかつヘッドホンをグランド分離接続すると、自分史上もっとも音が素晴らしい“持ち運びオーディオ”が実現可能だと分かった。そうすると次には圧縮音源の部分を底上げしたくなる。高音質になると言われている[Spotify HiFi](https://newsroom.spotify.com/2021-02-22/five-things-to-know-about-spotify-hifi/)が待ち遠しい。このサービスが開始されたら、多少費用が高いとしてもとりあえずサブスクを試してみると思う。 #### 参考) 購入価格 |品名|価格(税込)|購入店| |---|--:|---| |ヘッドホン [SONY MDR-M1ST](http://www.smci.jp/s/headp/page/m1st) (中古)|23,900円|[e☆イヤホン](https://www.e-earphone.jp/product/search/list/?search_rank=%201%202%203&search_word=MDR-M1ST)| |ヘッドホンケーブル [SONY MUC-S12SM1](https://www.sony.jp/headphone/products/MUC-S12SM1/) (中古)|2,790円|[e☆イヤホン](https://www.e-earphone.jp/product/search/list/?search_rank=%201%202%203&search_word=MUC-S12SM1)| |DACアンプ [HiBy FC5](https://store.hiby.com/products/hiby-fc5) (中古)|16,900円|[e☆イヤホン](https://www.e-earphone.jp/product/search/list/?search_rank=%201%202%203&search_word=FC5)| |ヘッドホンケーブル [3APLUS バランス接続リケーブル](https://twitter.com/3aplus_Cable/status/1432236583969644545)|3,350円|Amazon.co.jp| #### 備考 今回の記事の中で、HiBy FC5に関して「バランス接続」ではなく「グランド分離接続」と表記しているのは、HiBy FC5が4アンプ構成 (バランス駆動型) なのかどうか確実な情報を私自身が見つけられていないためです。下記リンク先に「バランス接続」と「グランド分離接続」との違いを示す分かりやすい図 (図1,2,3) がありました。 - [バランス設計のアンプにアンバランス結線のケーブルを接続し続けると故障の原因となります – Brise Audio](https://briseaudio.com/pages/caution01) --- ### ClockworkPi uConsole: 購入予約した - 2022-10-25 URL: https://remoteroom.jp/diary/2022-10-25/ #### なんですかこれは?! Twitterを眺めていると、いかにも両手の中で操作するのに適してそうな、小さな端末の写真が流れてきた。[Clockwork uConsole](https://www.clockworkpi.com/uconsole)というものらしい。 > `make --field-programmable --cellular --fantasy uConsole` なはは、このmakeコマンドの意味はなんとなく分かる。 ポケコン版のTOUGHBOOKのような、もしくは、スタンドを備えた卓上の測定器のような、無骨な外観がどう見てもかっこいい。キーボードは光るようなので暗い場所でもぽちぽち出来る。中身としてRaspberry Piのボードを選択すればソフトウェアに関する問題はきっとどうにでもなるだろう。 同じClockwork Tech社から出ている、タイプライターのような (古い話をすると[NEC PC-8201](https://ja.wikipedia.org/wiki/PC-8200%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA)のような) 形の[DevTerm](https://www.clockworkpi.com/home-devterm)は会社に置いてあって、非常に気にはなっていました。他方、少し小型で、基本的に両手の親指でキーが打てそうな今回のuConsoleを見て、私はこっちで遊んでみようと決意。CoreがRaspberry Pi CM4でかつ4G対応の物をカートに入れて速攻で決済 (Pre-order) しました。いつ頃届くのかまだよくわかりませんが、楽しみにしておきます。 ##### uConsoleの価格 |項目|価格| |---|--:| |[uConsole Kit RPI-CM4 Lite](https://www.clockworkpi.com/product-page/uconsole-kit-rpi-cm4-lite) (Type: WiFi+4G cellular, Core: Raspberry Pi [CM4 104000 lite](https://datasheets.raspberrypi.com/cm4/cm4-product-brief.pdf#page=5))|$239.00| |Shipping|$30.00| |Total (USD)|$269.00| |Total (PayPal決済でのJPY)|¥41,860| #### 追記: 出荷通知のメールが着弾 \[2023-07-09\] 2023-07-09 00:11 (JST) に、ClockworkPi.com から「Your order is on its way (#19NNN)」というメールが届きました。メール本文は「Your order has been shipped.」で始まり、FedEx Tracking No.が記載されていて、そのトラッキング情報によるとサービス名は「FedEx International Priority」、そして荷物は現時点で「YUEN LONG NT, HK」にあることが分かります。いよいよ届くのかーと感慨深いです。 #### 追記: uConsole、無事に到着 \[2023-07-17\] 無事に到着しましたので別記事を書きました。 - [ClockworkPi uConsole: 開封の儀と簡単レビュー \[2023-07-17\]]() #### 参考リンク - [uConsole \| ClockworkPi](https://www.clockworkpi.com/uconsole) --- ### 【読んだ本】 Anker 爆発的成長を続ける 新時代のメーカー - 2022-10-22 URL: https://remoteroom.jp/medialog/2022-10-22_book-4839972486/ 充電関係のガジェットを購入する際には、自分の中で第一に検討対象とするブランドの[Anker](https://www.ankerjapan.com/)。ここの製品は実際にいくつか購入しているが会社についてはよく知らないなぁと、タイトルに惹かれて本書を手に取った。Anker社は2011年創業とのこと。本書は、創業者を含むコアメンバー数名への取材を交えて書かれている。 Anker社の組織構造として、自社工場は持たないファブレスであることは予想の範囲内だったが、当初想定の販路はAmazonを通じたオンライン販売のみという点には、軽く意表を突かれた (のちに自社サイトや実店舗等にも販路を拡大)。だがこのネット時代なら、“Amazonで売る”ことから会社が始まるとしても特に不思議ではない。おそらくオンラインなら比較的低コストかつ簡単に出品して販売開始できるから。 しかし実は、販路に関する考え方に本書の要点があった。Anker社の場合、研究開発と顧客対応を会社の価値創造の主軸に据えていて、これらを堅実に行うための、サイトでのユーザーレビューを拾い上げての顧客対応と商品改良そして研究開発をメーカーとしてかつてないほど高速に回すことができる、“Amazonに最適化”するD2C (Direct to Consumer) な戦略が成長力の源だとわかる。これを私なりに広く解釈すると、普遍的なミッション達成のための今どきの愚直な方法を追求することでチャンスは生まれる、とでもなろうか。 --- ### 【読んだ本】 スイッチ! ― 「変われない」を変える方法 - 2022-10-14 URL: https://remoteroom.jp/medialog/2022-10-14_book-b00fj1dwbe/ 人間が絡む事象において、事を進めなくちゃいけないと分かっているが、うまく進まなかったり頓挫してしまっているとき。本書にはそのような状況を打開するためのヒントが沢山詰まっている。各章の内容を書き出しておきたくなるほど有用に思え、時間はかかったが2回通読した。 > あなたの探しているスイッチが家庭、慈善団体、組織、社会のどこにあっても、次の三つを行なえば変化を引き起こせる。①象使いに方向を教え、②象にやる気を与え、③道筋を定めるのだ。 第一章の最後の部分を上に引用した。本書での「象使い」「象」「道筋」は、それぞれ「理性」「感情」「環境」を意味している。この明瞭な概念だけでも本書のエッセンスとして空で覚えておいて、様々な“変われない”時に、自分自身を含む人間にとって何がその妨げになっているのか、状況を分析できるようになっていきたいと思う。 --- ### レンタカー Nissan Note 雑感2 - 2022-10-10 URL: https://remoteroom.jp/diary/2022-10-10/ 二泊三日門司・熊本旅行の2~3日目のお供に、日産レンタカーで[Nissan Note](https://www3.nissan.co.jp/vehicles/new/note.html)を借りました。行程は一般道ばかりで、熊本市内から阿蘇の草千里への往復を含む150km弱を走行しています。 #### 簡単な感想 |項目|内容| |---|---| |車種|Nissan Note X (6AA-E13)| |走行距離, 燃料消費量|143km※, 7.67L| |満タン法での燃費|18.64km/L| ※走行距離としてはレンタカー店の貸渡計算書に記載の値を通常はそのまま用いているのだが (出発時と返却時のオドメーターの値の差)、今回は返却前の給油を行ってからレンタカー店までの帰り道でやや迷走したため、その分の距離を5kmと推定して貸渡計算書の値から差し引いている。 - 阿蘇地方のような、上り下りとカーブが連続する道を運転する場合は特に、反応の良いモーターをワンペダル感覚で操れる「e-POWER」は運転をとても楽にする機構だとわかった。アクセルとブレーキを踏み変える回数をかなり減らすことができるし、右足の乗せ具合だけで車を操るのは楽しい - 本グレードに標準装備のハロゲンヘッドライトは明るさが足りないと思った。街灯のある都市部なら許容範囲なのもしれないが、夜間に郊外のホテルへ向かうような道程では暗さが辛い - 他方、夜間走行時の室内ではメーター画面とダッシュボード画面の輝度が高すぎた。おそらく調整はできるはずなので早期にやるべきであった - 手持ちのスマホを車にUSB接続した[Android Auto](https://www.android.com/intl/ja_jp/auto/)状態での、Googleマップ「ナビ」機能を少々使ってみた。扱い慣れたらカーナビとして問題無さそうに思うし、音声入力が使えるのはとても良い E13型ノートをレンタカーとして借りたのは[先月]()に続き今回が2度目で、自分がもう慣れてきたのか、車に対して不満をあまり感じなくなっていました。 #### 参考地図 (車で移動した範囲) #### 参考リンク - [レンタカー Nissan Note 雑感1 \[2022-09-17\]]() --- ### 【観た映画】 トップガン マーヴェリック - 2022-10-08 URL: https://remoteroom.jp/medialog/2022-10-08_movie-b0bcvkz1ps/ - 視聴: [YouTube](https://www.youtube.com/watch?v=TlqoPPP7LGg) 原題『Top Gun: Maverick』。映画に対する一種の感想として、もう一度観るに値するかそうではないかがあるが、本作は前者の類だと言っていい。言葉少なげに場景で語る部分、茶目っ気を入れてる部分、極限状態で真剣にエキサイトする部分、そういったシーンをどういう塩梅で練り込んだら極上の楽しみが生まれるのか。娯楽映画における黄金比を示す作りだ。 #### 鑑賞リンク --- ### トランシーバー (デジタル簡易無線登録局) その2: IC-DPR4通電と開設届申請編 - 2022-09-19 URL: https://remoteroom.jp/diary/2022-09-19/ 以下は次の記事の続きである。 - [トランシーバー \(デジタル簡易無線登録局\) その1: IC-DPR4購入と登録局申請編 \[2022-07-23\]]() #### 登録局申請のその後 時系列で示すと、[総務省 電波利用 電子申請・届出システム](https://www.denpa.soumu.go.jp/public/index.html)を利用した次のような流れで「無線局登録状」を受け取ることができた。 1. 2022-07-24(日): 総務省 電波利用 電子申請・届出システムにて「無線局の包括登録の申請」を行った 1. 2022-07-27(水): 総務省 電波利用 電子申請・届出システムから「申請手数料の電子納付手続」のメールが届いたので2,150円の電子納付を行った 1. 2022-08-01(月): [近畿総合通信局](https://www.soumu.go.jp/soutsu/kinki/index.html)から「無線局登録状ができました」の電話連絡があった (直接取りに行くか郵送してもらうかを選べて、私は郵送を選択) 1. 2022-08-02(火): 近畿総合通信局宛に返送用封筒を投函した 1. 2022-08-12(金): 現状どうなっているだろうか?と気になり、近畿総合通信局へ電話で進捗確認を行ったら、登録状は送付済みとのこと 1. 2022-08-13(土): 近畿総合通信局から郵送された「無線局登録状」が家に届いた #### 通電の儀 ##### やっと遊べる! |品名|価格(税込)|購入数|備考| |----|---:|---:|----| |[ICOM IC-DPR4](https://www.icom.co.jp/lineup/products/IC-DPR4/) + [HM-166LS](https://www.icom.co.jp/lineup/options/HM-166LS/)|19,998円/1セット|2|[無線の王様](https://musen-ousama.com/products/detail.php?product_id=468)の中古整備品| 無線局登録状を受け取ったのでやっと無線機の動作確認および運用ができる。外箱に「名刺サイズでパワーは2W、大きさと飛びのベストバランス。」と書かれているこの無線機、正面から見た縦横サイズは確かに名刺とほぼ同じである。他方、厚みは30mmほどあるが手の中に収まりやすい形だ。ちなみにアンテナは取り外しできない。 今回はこどもと遊ぶための持ちやすさが重要なので、手頃なこの機種を選んで良かった。また、せっかく付属していたイヤホンマイクは家族で遊ぶ際にはとりあえず不要なので封印しとこう。 ##### 飛距離のテスト 家族に協力してもらって、電波がどれぐらい飛ぶのかの簡単な実験をした。平野部にある広い公園と、そこから直線距離で2km以上離れた標高200mほどの高台の間で通話が成り立つかを確認したところ、出力2Wの設定でまったく問題なく通話ができた。この無線機の飛距離に関しては、見通しが効く範囲なら数kmはOKというイメージを持っておいて良いのかもしれない。 #### 開設の届出 登録局申請の後は、開設届の手続きを次のように進める必要がある。 1. 2022-08-15(月): 総務省 電波利用 電子申請・届出システムにて「無線局の開設の届出」を行った 1. 2022-08-15(月): 総務省 電波利用 電子申請・届出システムから「補正依頼に関する通知書」のメールが届き、システムにログインして通知内容を確認すると次の通り > お世話になっております。 > ご提出いただきました、無線局登録局(デジタル簡易無線局)の開設届につきまして、以下の内容をご確認の上、ご対応をお願いいたします。 > > 【不備等内容】(2点あります) > > 1点目 >  「開設局情報」について、無線機1台につき1局となります。 >  ご提出されている届出の内容は、無線機2台を1局とされておりますので、1局1台ずつ、計2局となるよう補正をお願いいたします。 > > 2点目 >  設備設置区分 の「常置場所情報」の入力が漏れております。 >  「常置場所情報(無線機の保管場所、個人さまの場合は、通常はご住所と同じ場所になると思われます)」の入力をお願いいたします。 > > ※修正後に補正後提出(電子申請届出システムのメインメニュー「その他」にございます)をお願いいたします。 > 誤って、もう一度新規に申請をされないようお願いいたします。 1. 2022-08-15(月): 総務省 電波利用 電子申請・届出システムにて指示された内容で「【補正】無線局の開設の届出」を行った 1. 2022-09-02(金): 総務省 電波利用 電子申請・届出システムにて審査完了した (「審査完了日: 令和4年09月02日」と表示されていることに実際は後日気づいた) 1. 2022-09-19(月): 無線機2台分の電波利用料の納入告知書が送付されてくるはずと思っているのだがまだ届かない。また電話で確認をしてみようと思う (→電話は結局しなかった) 1. 2022-09-30(金): 無線機2台分の電波利用料800円の納入告知書が送付されてきた 1. 2022-10-01(土): 電波利用料の[PayB](https://payb.jp/)での支払いを[Money Tap](https://moneytap.jp/)というアプリで行おうと考え、本人確認手続きのために顔写真や本人確認書類をアプリから登録した 1. 2022-10-03(月): Money Tapから本人確認・銀行口座登録完了のメールが届いた 1. 2022-10-03(月): Money TapアプリからPayB支払いを選択して、電波利用料の納付告知書に付いているコンビニエンスストア用バーコードを読み取り、電波利用料800円の支払いを行った 以上で、電波利用料の納付まで含めた開設届の手続きが完了。約7週間とは長くかかったなあ。 --- ### レンタカー Nissan Note 雑感1 - 2022-09-17 URL: https://remoteroom.jp/diary/2022-09-17/ 一泊二日福岡旅行の二日目のお供に、日産レンタカーで[Nissan Note](https://www3.nissan.co.jp/vehicles/new/note.html)を借りました。行程は一般道と渋滞ありの自動車専用道路で102kmを走行。移動時間節約のために、カーナビが勧めてくる有料道路優先のルートを躊躇なく選択しています。 #### 簡単な感想 |項目|内容| |---|---| |車種|Nissan Note X (6AA-E13)| |走行距離, 燃料消費量|102km, 5.94L| |満タン法での燃費|17.17km/L| 今回レンタカーでこのE13型ノートを選択したのは、同じくe-POWERの、来春から乗るはずの[T33型エクストレイル]()と操作系が似ているだろうからその予習のためです。 - メーター画面とセンターのナビ画面は鮮やかだし情報的に見やすい。もっと慣れれば各種機能を使いこなせるようにもなるだろう - カメラ式「インテリジェント ルームミラー」は当初、物理的に画面の反射がひどい状態だったが、これは自分で角度調節をして画面を斜めからではなく真正面から見るようにすれば軽減できる - プロパイロットは可能な限り駆使した。そうすると定速巡航のみならず渋滞もへっちゃらで楽。これからは必需装備だよとひとり興に入る。渋滞時の数km/hといった微速領域では動きが少しカクカクしていたが自分で速度制御するよりはきっとマシだ - 車重約1.2トンかつコンパクト (4045x1695x1505mm) なこの電動車は、身体の拡張感覚によく合うようで気兼ねなく運転できる。小型車楽しい! - エンジン音については、たとえば本線に合流するための加速時に「ぎゅーん」と唸っていたが、他のタイミングでは実はあまり意識しなかった - 他方、ロードノイズは終始それなりに侵入してくる - 「コンビニで淹れたカフェラテのカップは後席付近に置けるのか?」という、我が家特有の“カフェラテチェック”には不合格 (標準のリヤドアボトルホルダーはカフェラテカップを入れるのには適していなかった) - 実運用ではこういう工夫をすれば良さそう: [ノート e\-POWER (E13) 100均で作るリアドリンクホルダー\(簡易 笑\) by にゃにゃ丸 \- みんカラ](https://minkara.carview.co.jp/userid/424151/car/3267590/6922261/note.aspx) - 標準ではリアにUSB充電の口がない。フロントの口から2m程度のケーブルを配線する必要があった #### 参考地図 #### 追記 \[2022-10-13\] ノートを再度借りて、郊外の環境で乗った雑感はこちら。 - [レンタカー Nissan Note 雑感2 \[2022-10-10\]]() --- ### 【読んだ本】 ロシアトヨタ戦記 - 2022-09-14 URL: https://remoteroom.jp/medialog/2022-09-14_book-4120054845/ 著者は、2004年1月からの5年間、ロシアにおけるトヨタのディストリビューター業務を行う会社の社長であった方。この時期には、油価の上昇に裏付けされたロシア経済の高まりがまずあり、2008年の夏にはロシアによるジョージア侵攻が発生、9月にはリーマンショックに襲われて世界経済が暗転した。これにより、ロシアにおけるトヨタ車 (トヨタ+レクサス) の販売状況も、前年度比数十パーセント増の右肩上がりが続いた後に急落する。 本書は、旧国家崩壊後の新しい経済が萌芽してきたまだグレーな状態の国において、上記のような大波を被りつつも、グループの経営理念に沿ってビジネスを進めたひとつの記録となっている。語り口は文学的だ。読後に私には、「達観」という言葉が記憶されたようだ。なぜだろう。達観がうまくできていない限り、先の読めないビジネスは進められないと強く思わされたからか。そしてもう一つは「したたかさ」だ。 #### 参考リンク (追記 \[2022-09-24\]) - [トヨタがロシア生産撤退、侵攻長期化で部品調達難 日本車大手で初 | ロイター](https://jp.reuters.com/article/ukraine-crisis-toyota-idJPKBN2QO16C) \[2022-09-23\] --- ### 【読んだ本】 ニューモデル速報 第624弾 新型 エクストレイル のすべて (モーターファン別冊) - 2022-09-10 URL: https://remoteroom.jp/medialog/2022-09-10_book-4779646561/ 2022年7月に日本デビューした日産X-TRAIL T33型のいわば解説本。メーカーのカタログよりも深く詳しいメカニズムの解説を読みたいならば、現時点では紙媒体はこれ以外にない、と思う。開発に携わった方々にインタビューしている部分では、どのような検討を経て現行の仕様に定まったのか、ボディのカラーリングまでも含め経緯が知れるところが本書の醍醐味だ。 雪道や悪路でいままで車を走らせたことがない私は、色んな機構が面白そうであることと電動車的運転感覚と快適性でこの車に[決めた]()。そして歴代のエクストレイルに期待されてきたタフギア要素については、本書を読んで初めて意識したようなもの。今後それを自分が使い倒すことはないかもしれないが、「(今乗っているセダンより) どこでも行けそう」というイメージには確かに惹かれるものがある。普段使い用の腕時計にPRO TREKを選ぶのと似ている。 --- ### 【読んだ本】 ライセンスフリー無線完全ガイド (三才ムックvol.891) - 2022-08-24 URL: https://remoteroom.jp/medialog/2022-08-24_book-4861999014/ 最近使い始めたデジタル簡易無線(登録局)には、利用の作法のようなものがあるだろうからそれを学ぼうと思って。ガイド本の名にふさわしく、デジ簡の登録を書面の提出で行う方法が丁寧な説明とともに載っているので、これから登録する人は参考にできる (本書出版時には電子申請はまだ行われていなかったのであろう)。また、次のような無線用語がいきなり出現してきてちょっと驚いた。これらを知っているのは常識の範疇という世界なのだろう。 - [アイボール (eyeball)](https://www.wdic.org/w/WDIC/%E3%82%A2%E3%82%A4%E3%83%9C%E3%83%BC%E3%83%ABQSO) - [DX](https://www.wdic.org/w/WDIC/DX) (もちろん昨今話題のデジタルトランスフォーメーションではない) - [ワッチ (watch)](https://www.wdic.org/w/WDIC/%E3%83%AF%E3%83%83%E3%83%81) --- ### 【読んだ本】 Winny 天才プログラマー金子勇との7年半 - 2022-08-22 URL: https://remoteroom.jp/medialog/2022-08-22_book-b0875kdmcf/ Winnyの利用者だけでなく開発者も起訴されるという、衝撃的だった冤罪事件。本書はその記録で、Winny開発者の弁護団の弁護士による著だ。2004年に始まって2011年に無罪が確定した裁判をどのように争っていったかが、著者本人の感情も赤裸々に、時折顔文字混じりに、日記のように記されている。開発者である金子氏との交流が密になっていく様子にはニンマリさせられるところもある。軽快な文体に助けられてスムースに無罪が確定するまで読み進むのだけど、しかしその間には7年半という、取り戻せない年月が経過したのだった。 また、小説や映画の中でフィクションとして描かれることもある、いわゆる不当な取り調べの場景や論理が、本件での実際はどうだったのか。それを知ることも重要だと思う。極論を言うと、人間は誰もが道具を作り出す可能性を持つのだから。 私は本書を読み終わるころ、過去の仕事の現場で運用に関わっていた、あるソフトウェアの名前を思い出していた。それは「SkeedSilverBullet」という、通信プロトコルとしてTCPではなくUDPを使用するファイル転送システム。TCPでは通信のレイテンシーが増えるにつれ応答の待ち時間も増加し、データ転送の実効速度が必ず落ちてしまうが、UDPを使用するこのソフトウェアには独自の技術が実装されていて、確実性を担保しながらも実効速度があまり落ちないという特徴がある。その結果、遠距離間での大容量ファイル転送が比類なき効率で行える。本書の金子氏は、このソフトウェアを開発したSkeed社 (商号変更前の株式会社ドリームボート) のファウンダーだったのだなあ……。 #### 参考リンク - [SkeedSilverBullet \| 株式会社Skeed](https://skeed.jp/skeedsilverbullet/) - [会社概要 \| 株式会社Skeed](https://skeed.jp/company/) - [取締役・金子勇が考えるエンジニアの未来、経営の明日:Winny裁判と向き合って(1/3 ページ) \- ITmedia エンタープライズ](https://www.itmedia.co.jp/bizid/articles/1108/26/news053.html) #### Twitterメモ --- ### 【読んだ本】 プロジェクト・ヘイル・メアリー (上)(下) - 2022-08-16 URL: https://remoteroom.jp/medialog/2022-08-17_book-b09nbzlc7j-b09nbz4z3s/ お盆休みの終盤に、いつものパソコン遊びや車関係の情報収集という趣味を完全に差し置いて、私を夢中にさせたのはこのSF小説であった。上下巻ある分量なのにおそらく数時間で読んだ。 人類としての究極の選択を行う状況を想像でき、そして最大の謎のひとつに挑む様もシミュレートできてしまう。知的アドレナリンの補給に最適だ。 --- ### 試乗車 Nissan X-TRAIL 雑感+色選び - 2022-08-14 URL: https://remoteroom.jp/diary/2022-08-14/ #### エレキは前提 エレキが駆動を助けている車の、燃費の良さだけでなく反応の良さや快適性が私は好きだ。[自分の過去のTweetを「レンタカー」で検索](https://twitter.com/search?q=from%3Amah_jp%20%E3%83%AC%E3%83%B3%E3%82%BF%E3%82%AB%E3%83%BC&src=typed_query&f=live)してみると、様々なハイブリッド車を選り好みして乗ってきたことが分かる。余談だが、2010年に登場した電気自動車の[初代LEAF](https://history.nissan.co.jp/LEAF/ZE0/1211/index.html)には[2011年7月](https://flickr.com/photos/mah_japan/6004944263/)に1泊2日旅行のレンタカーとして乗ったのが初めて。福岡市内で電欠しそうになり焦ったのは良い思い出だ。 ここ半年の間では新たに、[Nissan SERENA (e-Power)](https://www3.nissan.co.jp/vehicles/new/serena.html)、[Tesla Model 3 Long Range AWD](https://www.tesla.com/ja_jp/model3)、[BMW iX](https://www.bmw.co.jp/ja/all-models/bmw-i/bmw-ix-new/2021/bmw-ix.html)、[Nissan ARIYA B6 (2WD)](https://www3.nissan.co.jp/vehicles/new/ariya.html)、[Volvo XC40 B4 AWD](https://www.volvocars.com/jp/cars/xc40/)を運転する機会があった ([Nissan SAKURA](https://www3.nissan.co.jp/vehicles/new/sakura.html)は試乗に同乗)。これら各車の仕様と乗り味を相対比較することで、理想と現実の落とし所がいよいよ明確になってくる。私の「次」の車の駆動系に関しては、AWD (四輪駆動) で、充電環境に関する懸念からBEV (100%電気自動車) とまでは行かず、電気である程度の自走が可能なものを選択の条件としたい。その上で、我が家の後席勢の志向もあって、車内空間に関してはいわゆるスポーティーと言われるものよりは、明るい雰囲気を作り出す仕立てのものが希望だ。 ##### 新たな伏兵 Volvo XC40 B4 AWDに、「[クラッシュテスト](https://www.youtube.com/watch?v=2g3WS_mYeGM)での問題点は流石になさそうであるし、白い内装とパノラマルーフが選択可能だし」という見立てにて[試乗]()した数日後。 [日産からT33型X-TRAIL (エクストレイル) が発表](https://global.nissannews.com/ja-JP/releases/release-eeb3fca6e4d3baab92962a71650490a1-220720-01-j)された。メカ的要素の面では、VCターボによるe-POWERに加えてe-4ORCEという、私の選択条件に叶う目新しい技術が盛り合わせになっている。希望のサイズより車体は気持ち一回り大きいのだけども、内装も良い出来という評判を聞くにつれ気になってきた。この車は一度試さねばなるまい。 #### Day-1-a: X-TRAILに家族で試乗して決定 |項目|内容| |---|---| |車種|[Nissan X-TRAIL](https://www3.nissan.co.jp/vehicles/new/x-trail.html) (T33型) G e-4ORCE \[カスピアンブルー(M)/スーパーブラック\]| |試乗コース|市街地と標高200mほどのエリアへの上り下り (35分程度, おそらく10km弱)| |主な比較対象車|レトロセダン (TA-JCG10), Volvo XC40 B4 AWD ([2022-07-17に試乗]())| 結論から言うと……、理詰めだけではなく直感的にも気に入ってしまった。 試乗車はグレード「G e-4ORCE」・ボディカラー「カスピアンブルー(M)/スーパーブラック」・内装「TailorFit/ブラック」だったのだが、その場でカタログや色見本を見て検討し、取り急ぎ同グレード「G e-4ORCE」の、「サンライズオレンジ(RPM)/スーパーブラック」・「ナッパレザー/タン」・「パノラミックガラスルーフ付き」でのオーダーを行った (※社用車として選択)。 新型エクストレイルの受注数は下記の公式ニュースのとおり大変多く、2022年8月11日に注文した今回の仕様での登録はなんと「2023年3月」になる見込みである。 - [新型「エクストレイル」、発売から2週間で受注1万2千台を突破](https://global.nissannews.com/ja-JP/releases/220808-01-j) ##### 運転者の感想 - 駆動輪が前輪だけではない感じが時折ある気がする (後輪が押してくれる感覚が好きなので) - 車体の動きや操舵に違和感がない - Model 3のような異様な力ではないが、楽しめるほどの加速力は備わっている - わざと荒っぽく加減速しなければ、ほとんど平行移動しているみたいな乗り心地が味わえる - エンジンを黒子にしちゃう稼働制御。内燃機関を載せた車の範疇ではこの静粛性はなかなかでは (超高級車の静粛性はわかりませんけど) - 車体は大きいのだけども、乗りやすく、慣れたら私にも滞りなく運転できるであろう - 総括として、XC40 B4とは世代が違う「新しい」乗り物だと直感←これが決定打 ##### 家族の感想 - 加速で本気出すと飛行機のようだ - ライトが分かれているのでさえなければ、顔は問題なし - 今まで乗ったハイブリッド車にあった音 (「ほぉーん」というモーター音) があんまりしない - 車内は広くて静か。XC40との違いはわからない - 窓を開けてやっと外のセミの音が聴こえる感じ - 全体的にけっこうでかいな - 室内高がレトロセダンよりはある #### Day-1-b: サンライズオレンジ(RPM)/スーパーブラック の実車を確認 オーダー後、オレンジ色 (サンライズオレンジ(RPM)/スーパーブラック) の車が展示されている別のディーラーへ移動し、このボディカラーは実際どんな雰囲気なのかを確認した。 サンライズオレンジは、太陽光の下では抜群に鮮やかだが陰に入ると茶色にも近いように見える。私はその明暗の度合いが気に入ったのだが、家族は赤色のほうも気になると言う。そこで赤色の車も見に行くことに。 #### Day-2: レトロセダンにトラブル発生 ところが次の日、赤色 (カーディナルレッド(CPM)) の車が展示されているディーラーへレトロセダンで移動していた途中、トラブルが発生。エンジンルームからゴトゴトと何かを叩くような音がして、停車してもエンジンが回っている間は音が消えない。これは何らかの故障で走らせてはまずい状態だと判断し路上で車を止めた。エンジンルームの中を覗いたけども見かけの異常は分からず。 こんな大きなトラブルは8年間乗っていて初めて。新しい車の話題が聞こえてきて、レトロセダンが拗ねてしまったのかもしれない。積載車で運んでもらい、お盆明けに行きつけのディーラーへ運び込む予定。 #### Day-3: カーディナルレッド(CPM) の実車を確認 そして別の日。赤色 (カーディナルレッド(CPM)) の車が展示される予定のディーラーへ行き、実際どんな雰囲気なのかを確認した。 カーディナルレッドもサンライズオレンジと同じく、明るいところでは鮮やかで陰に入ると意外に暗い赤茶色に見える。私も家族もこの色が一番気に入ったので、オーダー内容を「サンライズオレンジ(RPM)/スーパーブラック」から「カーディナルレッド(CPM)」へと変更した。 #### 追記 ##### 追記1 (納期情報) \[2022-11-11\] > 2022年8月11日に注文した今回の仕様での登録はなんと「2023年3月」になる見込みである。 上記の納期見込みに変動があるのかどうか、日産ディーラーさんに問い合わせをしてみた。すると2022-11-10時点の情報では「生産開始が2023年3月末、出荷が4月」とのこと。巷の噂 (Twitter) では納期が早まったり遅くなったりするケースを見聞きしたが、本注文においては早まることはなさそうで、少々遅れる程度のようだ。 ##### 追記2 (納期情報) \[2023-01-16\] > 2022-11-10時点の情報では「生産開始が2023年3月末、出荷が4月」とのこと。 日産ディーラーさんから連絡があり、2023-01-16時点の情報として「2023年3月中旬頃出荷」とのこと。見込みの精度が少し高まったようだ。 ##### 追記3 (納期情報) \[2023-01-29\] > 2023-01-16時点の情報として「2023年3月中旬頃出荷」とのこと。 日産ディーラーさんから2度目の連絡があり、2023-01-29時点の情報として「2023年2月17日頃 (だったと思う) に生産開始」とのこと。早まっている気がする。そしてそろそろ現車の処遇 (譲り先を見つけるのか廃車にするか) を決定せねばならない。 ##### 追記4 (納期情報) \[2023-02-02\] > 2023-01-29時点の情報として「2023年2月17日頃 (だったと思う) に生産開始」とのこと。 2023-02-02時点の情報として「2023年2月22日前後に生産終了、登録が2月末、3月中旬に納車」とのこと。これでほぼ確定と思われる。ちなみにNISMOのホイールLMX6Sを装着することにした (ほんの少しではあるが1本当たり[約13.5kg](https://faq2.nissan.co.jp/faq/show/57785?site_domain=default)-[11.2kg](https://www.nismo.co.jp/products/nismo_parts/NEW_PARTS/index_2022.html#a7)で2.3kg軽量化できるはず)。一方、現車の処遇としては“乗ってくれる知人に譲る”が第一希望なので、Facebookなどを使って宣伝を始める予定。 ##### 追記5 (納期情報) \[2023-02-22\] > 2023-02-02時点の情報として「2023年2月22日前後に生産終了、登録が2月末、3月中旬に納車」とのこと。 2023-02-19時点の情報として「納車日は2023年3月17日かそれ以降で設定可能」とのこと。6ヶ月以上経過した納車待ち時間がいよいよ終わりを迎える。なお、約8年間乗ってきた現車の売却先も本日決めてきた。 ##### 追記6 (納車) \[2023-03-17\] 発注から約7ヶ月が経過した2023-03-17に、カーディナルレッド(CPM)の Nissan X-TRAIL (6AA-SNT33) が納車された (NISMOのホイールLMX6Sは後日納品となるためまだ未装着)。これにより本ページの更新は終了することとし、特記事項は新たな記事に載せていきます。 - [Nissan X-TRAIL (T33型エクストレイル) 用に揃えたパーツ・アクセサリーと装着レビュー \[2023-03-07\]]() - [ホイールを換えたらNissan X-TRAIL (T33型) はどう変わるのか \[2023-04-21\]]() --- ### 【読んだ本】 税金の世界史 - 2022-08-10 URL: https://remoteroom.jp/medialog/2022-08-10_book-4309228305/ 税金の世界史は文明のそれに等しいほど長いんだと教えてくれる、税というレンズで世界史を見通すことができる新鮮な書物である。古代文明に始まり、南北戦争やふたつの大戦などの税との関係性が解説されており、初めて知って驚くことも多々あった。また、所得税・消費税といった身近な税はもちろんのこと、インフレ税・インボイス制度といった私はまだ聞き慣れない言葉も、世界の歴史の中には前例があると分かる。 本書によって改めて重要だなと認識したのは、こうした、税の制度や徴収方法をコントロールする国の施策の社会への影響度合いや、国の税収入の用途について、世界史にある事例を踏まえて捉えた上で、未来の税とはどうあるべきかを大胆に考えること。本書の後半では、無形資産や非中央集権的な仮想通貨に対して、課税はどうなっていくのかの考察もなされている。 --- ### 【読んだ本】 会社の値段 - 2022-08-05 URL: https://remoteroom.jp/medialog/2022-08-05_book-b00jk5p16o/ 意味の上で「企業価値」という日本語のキーワードにぴったり対応する英語はない、ということに驚かされる。本書は、株式会社を題材として、モノへの適正な値付けとその算定根拠について掘り下げていくもの。この算定方法の理解には、厳格には専門知識が必要なものであろうが、エッセンスをうまく説明している本書を実際2回読むとまあまあ掴めた気がする。 また、本書Kindle版の底本は2006年刊行の新書であり、M&A (Mergers and Acquisitions; 合併&買収) に関して言えば、日本ではニッポン放送を巡ってライブドアとフジテレビが争った頃。あの買収劇のメカニズムを、当時関心がなかった私はいまさら知ることになった。本書の節のタイトルを借りれば、会社の値段を意識する観点では『株式上場もM&Aも中身は同じ』。資本主義社会の中で会社は何のために存在しているのか?を礎にしてそこからフォーカスを外さない論理的思考法、みたいなものを自分に少しはインストールできた。 --- ### UserLAnd/UbuntuへのSSHログインにおいてパスワード認証を無効化して公開鍵認証のみに絞る方法 - 2022-07-24 URL: https://remoteroom.jp/diary/2022-07-24/ #### パスワード認証は晒したくない 物理キーボードが付いたAndroid端末「Gemini PDA」上のLinux環境として、これまではTermuxを使っていたが、UserLAndへ乗り換えしようと思う。 しかしながらデフォルトだとSSHログインに関してやや問題があるようだ。UserLAndアプリ内で選択できるUbuntuを起動した後のデフォルト状態では、dropbearというSSHサーバが「rootログインとパスワード認証が有効な設定」で2022/tcpにて待ち受けている。Gemini PDAのLAN内ローカルIPアドレスを「192.168.1.XXX」とすると、次のコマンドでパスワード認証が有効だと確認できる。 ``` $ nmap -p 2022 192.168.1.XXX (snip) PORT STATE SERVICE 2022/tcp open down $ ssh -o PreferredAuthentications=password -p 2022 userland@192.168.1.XXX userland@192.168.1.XXX's password: # パスワードが聞かれる、つまり有効 ``` この状態では、Gemini PDAを接続したWi-Fiネットワーク等からのSSHログインのパスワード試行攻撃が成功してしまう可能性がゼロではなさそうなので、SSHログインを公開鍵認証のみに限定する設定方法を模索した。 なお、上記設定を行うことにより、UserLAndに内蔵のターミナルアプリからUbuntu環境へログインすることも不可能になる (このログインはパスワード認証を用いているからだろうと推測)。Gemini PDAから直接にUbuntu環境へログインする方法は、別途JuiceSSHなどのターミナルアプリをGemini PDAへインストールして、公開鍵認証でlocalhostへSSHログインする形へと変わる。セキュアになるのと引き換えに、少々ややこしくなることに注意。 #### 設定手順 |種類|名称|バージョン等| |---|---|---| |ハードウェア|[Gemini PDA](https://store.planetcom.co.uk/products/gemini-pda-1)|Android 8.1.0| |アプリ|[UserLAnd](https://play.google.com/store/apps/details?id=tech.ula)|3.0.0 (2022-06-30)| |アプリ上の環境|Ubuntu|20.04.4 LTS (Focal Fossa)| |アプリ|[JuiceSSH](https://play.google.com/store/apps/details?id=com.sonelli.juicessh)|3.2.2 (2021-02-04)| 以下、「Ubuntu環境」とはUserLAndの上に構築するUbuntu環境を指す。 ##### 1) Ubuntu環境の用意と初期設定 1. UserLAndを起動し、[Distribution] で「Ubuntu」をタップ→「Connection Type: Terminal」を選択してSessionを追加する 2. [Sessions] で「ubuntu → apps」をタップしてセッションを起動する ``` Welcome to Ubuntu in UserLAnd! userland@localhost:~$ ``` 3. 現在のIPアドレスを確認しておく ``` #### Android 12以前 (追記 2023-01-21) sudo apt update sudo apt install iproute2 vim ip a | grep wlan0 # 現在のIPアドレス(192.168.1.XXX)を確認する #### Android 13以降 (追記 2023-01-21) sudo apt update sudo apt install net-tools vim ifconfig | grep -A 1 wlan0 # 現在のIPアドレス(192.168.1.XXX)を確認する ``` ##### 2) Ubuntu環境に別マシンの公開鍵を登録しておく 1. 別マシンの公開鍵`~/.ssh/id_ecdsa.pud`を次のように登録する ``` mkdir ~/.ssh && chmod 700 ~/.ssh vim ~/.ssh/authorized_keys # 別マシンの公開鍵(ed25519は非対応, rsaやecdsaは対応)を追記する chmod 600 ~/.ssh/authorized_keys ``` 2. 追加した公開鍵のペアの秘密鍵を用いて、別マシンからSSHログインできることを確認する ``` ssh -o PreferredAuthentications=publickey -i ~/.ssh/id_ecdsa -p 2022 -l userland 192.168.1.XXX ``` ##### 3) JuiceSSHから公開鍵認証でのログインを試す 1. JuiceSSHで [Manage Connections] を選択し、[認証情報] にてecdsa形式の秘密鍵を作成する |項目|内容| |---|---| |ニックネーム|(任意)| |ユーザ名|userland| |パスワード|| |プライベートキー|Key Format = ECDSA, キー強度: 384bit (初期値のまま), パスフレーズ: 任意のもの| 2. 作成された認証情報をロングタップし、ペアの公開鍵をエクスポートする (クリップボードにコピーなど好きな手段でOK) 3. 公開鍵テキストを別マシンを経由して、2) と同様にUbuntu環境の`~/.ssh/authorized_keys`に追記する 4. JuiceSSHの [接続] にて、次の内容の接続を作成する |項目|内容| |---|---| |ニックネーム|UserLAnd@localhost| |アドレス|127.0.0.1| |認証情報|上記で作成したecdsa形式のものを選択| |ポート|2022| 5. 接続「UserLAnd@localhost」を実行し、Ubuntu環境へ公開鍵認証でログインできることを確認する ##### 4) Ubuntu環境へのSSHのパスワードログインとrootログインを無効化する 本項の手順を実施すると、Ubuntu環境へ、UserLAndに内蔵のターミナルアプリからログインできなくなることに注意。 1. Ubuntu環境でdropbearを起動しているファイル`/support/startSSHServer.sh`を編集する ``` $ cd /support/ $ sudo cp -a ./startSSHServer.sh{,.original} #### 下記のdiffのようにdropbearの実行部分を編集する $ sudo vim ./startSSHServer.sh #### 「-w Disallow root logins」「-s Disable password logins」を有効化 $ diff ./startSSHServer.sh{.original,} 12c12,13 < dropbear -E -p 2022 --- > #dropbear -E -p 2022 > dropbear -Ews -p 2022 ``` 2. UserLAndの [Sessions] で「ubuntu → apps」をタップして [Stop Session] を選択する 3. UserLAndの [Sessions] で「ubuntu → apps」をタップしてセッションを起動する 4. `[Process completed (code 1) - press Enter]`と出るがこれはパスワード認証が無効化されたことによるもので意図通り。Enterを押す ##### 5) 設定反映を確認 1. 別マシンからUbuntu環境へSSHログインを試し、**パスワード認証が無効**になったことを確認する ``` $ ssh -o PreferredAuthentications=password -p 2022 userland@192.168.1.XXX userland@192.168.1.XXX: Permission denied (publickey). # パスワード認証が受け付けられない ``` 2. 別マシンからUbuntu環境へSSHログインを試し、**公開鍵認証が引き続き有効**であることを確認する ``` $ ssh -o PreferredAuthentications=publickey -i ~/.ssh/id_ecdsa -p 2022 userland@192.168.1.XXX userland@localhost:~$ # 公開鍵認証ではログインできる ``` ##### おまけ: その他の環境整備 ``` sudo apt update && sudo apt upgrade sudo dpkg-reconfigure tzdata # タイムゾーンをAsia/Tokyoに設定する sudo apt install bash-completion neofetch nmap openssh-client # お好みのもの ``` #### 参考リンク - [Home · CypherpunkArmory/UserLAnd Wiki](https://github.com/CypherpunkArmory/UserLAnd/wiki) --- ### トランシーバー (デジタル簡易無線登録局) その1: IC-DPR4購入と登録局申請編 - 2022-07-23 URL: https://remoteroom.jp/diary/2022-07-23/ #### 初めて接した電波通信 夏の土曜日の昼下がり。こどもは一人で出掛けて近所の公園で遊んでいるはずで、私と相方は家でまったり趣味の時間。こんなときにふと、こどもと話ができるトランシーバーが家に欲しいなと思った。幼少期におもちゃの無線機を握って「もしもし?」と会話した楽しさは自分の中に残り続けているし、それを現在の生活環境で実現しても良いはずだ。 また、起こってほしくはないが想定しておくべき事態として、携帯電話もインターネット通信も使用不可能となる大規模災害時や緊急時に、トランシーバーの備えがあれば近距離での通信手段を確保できる可能性がある。 そこで奮起して、電波がそこそこ飛ぶはずである「デジタル簡易無線登録局」の、小さめサイズの[ICOM IC-DPR4](https://www.icom.co.jp/lineup/products/IC-DPR4/)の中古品を2つ購入した。ちなみに私、無線や無線機に関して特に詳しいこともなく、アマチュア無線をやっていた伯父の家の屋根と車にはアンテナが載っていて、車のガラスに貼ってあったコールサイン「J〜」に十代の頃憧れていた程度。 |品名|価格(税込)|購入数|備考| |----|---:|---:|----| |[ICOM IC-DPR4](https://www.icom.co.jp/lineup/products/IC-DPR4/) + [HM-166LS](https://www.icom.co.jp/lineup/options/HM-166LS/)|19,998円/1セット|2|[無線の王様](https://musen-ousama.com/products/detail.php?product_id=468)の中古整備品| #### 登録局申請 上記の販売店サイトでポチった後、販売店から電話がかかってきた。無線機は数日後に到着する予定とのこと (販売店が銀行振込による入金を確認して、かつ機器の整備完了後の発送になる)。デジタル簡易無線の登録申請を[代行する (有料)](https://www.exseli.com/transceiver/license/) との案内もあったが、申請は自力でやってみることにした。 自力の申請を、当初は申請書類や収入印紙を物理的に用意して郵送で処理しようと考えていたが、電子申請する方法もあり、しかも電子申請に必要な物は手元に一応揃っている (以前に「技適未取得機器を用いた実験等の特例制度」を[電子申請で行ったことはある](#2-技適未取得機器を短期利用する手続))。よって今回の「無線局の登録の申請」も同じく電子申請で進めてみることにした。 |必要な物|今回用いた物| |----|----| |OS|Windows 10 (仮想)| |ICカードリーダ|[SCR3310](https://www.ntt.com/business/services/application/authentication/jpki/download2.html)| |マイナンバーカード|自身のもの| ##### 具体的な手順 登録局申請の具体的な手順は、次のページに大変詳しく説明されていて参考にした。画面数は多いので時間はかかったが迷うところはほぼ無い。「周波数帯」の記入部分は、登録局となる無線機の「上空用チャンネル (S)」対応・非対応によって異なってくるかもしれない。 - [デジタル簡易無線を電子申請で開設する~登録局申請まで~ \- gasguzzlerの日記](https://gasguzzler.hatenablog.com/entry/2020/01/26/140641) 登録局申請の手順を実施し終えると、総務省の下記ページにて申請履歴照会 (進捗確認) ができるようになる。 - [総務省 電波利用 電子申請・届出システム](https://www.denpa.soumu.go.jp/public/index.html) 今回の私の分は次の画面のように無事に「状態: 到達」となったので、週明けにでも状態は進捗して、次のステップである申請手数料の支払いが行えるであろう。その後「状態: 審査終了」まで進むと完了である。 #### 次回予告 次回は、無線局登録状の到着後に、無線機2台を開封して使用開始してみて、次のページを参考に開設届申請を進めることになる。 - [デジタル簡易無線を電子申請で開設する~開設届編~ \- gasguzzlerの日記](https://gasguzzler.hatenablog.com/entry/2020/01/26/213049) ##### 追記 \[2022-09-19\] 続きを書きました。 - [トランシーバー \(デジタル簡易無線登録局\) その2: IC-DPR4通電と開設届申請編 \[2022-09-19\]]() --- ### 試乗車 Volvo XC40 雑感 - 2022-07-17 URL: https://remoteroom.jp/diary/2022-07-17/ #### 家族史上初の試乗 家族総出でカーディーラーへ車の試乗をしに行ったのは今回が初めて、という私的には記念すべきイベントについて簡単にメモします。ちなみに、個人的に一応見積もりをとってみたのも今回初。見積もりは、今後日本に輸送される2023年モデル (MY2023) を前提とした内容になり、後日メールで送付しますとのこと。 |項目|内容| |---|---| |車種|[Volvo XC40](https://www.volvocars.com/jp/cars/xc40/) B4 AWD Momentum (2022年モデルだろう)| |試乗コース|距離にして10km前後。このページの地図に赤く記されている道順とほぼ同じ→ [ご試乗コース \- ディーラー最新情報|ボルボ・カー 神戸](https://kobe.vc-dealer.jp/news/article/%E3%81%94%E8%A9%A6%E4%B9%97%E3%82%B3%E3%83%BC%E3%82%B9)| |主な比較対象車|レトロセダン (TA-JCG10)| #### XC40についての簡単な感想 ##### 運転者の視点 - フットブレーキがストローク (深さ) ではなくて踏力で強弱を調整するタイプ。最初は戸惑ったが慣れたし、カックンブレーキにもなりにくい感じ - 太いタイヤを履いているはずだがステアリングフィールがクリーン、そして低速時は軽く速度が上がると適度に重くなるのが良し - エンジンの音をよくよく聞いていると、発進後にエンジン回転数がかなり上がったあとに次のギアへ変速していると聞き取れるのだが、変速ショックとしては知覚できない。すなわち通常走行時は変速について全く意識しなくてよさそうだ - アクセルペダルを踏めば期待にちょうど合うくらいの力を出す。エンジンの二次曲線的な出力特性にモーターをうまく加えて扱いやすい特性にしつらえてあるのだろう - 視界については良好で戸惑うようなことはなかった ##### 同乗者の視点 - 注目していた内装は視覚的に整理されていて実用的で、絢爛豪華ではないがちゃちくもない、いい塩梅の仕立てに思う (試乗車はチャコールカラー) - アイドリングストップのあと車内は無音になり、発進時エンジンがかかる音はするが不快さはない。全般的に走行中の音や振動が強力に遮断されているわけではないが、体を驚かすような不快な音質や揺れにはなっていないところが好印象 - ローテクの塊のような比較対象車の、静粛性はまあまあ高い後席環境が気に入っている家族からも合格点が得られた #### まとめ この車でACC効かせて長距離ドライブすることを想像すると、ストレスかからなそうだし乗員全員が快適だろうなあ。XC40の2023年モデル (MY2023) には「[OK, Google](https://www.volvocars.com/jp/v/connectivity/volvo-cars-infotainment-and-google-built-in)」が搭載されるはずだし、こうした先駆的ITを載せてくるVolvoの姿勢と、もともとのAWDやDCTといったメカ的要素 (しかし燃費はほどほど) と、真面目でかつ肩に力が入っていないカジュアルな雰囲気が気に入っている私としては、XC40は引き続き注目の車種である。まずは基準車として記憶しておこう。 ##### Twitterメモ: 事後談 --- ### 「Dante」というAV接続ソリューション - 2022-07-15 URL: https://remoteroom.jp/diary/2022-07-15/ #### 言葉も仕入れる とあるAV機器関連の内見会に出向いたところ、たとえば次のラインアレイスピーカーや天井設置型マイクロホンなどは「Danteに対応」「Danteで接続します」という説明を受けた。 - [SLS\-1A \| ラインアレイスピーカー \| ソニー](https://www.sony.jp/line-array-speaker/products/SLS-1A/) - [ビームフォーミングマイクロホン MAS\-A100 \| 法人のお客様 \| プロオーディオ \| ソニー](https://www.sony.jp/pro-audio/mas/) はて。Danteって何かの規格だろうな……とは察したものの、初めて聞いた言葉で具体的にはまったく知らなかったので調査すると、DanteとはIPネットワークにAudio/Visual情報を流すAudinate社のソリューションだとわかった。 - [Danteとは \| Audinate](https://www.audinate.com/meet-dante/what-is-dante?lang=ja) 下記のヤマハのページにも詳しく解説されている。なるほどおもしろい。SONYやYAMAHAが採用していることから、Danteは現在のデファクトスタンダードなんだなとすんなり理解した。 - [ヤマハ \| Danteシステムデザインガイド \- プロオーディオ](https://jp.yamaha.com/products/contents/proaudio/docs/dante_system_design_guide/) #### Dante認定プログラム Danteについて深堀りしていくと、認定プログラムが用意されていて、「Dante Certification Level 1」「同Level 2」などの認定を段階的に受けられると知った。無料でアカウントを作成できて認定のためのテストまで行えるらしい。 - [Dante Certification Program \| Audinate \| Dante Pro AV Networking](https://www.audinate.com/learning/training-certification/dante-certification-program?lang=en) ということで突発的に、オーディオビジュアルとコンピュータネットワークをかけ合わせた分野なので、個人的趣味を兼ねて挑戦したくなっている。今はLevel 1コースの途中でオンデマンドビデオを学習中。進捗があったらまた追記する……かもしれません。 #### 参考サイト - [Danteのお勉強](http://www.mu-s.com/Edu/Dante_study.html) - [Dante Certification Level2 認定されました: fts company's blog](http://fts.cocolog-shizuoka.com/blog/2018/09/dante-certifica.html) --- ### 室外機の排熱を室内へ戻さない作戦 - 2022-07-13 URL: https://remoteroom.jp/diary/2022-07-13/ #### 排熱の逃げ道をしっかり確保 夏場に稼働させるエアコンの室外機は、大量の熱を大気中へ排出する。そして室外機の置き場所によっては、その排熱が冷房している室内にまた巡ってくるような事態も起こりうる。 たとえば私の家では、エアコンの室外機をベランダに設置しており、胸の高さから下が柵ではなく壁というベランダの造りと、室外機の向きと窓の位置の関係上、室外機の排熱がベランダ内にこもってベランダに面する部屋の窓を温めてしまう。そこで、室外機の排気ができるだけ窓に触れないようにコントロールする作戦を2021年から始めた。 しかし2021年の夏に実施した「プラダン」を利用する導風作戦は、当初はそれなりの熱よけ効果があったものの、一年経つとプラダンが曲がってヘタってしまい組み直しが必要な状態となった。そもそも大きな仕切り板をベランダに置いて勢いで実証実験したような状態のままで、毎日の洗濯物干し場となるベランダの使い勝手への影響を甘くみており、この施策には実用性が無さすぎた。 そこで2022年の夏は新たに考えた、「カーテン」導風作戦で挑もう。以下、作戦のBefore (2021年) とAfter (2022年) を簡単にご紹介。どれだけ熱よけ効果があるかという効果測定・比較は行えていないが、まず重要な、ベランダの使い勝手は格段に向上した。 #### 準備物 ベランダでの「カーテン」導風作戦に主に必要なものは、カーテンと、カーテンを掛ける長さ2m強の棒の2点。前者は野外で風よけに用いられる本格的なカーテンがベストだろうが、とりあえずは安価な代替品でよいので浴室用のシャワーカーテンを選択。後者は今回、手っ取り早く2本の棒を繋ぎ合わせることで間に合わせたが、本来は剛性が保てる1本物を選びたい。 |品名|購入価格(円・税込)|備考| |----|---:|----| |AooHome 防カビ シャワーカーテン 半透明 180 x 180cm|1,579|Amazon.co.jp| |園芸用支柱120cm 2本 (4982790202092)|220|Can Do| ##### 参考写真) AooHome シャワーカーテン 180x180cm 浴室で普通に使う分には過不足なさそうな物が届いた。大きめのカーテンリングもしっかり付属。 #### 実際の様子 ##### Before (2021) プラダン導風作戦 ホームセンターで購入した180x90cmのプラダン (プラスチックダンボール) を加工して、90x90cmの板から成る直立型仕切り板を3つ作った。これらを並べて連結して、室外機の排気をベランダの外へ流すような経路を設けた。ベランダの、室外機とは反対側の壁がちょうど煙突のような形状をしている点は好都合で、ベランダの床付近を流れてきた排気が上方向へ逃げる流れが生まれる。 しかし当時の私のプラダン加工が手抜きだったので、現在では仕切り板の足が外れたり、プラダンが湾曲して形が崩れている。そしてなにより問題なのは、部屋からベランダへ出入りする際に仕切り板が大きな支障となることだ。仕切り板の連結をいちいち解いてから通り抜ける必要がある。 ##### After (2022) カーテン導風作戦 ベランダの床に物を置くことがそもそも愚策だったなと気づき、窓の外にもう一つ、導風用のカーテンを棒で吊るという発想に転換した。2本を結束バンドで束ねて1本にした現在の棒は、長持ちしそうにないので今後1本の棒 (剛体) に交換することになろう。カーテンの端と室外機はマグネットで留めてある。カーテンを開閉する側の端には大きめの登山用カラビナを付けて、その位置までカーテンを閉めようぜという原則を家族に示すとともに、確実で心地よい“かちゃっ”という操作が味わえるようにしてみた。 #### まとめ 「室外機の排熱が窓に巡ってこないようにする」という命題を満たすための今回の仕掛けは、ベランダの利便性を損なわないこと、仕掛けが安価で設置が簡単なこと (できるだけ無加工)、耐候性が高いこと、という諸条件を満たす必要があって意外に難題だ (なお、室外機の設置場所を変更して排気を野外へ向けるという根本的解決法にも気づいてはいるが賃貸マンションゆえ簡単ではない)。 同時に、難題が意味するのは試行錯誤が楽しいということ。猛暑傾向にある2022年の夏を、冷房を使いどうやって過ごしやすくして、かつ効率的に乗り越えるか。エコハウスではない居住環境でも何らかの模索は続けたいところだ。 ##### 追記 [2022-07-13] 下記ページの「21、居室からの排気」の着想はすごい。「換気扇から出る居室からの排気 (外気温に比べて冷房中は冷たく暖房中は温かい) を室外機に吸気させることで、エアコン時の室外機の効率を高める」というものだ。 - [ビルの省エネ指南書(69) \| 公益社団法人 福岡県ビルメンテナンス協会](http://www.fukuoka-bma.jp/%E3%83%93%E3%83%AB%E3%81%AE%E7%9C%81%E3%82%A8%E3%83%8D%E6%8C%87%E5%8D%97%E6%9B%B8%EF%BC%88%EF%BC%96%EF%BC%99%EF%BC%89/) --- ### レンタカー Toyota Aqua 雑感 - 2022-06-25 URL: https://remoteroom.jp/diary/2022-06-25/ 日帰りの敦賀旅行のお供に、トヨタレンタカーで[Toyota Aqua](https://toyota.jp/aqua/)を借りました。行程はすべて一般道で87kmを走行。 #### 簡単な感想 |項目|内容| |---|---| |車種|Toyota Aqua グレード不明| |走行距離, 燃料消費量|87km, 4.03L| |満タン法での燃費|21.58km/L| - コンパクトカーのカテゴリーにおいては静かなほうだし、EVモードも比較的長続きする (※Aquaはすべてハイブリッド専用車) - 運転していて動きには違和感なく、扱いやすいと感じた - [Toyota Yaris Cross Hybrid]()に乗ったときにやや戸惑ったメーターパネルの見にくさは、Aquaには無く、ふつうに見やすかった #### 参考地図 --- ### 暗号化Excelファイルのパスワードを「Amagasaki2022」とした場合の解析(crack)実験 - 2022-06-24 URL: https://remoteroom.jp/diary/2022-06-24/ #### 「もしも〜だったら」を確認する パスワード保護Excelファイル (俗に言う暗号化Excelファイル) のパスワードをcrackする難易度ってどれくらいだろうか? と、ある事案 ([参考リンク](#4-参考リンク)1) からの連想で急に確認したくなった。もちろん、**事案のプレスリリースで述べられている「暗号化処理」が、Excelの機能を使ってExcelファイルをファイルレベルで保護する手法 ([参考リンク](#4-参考リンク)2) なのか、それ以外の別の手法なのかは現時点で明らかになっていない**ので、これは「もしも前者だったら」の一種の私的な実証実験である。 実験の際には自分に条件を課し、手元のUbuntu環境にはもちろん純正のMicrosoft Excelは無いので、一連の内容をコマンドライン (CLI) のみでやってみようと考えた。 #### 1. Secure Spreadsheetでパスワード保護Excelファイルを作成 [参考リンク](#4-参考リンク)3によると、次の「secure-spreadsheet」というNode.js製ツールを用いてパスワード保護ExcelファイルをCLIで作成できるとわかり、やってみた。 - [ankane/secure\-spreadsheet: Encrypt and password protect sensitive CSV and XLSX files](https://github.com/ankane/secure-spreadsheet) ``` #### secure-spreadsheetをインストール $ npm install -g secure-spreadsheet #### 簡単なCSVファイルを用意 $ cat input.csv A,B,C 1,2,3 #### パスワード「Amagasaki2022」としたパスワード保護Excelファイルを作成 $ TMP_PASSWORD='Amagasaki2022' $ secure-spreadsheet --password ${TMP_PASSWORD} < input.csv > output.xlsx #### 作成したExcelファイルをfileコマンドでチェック $ file ./output.xlsx ./output.xlsx: CDFV2 Encrypted ``` secure-spreadsheetが生成した`output.xlsx`をLibreOffice Calcで開いてみると、パスワードを入力するダイアログがちゃんと現れて、「Amagasaki2022」を入力すればブックの内容が確認できる。CLIでのパスワード保護Excelファイルの作成に成功したようだ。 #### 2. John the Ripperでパスワード保護Excelファイルを解析 次に、定番のJohn the Ripperを用いて、 - [John the Ripper password cracker](https://www.openwall.com/john/) パスワード保護Excelファイル`output.xlsx`のパスワードを解析する。[参考リンク](#4-参考リンク)4にある手順のままに進めれば簡単だ。 ##### 解析の準備 ``` #### John the Ripperのソースをmake $ git clone https://github.com/magnumripper/JohnTheRipper.git $ cd JohnTheRipper/src $ ./configure && make #### output.xlsxのhashを取り出す $ cd ../run/ $ python3 ./office2john.py ../../output.xlsx > hash_output.txt $ cat ./hash_output.txt output.xlsx:$office$*2013*100000*256*16*c62bc00d6b5b5a2b6748e04fe64fb2d8*ee874eeeee93a1f6800ff9459cec62e7*b062d3e7cbaa3f69819eaff603fa5054973c6a97134231c2f7f8751543d6a1be ``` ##### 解析の実行1: ファイル名「output.xlsx」の場合 `output.xlsx`のhashに対して、John the Ripperでのパスワード解析を実行すると、次のように内蔵のパスワードリストを元にした解析段階 (`Proceeding with wordlist:./password.lst`) へと進み、解析終了までのかなり長い予想時間 (ETA) が表示される。 ``` $ ./john --progress-every=5 ./hash_output.txt Using default input encoding: UTF-8 Loaded 1 password hash (Office, 2007/2010/2013 [SHA1 256/256 AVX2 8x / SHA512 256/256 AVX2 4x AES]) Cost 1 (MS Office version) is 2013 for all loaded hashes Cost 2 (iteration count) is 100000 for all loaded hashes Will run 16 OpenMP threads Proceeding with single, rules:Single Press 'q' or Ctrl-C to abort, 'h' for help, almost any other key for status 0g 0:00:00:05 30.52% 1/3 (ETA: 01:48:23) 0g/s 638.7p/s 638.7c/s 638.7C/s 2oxlsx..Aoutput 0g 0:00:00:10 51.69% 1/3 (ETA: 01:48:27) 0g/s 636.1p/s 636.1c/s 636.1C/s ooutput26..Output.xlsxxlsx75 0g 0:00:00:15 70.87% 1/3 (ETA: 01:48:29) 0g/s 645.0p/s 645.0c/s 645.0C/s ooutput.xlsx6666..Outputxlsx5555 0g 0:00:00:20 91.74% 1/3 (ETA: 01:48:29) 0g/s 649.5p/s 649.5c/s 649.5C/s output.xlsxxlsx1909..oxlsx1900 Almost done: Processing the remaining buffered candidate passwords, if any. 0g 0:00:00:22 DONE 1/3 (2022-06-24 01:48) 0g/s 647.5p/s 647.5c/s 647.5C/s Output1906..Xoutput1900 Proceeding with wordlist:./password.lst Enabling duplicate candidate password suppressor 0g 0:00:00:25 0.00% 2/3 (ETA: 2024-08-23 22:37) 0g/s 647.6p/s 647.6c/s 647.6C/s ilovegod..santiago 0g 0:00:00:30 0.00% 2/3 (ETA: 2023-07-16 06:28) 0g/s 649.3p/s 649.3c/s 649.3C/s vladik..just4fun 0g 0:00:00:35 0.00% 2/3 (ETA: 2023-03-27 18:17) 0g/s 648.4p/s 648.4c/s 648.4C/s dell123..giacomo 0g 0:00:00:40 0.00% 2/3 (ETA: 2023-02-03 15:44) 0g/s 649.4p/s 649.4c/s 649.4C/s alligator..reload 0g 0:00:00:45 0.00% 2/3 (ETA: 2023-01-05 17:21) 0g/s 650.6p/s 650.6c/s 650.6C/s Vladimir..megafon 0g 0:00:00:47 0.00% 2/3 (ETA: 2022-12-27 18:44) 0g/s 650.4p/s 650.4c/s 650.4C/s maynard1..breaker Session aborted ``` なお、この実行例では解析終了までは待たず、1分弱で実行を中断している。クラウドのサーバの方でパスワード解析を終了まで回しとこう。いつ終わるかわからんけど……。 ##### 解析の実行2: ファイル名「amagasaki.xlsx」の場合 次に、わざと意地悪な実験を行う。解析の実行1で用いたパスワード保護Excelファイルを`amagasaki.xlsx`の名前で複製し、`amagasaki.xlsx`に対してJohn the Ripperでのパスワード解析を実行するとどうなるか。 ``` #### amagasaki.xlsxのhashを取り出す $ cp -a ../../output.xlsx ../../amagasaki.xlsx $ python3 ./office2john.py ../../amagasaki.xlsx > hash_amagasaki.txt $ cat ./hash_amagasaki.txt amagasaki.xlsx:$office$*2013*100000*256*16*c62bc00d6b5b5a2b6748e04fe64fb2d8*ee874eeeee93a1f6800ff9459cec62e7*b062d3e7cbaa3f69819eaff603fa5054973c6a97134231c2f7f8751543d6a1be #### John the Ripperでパスワード解析 $ time ./john --progress-every=5 ./hash_amagasaki.txt Using default input encoding: UTF-8 Loaded 1 password hash (Office, 2007/2010/2013 [SHA1 256/256 AVX2 8x / SHA512 256/256 AVX2 4x AES]) Cost 1 (MS Office version) is 2013 for all loaded hashes Cost 2 (iteration count) is 100000 for all loaded hashes Will run 16 OpenMP threads Proceeding with single, rules:Single Press 'q' or Ctrl-C to abort, 'h' for help, almost any other key for status 0g 0:00:00:05 31.05% 1/3 (ETA: 02:00:49) 0g/s 665.6p/s 665.6c/s 665.6C/s Aamagasaki.xlsx..Jamagasaki.xlsxamagasaki 0g 0:00:00:10 52.73% 1/3 (ETA: 02:00:51) 0g/s 662.9p/s 662.9c/s 662.9C/s Axlsx84..Amagasaki23 0g 0:00:00:15 72.50% 1/3 (ETA: 02:00:53) 0g/s 662.9p/s 662.9c/s 662.9C/s xamagasaki.xlsx11111..Xlsxamagasaki00000 Amagasaki2022 (amagasaki.xlsx) 1g 0:00:00:18 DONE 1/3 (2022-06-24 02:00) 0.05434g/s 660.8p/s 660.8c/s 660.8C/s Amagasaki.xlsxamagasaki2016..Aamagasaki2025 Use the "--show" option to display all of the cracked passwords reliably Session completed. real 0m19.268s user 4m57.011s sys 0m0.164s ``` するとJohn the Ripperは、シングルモード (`Proceeding with single, rules:Single`) の解析段階で、なんと実験環境においては20秒弱で正しいパスワード「Amagasaki2022」を発見した。ファイル名がパスワードのヒントとして自動的に利用され、解析 (crack) を助けたわけである。 #### 3. 今回の教訓 これはパスワード保護Excelファイルに限らない話となるが、**パスワードに繋がる情報を持つ文字列を素のファイル名に含めてはならない**、というのが今回私が得た教訓だ。 John the Ripperに組み込まれたロジックがいわば実戦的で賢すぎて、今回の実験ファイルのパスワードが速攻で暴かれたときには「えっ?」と声が出るほど驚いた。 #### 4. 参考リンク 1. [個人情報を含むUSBメモリーの紛失について|尼崎市公式ホームページ](https://www.city.amagasaki.hyogo.jp/kurashi/seikatusien/1027475/1030947.html) 2. [Excel ファイルを保護する](https://support.microsoft.com/ja-jp/office/excel-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BF%9D%E8%AD%B7%E3%81%99%E3%82%8B-7359d4ae-7213-4ac2-b058-f75e9311b599) 3. [「備忘録」パスワード保護Excel作成と読込自動化検討のメモ \- Qiita](https://qiita.com/genie-oh/items/2c746d470eb68570c278) 4. [Cracking Microsoft Excel Documents using John The Ripper \| Andrea Fortuna](https://andreafortuna.org/2019/03/20/cracking-microsoft-excel-documents-using-john-the-ripper/) --- ### Hugoの動的プレビューをNginxリバプロ越しに行う設定 - 2022-06-12 URL: https://remoteroom.jp/diary/2022-06-12/ #### 約1年越しの悩み 当サイト (RemoteRoom) は、Hugoという静的サイトジェネレータ (Static Site Generator) で構築している。Hugoの[server機能](https://gohugo.io/commands/hugo_server/)を併用すると、markdown記法で書き進めるコンテンツを、テンプレートが適用されたウェブサイト`http://localhost:1313/`上ですぐに動的にプレビューできるのでとても助かっている。 このプレビューを、私の環境では次のような仕掛けの上で行ってきた。 1. Hugoのドラフトデータはどこでも編集できるようにDropboxに保存して同期。そのデータを、Dropboxデーモンが常駐しているクラウド上のLinuxサーバで常時`hugo server`して動的なプレビューサイトを生成 2. プレビューサイトの確認はTailscale越しに`http://100.NNN.NNN.NNN:1313/`で行う (つまり、Tailscale導入端末での閲覧がメイン。クローズドで安全ではあるが) しかし、これまで2の部分が理想とは違っていた。2の理想は次の通り。 - プレビューサイトの確認はBASIC認証をかけた`https://hugo.example.com/`でどの端末からでも行えること。かつ変更ページのlive reloadingも効くこと 2に関しては約1年前に「Nginxで行うReverse Proxyの部分で、live reloadingに用いられているwebsocket通信を通す設定がわからない」と悩んで、以降諦めていた問題であったが、今改めて調べてみると一気に解決したのでメモします。 #### 問題がクリアできた設定 ##### 1. Hugoの起動オプション Hugoの起動オプションは次のように設定する。通信に関する4つの `appendPort`, `baseURL`, `liveReloadPort`, `port` オプションのうち1つでも欠けるとおそらく不具合が発生する (不具合の例としては、websocket通信が1313番ポートを使用してリバプロ越しに通信できない状態になったり、プレビューサイト内のリンク先URLに`:1313`が含まれたり)。 ``` hugo server \ --appendPort=false \ --baseURL=https://hugo.example.com/ \ --liveReloadPort=443 \ --navigateToChanged \ --port=1313 ``` なお、私の場合はプレビューという目的上、非公開中のページもレンダリングする次のオプションも追加している。 ``` --buildDrafts=true \ --buildExpired=true \ --buildFuture=true ``` ##### 2. Nginx (Reverse Proxy) Reverse Proxyとして動作させるNginxのサイト設定に関しては、[Websocket for LiveReload using wrong port if Hugo binds to port 80 · Issue \#2205 · gohugoio/hugo](https://github.com/gohugoio/hugo/issues/2205)の[コメント](https://github.com/gohugoio/hugo/issues/2205#issuecomment-498769463)を参考にした。主要な内容を抜き出すと次の通り。locationで`/livereload`を別扱いにしているのがポイントなのかもしれない。 ``` server { listen 80; listen [::]:80; server_name hugo.example.com; location / { return 301 https://$host$request_uri; } } server { listen 443; listen [::]:443; server_name hugo.example.com; auth_basic "Restricted"; auth_basic_user_file /etc/nginx/htpasswd.txt; location / { proxy_pass http://localhost:1313/; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /livereload { proxy_pass http://localhost:1313; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; } } ``` #### 参考) Twitter --- ### 複数ホストにコマンドを撒けるpdshをUbuntuでビルドする手順 - 2022-06-11 URL: https://remoteroom.jp/diary/2022-06-11/ 複数のホストに対してコマンドを撒いて並列実行できる`pdsh` (参考サイト [1] に詳しい) は便利なので、手元のUbuntu 20.04の環境で使いたくなった。ちなみにpdsh自体は公式リポジトリに用意されていてaptで即導入可能。 しかし、`~/.dsh/group/`でのpdshのホストのグループ定義を行いたくてそのためのモジュール`pdsh-mod-dshgroup`もaptで探すと、[Ubuntu環境にはパッケージが無い](https://pkgs.org/download/pdsh-mod-dshgroup)とわかった。えっ、そうなの? ということで以下は、Ubuntu環境で、pdsh-mod-dshgroupモジュールによるグループ定義を利用できるpdshを自力ビルドする手順のメモです。 #### Ubuntuでのpdshビルド手順 1. GitHubからソースを取得する - [chaos/pdsh: A high performance, parallel remote shell utility](https://github.com/chaos/pdsh) ``` cd ~/tmp git clone https://github.com/chaos/pdsh cd pdsh ``` 2. ここではたと気づく。よくある実行形式の`configure`が入っていない。このソースはどうやってbuildするのだ? 3. それは落ち着いてINSTALLを読めば自明だった。`bootstrap`を実行せよとある。(autoreconfというものを使っているらしい) ``` $ ./bootstrap Running libtoolize --automake --copy ... Running autoreconf --verbose --install -I config autoreconf: Entering directory `.' autoreconf: configure.ac: not using Gettext autoreconf: running: aclocal -I config -I config autoreconf: configure.ac: tracing autoreconf: running: libtoolize --copy autoreconf: running: /usr/bin/autoconf --include=config autoreconf: running: /usr/bin/autoheader --include=config autoreconf: running: automake --add-missing --copy --no-force configure.ac:36: installing 'config/compile' configure.ac:16: installing 'config/config.guess' configure.ac:16: installing 'config/config.sub' configure.ac:27: installing 'config/install-sh' configure.ac:27: installing 'config/missing' autoreconf: Leaving directory `.' Cleaning up ... Now run ./configure. ``` 4. 実行形式の`configure`が生成されたので、参考サイト [2] のように以下を実施。 ``` ./configure --with-ssh --with-dshgroups --prefix=/usr/local/pdsh make ./src/pdsh/pdsh --help # pdshが出来ている sudo make install ``` 5. 指定のpathへ、`pdsh`とともに`dshbak`など一式がインストールされた。 ``` $ ls -al /usr/local/pdsh/bin/ total 452 drwxr-xr-x 2 root root 4096 Jun 11 01:15 . drwxr-xr-x 5 root root 4096 Jun 11 00:52 .. -rwxr-xr-x 1 root root 8663 Jun 11 01:15 dshbak -rwxr-xr-x 1 root root 145824 Jun 11 01:15 pdcp -rwxr-xr-x 1 root root 145824 Jun 11 01:15 pdsh -rwxr-xr-x 1 root root 145824 Jun 11 01:15 rpdcp ``` #### pdshの利用例 1. 参考サイト [2] に習って、次の環境変数をシェルに設定しておく。 ``` PATH=$PATH:/usr/local/pdsh/bin MANPATH=$MANPATH:/opt/local/pdsh/man PDSH_RCMD_TYPE=ssh export PATH MANPATH PDSH_RCMD_TYPE ``` 2. 次のディレクトリに任意の名前のファイルを作成して、ホストのグループを定義する。 ``` $ cat ~/.dsh/group/server gce-1 ocaf-1 ocaf-2 ocaf-3 webarena-1 ``` 3. `pdsh`を用いて、たとえば上記`server`に定義した複数ホストの「Kernelリリース番号」を調べるために`uname -r`を並列実行し、標準出力を`dshbak -c`でまとめると次のようになる。 ``` $ pdsh -g server 'uname -r' | dshbak -c ---------------- webarena-1 ---------------- 5.4.0-117-generic ---------------- gce-1 ---------------- 5.13.0-1031-gcp ---------------- ocaf-[1-3] ---------------- 5.13.0-1034-oracle ``` 上記の例ではたったの5台ですが、1台毎の対応では不可能なほどの大量のホストに対して調べ物を一斉に行いたいときなどに、`pdsh`はものすごく威力を発揮するのでおすすめ。 #### おまけ) Slurm's hostlistについて 上記の`dshbak -c`の出力結果に現れている`ocaf-[1-3]`は、[Slurm's hostlist](https://slurm.schedmd.com/)という表記法である (言い切っているが正式名かどうかは自信ありません)。ホスト名・計算ノード名のような、パターンに連番を含む文字列をコンパクトに表現することができる。 この表記法の文字列を扱うには`hostlist`というコマンドが便利で、次のPythonモジュールで導入可能。以下のように、hostlists形式の文字列の生成や展開などの処理が行える。`pdsh`と併せてこれもおすすめ。 - [python\-hostlist · PyPI](https://pypi.org/project/python-hostlist/) ``` $ hostlist -c a001,a002,a003 a[001-003] $ hostlist -e b[001-003] # 集合を展開する b001 b002 b003 $ hostlist -d c[001-100] c[012,034,056,078] # 集合の差を求める c[001-011,013-033,035-055,057-077,079-100] ``` #### 参考サイト - [PDSH使ってますか? \| HPCシステムズ Tech Blog](https://www.hpc.co.jp/tech-blog/2019/05/21/useful_pdsh/) - [pdshを使って複数のLinuxサーバで同時にコマンドを実行する \| PCテクノロジー株式会社](https://www.pct.co.jp/technical_note20200901) --- ### Ubuntu 20.04.4 LTSでのKernel panic「kernel BUG at include/linux/fs.h:3104!」の暫定回避方法 - 2022-06-08 URL: https://remoteroom.jp/diary/2022-06-08/ #### OCIインスタンスでKernelエラー 「Always Free」ということでありがたく愛用している次のOCI (Oracle Cloud Infrastructure) インスタンスのKernelを、本日 (2022-06-08) 現在最新の 5.13.0-1033-oracle へ更新した後、システムが安定せず、Linux起動後にKernel panicが発生するようになってしまった。 |項目|内容| |---|---| |インスタンス|[OCI (Oracle Cloud Infrastructure) VM.Standard.E2.1.Micro](https://docs.oracle.com/ja-jp/iaas/Content/Compute/References/computeshapes.htm)| |OS|Ubuntu 20.04.4 LTS (Focal Fossa)| |問題が発生したKernel|linux-image-5.13.0-1033-oracle 5.13.0-1033.39~20.04.1 amd64| |問題が発生しないKernel|linux-image-5.13.0-1030-oracle 5.13.0-1030.35~20.04.1 amd64 (一つ前の版)| ##### 具体的な病状 - Linuxの起動直後は、コンソール画面 (OCI管理画面にある仮想コンソール) からの直接ログインやSSHでのネットワークログインは可能 - しかしコンソール画面を見ていると、Linuxの起動完了後から数秒のうちに、次のログを吐いて操作不能になる。ネットワーク経由でも応答しなくなる ``` [ 47.372548] kernel BUG at include/linux/fs.h:3104! [ 47.376841] invalid opcode: 0000 [#1] SMP NOPTI [ 47.377884] CPU: 0 PID: 1860 Comm: miniflux Not tainted 5.13.0-1033-oracle #39~20.04.1-Ubuntu [ 47.380564] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 0.0.0 02/06/2015 [ 47.382589] RIP: 0010:__fput+0x247/0x250 [ 47.383469] Code: 00 48 85 ff 0f 84 8b fe ff ff f6 c7 40 0f 85 82 fe ff ff e8 ab 38 00 00 e9 78 fe ff ff 4c 89 f7 e8 2e 88 02 00 e9 b5 fe ff ff <0f> 0b 0f 1f 80 00 00 00 00 0f 1f 44 00 00 55 48 89 e5 53 31 db 48 [ 47.393212] RSP: 0018:ffffa3bf82353bd0 EFLAGS: 00010246 [ 47.394525] RAX: 0000000000000000 RBX: 00000000000a801d RCX: ffff95323d1b4800 [ 47.396417] RDX: ffff9532390f7780 RSI: 0000000000000001 RDI: 0000000000000000 [ 47.473552] RBP: ffffa3bf82353bf8 R08: 0000000000000001 R09: ffff95323822cac0 [ 47.475477] R10: ffffa3bf82353bd0 R11: ffff95323914d110 R12: ffff95323914d100 [ 47.477260] R13: ffff95323822cac0 R14: ffff9532390f77a0 R15: ffff95320472cf00 [ 47.479419] FS: 00007fec6cb99b20(0000) GS:ffff95323f800000(0000) knlGS:0000000000000000 [ 47.485791] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 47.487972] CR2: 000000c000d8ffb0 CR3: 000000000327c000 CR4: 00000000003506f0 [ 47.495594] Call Trace: [ 47.496175] [ 47.496695] ____fput+0xe/0x10 [ 47.497410] task_work_run+0x70/0xb0 [ 47.498604] do_exit+0x37b/0xaf0 [ 47.499425] do_group_exit+0x43/0xb0 [ 47.500326] get_signal+0x157/0x8c0 [ 47.501180] arch_do_signal_or_restart+0xf2/0x290 [ 47.573573] exit_to_user_mode_prepare+0x12f/0x1c0 [ 47.574868] syscall_exit_to_user_mode+0x27/0x50 [ 47.575906] do_syscall_64+0x6e/0xb0 [ 47.576732] ? exit_to_user_mode_prepare+0x3d/0x1c0 [ 47.577803] ? syscall_exit_to_user_mode+0x27/0x50 [ 47.579237] ? do_syscall_64+0x6e/0xb0 [ 47.580179] ? exit_to_user_mode_prepare+0x9b/0x1c0 [ 47.581358] ? irqentry_exit_to_user_mode+0x9/0x20 [ 47.583420] ? irqentry_exit+0x19/0x30 [ 47.585168] ? common_interrupt+0x55/0xa0 [ 47.586882] ? asm_common_interrupt+0x8/0x40 [ 47.588067] entry_SYSCALL_64_after_hwframe+0x44/0xae [ 47.589582] RIP: 0033:0x46f023 [ 47.590462] Code: Unable to access opcode bytes at RIP 0x46eff9. [ 47.591938] RSP: 002b:00007fec6cb998a0 EFLAGS: 00000286 ORIG_RAX: 00000000000000ca [ 47.593888] RAX: fffffffffffffe00 RBX: 000000c00003e800 RCX: 000000000046f023 [ 47.595824] RDX: 0000000000000000 RSI: 0000000000000080 RDI: 000000c00003e948 [ 47.597700] RBP: 00007fec6cb998e8 R08: 0000000000000000 R09: 0000000000000000 [ 47.673857] R10: 0000000000000000 R11: 0000000000000286 R12: 00000000000000f7 [ 47.675586] R13: 0000000000000000 R14: 0000000000d00024 R15: 0000000000000000 [ 47.677321] [ 47.678535] Modules linked in: xt_mark ip6table_nat ip6table_filter ip6_tables veth xt_nat xt_tcpudp xt_conntrack xt_MASQUERADE nf_conntrack_netlink nfnetlink xfrm_user xfrm_algo xt_addrtype iptable_filter iptable_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 bpfilter br_netfilter bridge stp llc aufs overlay nls_iso8859_1 dm_multipath scsi_dh_rdac scsi_dh_emc scsi_dh_alua joydev efi_pstore input_leds serio_raw sch_fq_codel ipmi_devintf ipmi_msghandler msr sunrpc ip_tables x_tables autofs4 btrfs blake2b_generic zstd_compress iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi iscsi_ibft iscsi_boot_sysfs raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx xor raid6_pq libcrc32c raid1 raid0 multipath linear hid_generic bochs_drm drm_vram_helper drm_kms_helper syscopyarea sysfillrect usbhid crct10dif_pclmul sysimgblt crc32_pclmul fb_sys_fops ghash_clmulni_intel cec aesni_intel rc_core drm_ttm_helper crypto_simd hid cryptd ttm virtio_net net_failover failover [ 47.678599] psmouse drm virtio_scsi floppy [ 47.785254] ---[ end trace 0e747571a933ea24 ]--- (snip) [ 51.097840] RIP: 0010:__fput+0x247/0x250 [ 51.173822] Code: 00 48 85 ff 0f 84 8b fe ff ff f6 c7 40 0f 85 82 fe ff ff e8 ab 38 00 00 e9 78 fe ff ff 4c 89 f7 e8 2e 88 02 00 e9 b5 fe ff ff <0f> 0b 0f 1f 80 00 00 00 00 0f 1f 44 00 00 55 48 89 e5 53 31 db 48 [ 51.181323] RSP: 0018:ffffa3bf82353bd0 EFLAGS: 00010246 [ 51.184481] RAX: 0000000000000000 RBX: 00000000000a801d RCX: ffff95323d1b4800 [ 51.187779] RDX: ffff9532390f7780 RSI: 0000000000000001 RDI: 0000000000000000 [ 51.191379] RBP: ffffa3bf82353bf8 R08: 0000000000000001 R09: ffff95323822cac0 [ 51.194511] R10: ffffa3bf82353bd0 R11: ffff95323914d110 R12: ffff95323914d100 [ 51.197397] R13: ffff95323822cac0 R14: ffff9532390f77a0 R15: ffff95320472cf00 [ 51.272947] FS: 0000000000000000(0000) GS:ffff95323f900000(0000) knlGS:0000000000000000 [ 51.276348] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 51.278612] CR2: 0000557b01ae52e0 CR3: 0000000004852000 CR4: 00000000003506e0 [ 51.281192] Kernel panic - not syncing: Fatal exception in interrupt [ 51.285262] Kernel Offset: 0x16400000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff) [ 51.299923] ---[ end Kernel panic - not syncing: Fatal exception in interrupt ]--- ``` ##### 今回の環境での制限事項 Kernel更新に関わる問題が発生したときの一般的な対処法としては、GRUBを操作して更新前のKernelを選択して起動しなおせば良いわけだが、今回の環境では勝手が違っていて次の通り。 - コンソール画面にGRUBが現れない (効くのかわからないが起動中にコンソール画面に対してShiftキーを押していてもだめ) - コンソール画面にLinux起動途中の進捗画面とログインプロンプトは出る → 数秒で操作不能 【事後談】GRUBの設定`/etc/default/grub`を確認してみると、そもそもシリアルコンソールを使う設定になっていなかった。 ``` $ cat grub.original | grep -v '^#' | grep -v '^\s*$' GRUB_DEFAULT=0 GRUB_TIMEOUT_STYLE=hidden GRUB_TIMEOUT=0 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX="" ``` #### Kernelエラーの暫定回避方法 Linuxの起動後の数秒間は生きているので、この短い時間内で問題解決をしなければならない。GRUBの設定を変更して一つ前のKernelで起動させることを目標に、次のような操作を行った。操作途中でKernel panicが発生してしまったら、OCI管理画面から対象のインスタンスを強制StopしてまたStartさせて……を繰り返し、不調サーバがつかのま息を吹き返しているうちに続きを実施。 どうやら今回の環境では、コンソールでの直接ログインよりもSSHでのネットワークログインのほうが起動の早い段階で行える、つまりネットワークからアクセスするほうが早く触れて時間的に余裕があると気づいたので、できるだけネットワーク経由で作業を行うようにした。 1. 不調サーバ (Kernel panicを吐くインスタンス) のgrubを取得しておき、さらにgrub.cfgをgrepして一つ前のKernelを調べる ``` ssh <不調サーバ> scp /etc/default/grub <他のサーバ>:/tmp/grub.original grep -E '(menuentry|submenu) ' /boot/grub/grub.cfg > /tmp/menu.txt && scp /tmp/menu.txt <他サーバ>:/tmp/menu.txt ``` 2. 他サーバの上で、一つ前のKernelで起動するための緊急用のgrubを用意する ``` #### 他サーバにて $ cd /tmp $ cp grub.original grub.emergency $ vim grub.emergency #### https://blog.masu-mi.me/post/2020/12/05/switch-kernel-with-grub2/ と #### menu.txtを参考にしながら一つ前のkernelを使う中身に編集する $ diff grub.original grub.emergency 6c6 < GRUB_DEFAULT=0 --- > GRUB_DEFAULT='Advanced options for Ubuntu>Ubuntu, with Linux 5.13.0-1030-oracle' ``` 3. 緊急用のgrubを不調サーバに適用して再起動を試みる ``` scp grub.emergency <不調サーバ>:/tmp/ ssh <不調サーバ> sudo mv /tmp/grub.emergency /etc/default/grub && sudo update-grub && sudo reboot ``` 最後の`sudo update-grub && sudo reboot`までやり通すことができれば、不調サーバは一つ前のKernelで正常に起動してくるはず。 【事後談】問題のインスタンスがマウントしているボリュームを他のインスタンスでマウントし、そちらでGRUBの設定を変更するという方法も可能かも。このほうがデータ破壊の恐れを最小化できるだろうが、OCIでのやり方を知らない。 #### Twitter情報: docker絡み? とりあえず上記の復旧作業を暫定的に行ってほっとした後、Twitterにて Andrew (@andriusk) さんから有用な情報をいただいた。そのリンク先によると、私が問題に遭遇したOCIのインスタンスの他に、AWS (Amazon Web Services), Microsoft Azure, GCE (Google Compute Engine) でも同様の問題が発生しているらしい。 そして問題のKernel panicが発生するのは、dockerが動いている環境らしいのだ。ひぇぇー、私の環境が特殊だったというわけではなく、影響が広範囲っぽくて大変だ。 関連の情報源は次の通り。特に2のリンク先ではスレッドが進行中に思える。発生条件的に該当する環境では、問題が解決するまではKernelの更新は見守ったほうが無難であろう。 1. [kernel panic on Ubuntu 20\.04\.4 LTS with kernel 5\.13\.0\-1028\-aws when using docker \| AWS re:Post](https://repost.aws/questions/QUoj_zG3t1SzGnz0h4EGIaIg) 2. [Bug \#1977919 “Docker container creation causes kernel oops on linux\-aws 5.13.0.1028.31~20.04.22”: Bugs : linux\-aws package : Ubuntu](https://bugs.launchpad.net/ubuntu/+source/linux-aws/+bug/1977919) - 影響を受けるKernelが[comment #21](https://bugs.launchpad.net/ubuntu/+source/linux-aws-5.13/+bug/1977919/comments/21)に書かれている > Work on this issue continues. We have identified the following impacted kernels and versions: > > focal linux-aws-5.13 5.13.0-1028.31~20.04.1
> focal linux-azure-5.13 5.13.0-1028.33~20.04.1
> focal linux-gcp-5.13 5.13.0-1030.36~20.04.1
> focal linux-oracle-5.13 5.13.0-1033.39~20.04.1 3. [Kernel Panic with Docker on some Cloud\-optimized Ubuntu Kernels \- General \- GitLab Forum](https://forum.gitlab.com/t/kernel-panic-with-docker-on-some-cloud-optimized-ubuntu-kernels/70739) ##### 追記 [2022-06-09 22:26] Kernelエラーの問題がdocker絡みだと判明した上での暫定対処方法として、インスタンスの起動直後にdockerサービスを停止 (stop) または無効化 (disable) することも考えられる。 ##### 追記 [2022-06-10 17:05] GCEとOCIのインスタンスで、問題を回避するために実際にどのような操作をしたかの奮闘記。大変参考になる。 - [「kernel BUG at include/linux/fs\.h:3104\!」への対応](https://zenn.dev/ycrack/scraps/a0d5ed5ca8b457) #### 参考リンク - [GRUB2で起動するカーネルを切り替える • masu\-mi's blog\(Dirty Cache\)](https://blog.masu-mi.me/post/2020/12/05/switch-kernel-with-grub2/) --- ### 【観た映画】 フォーカス - 2022-06-05 URL: https://remoteroom.jp/medialog/2022-06-05_movie-b01ak3czr2/ - 視聴: [YouTube](https://www.youtube.com/watch?v=GSzNIrAnHcE) 原題『FOCUS』。人間心理に関するレクチャーが多少入ってくるところは、この映画らしい特徴として面白かった。騙し騙され、観客も騙される (私はまんまと騙された)。真実味をどうこう言うのは置いといて、主人公の立場になりきって場面場面で自分ならどうするか?と、まったり浸って鑑賞するのが良い。 #### 鑑賞リンク --- ### 【観た映画】 007/ノー・タイム・トゥ・ダイ - 2022-05-28 URL: https://remoteroom.jp/medialog/2022-05-28_movie-b09ptlgh2q/ - 視聴: [YouTube](https://www.youtube.com/watch?v=VOSjlRnuBCE) 原題『No Time to Die』。007シリーズと言えば、導入部に流れる芸術的かつ夢の世界のようなイメージが観客になにかを暗示しつつ、圧巻のスパイの世界が幕を開けるわけですが本作も同様で。テーマは過去との決別なのか、継承なのか。どのように受け取るのかは観客側の自由であり、鑑賞後に感想を言い合いたくなるくらい、シリーズもの映画の文法通りに作られている。 #### 鑑賞リンク --- ### モニターヘッドホンを切り替え: SONY MDR-CD900STからMDR-M1STへ - 2022-05-26 URL: https://remoteroom.jp/diary/2022-05-26/ #### 基準器 底知れぬヘッドホン沼に堕ちてしまわないよう、私には自身に課した安全の指針があり、ノイズキャンセリング非搭載のものを選ぶ際には対象をいわゆる“モニターヘッドホン”に限定してきた。モニターヘッドホンといえば、代表格のひとつに前世紀から生き続けているSONY MDR-CD900STがあり、最近では同じくSONYからMDR-M1STが登場したという。 前者のMDR-CD900STは自分の基準器として2台使い、何度かイヤーパッドを交換して13年以上これに耳の調教を任せてきた。一方、音楽へがっつり浸る時間に新たな刺激が加わるとより楽しい。そろそろ基準器の切り替えを検討しようと後者のMDR-M1STを入手した。 #### 聴き比べの感想 |項目|内容| |---|---| |評価基準|音の細部までが掴めること| |アンプ|Xiaomi Redmi Note 10 Proのアナログヘッドホン出力部分| |音源|Spotifyアプリでのいろいろな音楽| SONY MDR-M1ST (2019年発売) を入手した初日に、MDR-CD900ST (1989年発売) との聴き比べをしたところ、MDR-M1STで聴く音は、MDR-CD900STのものと比較してこのように違う。 - 余韻がよく聴こえるとまず驚いた - 広がりが自然、空間的な把握がやりやすい - 音量を上げてもうるさいと感じにくい 今回の評価基準に照らすと上記の違いは総じて良い傾向のもの。自分の経験に基づけば、オーディオにおけるこの類の違いは、MDR-M1STの出す音がMDR-CD900STの音よりも正確である故に生じていると判断できる。よって全く躊躇なく、これからの基準器はMDR-M1STだと決定。構造と装着感に関してはこうである。 - ドライバーユニットの向きが変わっており、真横 (3時と9時) からではなく、斜め前 (2時と10時) から耳へ向くようになっている - イヤーパッドはエッジがやや角張った形状になっていて、ヘッドホンと頭部との密着感が増している - バンドの長さ調整時に出るカチカチ音の音色が、尖ったものではなくなった #### 参考) 購入価格 ##### MDR-CD900ST 2台 |品名|2008年10月当時の価格(税込)|備考| |---|--:|---| |ヘッドホン [SONY MDR-CD900ST](http://www.smci.jp/s/headp/page/cd900st)|14,800円|[サウンドハウス](https://www.soundhouse.co.jp/products/detail/item/71265/)| |送料|525円|| |品名|2013年1月当時の価格(税込)|備考| |---|--:|---| |ヘッドホン [MDR-CD900ST (MOD)](https://gizmo-music.com/?pid=48826827)|23,100円|4芯ケーブルに交換されている、[GIZMO-MUSIC](https://gizmo-music.com/)による[SONY MDR-CD900ST](http://www.smci.jp/s/headp/page/cd900st)の改造版| |送料|735円|| ##### MDR-M1ST |品名|価格(税込)|備考| |---|--:|---| |ヘッドホン [SONY MDR-M1ST](http://www.smci.jp/s/headp/page/m1st) (中古)|23,900円|[e☆イヤホン](https://www.e-earphone.jp/product/search/list/?search_rank=%201%202%203&search_word=MDR-M1ST)| |ヘッドホンケーブル [SONY MUC-S12SM1](https://www.sony.jp/headphone/products/MUC-S12SM1/) (中古)|2,790円|[e☆イヤホン](https://www.e-earphone.jp/product/search/list/?search_rank=%201%202%203&search_word=MUC-S12SM1)| |送料|1,320円|| --- ### 監視カメラシステムを構築するOSS「Shinobi」を試した - 2022-05-24 URL: https://remoteroom.jp/diary/2022-05-24/ クラウド型またはオンプレ型の監視カメラシステムを構築する、すなわち、[RTSP (Real Time Streaming Protocol)](https://ja.wikipedia.org/wiki/Real_Time_Streaming_Protocol) に対応した複数のネットワークカメラの映像をウェブブラウザで確認したり録画を行うためのサーバを構築するオープンソースソフトウェアを試しました。名前は「Shinobi」です (どうしても「忍」を連想します🥷)。Shinobiの公式サイトは次の通り。 - [Shinobi \- Simple CCTV and NVR Solution \- Home](https://shinobi.video/) - [Shinobi Official Documentation \- Home](https://shinobi.video/docs/) 以下、何らかのネットワークカメラ (IPカメラ) が1台ある前提で、Shinobi CE (Community Edition) を利用するまでの流れとネットワークカメラの接続方法を簡単にご紹介です。 #### Shinobi CE (Community Edition) 利用手順 ##### Step-1. サーバ準備とShinobi導入 1. Shinobi用サーバとしてマシンを1台用意し、OSをインストールして最小限の初期設定を行います。今回は次の環境としました - マシン: [Proxmox VE]()上の仮想マシン (CPU: 4core, Memory 8GB, Storage: 64GB) - OS: Ubuntu Server 22.04 (Ubuntu以外でも可能です) - Ubuntuインストール後にコンソールで次のようにパッケージを更新しておきます ``` sudo apt update; sudo apt upgrade; sudo apt full-upgrade; sudo apt autoremove sudo apt install qemu-guest-agent ssh sudo reboot ``` 2. [公式ドキュメント](https://shinobi.video/docs/)に沿って、お手軽な「[The Ninja Way](https://shinobi.video/docs/start#content-the-ninja-way)」でShinobiをインストールします。いくつか質問が表示されるので回答していくと、5分程度でインストールは完了します。すばらしく簡単です ``` sudo su bash <(curl -s https://gitlab.com/Shinobi-Systems/Shinobi-Installer/raw/master/shinobi-install.sh) ``` ##### Step-2. Shinobiの最初の設定 ###### SuperUserのパスワードを変更 Shinobiでのアカウントの考え方は、1) スーパーユーザ (SuperUser) がグループやグループに所属するアカウントを管理し、2) 各グループにはネットワークカメラや管理者やサブアカウントが属している、という2層の階層構造で成り立っているように思います。ここはまず、SuperUserに関する初期設定を行います。 1. インストール終了時にURLが表示されていたShinobiのSuperUser用管理画面 `http://192.168.1.175:8080/super` (IPアドレス部分はご自身の環境に合わせてください) へアクセスし、次の初期アカウント情報を用いてログインします |項目|内容| |---|---| |EMAIL|admin@shinobi.video| |PASSWORD|admin| |(function)|SUPERUSER|| |(alternateLogin)|DEFAULT| 2. メニューの [Preferences] を押し、SuperUserのEmailとPasswordを好みの内容に変更して [Save] を押します |項目|内容| |---|---| |EMAIL|superadmin (任意のメールアドレスか文字列でも良いようです)| |PASSWORD|(任意の文字列)| 3. SuperUserの認証情報はShinobiサーバ上では次のファイルに保存されます ``` ### cat /home/Shinobi/super.json [ { "mail": "superadmin", "pass": "(パスワードのハッシュ文字列)" } ] ``` ###### 管理者とグループを追加 1. ShinobiのSuperUser用管理画面にて [Accounts] を押し、最初の管理者を追加するために [+Add] を押します 2. 「Add New」の画面に次の内容を入力して [Save] を押します |項目|内容| |---|---| |Email|anonymous@example.com (実際には自分のメールアドレス)| |Group Key|(空欄)| |Password|(任意の文字列)| |Password Again|(Passwordの文字列)| 3. 画面右側に追加した管理者が表示されます。メールアドレス右側のランダム文字列は自動生成された「Group Key」です ##### Step-3. ネットワークカメラを接続 1. URLにsuperを含まない `http://192.168.1.175:8080/` に、先程追加した管理者のEmail (例: `anonymous@example.com`) とPasswordを使ってログインします 2. ログイン後、ネットワークカメラが未だ追加されていない画面になります。ここで画面上部の [+] を押します 3. ネットワークカメラのモニターを追加する「Add Monitor」画面が現れます 4. 「CONNECTION」枠の [Full URL Path] に、ネットワークカメラがRTSP通信するURL (※例: `rtsp://192.168.1.196:8554/unicast`) を入力し、[Probe] を押します - ※このURLはネットワークカメラの機種によって異なりますので各自であらかじめ把握しておく必要があります。Shinobi公式サイトの に当該機種の情報があるかもしれません。本記事では[RTSP対応に改造したATOM Cam2](#%E5%8F%82%E8%80%83%E3%83%AA%E3%83%B3%E3%82%AF)を接続しています 5. ネットワークカメラの情報が取得できたことを確認し、[Import] を押します 6. 「Add Monitor」画面の「IDENTITY」枠の [Mode] を Watch-Only から Record へ変更し、同じく「IDENTITY」枠の [Name] を任意の名前に変更して [Save] を押します 7. ShinobiからネットワークカメラへのRTSP接続が問題なく確立できると、Shinobiの画面左側にカメラ映像の四角いサムネイルが現れます。そのサムネイルを押すとカメラのモニターが画面右側に追加されます ##### Step-4. ネットワークカメラの録画状況を確認 Shinobiへ上記手順 (Mode: Record) で接続したネットワークカメラの映像は、デフォルトでは15分ごとに分割された動画としてShinobiサーバに録画保存されます。保存された動画の確認は、たとえばモニター画面にマウスカーソルを載せると下部に表示される9x9の模様のアイコン「Video Grid」を押すか、フィルムのアイコン「Videos List」を押すことで、次のように確認できます。 また、上記のネットワークカメラの動画は、Shinobiサーバのファイルシステム上の `/home/Shinobi/videos/[GROUP KEY]/[MONITOR ID]/` に保存されます。 ``` mah@shinobi-test:/home/Shinobi/videos/zHyMd7P3dw$ ls -alh ./zyDPJkFavv/ | head total 3.3G drwxr-xr-x 2 root root 4.0K May 23 15:30 . drwxr-xr-x 3 root root 4.0K May 23 15:33 .. -rwxrwxrwx 1 root root 47M May 23 07:30 2022-05-23T07-23-10.mp4 -rwxrwxrwx 1 root root 104M May 23 07:45 2022-05-23T07-30-00.mp4 -rwxrwxrwx 1 root root 104M May 23 08:00 2022-05-23T07-45-00.mp4 -rwxrwxrwx 1 root root 104M May 23 08:15 2022-05-23T08-00-00.mp4 -rwxrwxrwx 1 root root 104M May 23 08:30 2022-05-23T08-15-00.mp4 -rwxrwxrwx 1 root root 104M May 23 08:45 2022-05-23T08-30-00.mp4 -rwxrwxrwx 1 root root 104M May 23 09:00 2022-05-23T08-45-00.mp4 ``` ##### Step-5. Shinobiの更新手順 Shinobiの更新は、公式ドキュメントに掲載されている手順を次のようにroot権限で実行すると可能でした。 - [ShinobiHub \- Article : How to Update Shinobi Manually from Terminal](https://hub.shinobi.video/articles/view/LTVqL3I8f8kIzsX) ``` sudo su cd /home/Shinobi sh UPDATE.sh pm2 flush pm2 restart camera pm2 restart cron ``` #### まとめ: 導入は簡単かつ一級品の感触 Shinobiの導入はとても簡単で驚くほど。しかも複数グループ対応・複数ネットワークカメラ対応で、どうやらAPIが使えたり動体検知もできるようで超多機能です。監視カメラシステムを構築するソフトウェアとして即活用できる一級品だと実感しました。Shinobiの詳細を知って評価するためには、実際にサーバを構築し、[ONVIF](https://canon.jp/business/trend/what-is-onvif)対応業務用ネットワークカメラもできれば用意して、[公式ドキュメント](https://shinobi.video/docs/)の[Configure](https://shinobi.video/docs/configure)や[Object Detection](https://shinobi.video/docs/object)などを参照しながら色々試していくのがよいと思います。なお、本番環境での利用は状況によって下記のShinobi Proのサブスクリプションが必要になります。 - [Shinobi \- Simple CCTV and NVR Solution \- Pro](https://shinobi.video/pro) また、Shinobiを実際に“クラウド型監視カメラシステム”とするためには、クラウドに設置したShinobiと各拠点の監視カメラを通信させる必要が出てきます。これは一般的なVPNやたとえばTailscaleを活用すれば可能です。クラウドサービスへの課金の面では、Shinobiが使用するストレージ領域や映像転送に必要なネットワーク帯域をあらかじめ見積もっておいたほうが安心です。 最後にShinobiの機能紹介用画像の余りを貼っておきます。管理者としてログインしているときのメニューの一部と、そこから呼び出せる機能の1つ「ONVIF Scanner」の画面キャプチャです。 #### 参考リンク - [ATOMCam2の機能拡張用ツールを公開しました \- honeylab's blog](https://honeylab.hatenablog.jp/entry/2021/09/24/002107): ATOM Cam2を改造してRTSP対応にするツールが公開されています - [ネットカメラ「ATOM Cam 2」所感 \[2021-07-21\]]() --- ### 【観た映画】 キャッシュトラック - 2022-05-21 URL: https://remoteroom.jp/medialog/2022-05-21_movie-b09bf2mdh8/ - 視聴: [YouTube](https://www.youtube.com/watch?v=J6kef1HsJLE) 原題『Wrath of Man』。主人公には謎の背景がある、という点は数日前に見た『Mr.ノーバディ』と同様だ。本作はより規模の大きい映画 (費用がかかっていそう) で、シリアスで、遊び心は排除されている。楽しみ方としては、王道っぽい展開の捻りに身を任せて観ていくものだなあと思った。ちなみに音楽はずっと、いわゆるスリラー調の恐ろしげな雰囲気のものが流れていた。 #### 鑑賞リンク --- ### 【観た映画】 Mr.ノーバディ - 2022-05-17 URL: https://remoteroom.jp/medialog/2022-05-17_movie-b09vp7y4jw/ - 視聴: [YouTube](https://www.youtube.com/watch?v=ECw3Mn6MRGM) 原題『Nobody』。非日常の中へ気持ちを突入させたい。そんな時に観たらばっちり。倫理観の良い悪いは抜きにして、誰が悪党なんだかよく分からないほどに、いわばやりたい放題が極まった映画であった。登場人物がやり場のない心情を醸し出すシーンにふと共鳴したり、徹底的にやりつくしているアクションや攻防の画作りに感心させられたりと、観る側のツボを緩急効かせて押さえてもくる。 #### 鑑賞リンク --- ### 試乗車 BMW iX 雑感 - 2022-05-14 URL: https://remoteroom.jp/diary/2022-05-14/ 2022年5月14日に開催された[EV&SDGsフェア 2022 in Osaka](https://web.motormagazine.co.jp/_tags/EV&SDGs%E3%83%95%E3%82%A7%E3%82%A2%E6%A6%82%E8%A6%81)へ足を運びました。グランフロント大阪 うめきた広場にBEV/PHEVといった電動化モデルが十数台展示され、いま注目の様々な車種を自由に眺めることができました。 車両は展示のみだろうと勝手に思っていたところBMWブースでは試乗もできると知り、「iX」「i4」「iX3」の3台の中から、自分はめったに乗れないであろうフラッグシップモデルのiXを選択して試乗しました。その感想を書き残しておきます。 #### BMW iX - 実際の数値で把握するとびっくりする車体サイズ (全長4955mm, 全幅1965mm, 全高1695mm) であるが、実物と運転感覚からはそこまで巨大な印象は受けなかった。内外装には“金継ぎ”を思わせるゴールドの差し色が施されており、精悍さというよりは、異端さとゆとりを印象づけるデザイン。 走行モードには、アクセルペダルから足を離すとあえて空走するモードと、回生ブレーキによって減速するモードがあり、助手席のBMWスタッフの方が解説しながら切り替えてくれる。試乗コースはグランフロント大阪の周辺エリアを大きく一周するもので、途中に道路の継ぎ目が続く部分があったり、少しきつめのカーブもある。しかし車内ではロードノイズが非常に低く、BEVの中でも静粛性が高そうだと思った。そして2.5tという車重を感じさせることなく、カーブでも自分が狙ったとおりの動きをこなした。「私うまく運転できちゃってる」と感じさせる出来。 前席と同じように後席の雰囲気も“ゆったりラウンジ”だ。先進装備はもちろん色々すごいのだが、たとえば10年乗り続けても、極みを感じさせるこの空間に惚れ込んだままだと予想できる、上質で快適な車。ファミリーカーとして問題なくWelcome。 #### 「ファミリーカーとしてどうだろうか?」と妄想 他の車については試乗ではなく車内に入ってシートに座り、ファミリーカーとして使えるかどうかの妄想に励みました。 ##### Mercedes-Benz EQA - 前席にはお客さんがいたのでまず後席に乗り込んでみたところ、座面からフロアまでの距離が十分じゃないことに驚いた。座ると足が立ち気味のいわゆる“体操座り”に近い状態になる。この残念な印象しかない。ではEQブランドの名誉挽回としてより大きいEQBはどうだ?と、隣のEQBを確認しようとしたところドアが開放されておらず乗り込めなかった。 ##### Volvo C40 Recharge - C40は今回最もしっくりきた。しゃれていて広さは程々あって居心地良い。後席に座ると、ガラスルーフだし窓も大きく室内は明るいので、内装のブラックの印象が視覚を占めるわけでもない。XC60も同様に好感触だが、XC60のサイズはうちではほとんど持て余すだろう。 ##### Audi RS e-tron GT - 前席に滑り込むと着座位置の低さが印象的。同じく後席も低い位置にべたっと座るようになっており、低さ上等!な志向には合うだろう。が、弱気な私はこれをファミリーカーにはできん。セカンドカーにするならいいけども (えっ??)。外観は超高性能GTな雰囲気むんむん。前輪周りの空力処理など間違いなく本気なスポーツカーのそれだ。 --- ### 【読んだ本】 メルケル 世界一の宰相 - 2022-05-03 URL: https://remoteroom.jp/medialog/2022-05-03_book-b09hqpmmjz/ ヨーロッパで新たな戦争が始まった今、その戦争にある背景も知れるのではないかと思い、ドイツの元首相の半生を追った本書を選んだ。一番大きな選択の理由はもちろん、どのような人物が首相を16年間続けてきたのか関心があるからだ。 分断の歴史が刻まれた国家に暮らす多様な人々を率い、かつ他の国々とも友好な協力関係をまとめあげていくことができる人物は、はたして今までにどのような信念を持つに至ったゆえに、超人的な行動力を発揮して結果を出してきたのか。このことが本書には存分に記されている。実直な姿勢も忘れられない。 --- ### レンタカー Toyota Yaris Cross Hybrid 雑感 - 2022-05-02 URL: https://remoteroom.jp/diary/2022-05-02/ 鹿児島旅行2泊3日のお供に、タイムズカーレンタルで[Toyota Yaris Cross Hybrid](https://toyota.jp/yariscross/) (6AA-MXPJ10) を借りました。グレードはHYBRID X 1.5L 2WDだと推定。運転距離は300km程度で高速道路の割合は体感として距離の70%以上。このYaris Cross Hybridに乗った簡単な感想を書き残しておきます。なお、メインの比較対象は2000年式のレトロセダン (GF-JCG10) です。 #### 装備について - ACC (トヨタ用語で言うレーダークルーズコントロール (追従ドライブ支援機能)) は、やはり ([前回のレンタカーC-HRの時と同じく]()) 最高。完全停止から再スタートまでこなせて、片側1車線の高速道路での疲労軽減に役立った。ACC利用時は人間が加減速を都度調整するよりも燃費向上するし、良いことばかり - ナビに備わっていたAndroid Auto機能を初めて利用して、スマホのSpotifyアプリから音楽を鳴らした。私は最初わかっていなくて、まずスマホとナビのBluetooth接続を確立したあとにAndroid Autoの存在に気づき、Bluetoothを繋げたままUSB接続をしていたせいで、ナビから出る音がどっち経由なのかわからず困惑した - メーターパネルの双眼鏡みたいな枠には眉をひそめる。この枠は無くして表示領域をうまく整理したほうが見やすくできるんじゃないかなあ #### 走行感覚について - EV走行する割合がまあまあ高い - ステアリング感覚は緩めでおっとりしているが、車の性格としては過不足なしだろう - 同様に加速力は必要十分かなと思った。踏めばエンジンが唸るがそれは予想の範囲で失望とはならない - シフトレバーはいわゆる棒状のほぼトラディショナルな形で、D-B間を変速する時に腕で漕ぐ感がある (嫌いじゃない) - ハロゲンヘッドライトは暗くて、街灯などない郊外の夜道では実際に不安 - 燃費は満タン法で28km/L (300km走って燃料消費10.54L)。誤差もあるだろうが驚くほど良かった #### 家族の感想 - コンビニで買ったカフェラテRサイズのコップの置き場所が後席にない (ドアにあるドリンクホルダーはペットボトル用で合わない) - 後席は走行中静かで揺れなかった。うちの車より乗り心地が良い - 電車みたいで面白かったです #### 参考地図 --- ### Proxmox VEで仮想化プラットフォームを簡単構築 - 2022-04-09 URL: https://remoteroom.jp/diary/2022-04-09/ これまでUbuntuデスクトップ機として使ってきたPCを、自宅内での仮想環境実験場へと鞍替えします。仮想化プラットフォーム (仮想化基盤) の選択に関しては、[VMware ESXiでの構築は過去にやったことがある]()ので、今回はProxmox Virtual Environment (Proxmox VE) での構築に初挑戦します。 #### Proxmox VEとは Proxmox Virtual Environment (以下、Proxmox VE) は、Proxmox Server Solutions社が開発しているオープンソースな仮想化プラットフォームです。Debian GNU/Linuxがベースであるため、Debianが対応しているx86_64の様々なハードウェアに導入可能という利点があるそうです。公式サイト・公式情報はこちら。 - [Proxmox VE \- Virtualization Management Platform](https://www.proxmox.com/en/proxmox-ve) - [Proxmox VE Hardware Requirements](https://www.proxmox.com/en/proxmox-ve/requirements) 「Proxmox」のスペルが、たまたま持っているドイツの財布「[oxmox](http://www.oxmox.jp/)」のそれと似ているなあと気になって調べてみたところ、Proxmox Server Solutions社はオーストリアの企業でした。Proxmox VEの他にもBackup Serverなどのプロダクトを出しているようです。 - [Proxmox \- Powerful open\-source server solutions](https://www.proxmox.com/en/) - [Read\-Only Proxmox Projects Repository Clone\. · GitHub](https://github.com/proxmox) #### Proxmox VEの導入 ##### 導入対象PC Proxmox VEをインストールするPC [Lenovo ThinkCentre M75q-1 Tiny (11A4CTO1WW)](https://kakaku.com/item/K0001218252/) のスペックは次の表の通り。このPCとProxmox VEとの相性は、元々Ubuntu Desktop 20.04 LTSが使えていたわけなのでほぼ確実に問題ないでしょう。 |項目|内容| |----|----| |CPU|AMD Ryzen 5 PRO 3400GE (物理4コア)| |メモリ|32GB (DDR4-2666 16GBx2)| |SSD|500GB (NVMe)| ##### 導入手順 次のページを参考にProxmox VEの導入を進めます。 - [Install and configure Proxmox VE](https://www.proxmox.com/en/proxmox-ve/get-started) - [お家で始める仮想化環境 Proxmox VE 環境構築編 \| Nishiの独り言](https://blog.nishi.network/2020/08/12/proxmox-part1/) 導入手順はおおよそ次の通りです。 1. 次のページから「Proxmox VE 7.1 ISO Installer」をダウンロードし、ISOイメージとしてUSBメモリに焼きます - [Get the free Proxmox VE ISO installer](https://proxmox.com/en/downloads/category/iso-images-pve) 2. PCをUSBメモリから起動し、画面に沿ってProxmox VEのインストールを進めます (※インストール先ストレージの既存データは全て削除されます) 3. Proxmox VEのインストール完了後、PCを再起動します 4. 再起動後のPCの画面はCUIモード (黒い画面に白い文字が表示されている状態) となり、PCに設定されたIPアドレスを含むURL、例えば`https://192.168.1.3:8006/`というURLと、loginプロンプトが表示されます 5. 表示されているURLにウェブブラウザでアクセスするとProxmox VEのGUI管理画面が現れます。また、Proxmox VE環境には `ssh -l root 192.168.1.3`でSSHログインが可能です 6. Proxmox VEの[サポートサブスクリプション](https://proxmox.com/en/proxmox-ve/pricing)を購入しない場合は、パッケージリポジトリをデフォルト (サポートサブスクリプション前提) から無償利用可能なものへと切り替えます。以下のようにaptのソースファイルを編集します。 - [Package Repositories \- Proxmox VE > Proxmox VE No-Subscription Repository](https://pve.proxmox.com/wiki/Package_Repositories#sysadmin_no_subscription_repo) ``` #### 既存ファイルを編集して1行コメントアウト $ cat /etc/apt/sources.list.d/pve-enterprise.list ###deb https://enterprise.proxmox.com/debian/pve bullseye pve-enterprise #### 次のファイルを新規作成 $ cat /etc/apt/sources.list.d/pve-no-subscription.list ### PVE pve-no-subscription repository provided by proxmox.com, ### NOT recommended for production use deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription #### パッケージ一覧を更新 $ sudo apt update ``` ##### Web GUI Proxomox VEのWed GUI (例: `https://192.168.1.3:8006/`) にて、言語として「Japanese」を選択した後、ユーザ名「root」でログインした状態の画面写真を以下紹介していきます。画面左側にはわかりやすい見出しのメニューがあり、おおよそ直感的に操作ができます。 ###### 1. VM関係 仮想マシンやLXCコンテナの作成は右上の青いボタン [VMの作成\] [CTの作成\] から行います。作成済みのVMの、ハードウェア設定とオプション設定の画面を開いた状態は次の通りです。 各VMのメニューから \[コンソール\] を選択するとVMの画面出力をブラウザ内で確認することができ、キーボードとマウスで操作も可能です。ESXiと比較して全く遜色ない雰囲気です。 ###### 2. ストレージ関係 ノードに接続しているストレージの一覧画面 (ローカルストレージ含む) は次の通りです。\[追加\] を押すと、各種ストレージを追加する画面へと進みます。ここでは自宅内にある3TBのNAS (qnap) を「SMB/CIFS」接続し、Proxmox VEの「VZDump バックアップファイル」領域と「ISO イメージ」領域に、このNASを追加割り当てしました。 ###### 3. バックアップ関係 VMの定期バックアップ機能も備わっています。バックアップするVMの選択、定期バックアップのタイミングや保存する世代数、バックアップ先のストレージ領域などがメニュー形式で設定できます。ここでは外部ストレージとして接続したNASへ、全てのVMのバックアップを2世代分保存するように設定しました。 ###### 4. クラスタ関係 ノード (仮想化ホスト) のクラスタ構成の設定画面もあります。仮想マシンを沢山立てて本格的に遊ぶようなときにはノードのクラスタを組んでみたいです。 #### 感想 Proxmox VEには、x86_64ハードウェアのPCを簡単に滞りなく仮想化プラットフォームへと変える汎用性が備わっていそうです (例えばESXiだとRealtek製NICに対応させるなら手順が別途必要だったりします)。そして、およそ思いつく限りの機能が分かりやすくGUIで扱えて、かつ無償利用できるところに感心しました。 また、今回のProxmox VE 7.1のOS環境はDebian GNU/Linux 11 (bullseye) そのものと言えます。したがって他のDebian系と同様の慣れた方法で、自分なりの仕掛け作りを行うことができます (たとえば[Tailscale VPNを導入](https://tailscale.com/kb/1038/install-debian-bullseye/)してみたり、[rclone](https://rclone.org/)等でクラウドストレージと連携してみたり)。個人的に運用するとしてもこのような取っつきの良さは重要な要素であり、Proxmox VEの実用性を高める大きな魅力だと思います。 ##### 追記: \[2023-05-07\] Proxmox VEに関する記事を追加しました。 - [Proxmox VEの仮想マシンイメージのクラウドバックアップをRcloneを使って実現する方法 \[2023-05-07\]]() #### 参考リンク - [Proxmox VEでVM作成](https://zenn.dev/northeggman/articles/d7b29c4e2cd7c7) - [Proxmox VE6\.3のインストールと、やっておくと良い初期設定](https://zenn.dev/northeggman/articles/0203320c4a2690) - [Qemu\-guest\-agent \- Proxmox VE](https://pve.proxmox.com/wiki/Qemu-guest-agent) - [Proxmox VE 6\.1のCephでダウンテスト \| fefcc\.net](https://fefcc.net/archives/1037) --- ### Ubuntu x Ryzen 7環境での「BUG: soft lockup - CPU#NN stuck」を解消したい - 2022-04-04 URL: https://remoteroom.jp/diary/2022-04-04/ #### M75q 2台目 自宅デスクトップPCをLenovoの小型PC「ThinkCentre M75q Tiny Gen2」へ入れ替えました。購入物は次の通りで、プレインストールのWindowsは使わずにUbuntuをインストールしています。 |分類|メーカー・機種名|価格(円)|備考| |----|----|---:|----| |PC本体|Lenovo [ThinkCentre M75q Tiny Gen2 11JJCTO1WW](https://www.lenovo.com/jp/ja/p/11JJCTO1WW) (Ryzen 7 PRO 4750GE, 8GB メモリ, 128GB SSD, Wi-Fi)|51,000|Y!オークション| |メモリ|Crucial [16GB DDR4-3200 SODIMM](https://www.crucial.jp/memory/ddr4/ct16g4sfra32a) CT16G4SFRA32A x 2|14,000|メルカリ| |SSD|Western Digital [WD Blue SN570 NVMe™ SSD](https://www.westerndigital.com/ja-jp/products/internal-drives/wd-blue-sn570-nvme-ssd#WDS500G3B0C) (500GB) WDS500G3B0C|6,880|ドスパラ| |合計||71,880|※| ※本構成の結果、M75q Gen2本体に付属していた次のパーツが余る: 8GBメモリ, 128GB SSD (NVMe M.2 2242) ちなみに新デスクトップPCは旧PCと比較すると筐体サイズは同じで、Ryzen 5から7への変化により[CPU Markのスコアは約2倍](https://www.cpubenchmark.net/compare/AMD-Ryzen-5-PRO-3400GE-vs-AMD-Ryzen-7-PRO-4750GE/3565vs3842)。他方、過去に詳細を下記記事に書いた旧デスクトップPCは、これからは仮想環境のホストへと鞍替えして活用する予定です。 - [小型の "ThinkCentre M75q-1 Tiny" を購入、PCゲームを始めたくなった \[2020-07-07\]]() #### kernel「BUG: soft lockup - CPU#NN stuck」って何? さて。M75q Gen2 (物理マシン) にUbuntu Desktopをインストールして使い始めると、基本的には反応良くて快適なのですが次の不具合に気づきました。 1. GUIログイン後にしばらく放置しておくと、意図している省エネ動作としてデスクトップ画面が消える 2. その後にマシンを使おうとするも、画面が点かない。SSHログインは可能だが反応がどこか緩慢で、syslogには次のログが吐かれている。`top`コマンドでのプロセス状況としてはXorgが刺さっているように見える ``` $ grep CPU /var/log/syslog Apr 1 21:52:10 m75q2 kernel: [11473.338919] watchdog: BUG: soft lockup - CPU#14 stuck for 26s! [Xorg:1942] Apr 1 21:52:10 m75q2 kernel: [11473.339030] CPU: 14 PID: 1942 Comm: Xorg Tainted: G O 5.13.0-39-generic #44~20.04.1-Ubuntu Apr 1 21:52:38 m75q2 kernel: [11501.696730] watchdog: BUG: soft lockup - CPU#14 stuck for 52s! [Xorg:1942] Apr 1 21:52:38 m75q2 kernel: [11501.696816] CPU: 14 PID: 1942 Comm: Xorg Tainted: G O L 5.13.0-39-generic #44~20.04.1-Ubuntu ``` 3. 私には復旧方法がわからず再起動や電源OFFをするしかない 画面が起きてこない原因を調べてみると、LinuxとRyzen (今回の場合はUbuntuとRyzen 7 PRO 4750GE) には[カーネルが関係する相性問題があるのかも?](https://www.google.com/search?q=%22watchdog%3A+BUG%3A+soft+lockup+-+CPU%22+%22Ryzen%22)とわかります。 この不具合はカーネル更新等でいつか治るのかもしれませんが、現時点での応急処置 (ワークアラウンド) としては「AMD Ryzen CPUのC6 Stateを無効化せよ」らしいので、C6 Stateの無効化設定を次の環境で実施してみます。はたしてこれで問題は解決するのか、しばらく様子見です。 |項目|内容| |---|---| |Model|Lenovo ThinkCentre M75q Gen2 (11JJCTO1WW)| |BIOS Revision Level|M3CKT32A (2022-04-04時点での最新版)| |CPU|AMD Ryzen 7 PRO 4750GE| |OS|Ubuntu 20.04.4 LTS| |uname -a|`Linux m75q2 5.13.0-39-generic #44~20.04.1-Ubuntu SMP Thu Mar 24 16:43:35 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux`| ##### C6 Stateの無効化手順 〜一時的版〜 1. M75q Gen2のBIOSで「Secure Boot」を`Enable`→`Disable`へ変更する (`Enable`のままだと後述の`msr`モジュールが読み込まれない) 2. `sudo modprobe msr`してみてエラーが出ないことを確認する 3. `sudo vim /etc/modules`して最終行に`msr`を書き加える ``` $ cat /etc/modules ### /etc/modules: kernel modules to load at boot time. ### ### This file contains the names of kernel modules that should be loaded ### at boot time, one per line. Lines beginning with "#" are ignored. msr ``` 4. Ubuntuを再起動する 5. 再起動後に`msr`モジュールが読み込まれていることを確認する ``` $ lsmod | grep msr intel_rapl_msr 20480 0 intel_rapl_common 24576 1 intel_rapl_msr msr 16384 0 ``` 6. GitHubの [r4m0n/ZenStates\-Linux: Dynamically edit AMD Ryzen processor P\-States](https://github.com/r4m0n/ZenStates-Linux) を手元に`git clone`する 7. 次の操作でC6 Stateが`Disable`へ変更できることを確認する ``` $ sudo python3 ./zenstates.py -l P0 - Enabled - FID = 7C - DID = 8 - VID = 35 - Ratio = 31.00 - vCore = 1.21875 P1 - Enabled - FID = 66 - DID = C - VID = 60 - Ratio = 17.00 - vCore = 0.95000 P2 - Enabled - FID = 62 - DID = E - VID = 66 - Ratio = 14.00 - vCore = 0.91250 P3 - Disabled P4 - Disabled P5 - Disabled P6 - Disabled P7 - Disabled C6 State - Package - Enabled C6 State - Core - Enabled $ sudo python3 ./zenstates.py --c6-disable Disabling C6 state $ sudo python3 ./zenstates.py -l P0 - Enabled - FID = 7C - DID = 8 - VID = 35 - Ratio = 31.00 - vCore = 1.21875 P1 - Enabled - FID = 66 - DID = C - VID = 60 - Ratio = 17.00 - vCore = 0.95000 P2 - Enabled - FID = 62 - DID = E - VID = 66 - Ratio = 14.00 - vCore = 0.91250 P3 - Disabled P4 - Disabled P5 - Disabled P6 - Disabled P7 - Disabled C6 State - Package - Disabled C6 State - Core - Disabled ``` ##### C6 Stateの無効化手順 〜サービス化版〜 1. 上記の「一時的版」が一通り正常に行える状態にする 2. `zenstates.py`を`/usr/local/bin/`にcpしてownerなどを設定する ``` sudo cp -a ./zenstates.py /usr/local/bin/ sudo chown root.root /usr/local/bin/zenstates.py sudo chmod 755 /usr/local/bin/zenstates.py ``` 3. `sudo vim /etc/systemd/system/disable-c6.service`で次の内容のサービスファイルを作成する ``` [Unit] Description=Ryzen Disable C6 DefaultDependencies=no After=sysinit.target local-fs.target suspend.target hibernate.target Before=basic.target [Service] Type=oneshot ExecStart=python3 /usr/local/bin/zenstates.py --c6-disable [Install] WantedBy=basic.target suspend.target hibernate.target ### Ref: https://gure-it-memo.com/amd-linux/#disable-c6 ``` 4. 次の操作でサービス`disable-c6.service`を有効化する ``` sudo systemctl daemon-reload sudo systemctl enable disable-c6.service ``` 5. Ubuntuを再起動した後、C6 Stateが`Disable`に変更されていることを確認する ``` sudo python3 /usr/local/bin/zenstates.py -l ``` ##### 追記 (AMDGPU firmwareも最新化) [2022-04-06] C6 Stateの無効化を先日行った環境にて、PCを数十分使っていない間に「BUG: soft lockup - CPU#NN stuck」がまた発生してしまいました。 となると、応急処置としてC6 Stateの無効化だけでは駄目なのかもしれないので、さらなる試行錯誤として で紹介されているAMDGPU firmwareの最新化も行ってみます (もはや御呪い)。具体的な手順は次の通りです。 ``` cd ~/tmp/ git clone --depth=1 https://kernel.googlesource.com/pub/scm/linux/kernel/git/firmware/linux-firmware.git ### 内容更新されるファイルがどれぐらいあるかを概算 rsync -n -av ./linux-firmware/amdgpu/* /lib/firmware/amdgpu/ | wc -l 482 # コピーされるファイル数はこれぐらい (そもそもタイムスタンプが違っている) rsync -n -av --checksum ./linux-firmware/amdgpu/* /lib/firmware/amdgpu/ | wc -l 178 # 実際に内容更新されるファイル数はこれぐらい ### 念のため上書き前にファイルを手元にバックアップ tar czvf ./amdgpu_`date +'%Y%m%d'`.tar.gz /lib/firmware/amdgpu/ ### ファイルコピーとinitramfsの更新を行った後に、再起動 sudo rsync -av ./linux-firmware/amdgpu/* /lib/firmware/amdgpu/ sudo update-initramfs -k all -u -v sudo reboot ``` #### 参考リンク - [AMDとLinuxの相性が悪い問題 – ぐれメモ](https://gure-it-memo.com/amd-linux/) - [RyzenでProxmoxVEを組むとフリーズする件 \- Qiita](https://qiita.com/disksystem/items/27bc42ab7e2767a406e4) --- ### 仮想環境のゲストOS間でシリアル通信はできるのか実験 (VirtualBox, Parallels Desktop for Mac) - 2022-03-20 URL: https://remoteroom.jp/diary/2022-03-20/ #### シリアル通信どこでも開発 データ送受信をシリアルポートで行うLinux上のプログラムの開発が、カフェでもどこでも行えるように、仮想環境のゲストOS間でシリアル通信はできるのかを実験しました。結論としては通信可能です。 今回は「Ubuntu (x86_64) 上のVirtualBox」と「macOS (M1) 上のParallels Desktop for Mac」による2つの仮想環境を用意し、同じ仮想ホスト上の仮想マシン2台の間でシリアル通信を行っています。仮想マシンは1台にして自身のCOM1とCOM2を通信させるという構成も、試してはいませんが同様に可能だろうと思います。 ##### Case-1: VirtualBox ホスト環境がx86_64 (amd64アーキテクチャ) であれば、仮想環境の構築に私は[VirtualBox](https://www.virtualbox.org/)をよく用います。シリアルポートに関する公式ドキュメントは [Oracle® VM VirtualBox User Manual for Release 6.0 > 3\.10\. Serial Ports](https://docs.oracle.com/en/virtualization/virtualbox/6.0/user/serialports.html) です。 以下のように設定すると、VirtualBoxホスト上の通信ポート (例えば1234/tcp) を介して2台の仮想マシンのCOM1同士が接続されてシリアル通信できます。シリアルポート1はゲストOS (Debian GNU/Linux) から`/dev/ttyS0`として見えます。 1. 仮想マシンAとBの [設定] > [シリアルポート] > [ポート1] を下記画像の内容にそれぞれ設定する 2. 先に仮想マシンAを起動して、次に仮想マシンBを起動する 3. ページ下部の「[【共通手順】ゲストOS間のシリアル通信の確認方法](#%E5%85%B1%E9%80%9A%E6%89%8B%E9%A0%86%E3%82%B2%E3%82%B9%E3%83%88os%E9%96%93%E3%81%AE%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E9%80%9A%E4%BF%A1%E3%81%AE%E7%A2%BA%E8%AA%8D%E6%96%B9%E6%B3%95)」を実施する ###### 仮想マシンA > シリアルポート > ポート1 |項目|内容| |---|---| |シリアルポートを有効化|ON (チェックする)| |ポートモード|TCP| |存在するパイプ/ソケットに接続|OFF (チェックしない)| |パス/アドレス|例えば1234| ###### 仮想マシンB > シリアルポート > ポート1 |項目|内容| |---|---| |シリアルポートを有効化|ON (チェックする)| |ポートモード|TCP| |存在するパイプ/ソケットに接続|ON (チェックする)| |パス/アドレス|localhost:1234| ##### Case-2: macOS (M1) x Parallels Desktop for Mac ホスト環境がmacOSでCPUがM1系のarm64アーキテクチャ (aarch64) の場合は、馴染みのVirtualBoxが利用できません。そこでM1 Macに対応した[Parallels Desktop for Mac](https://www.parallels.com/jp/products/desktop/)を用意します。シリアルポートに関する公式ドキュメントは [Parallels Desktop Help](https://download.parallels.com/desktop/v17/docs/ja.lproj/) > [シリアルポート設定](https://download.parallels.com/desktop/v17/docs/ja.lproj/43143.htm) です。 以下のように設定すると、Parallels Desktopホストのソケット (UNIXドメインソケット) を介して2台の仮想マシンがシリアル通信できます。シリアルポート2はゲストOS (Debian GNU/Linux) から`/dev/ttyAMA1`として見えます。なお、UNIXドメインソケットとしての特殊なファイルは、macOS環境の一時ファイル`$TMPDIR/ソケット名`として生成されるようです。 1. 仮想マシンAとBの [ハードウェア] でシリアルポートを下記画像の内容にそれぞれ設定する 2. 先に仮想マシンAを起動して、次に仮想マシンBを起動する 3. ページ下部の「[【共通手順】ゲストOS間のシリアル通信の確認方法](#%E5%85%B1%E9%80%9A%E6%89%8B%E9%A0%86%E3%82%B2%E3%82%B9%E3%83%88os%E9%96%93%E3%81%AE%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E9%80%9A%E4%BF%A1%E3%81%AE%E7%A2%BA%E8%AA%8D%E6%96%B9%E6%B3%95)」を実施する ###### 仮想マシンA ###### シリアルポート1 シリアルポート1を「+」を押して追加し、設定します。 |項目|内容| |---|---| |ソース|切断済み| |モード|(何でも良い)| - 追加はするが「切断済み」とする理由: Parallels DesktopゲストOSのシリアルポート1は、Debian環境においてはログインプロンプトが表示されるシリアルコンソールにデフォルトで割り当てられ、その状態だと任意のシリアル通信には使用できません。そこで、シリアルポート1をDebian環境のシリアルコンソールになってもらうだけの捨て駒として追加します。 ###### シリアルポート2 続いてシリアルポート2を「+」を押して追加し、設定します。 |項目|内容| |---|---| |ソース|新規作成するソケット (例: socket_serial2)| |モード|サーバ| ###### 仮想マシンB ###### シリアルポート1 シリアルポート1を「+」を押して追加し、設定します。 |項目|内容| |---|---| |ソース|切断済み| |モード|(何でも良い)| ###### シリアルポート2 続いてシリアルポート2を「+」を押して追加し、設定します。 |項目|内容| |---|---| |ソース|仮想マシンA > シリアルポート2 と同じソースを選択| |モード|クライアント| #### 【共通手順】ゲストOS間のシリアル通信の確認方法 仮想マシン2台のOSとして「Debian GNU/Linux 11 (bullseye)」を想定します。 ``` $ 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/" ``` 1. 仮想マシンA,B) 最低限のパッケージ導入と初期ユーザに関するグループ設定を行う ``` su - apt install sudo setserial minicom adduser ユーザ名 sudo adduser ユーザ名 dialout exit exit # 仮想マシンから完全にログアウトして、 ssh -l ユーザ名 仮想マシン # もう一度ログインする ``` 2. 仮想マシンA,B) `/dev/ttyS*`または`/dev/ttyAMA*`の存在を確認する ``` ### VirtualBoxゲストの場合 $ ls -al /dev/ttyS* crw-rw---- 1 root dialout 4, 64 Mar 19 20:36 /dev/ttyS0 crw-rw---- 1 root dialout 4, 65 Mar 19 20:36 /dev/ttyS1 crw-rw---- 1 root dialout 4, 66 Mar 19 20:36 /dev/ttyS2 crw-rw---- 1 root dialout 4, 67 Mar 19 20:36 /dev/ttyS3 $ setserial -g /dev/ttyS[0123] /dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4 # 認識されてそう /dev/ttyS1, UART: unknown, Port: 0x02f8, IRQ: 3 /dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4 /dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3 ### Parallels Desktopゲストの場合 $ ls -al /dev/ttyAMA* crw--w---- 1 root tty 204, 64 Mar 20 21:12 /dev/ttyAMA0 crw-rw---- 1 root dialout 204, 65 Mar 20 21:12 /dev/ttyAMA1 $ setserial -g /dev/ttyAMA[0123] /dev/ttyAMA0: Permission denied /dev/ttyAMA1, UART: undefined, Port: 0x0000, IRQ: 14 # 認識されてそう ``` 3. 仮想マシンA,B) 両方でターミナルエミュレータ`minicom`を次のように起動する (引数に`-H`を付けると出力表示を16進表記にできる) ``` ### VirtualBoxゲストの場合 minicom -b 9600 -D /dev/ttyS0 ### Parallels Desktopゲストの場合 minicom -b 9600 -D /dev/ttyAMA1 ``` 4. `minicom`内で設定変更するキー操作の例: - `CTRL-A -> Z -> E`: Local echo (echo back) のトグル - `CTRL-A -> Z -> A`: Add linefeed のトグル 5. シリアル通信の動作確認として、仮想マシンAのminicom画面に文字を入力すると仮想マシンBのminicom画面にも文字が表示されること、かつその逆も行えることを確認する 6. 仮想マシンA,B) minicom画面で`CTRL-A -> X -> Enter`を入力して終了する ##### ゲストOS間でシリアル通信してみた様子 (動画) #### 感想 VirtualBoxのゲストOS間でシリアル通信させる方法はすぐにわかったものの、Parallels Desktop for Macのほうが難産でした。公式情報の通りに仮想デバイスの設定は行っているはずなのに、ゲストOSでデバイスを認識できているのかどうかがわからず、悩むこと一日以上。まさかシリアルポートが今回のゲストOS (Debian GNU/Linux) では`/dev/ttyS*`ではなく`/dev/ttyAMA*`で見えているとは、気付きませんでした。 今回の試みは、実機やRS-232Cケーブルなどを傍らに置かずにシリアル通信のプログラムを書くのは無謀なことかも知れないですが、「ある程度は仮想環境でいけるんじゃね?」という思いつきの概念実証です。仮想環境としてはVirtualBoxとParallels Desktop for Macの他に、[UTM](https://github.com/utmapp/UTM) (QEMUベース) も調査してみたものの、これはシリアルポートの設定方法がまだいまいち分かっていません。 #### 追記 [2022-03-23] `socat - Multipurpose relay (SOcket CAT)`というコマンドの存在を初めて知りました。manでは次のように、双方向のバイトストリームを繋いでデータ転送を実現するユーティリティだと説明されています。様々な入出力に繋ぐことで便利に使えそうです。 > Socat is a command line based utility that establishes two bidirectional byte streams and > transfers data between them. Because the streams can be constructed from a large set of > different types of data sinks and sources (see address types), and because lots of address > options may be applied to the streams, socat can be used for many different purposes. 実際に試してみたところ、例えば本記事の[Case-1: VirtualBox](#case-1-virtualbox)で用意した仮想マシンAに関して仮想ホスト上て次の`socat`コマンドを実行すると、仮想ホストの標準入力と、(VirtualBoxによって仮想ホストの1234/tcpに接続されている) 仮想マシンAの`/dev/ttyS0`とが繋がって通信できます。 ``` $ socat -v -d -d - tcp:127.0.0.1:1234 ``` ちなみに、`socat`を知った今根本的に考え直してみますと、本記事Case-1で扱ったシリアルポートのTCPへの変換と、本記事Case-2で扱ったシリアルポートのソケットへの変換は、そもそもVirtualBoxやParallels Desktop for Macの機能に頼らず、`socat`だけで実現できるものと思われます。 ##### 参考リンク - [socatコマンドの使い方: UNIX/Linuxの部屋](http://x68000.q-e-d.net/~68user/unix/pickup?socat) - [socatで仮想シリアルポートを作る \- Qiita](https://qiita.com/uhey22e/items/dc41d7fa1075970e66a1) --- ### 静音化リングを使ってキーボード打鍵音を小さくしてみた - 2022-03-13 URL: https://remoteroom.jp/diary/2022-03-13/ #### “かちゃかちゃたーん” キーボードの打鍵音を低減できる「静音化リング」なんて小物があることを職場で知り、私も自分のキーボードに対して適用してみました。なお、今回対象のキーボードはキースイッチに「Cherry MX軸やKaihua等互換軸」を使用しているものに限られます。 ##### 用意した物 |品名|価格(税込)|備考| |---|--:|---| |[Scythe サイズ](https://www.scythe.co.jp/) [Cherry / MX軸対応 静音化リング (MXORDP)](https://www.scythe.co.jp/product/gaming-accessories/mxordp)|1,300円|ヨドバシ.com| |[ダイヤテック](https://www.diatec.co.jp/) [FILCO KeyPuller (FKP01)](https://www.diatec.co.jp/products/det.php?prod_c=706)|503円|ヨドバシ.com| 静音化に挑戦するキーボードは、MX茶軸の「[FILCO Majestouch Tenkeyless (FKBN87M/EB)](https://www.diatec.co.jp/products/det.php?prod_c=569)」です。自宅にて長く愛用しており、キートップに印刷された文字が見易いところがお気に入りですが、メカニカルキーボードとしての“かちゃかちゃたーん”音が大きいことは否めません。(下記リンクは後継のFKBN87M/EB2) #### 作業中の様子 (写真) 写真にホコリまで写ってしまっているのはご了承ください。キートップ引抜工具を使って、キートップを外します。 キートップの裏側の軸に、柔らかい静音化リングをはめて押し込みます。そしてキートップを元通りに取り付けます。 では気合を入れて、全てのキーを外して作業を進めていきます。全体の作業時間としては1~2時間と考えておくのが妥当です。ついでのキーボード掃除も含めて……。 また、[KeyPuller 製品情報ページ](https://www.diatec.co.jp/products/det.php?prod_c=706)に次のように記述されているように、**大型キーの取り外しには特に注意が必要**です。同ページの「スタビライザーが使用されているキーを外す方法」をよく確認しておくと安心。 > Majestouchシリーズなどの弊社製メカニカルキーボードには大型キーにスタビライザー(針金状の部品)を使用しています。キートップを外す際、スタビライザーの治具を破損しないようにご注意ください。 大型キーとは、実際にキーを外している次の写真ですと、白い部品と針金が見える「Enterキー」等が該当し、このようなキーは取り付けの際にもスタビライザーを破壊せず、元通りに確実に戻す必要があります。 ##### 打鍵音の比較 (動画) 静音化リングの有無による打鍵音の比較のため撮ってみた次の動画では、静音化リングを取り付けた「G」と取り付けていない「H」を連打しています。音量が下がる方向へ、打鍵音が変化していることが分かります。 #### 感想 静音化リングを施工したキーボードをしばらく使ってみた感想は次の通り。 - 打鍵音の音が小さくなり、感覚として音質がやさしい方向へ変わる - 打鍵時の底付きの感触が少し柔らかくなる - 打鍵のストロークの変化は感じない 私としては基本的にデメリット無しという結果になりました。キーの数に比例する作業時間を要しますが予想通りの効果は得られる改造だと思いますので、Cherry MX軸などのキーボードを利用中で興味を持った方には静音化リングの施工お勧めします。 ##### おまけ: REALFORCE静音モデルの構造 もともと「静音モデル」を謳っているキーボードの構造には、どのような工夫がされているのかも気になりました。 そこで予備機の「[REALFORCE 87UB-S SE170S (発売終了)](https://archisite.co.jp/products/realforce/realforce87ub_se170s/)」のキートップを外して確認してみたところ、スイッチの構造が全く異なっていました。キートップの部品と当たる部分がスイッチの丸軸以外に無さそうで、スイッチの感触も柔らかくて底付きの音がほとんどしません。 --- ### 骨伝導イヤホン「Shokz OpenRun Pro」を簡単レビュー - 2022-03-08 URL: https://remoteroom.jp/diary/2022-03-08/ #### どう良くなっているのかな [クラウドファンディング](https://greenfunding.jp/focal/projects/5541)していた骨伝導イヤホン「Shokz OpenRun Pro」が2月中旬に届いていたものの、忙しかったりで触れられず。やっとこさ開封したので簡単にご紹介です。クラファンに続いて一般販売が始まっており、Shokzブランドとしての製品情報は次のページです。バッテリー持続時間「最大10時間」などの特徴が強くアピールされています。 - [Shokz \(旧AfterShokz\) OpenRun Pro ハイエンドモデル 骨伝導イヤホン – ShokzJP](https://jp.shokz.com/products/openrun-pro) なお、これまで私が試聴したことがある骨伝導イヤホンは、家族が使っている次のOPENMOVEです。この機種とOpenRun Proを、使い心地や音質に関して少し比較します。 - [Shokz \(旧AfterShokz\) OPENMOVE エントリーモデル 骨伝導イヤホン – ShokzJP](https://jp.shokz.com/products/bone-conduction-headphone-openmove) #### 写真で紹介 ##### 開封の儀 外箱と内容物。IP55という防塵防水性能によりスポーツ中に使用できることを想像させるパッケージです。ごっついハードケースも付属していますが、私自身はOpenRun Pro本体を裸のまま持ち運ぶつもりです。 OpenRun Pro本体。バンド部分は形状記憶しつつ曲がってくれます。 専用の充電ケーブルは長さ約60cm。末端はUSB Type-Aです。 充電端子の部分を拡大。充電ケーブル側に磁石が内蔵されていて、MacのMagSafeのように、端子に近づけると勝手に寄ってくっついてくれるので便利。 OPENMOVE (左) とOpenRun Pro (右) の形状を比較。右がより小型であることが分かります。 ##### Shokz アプリ 『Shokz アプリ』 ([iOS版](https://apps.apple.com/sg/app/shokz/id1596854072), [Android版](https://play.google.com/store/apps/details?id=cn.com.aftershokz.app)) をスマホにインストールして、スマホとOpenRun ProをBluetooth接続します。 このアプリでは、本体ファームウェアの更新、イコライザ・モードの変更などができます。EQに関して私の好みは音源によらず「スタンダードモード」でした。 #### 感想・まとめ 「OpenRun Pro」開封当日の感想は次の通りです。 - 装着感は軽いし顔の動きにしっかり付いてくるので落ちることはない - 耳にかかる部分の形はOPENMOVEと比べて細くなっていて良い。メガネとの併用は問題ない。ちなみにご時世的な話として、OpenRun Proを先に装着しておいてから耳掛けマスクを脱着するのは容易 (当然ではあるが、逆の順だとマスクのひもが絡んで脱着できない) - OPENMOVEと比べると音質には自然さが増している。Hi-Fiというわけではないから、音域的には人間の声が中心のポッドキャストやトーク番組に向いている。ステレオ感はなにも問題ない - 振動機構は小さいのにぶるぶる大きく震えるのは機械として“萌える”。物の質感も高く、技術を詰め込んであるガジェット感は強い また、別の日に仕事のオンライン会議にて使用してみました。OpenRun Proにはノイズキャンセル機能付きマイクも内蔵されていますが、この会議では打ち合わせの内容をしっかり聴くことがメイン。耳が塞がれないので、自分の周囲の音は鼓膜経由でダイレクトに伺いながら、オンライン会議の様子を頭の中に定位させることができました。いわば「自然な音響的AR」が可能なのは、骨伝導イヤホンのおもしろいところ。 というわけでこの骨伝導イヤホン、充電ケーブルの利便性を含めて使い勝手は良いですし、装着時に蒸れるところはないわけで長時間でも問題なさそう。周辺環境の音と再生音を隔たりなく聴き取る用途には最適なもののひとつだと思います。 ##### 追記 (カバンの中では電源ボタン注意) [2022-04-05] > ごっついハードケースも付属していますが、私自身はOpenRun Pro本体を裸のまま持ち運ぶつもりです。 上にこのように書きましたが、OpenRun Pro本体を裸のまま扱うと弊害があることもその後分かりました。 OpenRun Pro本体をそのままカバンに押し込んで入れておくと、右耳部分の電源ボタンが他の物に押されて、勝手に電源がONになっていることが数回ありました。そうするとOpenRun Proがスマホと知らぬ間にBluetooth接続していたりして、電力の消耗に繋がります。このような問題を防ぐためには、ハードケースに入れて持ち歩くほうが無難でしょう。 --- ### デジタルサイネージをラズパイで作る「Screenly」の導入方法 - 2022-03-06 URL: https://remoteroom.jp/diary/2022-03-06/ デジタルサイネージをRaspberry Piで実現する「Screenly」というソフトウェアを見つけました。実際にScreenlyのOpen Source Edition (OSE) を導入して試してみます。 - Screenly - Screenly Open Source Edition https://www.screenly.io/ose/ #### 手順1: OSの導入と最小限の設定 1. 次の物を用意します - ラズパイ本体 (今回は Raspberry Pi 3 Model B+ (メモリ1GB)) - micro SDカード - HDMI接続可能なディスプレイ - その他、USB電源やHDMIケーブル 2. [ラズパイ公式の手順](https://www.raspberrypi.com/software/)でmicro SDカードにRaspberry Pi OSのイメージを焼きます - 【重要】OSは「Raspberry Pi OS Lite」の、新しい「Bullseye」ではなく古い「Buster (Legacy)」を選択します (必然的に32-bitになります) 3. ラズパイへのSSHログインを可能とするため、イメージを焼いた後のmicro SDカードのbootパーティション直下に`ssh`という名前のファイルを置きます 4. 有線LAN接続したラズパイを上記micro SDカードで起動し、ラズパイへSSH or コンソールでログインします 5. OSの環境を確認してみると次の通り ``` pi@raspberrypi:~ $ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 10 (buster) Release: 10 Codename: buster pi@raspberrypi:~ $ uname -a Linux raspberrypi 5.10.63-v7+ #1496 SMP Wed Dec 1 15:58:11 GMT 2021 armv7l GNU/Linux pi@raspberrypi:~ $ free -m total used free shared buff/cache available Mem: 923 41 654 11 227 817 Swap: 99 0 99 ``` 6. 必要最小限の設定をします ``` sudo raspi-config nonint do_hostname 新ホスト名 sudo raspi-config nonint do_change_timezone Asia/Tokyo sudo raspi-config nonint do_wifi_country JP sudo raspi-config nonint do_overscan 1 sudo reboot # いったん再起動する ``` #### 手順2: Screenlyの導入と追加対応 1. ドキュメント https://github.com/Screenly/screenly-ose#installing-on-raspbianraspberry-pi-os に沿って、Screenly公式のインストーラを次のように実行します ``` bash <(curl -sL https://www.screenly.io/install-ose.sh) ### 入力を求められるのでそれぞれ次のように回答します Do you still want to continue? (y/N) => y Which version/branch of Screenly OSE would you like to install: => 1 You selected: Production Do you want Screenly OSE to manage your network? This is recommended for most users because this adds features to manage your network. (Y/n) => y Would you like to perform a full system upgrade as well? (y/N) => y ``` 2. インストーラの実行中に目立ったエラーがなく、途中で実行されるansible-playbookにもエラー (赤字) がなければたぶんOKです。再起動するかどうかの最後の質問にはいったん`n`と回答します ``` Installation completed. You need to reboot the system for the installation to complete. Would you like to reboot now? (y/N) => n ``` 3. Screenlyに日本語等の文字を表示させるためにNotoフォントを導入します ``` sudo apt install fonts-noto ``` 4. お好みでHDMI画面を回転させる設定を行います (参考: https://www.raspberrypi.com/documentation/computers/config_txt.html#display_hdmi_rotate ) ``` sudo vi /boot/config.txt # ファイルの最後に次の1行を追記 display_hdmi_rotate=3 # 表示を左に90度回転 ``` 5. ラズパイを再起動します ##### Screenlyの設定 1. ラズパイが起動すると上記のScreenly画面がディスプレイに表示されます 2. 表示されているURL (上記の画面では https://192.168.1.171/ ) をウェブブラウザで開くとScreenlyの管理画面に入り、各種設定が行えます。次のデモURLでは管理画面の操作感を試すことができます - 管理画面のデモURL: https://ose.demo.screenlyapp.com/ 3. 参考として、Screenlyを動作させるラズパイにtailscaleを導入すると、おおよその設置環境でリモート保守が可能になります - Download Tailscale > Raspberry Pi: https://tailscale.com/download/linux/rpi #### 感想 Screenly OSEを用いると、URL指定でのウェブページ (自動スクロールはせず固定)、画像、動画をコンテンツとして表示するデジタルサイネージを手早く構築できるとわかりました。 各コンテンツの表示時間や有効期間も定めることができ、学校や仕事場、店頭などに置くシンプルなサイネージとしてはなかなか有用です。また、ベースにはRaspberry Pi OSが動いているので、決まった時間にシャットダウンさせるなどLinux的な仕掛けも組み込めますし、応用幅は工夫次第だと思います。 #### 余談: 導入断念編 (Bullseye 64-bit環境では今は無理かも) Raspberry Pi 3 Model B+のOSとして「Raspberry Pi OS Lite **(64-bit)** Released: 2022-01-28」 (Legacyではない) を選択した場合に、Screenlyの導入は成功するのかどうか。 私の場合は次のように途中で`omxplayer`が導入できない問題にぶち当たり、解決方法がわからず導入を断念しました。 ##### 試行錯誤した手順 1. 「Raspberry Pi OS Lite (64-bit)」導入後の各種情報は次の通り ``` pi@raspberrypi:~ $ lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 11 (bullseye) Release: 11 Codename: bullseye pi@raspberrypi:~ $ uname -a Linux raspberrypi 5.10.92-v8+ #1514 SMP PREEMPT Mon Jan 17 17:39:38 GMT 2022 aarch64 GNU/Linux ``` 2. Screenlyインストーラの実行前に、自分なりのトライアンドエラーで導いた、インストーラ実行に必要な次のパッケージをあらかじめ導入しておきます ``` sudo apt install python3-pip git python-dev-is-python3 whois ``` 3. 同様の意図で、dockerもあらかじめ導入しておきます - Install Docker Engine on Debian | Docker Documentation > Install using the convenience script ``` curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh ``` 4. Screenlyインストーラを実行し、選択肢は次のようにします ``` bash <(curl -sL https://www.screenly.io/install-ose.sh) Do you still want to continue? (y/N) => y Which version/branch of Screenly OSE would you like to install: => 1 You selected: Production Do you want Screenly OSE to manage your network? This is recommended for most users because this adds features to manage your network. (Y/n) => y Would you like to perform a full system upgrade as well? (y/N) => y ``` 5. しかし、Screenlyインストーラ実行途中に次のansibleエラー (表示が赤色) が発生します。omxplayerのパッケージが無いようです ``` TASK [system : Install Screenly dependencies] ****************************************************** fatal: [localhost]: FAILED! => {"changed": false, "msg": "No package matching 'omxplayer' is available"} ``` 6. omxplayerの代用になるかもと思い、omxplayer-piをたとえばsnapで導入しようとするとそもそもarm64版は無いとわかります - [Install omxplayer\-pi on Debian using the Snap Store \| Snapcraft](https://snapcraft.io/install/omxplayer-pi/debian) 7. ScreenlyのBullseye 64-bit環境への導入は残念ながら断念 #### 参考リンク - [Screenlyを使ってRaspberryPiをサイネージ化!縦向き動画もサイネージ化可能! \- uepon日々の備忘録](https://uepon.hatenadiary.com/entry/2021/03/23/224230) - [Raspberry Pi 4B \+ Screenly で日本語対応 \- yamk blog](https://blog.yamk.net/posts/20210207-raspi-screenly/) --- ### 【読んだ本】 図解入門業界研究 最新ホテル業界の動向とカラクリがよ~くわかる本 [第4版] - 2022-03-01 URL: https://remoteroom.jp/medialog/2022-03-01_book-4798061891/ 本屋をぶらついていたとき、現業務に必要な情報を仕入れるのに良さそうねと本書を手に取って、そのまま購入。 ホテル業界の一般的な組織構造やコスト構造をざっと知る意味で、本書は有用に思った。前半は、このコロナ禍における宿泊客の傾向やホテル業界の最新動向をレポートしている。後半は、ホテルの発展史や経営に関する基礎知識。日本ではバブル期を経てたとえば宴会場が必ずしも設けられなくなる今日に至るまで、ホテルのタイプが二極化してきた経緯など知ることができる。コロナ後の“ニューノーマル”に向けた、業界の方向性も垣間見える。 --- ### 【読んだ本】 サーキット・スイッチャー - 2022-02-19 URL: https://remoteroom.jp/medialog/2022-02-19_book-b09q884vkk/ 車の自動運転レベルが最高の5を達成して「完全自動運転」となるとき、乗員が車外を見るための窓は無くても構わなくなる。車が、集中のための仕事部屋にも、介護を要する方が旅行する空間にもなるような未来の到来は、数年先というわけではなかろうが、肌感覚としてはとくに不思議ではなくなった。 SFである本作は、自動運転のアルゴリズムに人命を委ねつつある社会へ、わかりやすい一つの問いかけをしている。この問いかけに対する万人にとっての正解はまだないかもしれない。モビリティの進化はどうなっていくのか興味惹かれる私にとって、サーバ管理をやっているような人には現実味ある技術が登場する点も含め、本作はめちゃくちゃ面白かった。 #### 参考リンク - [AIG総研コラム#14 いま改めて考える「自動運転車のトロッコ問題」 (PDF)](https://www-510.aig.co.jp/assets/documents/institute/column/institute-column-014.pdf) --- ### MacBook M1のサーマルパッド改造とベンチマーク - 2022-02-12 URL: https://remoteroom.jp/diary/2022-02-12/ ⚠️ 本改造には、メーカー保証が無効化される可能性があります。また、筐体の熱伝導の状態を変えてしまうため、内蔵バッテリーの温度管理にも悪影響が及ぶ恐れがあります。くれぐれも御安全に! #### 熱を積極的に逃がそう MacBook Air M1の裏面やキーボード面は稼働中にほとんど熱くなりません。これは、M1チップ自体が低消費電力であることと、CPU等の熱を外側へ積極的に伝導させていない筐体設計による恩恵であり、快適な使い勝手を生みだしていますが、巷の情報によると発熱を抑制するためのCPU速度制限もかなり効いているとのこと。したがって逆にCPU速度制限を極力させないためには、筐体を通じて外へ熱を逃がすのが一つの手であり……。 MacBook Air M1の筐体内にサーマルパッド (熱伝導シート) を挟み込む改造をします。次のようなサーマルパッドと、M1を開封するための星形「P5」のドライバーが必要です。 |品名|価格(税込)|備考| |---|--:|---| |[Thermalright ODYSSEY THERMAL PAD 120x120x1.5mm](http://www.thermalright.com/product/odyssey-thermal-pad-120x120x1-5mm-%e5%af%bc%e7%83%ad%e7%a1%85%e8%83%b6%e5%9e%ab/)|3,492円|Amazon.co.jp| M1の裏蓋のネジの扱いはくれぐれも慎重にしなければなりません。そもそも開封することでメーカー保証は諦めているわけですが、もしネジ穴を丸めてしまうと、物理的にも心理的にも相当なダメージとなります。(>_<) #### 作業の様子 (写真) MacBook M1開封の図。Macの中はミニチュアの都市のようでほんとかっこいい。 120mm四方のサーマルパッドをどのように切り取って使えばよいのか、絵を描いて検討している図。 実際に貼ってみた図。写真左側の四角いグレーのシート部分は厚さ約3mm (1.5mmの2枚重ね)、写真右側のグレーのシート部分は厚さ1.5mmとしています。 #### ベンチマーク結果 改造前後でどのような違いが出るのかを確認するため、[Cinebench R23](https://www.maxon.net/ja/cinebench)にてベンチマークを取ってみました。測定条件は次の通り。 - 測定場所: 室温16〜17度の部屋内の木製の机の上 - ベンチマーク実行時間: 10分間 |条件|CPU (Multi Core) pts|変化| |---|---:|---:| |MacBook Air M1 (2020, 8-Core GPU) 無改造|7,312|---| |MacBook Air M1 (2020, 8-Core GPU) サーマルパッド改造済|7,761|+6.1%| サーマルパッド改造の結果、Cinebench R23のスコアが約6%向上しました。改造した後で気付いたのですが、巷の改造記事ではベンチマークをより長い時間回しているようでした。私の実験は比較的冷えた環境でかつ短時間での実行だったので、無改造でも筐体の放熱が間に合う環境だった可能性もあります。本結果はあくまでひとつの参考ということで。 #### 参考リンク - [M1 MacBook Airが簡単な改造で13インチMacBook Proと同等の性能に。「サーマルパッドを入れる」だけ \- Engadget 日本版](https://japanese.engadget.com/simple-thermal-mod-m1-macbookair-fast-as-pro-043052900.html) --- ### 【読んだ本】 予測不能の時代: データが明かす新たな生き方、企業、そして幸せ - 2022-02-06 URL: https://remoteroom.jp/medialog/2022-02-06_book-4794225113/ 21世紀が予測不能の時代であることを示し、過去をなぞるような行動規範では時代に対応できないため、元来の (=上位の) 目的を踏まえつつ現状を俯瞰するような視座が必要であると、本書は全編で主張する。 私が本書を力強く感じるのは、「幸せ」は人間行動をセンシングすることで測定でき、その幸せは、いわゆるパフォーマンスを定義する客観的指標と強い正の相関があることを明らかにしている点だ。この部分は、前作の『データの見えざる手: ウエアラブルセンサが明かす人間・組織・社会の法則』から研究が進んだものになっているのだろう。 「幸せ」を組織でマネジメントする方法や、AIは過去にないパターンを発見するために用いるものという見解、富の格差の要因をエントロピーで説明するところなどなど、大変に刺激が多い。最後には予測不能と向き合う最古の方法として『易』が紹介されていて、それを実践するアプリを個人的に作ろうかとも思った。とにかく本書は悟りに満ちていて一度の通読では消化できた気がしない。もう一度読む必要がある。 #### 参考リンク - [「予測不能な時代」に求められる新たな処方箋とは 【第1回】「予測不能な時代」に、いままでの常識を捨てるべき \- Executive Foresight Online:日立](https://www.foresight.ext.hitachi.co.jp/_ct/17524076) - [【読んだ本】 データの見えざる手: ウエアラブルセンサが明かす人間・組織・社会の法則 \[2014-11-25\]]() --- ### USBスティック型CO2濃度測定器「MATECH AirChecker」の簡単レビュー&分解写真 - 2022-01-30 URL: https://remoteroom.jp/diary/2022-01-30/ #### 持ち運べるCO2センサーを使ってみたい [ラズパイを使って自宅のCO2 (二酸化炭素) 濃度を測定して換気を自動制御]()している今日この頃。次は二酸化炭素濃度の測定器を持ち運んでみたくなっており、それに適したお手軽な製品が欲しいと思っていたところ、次のプレスリリースを見て「AirChecker」を衝動買いしました。NDIR式の二酸化炭素センサーを搭載しつつも安価であり、モバイルバッテリーでUSB給電しながら持ち運べそうです。 - [【MATECH】コンパクトサイズのUSBスティックで、室内環境が一目で分かる二酸化炭素濃度計「AirChecker」を販売開始|MATECH株式会社のプレスリリース](https://prtimes.jp/main/html/rd/p/000000033.000037038.html) |品名|価格(税込)|備考| |---|--:|---| |[MATECH](https://matech-jp.com/) AirChecker (M2205AC)|4,980円|期間限定の20%OFFクーポンを適用して3,984円| #### 開封の儀と動作確認 AirChecker外箱の側面には虹色のセキュリティシールが貼られていて、製品のシリアル番号はそのグレー箇所に隠され、コインでスクラッチして (剥いて) から確認するようになっています。そして、シリアル番号をMATECH公式サイトの次のページに入力することで正規品かどうかを判別できる仕組みがあります。なお、同サイトにて製品登録を行うことで保証期間が1年プラスされ、計3年にすることができるようです。 - [シリアル番号チェッカー \| MATECH クリエイティブブランド](https://matech-jp.com/authentic/) 内容物はAirChecker本体と取扱説明書。キレイなパッケージです。 AirCheckerをモバイルバッテリーに直接挿すと“タラララ♪”という音とともに起動して、数十秒後に実際の測定が開始されます。二酸化炭素濃度表示の更新は1秒間隔。どこでもUSB Type-Aの口に挿すだけの、この手軽さはとても良いです。 AirCheckerを電車内に持ち込んで二酸化炭素濃度を見ることも容易でした。 ##### キャリブレーションの方法 二酸化炭素センサーによくあるキャリブレーションをAirCheckerではどう行うのか、AirCheckerの取扱説明書から抜粋します。 > [1] 電源に接続したまま、野外または空気のきれいな場所に15分間放置する > > [2] キャリブレーションボタンを5秒間長押しする 大気中 (野外) の二酸化炭素の濃度はおよそどこでも約400ppmであることを利用し、1を行うことでAirChecker周辺の二酸化炭素濃度が「400ppm」だと見なせる状態にしてから、2を実施し、ブザーが鳴ったらキャリブレーション完了という流れです。キャリブレーションボタンは、AirChecker本体の尖っているほうの先端にある穴の奥にあり、ピンを挿すことで押せます。 #### 分解写真 AirCheckerの分解は、マイナスドライバーなどの先端が細いものを用いて、本体の白い部分と黒いカバーとをこじ開けると可能でした。爪は合計8箇所あり、位置は写真の通りです。 文字の表示自体は明るめ。光量を黒色のカバーで抑えている構造です。 文字表示の反対側の基板全体。NDIR (非分散型赤外線吸収法) 式二酸化炭素センサーは「CUBIC」と書かれた銀色ケースの部分。 二酸化炭素センサーのケースの裏面。「CM1106S-H?」がセンサーの実際の型番と思われますが、末尾の文字はうまく読み取れない。 真ん中のチップには「STM32F」の表記が。右側の丸い部品はブザーで、蓋は外せるようになっています。 #### まとめと感想 ##### 手軽さは最高 AirCheckerの、USBスティック型という形状と比較的安価という点にはかなりの競争力があります。車のダッシュボードに貼って運転中の二酸化炭素濃度を測定してみたいなど、目的に合うのであればとても“刺さる”、手に入れて間違いはない製品だと思います。 余談として、USB端子を備えていることからパソコンと通信できるんじゃないか?と一応考えたのですが、AirCheckerをLinuxマシンに接続した場合に`lsusb`には表示 (認識) されませんでした。もしかしたら有志がhackしてくれるかも、と期待しつつ。 ##### ブザーの音量を下げたい AirCheckerは、二酸化炭素濃度の状態を「非常に良い (〜600ppm)」「良い (600〜1,000ppm)」「悪い (1,000〜1,500ppm)」「非常に悪い (1,500ppm〜)」の4段階に分類した絵文字アイコン (😀,🙂,😐,🙁) を、濃度数値の下にカラー表示してくれます。これは愛嬌があって良いのですが、一方、濃度の状態が遷移した時や悪い状態が継続している時に必ず鳴るブザーの音には少し疑問を感じました。 ブザーの音は絞ってあって、一般的な機械の警告音とは比較にならない小さな音量です。しかし特に、悪い状態が継続している時のブザーは3分ごとに鳴り、実際に二酸化炭素濃度を「良い」領域まで下げる他に音を止める手段がありません。警報の意義としては正しいのですが、たとえばAirCheckerを寝室に設置するとブザー音は熟睡の邪魔かもしれません。他方、車内への設置だとブザー音は走行中の他のノイズに埋もれてあまり気にならないかもしれないと予想します。 デジタル置き時計が淡々と時刻を表示するのと同様に、二酸化炭素濃度の視覚的表示だけしてほしい場合もありうるので、ブザー音のOFF機能は欲しい……。私としてはAirCheckerの分解は非常に簡単だとわかったので、ブザーの音を小さくするために内部になにか物理的な工夫をしてみようかと目論んでいます。 #### 参考リンク - [CO2モニター製品比較表 – コロナ対策換気視覚化CO2モニター情報](https://covidco2jp.wordpress.com/2021/01/17/co2/) --- ### 後付けのスマートロックで玄関の鍵を「ひらけゴマ!」 - 2022-01-22 URL: https://remoteroom.jp/diary/2022-01-22/ #### 古典的な鍵のスマート化 多くが利用する某所の玄関ドアには、スマホで操作できるスマートロックが後付けされていました。鍵のスマート化は面白いと感じたし、後付けできるなら我が家もやってみよう!と思って下記の品を購入。送料まで含めて合計9,736円です。 |項目|価格(税込)| |----|---:| |スマートロック [SESAME 4](https://jp.candyhouse.co/products/sesame4)|5,478円| |SESAME 4用の [WiFiモジュール](https://jp.candyhouse.co/products/new-wifi)|3,278円| |送料|980円| スマートロックを実現する製品は他にもあるようですが、今回選択したSESAME 4 (セサミ4) は比較的安価な部類のようです。 #### 開封から取付まで [CANDY HOUSEの公式サイト](https://jp.candyhouse.co/)にて早朝に発注したところその翌日に届きました。 つまみが付いた黒い物がSESAME 4本体、白い物が別売りのWiFiモジュールです。写真には写していませんが、プラスドライバーと説明書も同梱されています。説明書を参照しながら取り付けを進めていきます。 SESAME 4本体の内側にドアの鍵のサムターンを回す機構があります。機構の動きの精度は高そうです。機構の調節は付属のプラスドライバーを使って行います。 実際に設置するドアの形状などに合わせて、サムターンを回す機構と取り付け位置の事前調節を行います。今回の設置環境に合わせて調節した結果、SESAME 4の取り付け位置はドアからある程度浮き気味にして、サムターンを挟む部分は一段階広くすることになりました。 SESAME 4の動力源は2個の電池 (CR123A) で、付属分が装填されているので絶縁シールを取り外します。電池は交換可能で、電池ボックスの蓋に販売元「CANDY HOUSE, Inc」や型番「Sesame JP2」などを示すシールがありました。 付属の両面テープを用いて、玄関ドアにSESAME 4を貼り付けます。貼り付け前の重要なこととして、ドアの鍵のサムターンの回転中心と、SESAME 4の回転機構の中心が一致するように、あらかじめ鉛筆などで位置に印を付けておくと有用です。また、ドアと両面テープが冷えている場合は粘着力が弱くなるので、ドライヤーなどで温めてから作業するのが良いでしょう。 ちなみに下記写真ではSESAME 4のつまみに白いシールを貼っています。これは、つまみの向きを遠目から判断できるようにするためです。もっとわかりやすい反射シールに後日貼り替える予定。 WiFiモジュールをSESAME 4に近い位置で動作させます。今回の設置環境の場合は、玄関ドアに近い、洗濯機用のコンセントに接続しました。 #### 実際の操作 「セサミ、ひらけゴマ」という名のアプリをインストールします。 - iOS: [「セサミ、ひらけゴマ \!」をApp Storeで](https://apps.apple.com/jp/app/%E3%82%BB%E3%82%B5%E3%83%9F-%E3%81%B2%E3%82%89%E3%81%91%E3%82%B4%E3%83%9E/id1532692301) - Android: [セサミ、ひらけゴマ \- Google Play のアプリ](https://play.google.com/store/apps/details?id=co.candyhouse.sesame2&hl=ja&gl=US) そして次のページに沿ってWiFiモジュールの設定も行います。 - [CANDY HOUSE サポート > WiFiモジュールの設定方法を教えてください](https://jp.candyhouse.co/apps/help-center#wifimodule-settings) - [新WiFiモジュールの設定方法\(SESAME OS2\) \| SESAME \(セサミ)](https://ameblo.jp/candyhouse-inc/entry-12646195337.html) 設定が完了すると、次の動画のように、アプリで玄関ドアの鍵を解錠・施錠できるようになります。 なお、上記動画はWiFiモジュールを併用した状態のものです。WiFiモジュールがあればインターネットのどこからでも操作可能で、WiFiモジュールが無い場合は、SESAME 4とスマホのBluetooth接続が確立する範囲のみで操作可能です。 ##### Google Homeとの連携 WiFiモジュールの設定に加えて、次のページの設定を行うとSESAME 4はGoogle Homeと連携でき、「OK, Google. 自宅セサミをアンロックして」などと声で指示できるようになります。いわば本当の「ひらけゴマ!」です。あ、ドアまでは開きませんが。 - [CANDY HOUSE サポート > Google Homeの設定方法について](https://jp.candyhouse.co/apps/help-center#hc-google-home) ひとつ注意点としては、`④「セサミ」と検索し、以下のアプリを選択する。`の部分は案内どおり「セサミ 鍵」で検索すべきで、「sesame」で検索してはいけません。似ているけども実は違うアプリがヒットして設定方法がよくわからない状態になります。←私ハマりました #### まとめ たとえば家の玄関をスマートロック化すると、解錠・施錠の履歴が確認できたり、QRコードで鍵をシェアできたり、オートロックや、NFCタグでの解錠・施錠、スマホの位置情報とBluetoothを併用した手ぶら解錠 (自動解錠) という機能の恩恵を受けることができます。 本来の鍵 (物理的な鍵) はもしものために引き続き持ち歩くとして。生活において長らく変わることがなかった「ドアの鍵の解錠・施錠」という行動を変えてみることに興味がある方は、スマートロック化に手を出してみると面白いかと思います。 また、同じSESAMEシリーズで自転車の鍵の製品もあります。機会あれば自転車のスマートロック化もやってみたいです。 - [SESAME サイクル \(ママチャリ\) – CANDY HOUSE JAPAN](https://jp.candyhouse.co/products/sesame3-bike) --- ### 衝撃波によるものと思われる気圧変化の記録 —フンガ・トンガ=フンガ・ハアパイ火山の大規模噴火— - 2022-01-16 URL: https://remoteroom.jp/diary/2022-01-16/ #### 8,000kmのむこうから トンガ諸島付近にある[フンガ・トンガ=フンガ・ハアパイ火山](https://ja.wikipedia.org/wiki/%E3%83%95%E3%83%B3%E3%82%AC%E3%83%BB%E3%83%88%E3%83%B3%E3%82%AC)の大規模噴火が日本時間2022年1月15日13時頃に発生。その後、同日20時から21時にかけて日本各地で2hPa程度の気圧変化が観測された。 この気圧変化を自宅@神戸に設置している気圧計2つも捉えていたようで、当該時刻のグラフを以下に貼り付ける。オレンジ色の線が大気圧を示している。 今回の噴火が非常に大きな規模であることはニュースで把握していたが、その影響が気圧変動として8,000キロメートルも離れた自分の地域にまで及ぶとは想像しておらず、グラフを確認した時には信じられなかった。地球が大気の薄い層に包まれていて、地表はどこも同じ大気の元にあることを感じさせてくれる記録だと思う。 #### 追記 [2022-01-17] 15日に観測できた上記の衝撃波が地球を1周した可能性がある時間にも、気圧変化が観測されたという。なんとまあ。 そこで前回と同じく自宅@神戸に設置している気圧計2つのグラフを確認したところ、たしかに17日09時前後にそれらしい、1hPa弱の高さの波形が記録されていた。衝撃波が地球を1周している状況を自宅の中で観測できるなんて。前回よりも変動幅は小さく、波形はなまっているように見える。 #### 参考リンク - [気象庁 > 報道発表資料 > 令和4年1月15日13時頃のトンガ諸島付近のフンガ・トンガ-フンガ・ハアパイ火山の大規模噴火に伴う潮位変化について](https://www.jma.go.jp/jma/press/2201/16a/202201160200.html) \[2022-01-16\] - [気象庁 > 報道発表資料 > 令和4年1月15日13時頃のトンガ諸島付近のフンガ・トンガ-フンガ・ハアパイ火山の大規模噴火に伴う潮位変化について(第2報)](https://www.jma.go.jp/jma/press/2201/16b/202201161415.html) \[2022-01-16\] - [火山噴火による空振で津波が発生か 気圧急上昇の観測と良好な対応 \- ウェザーニュース](https://weathernews.jp/s/topics/202201/160175/) \[2022-01-16\] - [トンガ火山噴火による衝撃波が地球1周して再来か 今朝も各地で気圧変化 \- ウェザーニュース](https://weathernews.jp/s/topics/202201/170085/) \[2022-01-17\] - [トンガの大規模噴火が引き起こした特殊な大気波動「ペケリス波」を発見―85年前に提唱されていた共鳴振動の実在を証明―<プレスリリース<海洋研究開発機構 \| JAMSTEC](https://www.jamstec.go.jp/j/about/press_release/20220912/) \[2022-09-12\] --- ### コタツをヒーター交換でアップグレード - 2022-01-10 URL: https://remoteroom.jp/diary/2022-01-10/ #### 交換の経緯 数年ぶりにコタツを点けようとしたところ、無印良品こたつ MK-653(NA) のヒーターの強弱調節が効かず、常にMaxパワーで動いているような状態 (消費電力約430W) であることに気付きました。危険を感じるので使用を即中止。前世紀に購入した物なのでとうとうガタが来たのでしょう。 コタツは欲しいので一式の買い換えを検討していたところ、なんとヒーターだけを交換する方法があると知り、次の物を購入しました。ちなみに購入前に、既存のコタツのヒーター取り付け部分の内寸とネジの間隔を測定して、取替ヒーターがその寸法に対応していることの確認が必要です。うちのコタツ (MK-653(NA)) の場合は、それぞれ「33x33cm」と「22cm」でした。 |項目|内容| |---|---| |品名|[メトロ電気工業株式会社 こたつ用取替ヒーター MCU-501EC(K)](http://www.metro-co.com/product/consumer/exchange.html#mcu-501ec_k)| |購入店|[yodobashi.com](https://www.yodobashi.com/product/100000001003147659/)| 既存のコタツの外観はシックで気に入っているので、取替ヒーター単体はそれなりのお値段ですが、故障部分だけを取り替えることが出来るならばハッピーです。(^_^) #### 取付方法 コタツの交換前の古いヒーターです。長年よく頑張ってくれました。 ネジ4本で取り付けられている古いヒーターを取り外した状態。 取替ヒーターの箱の内容物はこんな感じ。取扱説明書、ヒーター本体、電源コードとICリモコン、スペーサーとネジ類です。 ヒーターの取替え方法を確認してみます。内寸「33x33cm」のコタツの場合、黒いスペーサーを取り付けるようになっています。 そこで、新しいヒーターの側面にスペーサーを取り付けました。 ちなみに新しいヒーターの裏面の状態はこうなっています。 付属のネジ4本で新しいヒーターを取り付け完了です。所要時間10分少々、といったところかと。 #### 消費電力はどうか 5段階ある温度調節の各段階での消費電力を、[ワットモニター](https://www.sanwa.co.jp/product/syohin?code=TAP-TST8N)で測定してみたところ次のようになりました。ICリモコンに付いている「ECO」ボタンの働きとしては、いわば乗り物で言う副変速機のような、温度調節が2〜5の範囲ならばワンプッシュでそれを1段階下げる (1〜4にする) ものに思えます。 |温度調節|消費電力(W) ノーマル|消費電力(W) ECO| |---|--:|--:| |1|30.5|24.1| |2|111|32.4| |3|234|112| |4|271|234| |5|423|269| #### まとめ 今回の経験から、コタツのヒーター交換には次のメリットがあるとわかりました。規格化されていて、部分交換が容易な構造って素晴らしい。他の家電でも可能ならいいなあと思いました。 - 既存のお気に入りコタツを引き続き使うことができる - 既存のコタツが古い型であればあるほどアップグレードになる (「5時間自動切りタイマー」などの新機能が増やせる) ##### 余談 もうすぐ1月17日になります。今回ヒーターを交換したコタツは阪神・淡路大震災の前から使っていたので、当日 (1995年1月17日) に撮った、震度7の大揺れでひっちゃかめっちゃかになった部屋の写真に写っていました。 --- ### 初めてのプラモデルを共同制作 - 2022-01-08 URL: https://remoteroom.jp/diary/2022-01-08/ #### 初めが大事 小学1年生の子どもに初めてのプラモを作ってもらおうと思い、下記のプラモデルを購入。これは「楽プラ」という名前で呼ばれる、接着剤不要で各パーツは着色済みのキットです。ディテールは細かなシールを貼ることによって再現します。車種はハコスカ (3代目スカイライン) の他にも様々あります。 |項目|内容| |---|---| |製品名|[ザ・スナップキット|株式会社 青島文化教材社](https://www.aoshima-bk.co.jp/special/product/snapkit/)| |必要な道具|ニッパ, ピンセット, 加えて爪楊枝があると便利| 子どもと共同で数回の作業に分けて制作し、実際の制作時間としてはおそらく合計2時間ほどでした。 #### 感想 ##### 子どもの感想 - 「シールを貼るのに爪楊枝を使ったんだけども、細すぎてあんま出来なかった」 - 「車高は今回はノーマルということで。今度は車高短にもしてみたいです」 ##### 親の感想 - 「ニッパでパーツを切り取るときの感触が懐かしい。昔の楽しさが蘇った」 - 「シールが細かいです! 50枚ほど貼らなければならないので、日を分けて作るのが良いでしょう」 - 「ちなみに私が子どものとき、家では2台続けて[スカイライン](https://ja.wikipedia.org/wiki/%E6%97%A5%E7%94%A3%E3%83%BB%E3%82%B9%E3%82%AB%E3%82%A4%E3%83%A9%E3%82%A4%E3%83%B3) (C210,R30) に乗ってたんだよ」 (と子どもに言い聞かせたり) - 「よし、次は姫路城作る?」 --- ### 【読んだ本】 人類とイノベーション:世界は「自由」と「失敗」で進化する - 2022-01-05 URL: https://remoteroom.jp/medialog/2022-01-05_book-b08x23thml/ 停滞する経済状況のなかで、まるで救世主かのように渇望されている“イノベーション”。自分の中であいまいだったイノベーションの定義を、固めてくれる役割が本書にはまずあった。「はじめに」で取り上げられている、主観によらないシンプルな定義が私は気に入った。 > ノーベル賞経済学者のエドマンド・フェルプスは、イノベーションを「世界のどこかで新たな慣行になる新しい手法や新しい製品」と定義している。 前半の章では、人類史でのこれまでのイノベーションを様々に取り上げていて、たとえば「第4章 食料のイノベーション」の窒素固定に関する逸話は読み応えがあった。肥料を撒く以外の新しい手法が近年生み出されているそうだ。 なお、本書の真髄は後半からだと思う。「第8章 イノベーションの本質」では、イノベーションはアイデアの生殖であるとずばり考察。これはたしかに、紹介されている多数の事例から納得させられる他ない。「第9章 イノベーションの経済学」や「第11章 イノベーションへの抵抗」では、イノベーションに直面した人々が繰り返す阻止行動について論じられていて、ここはいわゆる逆風の事例研究に値する部分だ。 人類がこれまで生活を変えてきた歴史を踏まえ、その普遍的な特性を見出したうえでの本書の結論は、イノベーションは、人々に思考や実験や交流の「自由」がありそこに「失敗」が積み重ねられる環境で生まれていた、というもの。事後認識としてこれは至極真っ当であるけれども、時折は本書のような歴史の鳥瞰図を開き、この認識に立ち戻る意味はあると考える。なぜなら、イノベーションを渇望するが故に物事を単純化して短絡的な答えを求めがちな傾向を、自制するためだ。 --- ### 自宅ひかり電話で着信した電話番号等をAsteriskからLINEに通知する - 2021-12-31 URL: https://remoteroom.jp/diary/2021-12-31/ 本記事は下記の記事の続きで、Asteriskを使って、自宅のひかり電話で着信した電話番号などをLINEに通知する方法を記します。 - [Asterisk 18 LTSをUbuntu 20.04に導入する手順&ひかり電話HGWに接続して発信者番号を記録する方法 \[2021-12-30\]]() 手早く作ったのであまり凝ってはおらず、「電話主」や「迷惑電話か否か」を把握できる情報ページのURLを通知する程度です。見知らぬ番号の電話に対しては応答前にこのURLを参照すると有益でしょう。また、私はSlack通知のほうがどちらかというと好みですが、LINE通知のほうが家族の受けが良いのでそうしております。 ちなみに、今回の仕掛けの名前は telppo (てるっぽ) としました。語感で決めましたが、あえて言えば「telの一報」を縮めた造語かもしれません。 #### Step-1: telppoの設置 設置ディレクトリ (例: `/home/hoge/telppo/`) に、次のようにファイルを保存します。`telppo.py`は、asteriskサービスの実行ユーザ (上記の記事では`asterisk`) で実行できるようにしておく必要があります。 ``` /home/hoge/telppo/ +--- telppo.py ``` 1. 日本の電話番号文字列をハイフン付きに分割してくれるPythonモジュールとして、Google製の をPythonへ移植した を見つけました。これをasteriskサービスの実行ユーザを含むシステム全体から使えるように`sudo pip3 install phonenumbers`しておきます 2. 次の`telppo.py`を保存して`chmod +x`します。line_tokenはLINE Notify https://notify-bot.line.me/ja/ で取得するトークンです ```python ###!/usr/bin/env python3 ### telppo.py (Ver.20220516) ### usage: telppo.py TELNUMBER import phonenumbers # pip3 install phonenumbers import requests import sys ### LINE line_token: str = '*******************************************' # LINE Notify https://notify-bot.line.me/ja/ で取得するトークン line_url: str = 'https://notify-api.line.me/api/notify' ### split telnumber try: n: str = phonenumbers.parse(sys.argv[1], 'JP') n_hyphen: str = phonenumbers.format_number(n, phonenumbers.PhoneNumberFormat.NATIONAL) except phonenumbers.phonenumberutil.NumberParseException: n_hyphen: str = sys.argv[1] ### make message url_numberinfo: str = 'https://www.jpnumber.com/numberinfo_{:s}.html#result-globalNavi'.format(n_hyphen.replace('-', '_')) message: str = '☎ ' + n_hyphen.replace('-', '★') + '\n' + url_numberinfo # 電話番号はLINE画面上でリンクされないように星印で区切る ### post dic_token: dict = {'Authorization': 'Bearer' + ' ' + line_token} dic_message: dict = {'message': message} print(message) requests.post(line_url, headers=dic_token, data=dic_message) ``` #### Step-2: Asteriskの設定 1. Asteriskの設定ファイル`/etc/asterisk/extensions.conf`を次の内容に編集します ``` [globals] COMMAND_NOTIFY=/home/hoge/telppo/telppo.py [from-hikari] exten => s,1,Ringing() exten => s,n,System(${COMMAND_NOTIFY} ${CALLERID(num)}) ``` 2. Asteriskの設定ファイル`/etc/asterisk/pjsip.conf`は[前回の記事の内容](#step-1-設定ファイル編集)と同じにします 3. asteriskサービスを再起動します: `sudo systemctl restart asterisk` #### Step-3: ひかり電話へ☎して通知テスト 1. 自宅のひかり電話へ実際に電話をかけます 2. LINEに での電話番号情報が参照できる通知が飛んでくればテスト成功です 3. 実際の運用では、あきらかに迷惑電話な番号からの発信は電話機などで着信拒否するとよいでしょう #### 追記 \[2023-01-11\] 本記事の続編を書きました。 - [Asteriskが自動応答して相手にメロディ等を聴かせる仕掛けで既知の迷惑電話に対応してみる \[2023-01-11\]]() #### 参考サイト - [日本、電話番号検索](https://www.jpnumber.com/) --- ### Asterisk 18 LTSをUbuntu 20.04に導入する手順&ひかり電話HGWに接続して発信者番号を記録する方法 - 2021-12-30 URL: https://remoteroom.jp/diary/2021-12-30/ オープンソースのIP-PBXソフトウェア[Asterisk](https://www.asterisk.org/)を自宅のひかり電話に繋げたくなり、ラズパイ4上のUbuntu 20.04環境にAsteriskをインストールすることにしました。 ちなみに私は、Asteriskで音声応答などを行うつもりは今のところ無く、Asteriskをひかり電話HGW配下での子機としておき、「自宅のひかり電話に着信があった時にAsteriskが外部プログラムをキック (起動) して発信者番号を調べる仕掛け」を作りたいと思っていまして、今回の記事はその下準備となります。 #### Asteriskをソースからインストール Asteriskのインストールは次のページをめいっぱい参考にしながら進めます。 - [Install Asterisk 18 LTS on Ubuntu 20\.04\|18\.04 \| ComputingForGeeks](https://computingforgeeks.com/how-to-install-asterisk-17-on-ubuntu/) ##### "Step 1: Update Ubuntu System" Ubuntu環境を諸々最新にしておきます。 ```bash sudo apt update sudo apt upgrade sudo reboot # 必要に応じて ``` ##### "Step 2: Install Build Dependencies" Asteriskのビルドに必要となる依存関係パッケージを導入します。 ```bash sudo apt update sudo add-apt-repository universe sudo apt install build-essential curl git libjansson-dev libncurses5-dev libnewt-dev libsqlite3-dev libssl-dev libxml2-dev subversion uuid-dev wget ``` ##### "Step 3: Download Asterisk 18 tarball" Asteriskのソースをダウンロードして、事前処理します。 ```bash cd ~/tmp ### https://www.asterisk.org/downloads/ からダウンロードできるLTS版が18系ならば asterisk-18-current.tar.gz wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz tar xvf asterisk-18-current.tar.gz cd asterisk-18*/ contrib/scripts/get_mp3_source.sh sudo contrib/scripts/install_prereq install ``` 「Configuring libvpb1」の画面で「ITU-T telephone code:」の入力を求められたら、「81」を入力します (導入環境が日本国内の場合)。 ##### "Step 4: Build and Install Asterisk 18 on Ubuntu 20.04|18.04" Asteriskのソースをconfigureします。 ```bash ./configure ``` ###### 「Error 4」対応 `./configure`が次の内容でエラー終了してしまう時。私のネットワーク環境の問題なのかタイムアウト (短め?) でエラーになっているようなので、configureの前にあらかじめ`pjproject-2.10.tar.bz2`を手動でダウンロードしておくと良いようです。 ```bash [pjproject] Downloading https://raw.githubusercontent.com/asterisk/third-party/master/pjproject/2.10/pjproject-2.10.tar.bz2 to /tmp/pjproject-2.10.tar.bz2 [pjproject] Retrying download [pjproject] Downloading https://raw.githubusercontent.com/asterisk/third-party/master/pjproject/2.10/pjproject-2.10.tar.bz2 to /tmp/pjproject-2.10.tar.bz2 make: *** [Makefile:102: /tmp/pjproject-2.10.tar.bz2] Error 4 make: *** Deleting file '/tmp/pjproject-2.10.tar.bz2' failed configure: Unable to configure third-party/pjproject configure: error: Re-run the ./configure command with 'NOISY_BUILD=yes' appended to see error details. ``` 具体的には次のように`pjproject-2.10.tar.bz2`を別途ダウンロードしておいた後、`./configure`します。 ```bash $ wget -O /tmp/pjproject-2.10.tar.bz2 https://raw.githubusercontent.com/asterisk/third-party/master/pjproject/2.10/pjproject-2.10.tar.bz2 $ ./configure (snip) [pjproject] Verifying /tmp/pjproject-2.10.tar.bz2 [pjproject] Verify successful [pjproject] Unpacking /tmp/pjproject-2.10.tar.bz2 (snip) ``` うまく行けば次のようにconfigureは正常終了します。 では、makeしましょう。 ```bash $ make menuselect # 何を選んだら良いかよく分からないので事実上pass $ time make -j4 # 4並列で実行 (snip) +--------- Asterisk Build Complete ---------+ + Asterisk has successfully been built, and + + can be installed by running: + + + + make install + +-------------------------------------------+ real 10m50.305s user 28m12.658s sys 4m16.878s ``` 次のようにして管理者権限でインストールを進めます。 ```bash sudo make install sudo make progdocs sudo make samples sudo make config sudo ldconfig ``` ##### "Step 5: Start Asterisk Service on Ubuntu 20.04|18.04" asteriskを実行するユーザとグループを作成します。 ```bash sudo groupadd asterisk sudo useradd -r -d /var/lib/asterisk -g asterisk asterisk sudo usermod -aG audio,dialout asterisk sudo chown -R asterisk.asterisk /etc/asterisk sudo chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk sudo chown -R asterisk.asterisk /usr/lib/asterisk ``` asteriskを実行するユーザとグループを指定します。 ```bash $ sudo cp -a /etc/default/asterisk{,.original} $ sudo vim /etc/default/asterisk $ diff /etc/default/asterisk{.original,} 8,9c8,9 < #AST_USER="asterisk" < #AST_GROUP="asterisk" --- > AST_USER="asterisk" > AST_GROUP="asterisk" $ sudo cp -a /etc/asterisk/asterisk.conf{,.original} $ sudo vim /etc/asterisk/asterisk.conf $ diff /etc/asterisk/asterisk.conf{.original,} 75,76c75,76 < ;runuser = asterisk ; The user to run as. < ;rungroup = asterisk ; The group to run as. --- > runuser = asterisk ; The user to run as. > rungroup = asterisk ; The group to run as. ``` asteriskサービスを起動してみて、とりあえずrunningとなっていればサービスをenableにします。 ```bash $ sudo systemctl restart asterisk $ systemctl status asterisk ● asterisk.service - LSB: Asterisk PBX Loaded: loaded (/etc/init.d/asterisk; generated) Active: active (running) since Fri 2021-12-31 00:49:31 JST; 24s ago Docs: man:systemd-sysv-generator(8) Process: 1627227 ExecStart=/etc/init.d/asterisk start (code=exited, status=0/SUCCESS) Tasks: 73 (limit: 629145) CGroup: /system.slice/asterisk.service └─1627242 /usr/sbin/asterisk -U asterisk -G asterisk Dec 31 00:49:31 raspi4 systemd[1]: Starting LSB: Asterisk PBX... Dec 31 00:49:31 raspi4 asterisk[1627227]: * Starting Asterisk PBX: asterisk Dec 31 00:49:31 raspi4 asterisk[1627227]: ...done. Dec 31 00:49:31 raspi4 systemd[1]: Started LSB: Asterisk PBX. Dec 31 00:49:33 raspi4 asterisk[1627242]: radcli: rc_read_config: rc_read_config: can't open /etc/radiusclient-ng/radiusclient.conf: No such file or directory Dec 31 00:49:33 raspi4 asterisk[1627242]: radcli: rc_read_config: rc_read_config: can't open /etc/radiusclient-ng/radiusclient.conf: No such file or directory $ sudo systemctl enable asterisk ``` asteriskのCLIが動作するか確認します。 ```bash $ sudo asterisk -rvv Asterisk 18.9.0, Copyright (C) 1999 - 2021, Sangoma Technologies Corporation and others. Created by Mark Spencer Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details. This is free software, with components licensed under the GNU General Public License version 2 and other licenses; you are welcome to redistribute it under certain conditions. Type 'core show license' for details. ========================================================================= Running as user 'asterisk' Running under group 'asterisk' Connected to Asterisk 18.9.0 currently running on raspi4 (pid = 1627242) raspi4*CLI> exit Asterisk cleanly ending (0). Executing last minute cleanups ``` asteriskが使用するポートを、必要があれば開放しておきます。 ```bash $ sudo ufw status Status: inactive ### もしufwのStatusがactiveならば $ sudo ufw allow proto tcp from any to any port 5060,5061 ``` 以上で、Asterisk 18をUbuntu 20.04にインストールする手順は終わりです。 #### Asteriskをひかり電話HGWに接続して発信者番号を記録する方法 次のページをめいっぱい参考にして、構築したasteriskをひかり電話HGWに接続します。 - [ひかり電話HGW Pjsip \- VoIP\-Info\.jp](https://voip-info.jp/index.php/%E3%81%B2%E3%81%8B%E3%82%8A%E9%9B%BB%E8%A9%B1HGW_Pjsip) 下記の例では、ひかり電話HGWのLAN内IPアドレスを「`192.168.2.1`」としています。 ##### Step-1: 設定ファイル編集 ###### pjsip.conf `/etc/asterisk/pjsip.conf`を次の内容のみに編集します。 ``` [simpletrans] type=transport protocol=udp bind=0.0.0.0 [hikari-denwa] type=registration transport=simpletrans outbound_auth=hikari-trunk server_uri=sip:192.168.2.1 client_uri=sip:【HGWでasteriskに割り当てた内線番号】@192.168.2.1 retry_interval=60 [hikari-trunk] type=auth auth_type=userpass password=【当該内線番号のpassword】 username=【当該内線番号のusername】 [hikari-trunk] type=aor contact=sip:192.168.2.1 [hikari-trunk] type=endpoint transport=simpletrans context=from-hikari disallow=all allow=ulaw outbound_auth=hikari-trunk aors=hikari-trunk direct_media=no from_user=【asteriskの内線番号】 from_domain=192.168.2.1 dtmf_mode=inband [hikari-trunk] type=identify endpoint=hikari-trunk match=192.168.2.1 ``` ###### extensions.conf 続いて、`/etc/asterisk/extensions.conf`を次の内容のみに編集します。 ``` [globals] COMMAND_TEST=/usr/bin/logger [from-hikari] exten => s,1,Ringing() exten => s,n,System(${COMMAND_TEST} -i -t asterisk 'call_from=${CALLERID(num)}') ``` ##### Step-2: 動作確認 asteriskサービスを再起動した後、asteriskがひかり電話HGWへ登録できていること (Registered) を確認します。 ```bash $ sudo systemctl restart asterisk $ sudo asterisk -rvv (snip) raspi4*CLI> pjsip show registrations ========================================================================================== hikari-denwa/sip:192.168.2.1 hikari-trunk Registered Objects found: 1 ``` この状態で外線から自宅 (ひかり電話) へ電話を掛けてみますと、定義している外部プログラム`logger`がキック (起動) され、引数の発信者電話番号 (`070********`) がasteriskサーバのsyslogに記録されます。これは応用が利きそうで良い感じです。 ```bash $ tail -f /var/log/syslog | grep asterisk Dec 31 03:05:52 raspi4 asterisk[32061]: call_from=070******** ``` #### 追記 \[2021-12-31,2023-01-11\] Asteriskから外部プログラムを起動する応用として、続きを書きました。 - [自宅ひかり電話で着信した電話番号等をAsteriskからLINEに通知する \[2021-12-31\]]() - [Asteriskが自動応答して相手にメロディ等を聴かせる仕掛けで既知の迷惑電話に対応してみる \[2023-01-11\]]() #### 参考リンク - [FreePBX から slack 連携 \- Qiita](https://qiita.com/sndshi/items/fa4d5fdcedc70fe56b91) --- ### リモートKVMをラズパイで実現する「PiKVM」を試した - 2021-12-19 URL: https://remoteroom.jp/diary/2021-12-19/ #### 遠隔操作機能は外付けできる サーバやPCといった機器を遠隔操作する場面を想像してみます。当該機器のOSが起動してネットワークに接続完了した状態であれば、OSやその上の何らかの機能 (SSHログインやRDP) を用いて、ネットワーク経由でその機器を操作できます。一方、次の場合には遠隔操作ができませんので、通常は、実機のある現場に出向いてキーボードやモニターを接続してから直接操作することになります。 - 当該機器がネットワークに接続完了する前である (例: OS導入途中やBIOS画面状態) - 当該機器がそもそもネットワーク未接続・ネットワーク分離されている しかしながら、上記の状況で実機に接続するキーボード・モニター・マウス (KVM: Keyboard, Video, Mouse) を遠隔から扱えるタイプに換えることができれば、これら一式を“リモートKVM・IP-KVM”として、当該機器をネットワーク経由で遠隔操作できるはずです。いわば、[HPEのiLO](https://www.hpe.com/jp/ja/servers/integrated-lights-out-ilo.html)や[DELLのiDRAC](https://japancatalog.dell.com/c/isg_20170323/)が提供するサーバ管理機能 (BMC) の一部を外付けするイメージです。 今回試してみるオープンソースソフトウェア「PiKVM」 (π-pvm: The Open Source IP-KVM) は、安価なラズパイ本体とHDMIのビデオキャプチャデバイスを用いて、このリモートKVM機能を実現します。 #### PiKVMを試す ##### レシピと材料 レシピとして次の2つのサイトを参照します。 - [pikvm/pikvm: Open and cheap DIY IP\-KVM based on Raspberry Pi](https://github.com/pikvm/pikvm) - [PiKVM Handbook](https://docs.pikvm.org/) 私の予備のラズパイとしては現在「2」と「4」と「400」の3台があり、当初は「Raspberry Pi 2」を使ってPiKVMを実験したかったのですが、「2」本体はハードウェア的に[USB OTG](https://www.sanwa.co.jp/seihin_joho/otg/index.html)をサポートしていないようでした。今回はレシピのお勧め通り「Raspberry Pi 4」を使います。 また、オプションのATX制御は行わず、1系統の「キーボード・モニター・マウス」を操作するリモートKVM機能だけを試せれば良いとすると電子工作的な準備は不要で、必要な材料は次の通りです。 |必要な材料|今回はどうしたか| |---|---| |Raspberry Pi 4 (2GBモデルで充分、1GBモデルでも可)|4GBモデル| |MicroSDカード (16GB以上推奨)|64GB| |HDMI to USBドングル; ビデオキャプチャデバイス|[THANKO SHDSLRVC](https://www.thanko.jp/view/item/000000003615)を3,000円弱で購入| |a) 電源供給用の線が生えているY字型のUSBケーブル + USB充電器 (3Aかラズパイ公式のもの) or b) USB type-CとPCを直結するUSBケーブル|a) ポータブルHDDケースの付属品 + 適当にあった物| 「a) 電源供給用の線が生えているY字型のUSBケーブル + USB充電器」は、PiKVMを試す程度であれば必須ではなく、代わりに「b) USB type-CとPCを直結するUSBケーブル」でも事足りると思います。 しかしb)には難点があり、ラズパイ4への電源供給が1系統のみとなるため、接続されたPCの電源をOFFにするなどでUSB給電が止まるとラズパイ4の電源も強制切断されることに留意が必要です。ちなみにPiKVMはread-only filesystemで構成されており、耐障害性は比較的ありそうに思います。 ##### お試し手順 手順は[PiKVM Handbook](https://docs.pikvm.org/)に沿って進めます。 1. [Flashing the OS image \- PiKVM Handbook](https://docs.pikvm.org/flashing_os/)にあるように、`For HDMI-USB dongle`である`v2-hdmiusb-rpi4-latest.img.xz`イメージをダウンロードし、「Raspberry Pi Imager」などを使ってMicroSDカードにイメージを書き込みます 2. ラズパイ4とPiKVMで制御するPCとを、次の表・写真のように配線します。さらにラズパイ4をLANへ接続します |[ラズパイ4]|(途中)|[PiKVMで制御するPC]| |---|---|---| |USB type-C端子|Y字型のUSBケーブルがあるならば電源供給用の線にUSB充電器を接続|任意のUSB端子|| |USB type-A端子 (USB2.0 黒の[下側端子](https://kaydron1000.github.io/pikvm/docs/hardware-diy/installing-capture-device#for-the-hdmi-usb-dongle))|HDMI to USBドングル|HDMI等の映像出力端子| 3. [First steps \- PiKVM Handbook](https://docs.pikvm.org/first_steps/#first-power-on)にあるように、PiKVMのイメージを書き込んだMicroSDカードでラズパイ4を起動し、ラズパイ4がDHCPで取得したIPアドレスを調べたのち、ウェブブラウザで`https://ラズパイ4のIPアドレス/`を開きます。ログイン画面に入力するIDとPasswordは、デフォルトですと admin, admin です 4. PiKVMへのログイン後、[KVM] [Terminal] [Logout] を選択できるメニューが現れますので左側の [KVM] をクリックします。真ん中の [Terminal] はPiKVMのシェル画面 (ベースはArch Linux) に繋がります #### PiKVMの使用例 ##### 基本) KVM機能 PiKVMに接続したPCの映像出力はブラウザ上で確認できます。画面表示が出ないなど何かおかしい時は、右上のSystemの中にある`Reset stream`をクリックしてみます。また、キーボードやマウスの動きがおかしい時は`Reset HID`をクリックしてみます。なお、`Mute HID input events`というスイッチはデフォルトOFFで、これをONにするとキーボードとマウスの入力がPCへ伝わらなくなり、画面閲覧専用モードになります。 ちなみにPiKVMはPCからどのように認識されているのかを調べるため、Linux機に接続して`lsusb`すると次のように表示されました。 ```bash $ lsusb (snip) Bus 002 Device 007: ID 1d6b:0104 Linux Foundation Multifunction Composite Gadget (snip) ``` ##### 基本) Mass Drive Storage機能 PiKVMには、PiKVMのMicroSDカード内に保存したISOイメージをPCでマウントできる「Mass Storage Drive」という機能が備わっており、[Mass Storage Drive \- PiKVM Handbook](https://docs.pikvm.org/msd/)にその詳細があります。この機能をPCの起動時に用いれば、PiKVMに載せている任意のISOイメージでPCを遠隔操作で起動できます。下の画面では例として「[Clonezilla](https://clonezilla.org/)」を起動しています。 ##### 応用) Tailscale VPN, ウェブカメラも組み合わせ可能 [Tailscale VPN \- PiKVM Handbook](https://docs.pikvm.org/tailscale/)に記載の導入手順で、PiKVMを[Tailscale](https://tailscale.com/)に接続できます。実際にやってみると導入はすんなり簡単で、導入後は、インターネットからPiKVMへアクセスする経路を作っていなくても、同じTailscale VPNに参加している他のPC環境から`https://PiKVMのTailscaleでのIPアドレス/`でPiKVMへアクセスできるようになります。 また、PiKVMへの映像入力としてHDMI to USBドングル (ビデオキャプチャデバイス) の代わりに手元のウェブカメラを接続してみると、ウェブカメラが撮る映像をPiKVMのブラウザ画面に出すことができました。おそらくUVC (USB Video Class) 対応デバイスであれば何でもPiKVMへ映像入力できるのでしょう。 ここで思いつくのは、これら2つを組み合わせることです。Tailscale VPNとウェブカメラを組み合わせれば、たとえば『[OKリモート](https://doctorsmobile.jp/products/okremote/)』という医療現場向けソリューションと同等の遠隔操作機能をPiKVMに持たせることもできそうです。さらに、[データ通信用USBモデム](https://users.soracom.io/ja-jp/guides/devices/general/raspberry-pi-dongle/)がPiKVMで認識できるものであれば、インターネット環境が利用できないところでの機器の遠隔操作も可能だと思います。 ###### 追記 \[2024-03-23\]: PiKVMのLTE対応版をDIYしてみました - [「PiKVM」にLTE対応USBドングルを挿して“モバイルできるリモートKVM”を作る \[2024-03-23\]]() #### 参考リンク - [2020年11月26日 プレスリリース: オフラインのPCを遠隔操作する小型デバイスのソリューション『OKリモート』の提供を12月より開始します|ドクターズモバイル株式会社](https://doctorsmobile.jp/news/20201126/) - [プロダクト\|ドクターズモバイル株式会社](https://doctorsmobile.jp/products/okremote/) - OKリモートの製品紹介 - [Getting Started: Raspberry Pi と USB モデム \| 各種デバイスで SORACOM Air を使用する \| SORACOM Users](https://users.soracom.io/ja-jp/guides/devices/general/raspberry-pi-dongle/) - [The Modern, Open\-Source KVM over IP \| TinyPilot](https://tinypilotkvm.com/) --- ### サブスクリプションサービスでの出費を把握 - 2021-12-10 URL: https://remoteroom.jp/diary/2021-12-10/ 巷にあふれるサブスクリプション式のサービスには、私のマウスカーソルを契約ボタンへと導く危険な魅力があります。「初月は無料だし」とか「月額○○○円で安いし」とか……。しかし、課金を開始したサービスを一つ一つ費用対効果を判断して取捨選択する棚卸しは、日頃あまりやっていません。 その棚卸しを今後は習慣化したいので、まずは利用中のサブスクリプションサービスと費用の一覧ページを、本サイトの[aboutカテゴリ](/categories/about/)内に作ることにしました。 - [お金を払っているサブスク一覧]() このページを時々見れば、自分のサブスクでの出費を把握できるというわけです。ちなみに本日時点では、「コンテンツ系: 49,080円/年」、「インフラ系: 約46,437円/年」の出費をしており、合計は「1ヶ月あたり約8,000円」相当です。生活への高い寄与度と同様に金額面でも、サブスクでの出費は、電気・ガス・水道に匹敵する新たな光熱費みたいなものだなと痛感しました。 --- ### ATOK for MacでのAZIK設定方法 [2021-12版] - 2021-12-06 URL: https://remoteroom.jp/diary/2021-12-06/ 新しいmacOS環境に[ATOK](https://atok.com/mac/)をセットアップし、AZIKでのローマ字入力設定をしようとするとき。この作業は頻度が低いので私はいつも設定方法を忘れてしまっており、今日もMacBook Air M1 (macOS Monterey) の初期設定時に手こずってしまいました。 いつになるか分かりませんが、次は迷わないためにメモします。以下では、[ワタタツのウィッ記 \- ATOKでAZIK](https://nyoho.jp/wiki/?ATOKdeAZIK)で公開されている`StUser-AZIK.plist`を使っています。 #### 設定手順 ユーザ定義のスタイルがまだ1つもない状態を前提とした手順です。 1. ATOKの「キー・ローマ字カスタマイザ」を起動する 2. キー・ローマ字スタイルの「ATOKスタイル」を \[+\] ボタンで複製し、ユーザ定義のスタイル1つ目として「ATOKスタイルのコピー」を作る (スタイルの名称は任意に変更可能) 3. `StUser-AZIK.plist`を次のようにダウンロードし、ATOK32の既存の`StUser0.plist`に上書きする ```bash curl --output ~/Downloads/StUser-AZIK.plist \ "https://nyoho.jp/wiki/?c=plugin;plugin=attach_download;p=ATOKdeAZIK;file_name=StUser-AZIK.plist" cp -i ~/Downloads/StUser-AZIK.plist \ ~/Library/Preferences/ATOK32/Styles/StUser0.plist ``` 4. 「ATOKスタイルのコピー」のキー設定・ローマ字設定が`StUser-AZIK.plist`での定義内容に置き換わっているはず #### 参考リンク - [ワタタツのウィッ記 \- ATOKでAZIK](https://nyoho.jp/wiki/?ATOKdeAZIK) - [AZIK総合解説書](http://hp.vector.co.jp/authors/VA002116/azik/azikinfo.htm) --- ### レンタカー Toyota C-HR Hybrid 雑感 - 2021-11-24 URL: https://remoteroom.jp/diary/2021-11-24/ 鹿児島旅行2泊3日のお供に、トヨタレンタカーで[Toyota C-HR Hybrid](https://toyota.jp/c-hr/) (現行型) を借りました。運転距離は250km程度で高速道路の割合は50%以上。グレードなどの詳細は確認しなかったのでわからないが、見たところタイヤサイズは215/60R17、ヘッドライトはLED式。このC-HRに乗った簡単な感想を書き残しておきます。なお、比較対象は2000年式のレトロセダン (GF-JCG10) です。 #### 装備について - [レーダークルーズコントロール](https://toyota.jp/safety/scene/highway/?padid=ag461_safety_scene_highway01_common_function_highway02#support-tab03)は私、今回が初体験。自動車専用道路で試してとても役立つものだと感じた。先行する車を追跡する時は一定の車間距離を維持してくれるし、自車が先行する時は上り下りであっても一定速度を維持してくれるし、走行中の速度調整に心理的リソースを基本的に費やさなくて良くなる。そのため、レーダークルーズコントロールを使った行程ではなんとなく疲労度が小さかった - バックカメラも同じく駐車時に神の装備だと実感。自分の車にも後付したくなる #### 走行感覚について - 曲がりの感じは悪くない。強めの加速時にエンジンなどから聞こえる音にはハーモニクスを感じにくい - 荒れた路面での特にEV走行時、比較対象に比べてロードノイズが大きい。遮音や制振に関してもったいない気がした - 高速走行時 (80km/h~)、“矢のようにまっすぐ走る”感触を強くは感じなかった。ステアリングの手応えが軽いせい? - 同じく高速走行時、Aピラー付近?からの風切り音が小さくない - 燃費は車の計器によると22km/L程度。比較対象の3倍近い値は大変すばらしい #### 家族の感想 - 後部座席の空間自体はまあまあ広いんだけれども、サイドウィンドウが小さく閉塞感が強い - 後部座席のドリンクホルダーが、コンビニで買ったカフェラテRサイズのコップに合わない (上げ底する等の方法があるのかもしれないが乗車中にはわからず) - 車名を覚えられない。ハイフンはCHとRの間に入る形で名前は「CH-R」、よくある**なんちゃらレーシング**の略だとずっと思っていた #### 参考地図 --- ### 【読んだ本】 フラッシュ・ボーイズ 10億分の1秒の男たち - 2021-11-19 URL: https://remoteroom.jp/medialog/2021-11-19_book-4163901418/ 株式市場の影で超高速なサヤ取りをして財を成す者たち (フラッシュ・ボーイズ) と、それに気づいてしまった者たちとの攻防の物語。 善悪の判断はいったん置くとして。私としてはまず、本書に描かれている「考えついたものが世の中にまだ無く、それについてどうやら自分が最も詳しい・真剣に考えている・いけてると認識した時に、ならば作ってしまえと誰にも止められない勢いで走り出す」行動パターンに感銘を受けた。このパターンは、レイテンシーが最小の通信回線を街や荒野に敷設してしまうところ、フロントランニングを物理学的に行えなくした取引所の開設に至るところ、この二箇所に特に現れていたと考える。 また、日々の絶え間ない、膨大な量の株取引が生む巨額の流れは、超短期的に見てもまさに金脈なのだなという気付きを改めて得た。旨味があるからハッキング対象として適しており、フロントランニングによる高い精度でちょっとずつ削ぎ取るだけでも高頻度ならやばいぐらい稼げる。きっとそうだろうなあ……とこれは分かる。しかし私が心底驚いたのは、ダークプールという証券会社の中でつけあわせる取引 (取引所外取引) の、取引状況が情報として売られていて、それが結果的にフラッシュ・ボーイズのフロントランニングを助けていたということ。 これ以外にも、手数料と報奨金の価格設定が逆の取引所も存在する謎の理由など、いわば業界の事情が多くあった。読書には時間がかかったが、それを裏切らない読みごたえ。自分達が食われないために知っておきたい、物事の表裏の一例と言える。 --- ### 体を動かせて良い感じのIKEAデスクチェアを、高さ調整した机と組み合わせる - 2021-11-17 URL: https://remoteroom.jp/diary/2021-11-17/ #### 腰を気遣う椅子を求めて 在宅勤務環境の椅子としては普段、オフィスチェアとバランスボールを併用している。腰の力が衰えることが心配で、昇降デスクの導入はかなり良さげに思っているものの、物理的にも金額的にも大きな買い物になるので、すぐには踏み切れない。そして、バランスボールを椅子代わりにしている時の、おしりが蒸れる感じをなんとか取り除けないかな……。 そんな悩みを抱える私ですが、先日IKEAの店内を散歩していたら一風変わった次の椅子を見つけ、座ってみて、これはバランスボールの代替になりうるぞと感じて衝動買い。一般的な丸椅子の形だが、椅子を少し斜めにして腰掛けることもできる作りをしている。 |分類|品名|購入価格(円)| |----|----|---:| |デスクチェア 家庭用|[IKEA NILSERIK ニルスエリク スタンディングサポート](https://www.ikea.com/jp/ja/p/nilserik-standing-support-beige-vissle-dark-grey-50486829/)|6,999| ##### 高さを合わせよう この椅子をさっそく既存の机と組み合わせてみたところ、机に対して椅子の座面が高すぎで、そのままでは利用に無理があると判明。私の机はあるホテルで使われていた部屋のデスクのお古で、愛着があって私自身も30年以上使っているもの。机上までの高さが68cmと、標準的なオフィスデスクの72cmよりもさらに低いのだった。 衝動買いして失敗したかぁ……と悩むこと数分、机の高さを上げれば問題は解決することに気づいたので、継ぎ足する次のアイテムを発注 (継ぎ足の10cm部分を今回の机に使い、5cm部分をリビングのテーブル (こたつ) に使うつもりで)。 #### 実際の様子 公式には「スタンディングサポート」という名が付いている、IKEAのデスクチェア「NILSERIK」と、約10cm高めたレトロな机とを組み合わせた様子は、次の写真のとおり。 簡単なレビューとしては、斜めに腰掛けた状態で少し足を前へ投げ出すようにしてバランスを取ってもいいし、鉛直方向にどしっと座ってもいいし。そんなふうにして、腰が辛くなる前に予防的に、自分が自然と姿勢を変化させることができている気がする。 ちなみに、このデスクチェアの底面は、次の写真のように段違いの円盤状になっている。『[ピタゴラスイッチ](https://www.nhk.jp/p/pitagora/ts/WLQ76PGNW2/)』風に言うならば、「わけあって不安定を許容する」工夫に面白さを覚えた。 #### 参考リンク - [快適な在宅勤務環境をつくる5アイテム \[2020-08-08\]]() --- ### 【読んだ本】 ザリガニの鳴くところ - 2021-10-31 URL: https://remoteroom.jp/medialog/2021-10-31_book-b0859cybky/ Kindle版で読んだけれども書籍だと結構分厚いと思われる物語。生活の中で一気に全て読めたわけではなく、途中で別の本を挟んだりの中断ありで終えた。しかし不思議と、自分の頭には現実とは別の、この物語独特の湿地の世界が舞台として鮮やかに作り上げられ、間が空いていても読書を再開することで、湿地の世界のポーズ状態が解除されて物語の時計が進み始めるかのような、パラレルな体験ができた。 それは、物語の中での情景の微細な表現を (きっと日本語への翻訳も巧みにされているのだろう)、外部世界からの視覚情報として表現からイメージを再生成するのではなく、自分自身の心象風景と同様に頭の中にダイレクトコピーしたためかもしれない。記憶をそのまま追記されたようなもの。映画鑑賞との対比でいうならば、心象風景そのものを言葉で読むからこその体験かなと思った。なお、物語にはたびたび詩も登場しており、詩の持つ暗示性が、読者が抱く心象風景に拡がりを加えている。 この物語の時間は、2つの支流がやがて1つへまとまるように確実に、ある出来事を決着させる方向へ流れてゆく。その中にいる主人公のカイアは、自然界を観察することによって自然や生き物の在りようを知ってきた人間の、象徴として描かれているのであろう。そして人間も、いわば肉体的な一面では生き物であって。自然と人間性とが、絡み合っているから人間社会には割り切れない混沌が生じ、そこでの出来事が心に驚きをもたらしたりする。 --- ### 磁石内蔵のLEDバーライトを換気扇に貼り付け - 2021-10-27 URL: https://remoteroom.jp/diary/2021-10-27/ #### 換気扇のライトが…… 先日の下記の記事で、キッチンの換気扇にスマートプラグを接続し、換気扇のON/OFFを自動制御していることを紹介しました。 - [CO2 (二酸化炭素) 濃度に反応する「自動換気システム」を2通り自作してみた \[2021-10-21\]]() これでキッチンでの換気の挙動は望み通りの状態になったのですが、ひとつ別の問題が。換気扇に内蔵されているライトの電源は換気扇と共通なので、二酸化炭素濃度に反応するスマートプラグの動作に、ライトのON/OFFも連動してしまいます。つまり、調理時・コンロ使用時に手元を思い通りの明るさに保てません。 #### その代わりとして この不便を解消するために、換気扇内蔵のライトはもう使わず、換気扇の下に、電源系統を別にした新たなライトを取り付けることにしました。「磁石で取り付けられる・光源が平面・軽い・安い」というポイントを押さえた製品を探した結果、Amazon.co.jpでYEEZENというブランドのLEDバーライトを購入。 このLEDバーライトには、固定式のスイッチは無くて、非接触式のセンサーでライトのON/OFFと明るさ調整を行うようになっています。実際に手の甲を近づけてON/OFFしてみた動画は次の通りです。 #### 感想 コンロの上の換気扇に磁石で貼り付けられるLEDライトとして、本製品は間違いなくぴったりでした。また、それ以外にも使いどころを色々と考えられるし、約2,200円はお値打ちだと思います。 ##### 追記 \[2024-11-07\]: 別のLEDバーライトへ乗り換え 本記事で紹介した「YEEZENというブランドのLEDバーライト」のその後を追記しておきます。2021年10月に購入した1個目が2022年10月に不調となって、2022年10月に購入した2個目が2024年11月に不点灯となりました。 LEDバーライトは、たしかにUSB給電を24時間し続けている電気機器ではありますが、YEEZENのこの機種は耐久性があまり良くないのかもしれないと思い、現在は「[ELPA ALT-2030IR(D)](https://www.elpa.co.jp/product/li98/elpa1308.html)」に乗り換えてみています。ELPAのこの機種では「付属マグネットホルダーで角度調整可能」という機能が気に入りました。キッチンの頭上の換気扇にマグネットで貼り付けた場合、取付面の角度が微調整できて地味に便利であるためです。 --- ### CO2 (二酸化炭素) 濃度に反応する「自動換気システム」を2通り自作してみた - 2021-10-21 URL: https://remoteroom.jp/diary/2021-10-21/ #### 換気を自動化 前回の冬は、自宅の部屋内のCO2 (二酸化炭素) 濃度を低く保つことに気をつけ始めた頃で、下記の仕組みを作りました。 - [二酸化炭素濃度をラズパイで測り、換気が必要な時にスマートスピーカーが声で教えてくれる仕組みを作ろう [2021-01-25]]() 換気が必要な時を声が教えてくれるこの仕組みは画期的、と、自画自賛ですが最初は考えていました。しかし実際に運用してみて、“Googleさん”から「二酸化炭素濃度は現在○○ppmです。換気をしましょう!」と言われるたびに、家族の誰かが換気扇をONしたり窓の開閉を調整しなければならない点には不便を感じました。次第に面倒になって腰が重くなります。また、就眠中にも適度な換気をしたいという欲も出ます。 そこで現在は、築ウン十年の賃貸マンションの住環境 (今どきの24時間換気システムは未設置) において、換気を自動で行ってくれる仕組みとしてどのようなものが安価に作れるかを模索中です。本記事は現時点での模索の記録です。 #### その1) リビングでは 自宅のリビングは実際「LDK」の一部であり、キッチンと同一空間になっています。キッチンのガスコンロ設置箇所の上部には「レンジフードファン」 (ビルドイン型の換気扇) が設置されているので、この換気扇の電源ON/OFFを、リビングの二酸化炭素濃度を測定しているラズパイ4で制御して、換気を自動的に行えるようにしました。 換気扇の電源ON/OFFはスマートプラグを使って行います。ビルドイン型の配線は通常見えませんがスマートプラグをどこに配線しているかというと、換気扇上部の壁にネジ止めされている板を試しに外してみたら、内部から現れた、換気扇の電源プラグとコンセントの間の部分です (換気扇メーカーのサイトにて[据付工事説明書PDF](https://dl.mitsubishielectric.co.jp/dl/ldg/wink/ssl/wink_doc/m_contents/wink/FAN_IM/1807874hf7907_im.pdf#page=4)を確認してみると、電源供給がプラグ式である旨が「8.電気工事」部分に記載されていました)。取り付けたスマートプラグは、板を外さなくても直接目視したり必要時には手で操作できるように、延長コードを使って内部から外へ引っ張り出した状態にしています。 |項目|内容| |----|----| |換気扇|[MITSUBISHI V-316KP5](https://www.mitsubishielectric.co.jp/ldg/wink/ssl/displayProduct.do?pid=166843)| |スマートプラグ|hyleton 312 ※公式サイトが見つからない| |CO2濃度センサー・スマートプラグ制御|NDIR (非分散型赤外線吸収法) 式の[Winsen MH-Z19C](https://www.winsen-sensor.com/sensors/co2-sensor/mh-z19c.html) + [Raspberry Pi 4 Model B](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/)| |制御ロジック・閾値|cronでの定期実行 / 0~7時台: 1050ppm, 8~17時台: 850ppm, 18~19時台: 850ppm (調理時間帯の換気を止めないようON制御のみでOFFはしない), 20~23時台: 950ppm| |制御スクリプト|[co2_fan.sh](#co2_fansh) → [switch_tuya.py](#switch_tuyapy)| ##### 実際の濃度制御の様子 そろそろ冷え込んできている10月のある日の、リビングでの二酸化炭素濃度の24時間分のグラフを次の画像 (緑色の線) で示します。リビングと家族が就眠する寝室の間には空気の流れがあり、換気をしていない場合にはリビングの二酸化炭素濃度もおそらくかなり上昇しますが、自動換気システムの働きにより、濃度グラフはギザギザ状に上下しながら上限は約1000ppmに留まっていることが分かります。 ##### 追記 [2021-10-27] - [磁石内蔵のLEDバーライトを換気扇に貼り付け \[2021-10-27\]]() #### その2) 仕事部屋では 仕事部屋である書斎の窓は、上部に換気用の小窓が設けられているタイプです。小窓の高さは12cmほどで、そこにお誂え向きのPC用12cmファンをはめ込みました。ファンへの電源供給をスマートプラグで行うようにして、キッチンと同様に、仕事部屋の二酸化炭素濃度を測定しているラズパイZeroで制御します。 ファンの取り付け方向 (吸気 or 排気) は、屋内へ空気を取り込む方向 (吸気) にしています。これはなぜかというと、レイアウト的に自宅の中心にあるリビングの換気扇が稼働して屋外へ排気している時には、リビングは負圧状態となり、リビングと廊下で繋がっている仕事部屋の空気はリビングへと流れていくでしょうから、仕事部屋のファンは、リビングの換気扇の働きに逆らわないようにしました。 また、ラズパイZeroには[2.7インチの電子ペーパーモジュール](https://www.waveshare.com/2.7inch-e-paper-hat.htm)を接続しており、温度・湿度・大気圧・二酸化炭素濃度の計測値と、算出した不快指数が常時表示されるようにしています。電子ペーパー画面右上に表示している「*」印は、二酸化炭素濃度が閾値を超えておりファンをON制御している状態を示します。 |項目|内容| |----|----| |PC用12cmファン|[Ainex CFZ-120L](https://www.ainex.jp/products/cfz-120la/) (1000rpm) ※下記の写真は[CFZ-120FA](https://www.ainex.jp/products/cfz-120fa/) (1600rpm) を試しているときに撮影したものです。その後、稼働音がより小さい1000rpmのファンに切り替えました。[2021-10-21 19:55]| |5V→12V昇圧ケーブル|[Ainex CA-USB12V](https://www.ainex.jp/products/ca-usb12v/)| |スマートプラグ|[Meross MSS110JP](https://meross.jp/products/mss110jp-mss110hkjp)| |CO2濃度センサー・スマートプラグ制御|NDIR (非分散型赤外線吸収法) 式の[Winsen MH-Z19C](https://www.winsen-sensor.com/sensors/co2-sensor/mh-z19c.html) + [Raspberry Pi Zero WH](https://www.raspberrypi.com/products/raspberry-pi-zero-w/)| |制御ロジック・閾値|cronでの定期実行 / 0~7時台: 950ppm, 8~18時台: 750ppm (在宅勤務時間帯は比較的低めに保ちたい), 19~23時台: 850ppm| |制御スクリプト|[co2_fan.sh](#co2_fansh) → [switch_meross.py](#switch_merosspy)| #### 家族向けの情報ダッシュボード 家族からは「室内の現在の二酸化炭素濃度を知りたい」という要望があったので、リビングで確認できる仕掛けを考えました。具体的には例えば、自宅で測定している各種の時系列データを可視化・グラフ化しておき、リビングのテレビに映せば良さそう。子どもも一応見る可能性があるので、映し出すための操作はできるだけ簡素であることが望ましいです。 ##### リビングのテレビにどうやって映すか 次の組み合わせで仕掛けを作りました。 1. 次の各計測データを自宅のラズパイ2台から[Ambient](https://ambidata.io/)へ常時送信して集約します - 温度・湿度・大気圧・不快指数・二酸化炭素濃度 (リビングと仕事部屋の各2箇所) - 家全体の電力量 ([Nature Remo E lite](https://nature.global/nature-remo-e-lite/)で取得) 2. 上記データを可視化する非公開ダッシュボードをAmbientに作ります 3. Ambientに作ったダッシュボードを、クラウドサーバAに構築したデスクトップ環境のウェブブラウザに常時表示させておきます 4. クラウドサーバAのウェブブラウザ画面を、クラウドサーバBに構築した[screego](https://github.com/screego/server)を用いて配信します 5. screegoの配信URLを、リビングのLG製のテレビに内蔵されているウェブブラウザにブックマークしておきます こうして、テレビのリモコンを操作してウェブブラウザを起動してひとつブックマークを開くことで、各計測データをグラフで一覧できるダッシュボードをテレビに素早く映すことができます。Ambientのダッシュボードは非公開を維持、テレビでの文字入力は行わない (Ambientのログイン操作はテレビでは避けたい)、テレビでは閲覧オンリー、といった私の希望を叶えるようにすると、込み入っていますが上記の仕掛けに行き着きました。 #### 感想 二酸化炭素濃度を含む自宅の環境測定に関する仕掛けを、約一年前から、[ラズパイ (Raspberry Pi)]() を絡めてゼロからコツコツ作ってきました。その仕掛けは、今回加えた「換気の自動化」機能によって、人間に測定結果を知らせるだけではない、環境と自ら相互作用する力を初めて持ったことになります。 大げさですがこのように考えるとちょっと感慨深いですし、また新しい何かを思いついたら実装して、生活上の便利さを増してみたいと思います。 なお、今回のネタに関連する過去のブログ記事を列挙してみますと次の通りです。 - [Raspberry Pi 400にセンサーつないで温度・湿度・気圧を測定 [2020-11-18]]() - [Raspberry PiのUbuntu環境で温湿度・気圧センサーBME280を動かす方法 [2020-11-19]]() - [温湿度・気圧センサーの値をThingSpeakでグラフ化し、スマホアプリで確認する方法 [2020-12-20]]() - [Google Home/Nestを喋らせるgoogle\-home\-notifierの導入マニュアル \[2020年12月版\] [2020-12-31]]() - [二酸化炭素濃度をラズパイで測り、換気が必要な時にスマートスピーカーが声で教えてくれる仕組みを作ろう [2021-01-25]]() - [12年ぶりのテレビ刷新で有機ELを選ぶ [2021-04-29]]() - [ラズパイに接続したセンサーが固まる原因は [2021-08-22]]() そういえば、電子ペーパーモジュール (Waveshare 2.7inch E-Ink display HAT) のラズパイとの接続や、スマートメーターから電力量を読み取るNature Remo E liteの導入、screego導入の紹介記事は、未だ書けていないのでまた別の機会に……。 #### 参考スクリプト ##### co2_fan.sh 引数に指定された二酸化炭素濃度の現在の値と閾値とを比較し、結果にしたがってスマートプラグを制御するスクリプトを呼び出します。 ```bash ###!/bin/bash ### co2_fan.sh (ver.20211002) ### usage: $0 [CO2_NOW(ppm)] [CO2_THRESHOLD(ppm)] [{ON_only | OFF_only}] if [[ $# -lt 2 ]]; then exit 1 fi CO2_NOW=$1 if [[ ${CO2_NOW} -lt 1 ]]; then exit 2 fi CO2_THRESHOLD=$2 # 閾値(ppm) CO2_MIN=400 # 測定上の最低値(ppm) CO2_TMP=`echo "${CO2_MIN} + (( ${CO2_THRESHOLD} - ${CO2_MIN} ) * 0.93)" | bc` # 下げたい値(ppm) CO2_SAFE=`echo "${CO2_TMP}" | awk '{printf("%d", $1 + 0.5)}'` # 下げたい値の整数値(ppm) FILE_STATUS='/tmp/fan_status.dat' MODE_SWITCH=$3 # ON_only or OFF_only FAN_KEEPSEC=300 # FILE_STATUSの有効時間(sec) if [[ ${HOSTNAME} == 'raspi4' ]]; then CMD_FAN='switch_tuya.py' elif [[ ${HOSTNAME} == 'raspi0' ]]; then CMD_FAN='switch_meross.py' fi func_switchfan() { if [[ "$1" == 'on' ]]; then ${CMD_FAN} "ON" elif [[ "$1" == 'off' ]]; then ${CMD_FAN} "OFF" fi } func_savestatus() { echo "$1" > ${FILE_STATUS} } func_checkstatus() { local FAN_STATUS="$1" if [[ -e ${FILE_STATUS} ]]; then FAN_SWITCHING=0 local FAN_ELAPSEDSEC=$(( `date "+%s"` - `date "+%s" -r ${FILE_STATUS}` )) local FAN_LASTSTATUS=`cat ${FILE_STATUS}` if [[ ${FAN_ELAPSEDSEC} -gt ${FAN_KEEPSEC} ]]; then FAN_SWITCHING=1 elif [[ ${FAN_STATUS} != ${FAN_LASTSTATUS} ]]; then FAN_SWITCHING=1 fi else FAN_SWITCHING=1 fi } if [[ ${CO2_NOW} -ge ${CO2_SAFE} ]]; then # 閾値以上 if [[ ${MODE_SWITCH} != 'OFF_only' ]]; then func_checkstatus 'on' if [[ ${FAN_SWITCHING} -eq 1 ]]; then func_switchfan 'on' func_savestatus 'on' fi fi elif [[ ${CO2_NOW} -ge ${CO2_MIN} ]]; then # 最低値以上 if [[ ${MODE_SWITCH} != 'ON_only' ]]; then func_checkstatus 'off' if [[ ${FAN_SWITCHING} -eq 1 ]]; then func_switchfan 'off' func_savestatus 'off' fi fi else # 何らかの異常値 : fi ``` ##### switch_tuya.py Tuya規格のスマートプラグをON/OFF制御します。スマートプラグのDEVICE_ID, IP_ADDRESS, LOCAL_KEYの組み合わせが識別子となります。詳細は https://github.com/jasonacox/tinytuya でご確認ください。 ```python ###!/usr/bin/env python3 ### switch_tuya.py (ver.20210903) import tinytuya # https://github.com/jasonacox/tinytuya import sys d = tinytuya.OutletDevice('DEVICE_ID_HERE', 'IP_ADDRESS_HERE', 'LOCAL_KEY_HERE') d.set_version(3.1) data = d.status() print('Dictionary %r' % data) switch_state = data['dps']['1'] args = sys.argv if len(args) == 2: if args[1] == 'ON': data = d.set_status(True) elif args[1] == 'OFF': data = d.set_status(False) elif args[1] == 'TOGGLE': data = d.set_status(not switch_state) else: pass if data: print('set_status() result %r' % data) else: print('Usage: %s [ON|OFF|TOGGLE]' % args[0]) ``` ##### switch_meross.py Meross規格のスマートプラグをON/OFF制御します。スマートプラグの名称が識別子となります。詳細は https://github.com/albertogeniola/MerossIot でご確認ください。 ```python ###!/usr/bin/env python3 ### switch_meross.py (ver.20211109) ### ref: albertogeniola/MerossIot: Simple Python library for Meross devices https://github.com/albertogeniola/MerossIot import asyncio import os import sys from meross_iot.http_api import MerossHttpClient from meross_iot.manager import MerossManager EMAIL = os.environ.get('MEROSS_EMAIL') or 'YOUR_MEROSS_CLOUD_EMAIL' PASSWORD = os.environ.get('MEROSS_PASSWORD') or 'YOUR_MEROSS_CLOUD_PASSWORD' NAME_PLUG = 'HOGEHOGE' # 制御したいスマートプラグの名称 async def main(status): http_api_client = await MerossHttpClient.async_from_user_password(email=EMAIL, password=PASSWORD) manager = MerossManager(http_client=http_api_client) await manager.async_init() await manager.async_device_discovery() plugs = manager.find_devices(device_type="mss110") if len(plugs) < 1: print("No MSS110 plugs found...") else: for dev in plugs: print(f"Device = {dev.name}") await dev.async_update() if dev.name == NAME_PLUG: if status == 'on': print(f"Turning on {dev.name}...") await dev.async_turn_on(channel=0) elif status == 'off': print(f"Turing off {dev.name}") await dev.async_turn_off(channel=0) manager.close() await http_api_client.async_logout() if __name__ == '__main__': args = sys.argv status = '' if len(args) == 2: if args[1] == 'ON': status = 'on' elif args[1] == 'OFF': status = 'off' else: print('Usage: %s [ON|OFF]' % args[0]) else: print('Usage: %s [ON|OFF]' % args[0]) if status: loop = asyncio.get_event_loop() loop.run_until_complete(main(status)) loop.close() ``` #### 参考図書 - [【読んだ本】 エコハウスのウソ2 \[2021-03-06\]]() --- ### 【読んだ本】 ニュースの未来 - 2021-10-10 URL: https://remoteroom.jp/medialog/2021-10-10_book-4334045596/ ニュースというものをどう定義し、これからもどのようにあり続けるのかを、新聞社とインターネットメディアを経て今はフリーランスのライターになっている著者の、自身の経験をたどりながら論じている。対象とする読者はどちらかというとニュースを発する側なのかもしれないが、ニュースのあり方や働きについて考えさせる内容であり、ニュースを受け取る側の人間としてもとても面白く読める。 主としてニュースを受け取る側の、たとえば私の生活におけるインプットは、自身の力で選別できているようで実はそうではない内容と量のニュースで逼迫しているかもしれない。Google Newsのページに自動集約される各見出し、Twitterのタイムラインに流れてくるサムネイル、諸々の情報源から受け取るニュースのようなもの。本書ではニュースの基本型として「速報」「分析」「物語」の3つを挙げており、これを自分の念頭に置いておくと触れるニュースの重み付けや分類ができ、その行為はニュースの趣旨を反射的にではなく冷静に受け取ることに繋がるように思った。要は、ニュースの型を知り、発する側の意図や背景を読み解くヒントとすることに、損はないはずだ。 また、本書には、個人でちょっとした情報発信をする時、つまりRetweetやブログ記事を書いたりといった場合に、その情報が拡がるか否かなどの想像に応用可能かもと感じた、「良いニュースを成立させている五大要素」が挙げられていた。これらは具体的には「謎」「驚き」「批評」「個性」「思考」だという。そういえば、ひとつのif (もし) として、私が某大学広報室の一員として広報業務に関わっている時代に本書に触れていたら、広報室からプレスリリース等で情報発信する内容について、“記者さんはこの情報を素材にどういうニュースへ仕立てるだろうか?”と高次的に捉えることがより深く出来たかも知れない (新聞記者経験がある広報マネージャーはこの読みが流石にすごかった)。デジタル技術面が担当の当時の私には、ニュースの本質を踏まえた、上記五大要素のような分析的な捉え方がなかった。 横道に逸れたので戻ると、本書は、瞬間的なPVが今や価値となったニュースの未来を憂い嘆く、という類のものではない。ニュースや人間の普遍性を考える基本から始めましょうと読者を誘い、その時代横断的な視点に、不思議と力付けられるものだ。 --- ### 【読んだ本】 ミレニアム・ファルコンを作った男 45歳サラリーマン、「スター・ウォーズ」への道 - 2021-10-02 URL: https://remoteroom.jp/medialog/2021-10-02_book-4334952569/ 映画好きなら目を留めざるを得ないタイトルである。漠然とあった映画づくりに関わる夢に覚醒し、それに向けて、証券会社の仕事を辞めて退路を断って、猛烈に没頭して自身のCG技術をアピールするデモリールを数本製作し、たとえリクルータの目に止まって短期間の仕事を得たとしても、次に続く仕事がないかもしれない状況では不安が募る。著者自身のこうした心の内の描写には、辛さを覚えるほどでとても印象に残る。最終的にどうやって夢に手が届くのだろうかと、先を知りたくてページを進め、途中で本を閉じることができなかった。 CGモデリングとプラモデル制作 (全米コンテストで最高賞を獲るレベル) の技術を切磋琢磨する方法について、著者が淡々と語っている行間に、必ず存在するに違いないのは、常人とは桁の違う集中力と、膨大な量の試行錯誤だ。また、求職活動において著者は、自分を良く評価してくれた人との縁をけっして無下にしていない、と私は感じた。これは2つの意味で感じていて、ひとつは能動的に縁を活かす姿勢を自然体で持っていること、もうひとつは過去の縁が偶然に未来に生きてくる運を引き寄せていること。後者は実際のところ、前者が遅れて巡ってきた結果と言えるだろう。 著者は、本文最後のP.249で“私は自分が何者かを探して、「ミレニアム・ファルコン」に乗った。”と述べている。ここは、自分が何者かまだよくわかっていない私に最もぐっと来た部分であり、本書の総括として見事な一文だなと思った。 --- ### 【読んだ本】 EPUB戦記―― 電子書籍の国際標準化バトル - 2021-09-19 URL: https://remoteroom.jp/medialog/2021-09-19_book-4766423631/ 何を実現するために、世界のどのような考えの人たちが、EPUB3という国際標準を生み出したのかを、うかがい知ることが出来る。 EPUB3の規格を決める議論は、すでに実装済みの技術のどれを採用するのかしないか、という姿勢で進められるようで、本書には、技術そのものに関する説明はそこまで多くは記述されていない。むしろ、技術の選択に際して、どのような論法で国際的な議論が行われていたかの経緯の記録に近い。 たとえば、日本語には欠かせないルビや縦書き。このような特殊な表現のEPUB3での採用を働きかけるためには、日本語表現に欠かせないものだからという主張は悪手。なぜならばひとつの言語体系のみに意義があるとしても、公正な、国際的な議論の場では通じない。そこでどうしたのか。日本語に関わる著者らの、まさに思考と行動でのバトルが生々しく描かれていた。 このバトルが人々にもたらした価値の大きさは、すでに当たり前に扱うようになったUnicodeと併せて、いま私でも理解できる。電子書籍という、ページを束ねる概念に基づいたデジタルフォーマットにおいても、世界中の言語文化をできるだけ継承し、そして新しい表現の可能性を作っていくためのバトルだったのだなと。 #### 余談 私は約10年前 (2011年12月) に、[GenEPUB.com](https://genepub.com/)という、プレーンテキストをEPUBの電子書籍にまとめることが出来るウェブサービスを作ったのだった。あの時代 、“自作もできる電子書籍がこれから来る!”という空気感がたしかあったように思う。このサービスで出力するファイルは、EPUB3ではなくEPUB2。EPUBのファイル生成部分はCPAN上のPerlモジュールに頼っていて、当時見つけたモジュール ([EBook::EPUB](https://metacpan.org/pod/EBook::EPUB)) はEPUB2に対応するものだったからだ。 本書を読み終えたあと、このGenEPUB.comをEPUB3対応版に作り直したい気持ちが一瞬は湧いたけれども、今どきの公開サービスにするために一体どれだけ作り込むことになるのか、見当がつかない。趣味の継続としてはいいネタかもしれない。なお、日本語対応のEPUB変換サービスとしては、老舗で良さげな下記のものが現在の定番のようです。 - [電書ちゃんのでんでんコンバーター \- でんでんコンバーター](https://conv.denshochan.com/) - [Romancer \| Romancer(ロマンサー)はあなたの電子出版ツールです](https://romancer.voyager.co.jp/) --- ### ラズパイZeroで5GHz帯対応の無線LAN子機 (TP-LINK AC600 Archer T2U Nano) を使う - 2021-09-12 URL: https://remoteroom.jp/diary/2021-09-12/ #### はじめに 自室の机のそばに置いているラズパイZero (Raspberry Pi Zero WH) を、2.4GHz帯のWi-Fiで接続してきましたが、次のような問題と欲が出てきたので、5GHz帯での接続に切り替えようと考えました。 - 近くのデスクトップPCで使う2.4GHz帯のマウスの反応が途絶えることが時々あり、このマウスの通信とラズパイZeroのWi-Fiとの混信を避けたい - 5GHz帯しかないWi-Fi環境でもラズパイZeroを接続したい (ラズパイZeroにはCO2濃度などの[環境センサーを接続](#はじめに)しており、モバイルバッテリーとともに持ち運んで各所で趣味の環境測定を行うことがある) そこで、5GHz帯に対応しているUSB接続タイプの無線LAN子機「TP-LINK AC600 Archer T2U Nano」を約1,500円で購入。今回は、この子機に適合するLinuxドライバーをラズパイZeroでbuildしてインストールし、無線LAN子機を利用できるようにするまでの作業内容をメモします。 |分類|品名|備考| |----|----|----| |無線LAN子機|[TP-LINK Archer T2U Nano](https://www.tp-link.com/jp/home-networking/adapter/archer-t2u-nano/)|Amazon.co.jp| ちなみに、ラズパイZero WHは元々2.4GHz帯対応の無線LANを内蔵しているものの、なぜか私の環境ではうまく駆動できておらず。2.4GHz帯の接続には、これまでUSB接続タイプの子機 ([PLANEX GW-USMicro300](https://www.planex.co.jp/product/wireless/gw-usmicro300/)) を別途用いていました。 #### Archer T2U Nanoのドライバインストール方法 ##### 対象環境 |項目|内容| |----|----| |マシン|[Raspberry Pi Zero WH](https://www.switch-science.com/catalog/3646/) (ARMv6: 32bitアーキテクチャ)| |OS|Raspberry Pi OS (Raspbian GNU/Linux 10 (buster))| ``` $ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 10 (buster) Release: 10 Codename: buster $ uname -a Linux raspi0 5.10.60+ #1449 Wed Aug 25 14:59:20 BST 2021 armv6l GNU/Linux ``` ##### ドライバー入手元 TP-LINK AC600 Archer T2U NanoにはRealtekの「RTL8812AU」系のチップが載っているとのこと。そこで、GitHubで公開されている下記リポジトリのドライバーを導入することにしました。 - [aircrack\-ng/rtl8812au: RTL8812AU/21AU and RTL8814AU driver with monitor mode and frame injection](https://github.com/aircrack-ng/rtl8812au) このリポジトリ以外にも「RTL8812AU」用ドライバーのリポジトリは複数あるようで、日本語情報に限って調べてみても、多くの方が色々なリポジトリを試しています ([参考リンク](#%E5%8F%82%E8%80%83%E3%83%AA%E3%83%B3%E3%82%AF)を参照)。私が上記の「aircrack-ng/rtl8812au」を選択した理由は、このリポジトリにはラズパイ「0/Zero」への言及があったことと、なんとなくメジャーさを感じたからです。 ##### インストール手順 https://github.com/aircrack-ng/rtl8812au にあるREADMEにしたがって進めます。本記事執筆時点でのラズパイZero (OS: Raspberry Pi OS) では、具体的には次の手順となります。 ``` $ sudo apt-get install dkms $ git clone -b v5.6.4.2 https://github.com/aircrack-ng/rtl8812au.git $ cd rtl* $ sed -i 's/CONFIG_PLATFORM_I386_PC = y/CONFIG_PLATFORM_I386_PC = n/' Makefile $ sed -i 's/CONFIG_PLATFORM_ARM_RPI = n/CONFIG_PLATFORM_ARM_RPI = y/' Makefile #### 下記makeには60分以上かかりました。別端末にてログを眺めて待ちましょう。 #### tail -F /var/lib/dkms/8812au/5.6.4.2_35491.20191025/build/make.log $ sudo make dkms_install mkdir -p /usr/src/8812au-5.6.4.2_35491.20191025 cp -r * /usr/src/8812au-5.6.4.2_35491.20191025 dkms add -m 8812au -v 5.6.4.2_35491.20191025 Creating symlink /var/lib/dkms/8812au/5.6.4.2_35491.20191025/source -> /usr/src/8812au-5.6.4.2_35491.20191025 DKMS: add completed. dkms build -m 8812au -v 5.6.4.2_35491.20191025 Kernel preparation unnecessary for this kernel. Skipping... Building module: cleaning build area... 'make' -j1 KVER=5.10.60+ KSRC=/lib/modules/5.10.60+/build...(途中省略)... cleaning build area... DKMS: build completed. dkms install -m 8812au -v 5.6.4.2_35491.20191025 88XXau.ko: Running module version sanity check. - Original module - No original module exists within this kernel - Installation - Installing to /lib/modules/5.10.60+/updates/ depmod..... DKMS: install completed. dkms status 8812au, 5.6.4.2_35491.20191025, 5.10.60+, armv6l: installed ``` ##### 動作確認 動作確認の際にはあらかじめ、5GHz帯の無線アクセスポイントとの接続設定を`/etc/wpa_supplicant/wpa_supplicant.conf`に追加しておきます。 次に、ラズパイZeroを再起動したあとに、次のように`dmesg`でrtl88XXauというドライバーの読み込みが確認でき、Archer T2U Nanoに対応する`wlanN`が5GHz帯の無線アクセスポイントと接続できていれば動作確認完了です。 ``` $ lsusb Bus 001 Device 003: ID 2357:011e TP-Link Bus 001 Device 002: ID 0409:0059 NEC Corp. HighSpeed Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub $ dmesg | grep '88XXau' [ 19.510954] 88XXau: loading out-of-tree module taints kernel. [ 25.169614] usb 1-1.3: 88XXau c0:06:c3:00:00:00 hw_info[107] [ 25.287166] usbcore: registered new interface driver rtl88XXau ``` ``` $ iwconfig wlan0 wlan0 IEEE 802.11AC ESSID:"5GHz帯の無線AP" Nickname:"" Mode:Managed Frequency:5.18 GHz Access Point: D8:07:B6:00:00:00 Bit Rate:434 Mb/s Sensitivity:0/0 Retry:off RTS thr:off Fragment thr:off Power Management:off Link Quality=81/100 Signal level=62/100 Noise level=0/100 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0 ``` #### まとめ 今回のインストール方法には、1次情報源を元にした成功例しか書いておりませんが、実は他の情報を元にして何度か失敗もしています。私が参照した情報が古かったか、ラズパイZeroとは合わない情報だったのかもしれません。 結果的には数時間を要しましたが、ラズパイZeroの無線LANを狙い通りに5GHz帯対応できたことと、私はあまりやったことがない、Linux環境でドライバをbuildしてからインストールする例を、経験とブログ記事に追加できたことは良かったです。 #### 参考リンク - [WiFiアダプタ \- TP\-Link AC600 Archer T2U Nano をUbuntuで使用するための設定 \- Qiita](https://qiita.com/orphiria/items/da639237bdc47792581a) - [Raspberry Pi 4 に WI\-U2\-433DMS のドライバをインストール 内蔵WiFiの無効化 \| えび天サーバ \( abten server \)](https://www.abten.net/2021/03/1818/) - [ラズパイでRTL8812AU USB WLANを使う \- Qiita](https://qiita.com/theshibadog/items/84a8d6bc1911b32a915e) --- ### 【観た映画】 コンテイジョン - 2021-08-23 URL: https://remoteroom.jp/medialog/2021-08-23_movie-b008mpqatu/ - 視聴: [hulu.jp](https://www.hulu.jp/contagion) 接触感染するウイルスMEV-1と戦うこの映画、たとえば公開された2011年に観ていたら、私はどこまでピンと来ていたかどうか自信がない。1時間46分の展開はスピーディーで、かつ少し細切れ気味の各シーンの意味について、観客の想像力を掻き立ててくる作りだ。また、今回の字幕版に固有の事情かもしれないが、英語のセリフに対して日本語字幕は情報密度が足りないように感じられる。 ところが、いま現実の世界は、接触感染に加えて~~空気感染~~エアロゾル感染の可能性も考えられているウイルスと戦っている。本作の描写や筋書きを「本物らしい」と太鼓判を押したくなるのは、身の回りの出来事や世界のニュースで伝えられるパンデミックが本作とオーバーラップするからだ。映画を観終わって画面がブラックアウトした後も、誰もがまさに渦中にいることを認識しなきゃいけないのは、映画鑑賞の目的を“現実逃避”と考える場合、認めがたいし、辛い。 ネットを使って陰謀論を唱える扇動者まで登場させている本作は、鋭い考証によって、パニックは懐疑心に火を点け燃え上がらせるという社会現象も示したと言える。その精度にまったく感服せざるを得ない。残念な気持ちと、このパンデミックを早く終えたい気持ちとともに。 --- ### ラズパイに接続したセンサーが固まる原因は - 2021-08-22 URL: https://remoteroom.jp/diary/2021-08-22/ #### はじめに 自宅の室内環境を測定するために、ラズパイ (Raspberry Pi Zero WHとRaspberry Pi 4) に各種センサー (CO2濃度・温度・湿度・大気圧) を接続して日々運用しています。 - [Raspberry Pi 400にセンサーつないで温度・湿度・気圧を測定 \[2020-11-18\]]() - [Raspberry PiのUbuntu環境で温湿度・気圧センサーBME280を動かす方法 \[2020-11-19\]]() 今回は、ラズパイZeroに接続しているセンターのひとつ、温湿度・気圧センサーのBME280が、何かの拍子に固まっていた問題を解決した話です。実際のラズパイZeroセットの様子は次の写真のとおりです。全てむき出しの状態。 #### 問題発生の状況とタイミング ##### 状況 温湿度・気圧センサーBME280へアクセスして測定値を取得するPythonスクリプト ([オリジナルはこれ](https://github.com/SWITCHSCIENCE/samplecodes/blob/master/BME280/Python27/bme280_sample.py)) が、あるタイミングで、次のように`OSError: [Errno 121] Remote I/O error`で異常終了するようになり、それ以降、このPythonスクリプトを実行する度に異常終了します。 ラズパイの再起動やシャットダウンのみではBME280アクセスは復活せず、電源供給をいったん断って再度起動すると復活します。 ``` root@raspi0:~# ./bme280_json.py Traceback (most recent call last): File "./bme280_json.py", line 147, in setup() File "./bme280_json.py", line 143, in setup writeReg(0xF2,ctrl_hum_reg) File "./bme280_json.py", line 20, in writeReg bus.write_byte_data(i2c_address,reg_address,data) File "/usr/local/lib/python3.7/dist-packages/smbus2/smbus2.py", line 455, in write_byte_data ioctl(self.fd, I2C_SMBUS, msg) OSError: [Errno 121] Remote I/O error ``` ##### 発生タイミング ラズパイのそばに置いているデスクファンの電源をOFFしたとき。(ONのときも可能性はある) 当初は、何かの熱暴走の可能性を考えていました。また、なぜか“日々の在宅業務を終えるタイミング”と関係していそうな雰囲気もありました。しかし、私が椅子から立ち上がるときなどの振動とは全く関係はなくて、たとえば仕事の終わりにノートPC冷却用のデスクファンを操作し、その電源をOFFにしたタイミング以降に、BME280の異変が発生することが多いと先日やっと気づいた次第。 #### 問題の原因と対策 ##### 原因・被疑箇所 問題の発生タイミングから、何らかの電気的なノイズがBME280の動作異常の原因だと予想できます。家のコンセントのACライン経由でノイズが入り込むのか、他の線が空中のノイズを拾っているのか。特に測定機器は持っていないので可能な範囲で、デスクファンの電源のON/OFFを繰り返しながら下記のようにいろいろ試すと、 1. ラズパイをAC電源から切り離してバッテリー駆動しても発生頻度の変化は感じ取れず (電源供給USBケーブルはまだ変更せず) 2. I2C通信のボーレートをデフォルトの100kHzから10kHzに落としても発生頻度の変化は感じ取れず ([変更方法はこちら](#参考情報-i2c_baudrateの変更方法)) 3. 電源供給USBケーブルを別のものに交換すると発生頻度が下がるようだ 被疑箇所として最も可能性が高いのは、ラズパイZeroに電源供給しているUSBケーブルだと分かりました。 ##### 対策 そこで対策として、手持ちのものから耐ノイズ性が最も高そうなUSBケーブルを探し、さらにおまじないでフェライトコアを取り付けて、これを電源供給に使うことにしました。電源供給USBケーブルとデスクファンの距離も離しておきましょう。 - NG: 下記写真の黒色USBケーブル (長さ1.5m, 柔らかめ, 100均で購入) - Better: 下記写真の銀色USBケーブル+フェライトコア (長さ1.75m, 硬めで中に編組シールドが見える, [古いUSBハブ](https://www2.elecom.co.jp/cable/usb-hub/u2h-j4sl/)の付属品) #### まとめ 「ラズパイに接続したセンサーの動作異常の原因は、そばに置いた機器の100V電源操作で飛んでいる放射ノイズ」という仮説を、すぐに想像できなかったことが悔しいです (笑)。 機器の相互作用によるこのような現象を、IoT時代には、特に物を自作する場合には意外だと思っちゃいけないのかもしれません。ケーブル配線と機器間の距離を考慮したり、ケーブルの編組シールドといった、普遍的な電磁波対策は常に有効ということで、肝に銘じておきます。 #### 参考情報) i2c_baudrateの変更方法 ラズパイでの、I2C通信のボーレート`i2c_baudrate`の変更方法について。次の機種・OSの組み合わせで確認しました。 - 機種: Raspberry Pi Zero WH - OS: Raspberry Pi OS (Raspbian GNU/Linux 10 (buster)) 1. 変更前の値を確認する (100000はデフォルト値) ``` $ printf "%d\n" 0x$(xxd -ps /sys/class/i2c-adapter/i2c-1/of_node/clock-frequency) 100000 ``` 2. `/boot/config.txt`を編集して`dtparam=i2c_baudrate=10000`を追記する ``` $ diff -up /boot/config.txt.original /boot/config.txt --- /boot/config.txt.original 2021-02-23 11:44:22.000000000 +0900 +++ /boot/config.txt 2021-08-19 19:39:56.000000000 +0900 @@ -64,3 +64,6 @@ max_framebuffers=2 [all] ###dtoverlay=vc4-fkms-v3d enable_uart=1 + +# CUSTOM +dtparam=i2c_baudrate=10000 ``` 3. ラズパイを再起動する 4. 値が設定通りに変更されているかを確認する ``` $ printf "%d\n" 0x$(xxd -ps /sys/class/i2c-adapter/i2c-1/of_node/clock-frequency) 10000 ``` ##### 参考リンク - [ラズパイマウスにデバイスドライバをインストールする \| アールティ 移動型ロボットブログ](https://rt-net.jp/mobility/archives/12922) --- ### 【読んだ本】 クリーンミート 培養肉が世界を変える - 2021-08-21 URL: https://remoteroom.jp/medialog/2021-08-21_book-4822288617/ タイトルにある培養肉から始まり、培養レザー (革)、細胞農業、酵母を用いて作る牛乳や卵白、培養畜産物など、これまで私が聞いたことのなかった言葉が登場する。本書は、地球規模の問題を解決する可能性がこれらの技術にあると見抜いたスタートアップ企業の、立ち上がりや将来計画を取材。最後に人類の食の観点から、地球の未来がどうなっていくかを展望している。 歴史のはじまりから人類の大多数は、食したい成分や欲しい材料を、家畜なら大きく育てて必要なら殺生し、動物の体から切り離して取得してきた。そしてこのままだと未来も、何十億人の毎日の胃袋と生活を支える、実際はその何倍必要なのか見当がつかない数の動物を引き続き、人類は維持していかなければならない。それには膨大な飼料や水やエネルギーを要することが明らかなのだが、地球にとって過負荷では? はたして持続可能なのか? 人類が利用している動物の規模感と地球環境の限界を、上記のように意識せざるを得ない数字が、序文にいきなり次のように書かれており頭に飛び込んでくる。 > いま、世界にはライオン4万頭と家畜化された豚10億頭、象50万頭と家畜化された牛15億頭、ペンギン5000万羽と鶏500億羽が暮らしている。2009年の個体数調査では、ヨーロッパには全種合計で16億羽の野鳥がいることが確認された。同じ年にヨーロッパの養鶏場で飼育された鶏の数は70億羽近くにのぼる。 また、私自身はあまり考えたことがなかった倫理的なこととして、仮に家畜でない動物に対してなら“動物虐待”とみなされる状態で家畜動物を扱っている実態も、根本的な改善 (軽減) が可能であればそれに越したことはない。 このような、地球環境と倫理の問題を一挙に解決する手立てとして「培養肉」があるというのだ。培養肉は、家畜の可食部の肉の細胞を一度採取しておいて装置内で培養するもの、いわば「肉のみ」を細胞分裂させて直接育てるものである。家畜動物の「体全体」を育てる必要がなくなるため、かかる資源と時間が、家畜の場合 (数年数ヶ月) とは概念的にまったく異なるものになる。「肉」に脂肪分を加えたいならば、健康重視で「植物性脂肪」を加えるアレンジも可能だ。さらに、家畜を飼い殺生する必要も基本的になくなるので、従来の倫理的な問題は消える。 本書には、「これは誰もやってない。自分が始めるしかない」という現状を認識し、自らに使命を課す、スタートアップの起業家の心境が幾度も描かれていた。近いうちに培養肉の製造コストが下がり、市場価格が既存の肉と比較検討されるレベルになった時、地球を持続可能にしたいという彼らのビジョンもあわせて、培養肉は一気に市場に出回ることになるだろう。そして食肉産業の構造は急変する予感がする。著者の洞察にあるように、安く・おいしく・便利に食べられるものなら、大多数の人は選択を迷わないから。 #### P.S. 本書を読んで思い出したこと。子どもが興味を持つかなと考えて図書館で以前借りた次の本は、世界各地に昔からある昆虫食を紹介していて、写真も美しいしなかなかおもしろかった。 ただ思うに、地球の近未来におけるタンパク源としては、食糧不足に至った時やサブとして昆虫食はありかもしれないが、平時は供給量の面で、きっと工業的に大量生産されているであろう培養肉をメインに、ハンバーグにして食べている……。そんな食事風景を想像します。 --- ### exceptコマンドと端末サイズ変更のシグナル「SIGWINCH」 - 2021-08-20 URL: https://remoteroom.jp/diary/2021-08-20/ #### 端末のサイズ変更が効かないときがあった ##### 当初は自分なりの運用で回避 共用サーバを扱う上でありがちなのは、次のように、pcからserver1に一般ユーザ権限でSSHログインし、`su -`でrootパスワードを打って管理者権限にて行う作業です。これが一日に何度も必要な時、どうするか。 ``` user@pc:~$ ssh server1 staff@server1:~$ su - Password: rootのパスワード root@server1:~# ``` 各コマンドやパスワードの対話的な手入力は`expect`コマンドを使えば自動化できます。そこで私はこれまで、次のようなスクリプトでserver1へのログインと`su -`をやっていました。 ```bash ###!/bin/bash expect -c " set timeout 30 spawn ssh -t server1 \"LANG=C su -\" expect { \"Password:\" { send \"rootのパスワード\n\" } timeout { exit 1 } } interact " ``` 他方、私がserver1で管理者権限での作業を行っている時に限って? (「この時に限る」と今だから分かる)、端末 (ターミナル画面) のウィンドウのサイズ変更に`less`コマンドやその他コマンドが追従しないという謎現象に遭遇してきました。 ふつうは追従するのが当たり前なのでこれは不便です。しかしどんな場合に発生して何が原因なのかを深く調べぬまま、端末のウィンドウを広げて謎現象で困った時は“端末を最初のサイズに手で戻す”という消極的な運用をして、不便を回避してきました。 ##### SIGWINCHの役目 そんなある日、別件でLinuxのシグナルについて調べていて、次のページを開いた時に、`SIGWINCH`の文字が目に止まりました。端末のサイズ変更タイミングはいわゆるシグナルで伝わるんだ、と初めて知った瞬間です。 - [Linuxの「シグナル」って何だろう?:“応用力”をつけるためのLinux再入門(16)(1/2 ページ) \- @IT](https://www.atmarkit.co.jp/ait/articles/1708/04/news015.html) |名前|番号|動作|意味| |---|--:|---|---| |`SIGWINCH`|28|Ignore|ウィンドウのサイズが変更された| ということは、いつも困っているあの謎現象はこのシグナルが関係しているのかもと気付きます。次のページに掲載されている、`SIGWINCH`シグナルをトラップして端末サイズを都度表示するスクリプト`sigwinch_trap.sh`を用いて問題の切り分けを試みますと、 - [SIGWINCHとtputで遊んでみる \| TECHSCORE BLOG](https://www.techscore.com/blog/2014/01/06/sigwinch%E3%81%A8tput%E3%81%A7%E9%81%8A%E3%82%93%E3%81%A7%E3%81%BF%E3%82%8B/) 上記のお手製expectコマンドでログインしている状態のserver1の環境では、`SIGWINCH`シグナルを感知していないことが判明。なるほど、謎現象の原因が見えてきました。 #### SIGWINCHを処理するようにexpectを書こう 問題の原因が分かると、解決法をGoogle先生に尋ねやすくなります。今回の件は先人の知恵を借りますと、`except`を用いるログイン時に、`trap`で始まり`WINCH`で終わる5行を次のように加えると、`SIGWINCH`シグナルを`expect`コマンドがうまく処理するようになると分かりました。 ```bash ###!/bin/bash expect -c " trap { set rows [stty rows] set cols [stty columns] stty rows \$rows columns \$cols < \$spawn_out(slave,name) } WINCH set timeout 30 spawn ssh -t server1 \"LANG=C su -\" expect { \"Password:\" { send \"rootのパスワード\n\" } timeout { exit 1 } } interact " ``` #### まとめ 以上、expectでログイン中の環境に、端末のサイズ変更で発せられるSIGWINCHシグナルを伝える方法の紹介でした。ウェブ上ではもう新鮮味のない情報ですが、私としては、問題の原因を調べるプロセスも含めて面白かったのでメモとして記録です。 また、上記のスクリプトでは「rootのパスワード」とサラッと書いてきた、本来は暗号化して扱いたい秘匿情報をスクリプトなどにどう保存しておくかは、別途書きました次の記事が参考になるかもしれません。 - [一般的なデータ暗号化・復号化にssh\-agentが記憶した鍵情報を使える「sshcrypt」の紹介]() \[2021-08-18\] #### 参考リンク - [\[SOLVED\] ssh using expect does not show up as expected maximized](https://ubuntuforums.org/showthread.php?t=865420) - [expectでウィンドウサイズに変更があった場合に自動的にターミナルをリサイズさせる \| 俺的備忘録 〜なんかいろいろ〜](https://orebibou.com/ja/home/201712/20171215_001/) --- ### 【観た映画】 メッセージ - 2021-08-15 URL: https://remoteroom.jp/medialog/2021-08-15_movie-b073wyts2t/ - 視聴: [hulu.jp](https://www.hulu.jp/store/arrival-2016) 原題は『ARRIVAL』。地球の外から来た生命体と人類がコンタクトする時に、どうやって意思疎通をするだろうか。次に、人類の側から最初に確認したいことは、訪問者の目的であろう。これらを本作は“映える”映像で描く。人類は、人類同士にあった好戦的な歴史をもう一度なぞってしまうのか、それとも……と緊迫しながら、かつ謎掛けのような物語の解釈のために、私の固定観念をできるだけ柔らかくしながら見入った。声を混ぜた全体の音楽も印象深くて、いまサントラを聴きながらこれを書いている。 --- ### 一般的なデータ暗号化・復号化にssh-agentが記憶した鍵情報を使える「sshcrypt」の紹介 - 2021-08-11 URL: https://remoteroom.jp/diary/2021-08-11/ #### 暗号化・復号化にssh-agentの便利さを Linux等のシェル環境での作業において、あるデータや文字列のストレージへの保存には、平文ではなく暗号化した状態が求められ、それを利用する時の復号化には手間を掛けたくなく、当該環境ですでに利用中の鍵情報を用いて復号化したい場合があります。 たとえば、諸事情により`expect`コマンドで自動入力するパスワード文字列は、具体的には次のように扱いたいです。 - パスワードは暗号化した状態でスクリプト内や外部ファイルに書いておく - パスワードそのものが必要な時、自身がログインした環境でのみ毎回自動的に復号化して利用する “当該環境ですでに利用可能な鍵情報”としては、シェル環境で`ssh-agent`が記憶している、SSHの公開鍵認証用の情報が利用できるのでは?と第一に思い当たります。そこで、`ssh-agent`を利用するデータの暗号化・復号化方法を探してみたところ、OpenSSL関係の標準的なコマンドでの方法はわかりませんでした (`openssl rsautl`の`-encrypt`,`-decrypt`はデータの暗号化・復号化を行えるが`ssh-agent`とは関係しない)。 しかし嬉しいことに、私の希望通りの動作をする「sshcrypt」というツールを見つけましたので、簡単に紹介です。 #### sshcryptの使い方 sshcryptの公式ページはGitHub上の、次のところです。 - [leighmcculloch/sshcrypt: Tool for signing/encrypting with the SSH Agent\.](https://github.com/leighmcculloch/sshcrypt) sshcryptはGoLangで書かれていて、公式ページにある1行のInstall手順で導入できます。導入先は`~/go/bin/`になるのでPATHを通しておきましょう。 sshcryptにはいくつかの利用法がありますが、ここでは`ssh-agent`を利用する「with Agent」な例を取り上げます。 ##### Agentを用いた暗号化と復号化の例 ``` #### ssh-agentにパスフレーズ付きの鍵を登録する (あえて手動で登録している例) $ ssh-add ~/.ssh/id_ed25519_test1 Enter passphrase for /home/hoge/.ssh/id_ed25519_test1: Identity added: /home/hoge/.ssh/id_ed25519_test1 (hoge@raspi4) #### ssh-agentに鍵情報が登録されていることを確認 $ ssh-add -l 256 SHA256:JBN7Km/y4jpOCRln7q9xWQgJa8JtbjQrhwW1mJsK5sI hoge@raspi4 (ED25519) #### 文字列「HELLO」をsshcrypt agent-encryptで暗号化する $ echo HELLO | sshcrypt agent-encrypt | tee encrypted.txt hA8JV437UjOdEWALIWbM/Etxh9GhY/zNqkLNHiaHk4cbiNMBlIP7lwu8gYOQC2WjBMYCdKR8e+IH8+9xSPOMQg== LNGDhspZmXFSKBe2N0VrmnjoPTxRHISyBobGWdxEEVdHVw64atxW7aXdTSohHYFNh/rX9N/k+4HaJa3yc9g= #### 暗号化した文字列をsshcrypt agent-decryptで復号化する→復号化できた $ cat encrypted.txt | sshcrypt agent-decrypt HELLO ``` ##### Agentを用いた復号化が想定通りに失敗する例 ``` #### ssh-agentに登録されている鍵情報を削除する $ ssh-add -D All identities removed. $ ssh-add -l The agent has no identities. #### 暗号化した文字列をsshcryptで復号化する→鍵情報がないため復号化できない $ cat encrypted.txt | sshcrypt agent-decrypt There are no SSH keys added to the SSH Agent. Check that you have added keys to the SSH Agent and that SSH Agent Forwarding is enabled if you are using this remotely. exit status 1 ``` ``` #### ssh-agentに別の鍵情報を登録した状態を用意 $ ssh-add -l 256 SHA256:Z2xKLeqKfBG6FD5vw1lTH4Dez4cxJAzX0xLowvl7GV8 hoge@raspi4 (ED25519) #### 暗号化した文字列をsshcryptで復号化する→鍵情報が違うため復号化できない $ cat encrypted.txt | sshcrypt agent-decrypt Decryption not possible exit status 1 ``` #### まとめ sshcryptは、`ssh-agent`が記憶する鍵情報を用いて一般的なデータを暗号化・復号化できる、セキュリティに便利さを加えるツールです。自身の`ssh-agent`が鍵情報を記憶している間のみ有効という点は、USBポートに物理的に挿しておくセキュリティキーの有限性にどこか似ているのかも。私は手元のbashやその他のスクリプトにsshcryptを組み込んで、これから活用していく予感がしています。 #### 参考リンク - [Is it possible to use SSH agent for generic data encryption? \- Information Security Stack Exchange](https://security.stackexchange.com/questions/55757/is-it-possible-to-use-ssh-agent-for-generic-data-encryption) - [シェルスクリプトの平文パスワードをセキュアにする方法 \- 余白の書きなぐり](https://auewe.hatenablog.com/entry/2014/04/14/213319) --- ### nasneをTailscale VPNにつなぐ - 2021-08-09 URL: https://remoteroom.jp/diary/2021-08-09/ 自宅に置いているnasneを、VPNサービスのTailscale経由であらゆるところから使おうという試みです。試みを実現するための仕組みは、nasneと同じくTailscaleを直接導入できない、NASやネットカメラ (例: [ATOM Cam 2]()) やその他IoT機器にも応用できると思います。 #### 設定してみよう ##### 前提条件 今回の試みには、前提として次の3つが必要です。Tailscaleという、非常に楽にVPNが張れるこのサービスについては、[他に様々なところで紹介されている](https://www.google.com/search?q=tailscale)ので説明を省略します。 1. Tailscaleを利用していること (まだの場合はサインアップをどうぞ): [Tailscale · Best VPN Service for Secure Networks](https://tailscale.com/) 2. 自宅LAN内にLinux機が稼働していること 3. 自宅LAN内にTailscale経由で使いたいネットワーク機器があること 3の機器は今回、初期型nasne 1TBモデル ([SIE CECH-ZNR2J](https://www.jp.playstation.com/ps3/peripheral/cechznr2j.html)) です。そのファイル共有機能 (共有フォルダー) をTailscale経由で使うことにします。 【余談】現時点で購入できるnasneは、[BUFFALO製nasne NS-N100](https://www.buffalo.jp/nasne/)です。 ##### 設定手順 次のような状態の2台のマシンとnasneを例に進めます。 |マシン|場所|LANでのIPアドレス|TailscaleでのIPアドレス| |---|---|---|---| |machine-cloud|インターネット|---|100.x.x.C| |machine-lan (Linux)|自宅|192.168.1.L|100.x.x.L| |nasne|自宅|192.168.1.N|(割当不可)| machine-cloudからnasneの共有フォルダーが使えるように、次の順で設定を行います。 1. machine-cloudとmachine-lanにTailscale clientを導入して、Tailscaleでの通信が行えるようにする 2. [Subnet routers and traffic relay nodes · Tailscale](https://tailscale.com/kb/1019/subnets/)でのStep 2以降の設定を実施する - Step 2にて必要最小限の設定を行うならば、サブネットマスク`/32`を用いて`sudo tailscale up --advertise-routes=192.168.1.N/32`となる - Optionalとなっている部分は行わなくても構わない 3. machine-cloudからnasneのIPアドレスに対し、nmapでのポートスキャンを行うと次の結果となります ``` $ nmap 192.168.1.N Starting Nmap 7.80 ( https://nmap.org ) at 2021-08-09 12:51 JST Nmap scan report for 192.168.1.N Host is up (0.024s latency). Not shown: 997 closed ports PORT STATE SERVICE 80/tcp open http 139/tcp open netbios-ssn 445/tcp open microsoft-ds Nmap done: 1 IP address (1 host up) scanned in 0.45 seconds ``` 4. これはつまり、TailscaleのVPNにおいてmachine-lanがRelay Nodeとして介在することで、machine-cloudからnasneの139/tcp, 445/tcp等が見えている状態です。したがって、machine-cloudからnasneの共有フォルダーを使うことができます #### まとめ Tailscaleを用いると、どこからでも自宅LAN機器へアクセスできる経路を作れるし、その設定は簡単ということがわかりました。もちろん、SSHのポートフォワーディングやらrouting設定やらを駆使しても技術的にはできないことはないでしょうが、Tailscaleは、設定作業が劇的にわかりやすいところが秀逸だと思います。 #### 参考情報) ファイル名の文字化け解決はあきらめた Tailscaleのレイヤーの問題ではなく、SMBプロトコルかnasneのDLNA機能かメディアファイルを参照するソフトの問題ですが、参考として。 machine-cloud (Ubuntu) からnasneに保存するメディアファイルのファイル名に、日本語文字 (多バイト文字) を含む場合、私の家のテレビ (LGの2020年型) のメディアサーバ画面でnasneのメディアファイルを参照すると、ファイル名が文字化けするようで、この文字化けをなんとか回避しようと考えました。 しかし、私の初期型nasneのSMBプロトコルは「SMB 1.0」とバージョンが古いことが関係するのか、`mount`時のオプションに`codepage=cp932`を設定できない?ようで、苦肉の策で`convmvfs`という変換ツール (Ubuntuではaptで導入可能) を見つけて、 - [Ubuntu Manpage: convmvfs \- utility that mirrors a whole filesystem tree from one charset to another\.](http://manpages.ubuntu.com/manpages/focal/man1/convmvfs.1.html) 次のようにmachine-cloudでの設定をいろいろ試みたのですが、解決せずです。現時点ではファイル名の文字化けは諦めています。 ``` #### 1) machine-cloudでのマウント sudo mount -t cifs -o guest,rw,vers=1.0 //192.168.1.N/share1 /mnt/nasne_direct #### 2-a) convmvfsを用いた多重マウント1 → NG (テレビで文字化け) convmvfs /mnt/nasne_convert -o icharset=CP932,srcdir=/mnt/nasne_direct #### 2-b) convmvfsを用いた多重マウント2 → NG (テレビで文字化け) convmvfs /mnt/nasne_convert -o icharset=EUCJP-MS,srcdir=/mnt/nasne_direct ``` ##### 参考リンク - [smbfsがcodepage=cp932を受け付けなかったらconvmvfsを使えば良い \- 射撃しつつ前転 改](https://tkng.hatenablog.com/entry/20090204/1233710552) --- ### 【観た映画】 ハミングバード - 2021-08-07 URL: https://remoteroom.jp/medialog/2021-08-07_movie-b011kr3rre/ - 視聴: [hulu.jp](https://www.hulu.jp/hummingbird-2013) 舞台はロンドン。前知識なしに選んで気楽に観始めた映画だが、冒頭数分で感じたままの印象で進み、画作りや音楽や演出に全域でゆるいところがなく、シリアスな気迫を感じさせてくる。台詞もよく、路上生活に紛れることになった主人公と、彼に繋がっていくもう一人が、それぞれ、自分の心をどう動かしていくのだろうかというその揺らぐ様に惹かれる、ドラマティックな秀作であった。 --- ### サーバプロビジョニングツール「Warewulf v4」の紹介 - 2021-08-04 URL: https://remoteroom.jp/diary/2021-08-04/ #### 任意の構成で大量にサーバを構築 多数の計算ノード・演算ノードを連携させてジョブを実行する、いわゆる計算機環境・スパコン環境・HPC環境の運用現場を想像してみます。計算ノードはラックマウント型サーバの一種で、物理的に数百台の規模でラック内に設置されています。そのような計算ノードを大量に、任意の構成で工数をかけずに構築する「サーバプロビジョニング」は、運用には必須の技法のひとつです。また、サーバプロビジョニングの管理ツールとして、扱いやすいものが常に求められています。 最近の私は、それなりの台数の計算ノードのOS更新を行う業務において、「Warewulf」という老舗のサーバプロビジョニング管理ツールの、新バージョンを扱いました。このツールに関する日本語の情報がほとんど見当たらず、特に新バージョンのv4に関してはまだ皆無なので、簡単ですがWarewulf v4の紹介を行いたいと思います。 #### Warewulfとは 最初にWarewulfとは。Wikipediaにページがありましたので次にリンクします。ただし、過去のWarewulf v3をふまえて書かれている内容だと思われます。 - Wikipedia: https://en.wikipedia.org/wiki/Warewulf - [Warewulf freecode日本語情報ページ \- OSDN](https://ja.osdn.net/projects/freshmeat_warewulf/) ##### 過去のv3 そのWarewulf v3の本家サイトは次のURLです。v3はここ数年更新がされていない様子で、かつ、ドキュメント内にリンク切れもあるようです。 - [warewulf/warewulf3: Warewulf is a scalable systems management suite originally developed to manage large high\-performance Linux clusters\.](https://github.com/warewulf/warewulf3) - Warewulf v3 Documentation: https://warewulf.lbl.gov/ ##### 今回取り上げるv4 今回取り上げるのは、「The next generation of Warewulf.」と銘打っている次の「Warewulf v4」です。v3はPerlで書かれていましたが、v4はGoLangでリライトされています。 - [hpcng/warewulf: Warewulf is a stateless and diskless container operating system provisioning system for large clusters of bare metal and/or virtual systems\.](https://github.com/hpcng/warewulf) - Warewulf v4 Docs: https://warewulf.org/docs/ #### 計算ノードをdisklessで起動する Warewulfは、DHCPサーバとTFTP/HTTPサーバと配信イメージを統合して設定・管理するツールと言うこともでき、計算ノードのPXE起動を司ります。計算ノードを起動するときのWarewulf v4の働きは、具体的には次のようになります。 1. 計算ノードはPXEで起動して、Warewulfサーバは計算ノードへ起動イメージを配信する 2. 計算ノードへ配信されたイメージはメモリ上で展開され (=ローカルストレージを使わない)、計算ノードはそのイメージで起動する Warewulf v4は完全に「diskless」前提の設計になっていて、計算ノードの物理メモリ空間の一部をストレージ領域として確保しています。そのため、計算ノード1台あたりの実装メモリの全てをOSが使えることはなく、数GBは差し引いて考えておく必要があります。また、PXE起動した計算ノードのOSからはローカルストレージがもちろん見えるので、マウントして読み書きすることは可能です。 余談ですが、過去のwarewulf3の利用時には、次の2つのモードを使い分けていました。この場合は起動にローカルストレージを使う前提でした。 - イメージ配信モード: 計算ノードはPXEで起動して、Warewulfサーバから配信されるイメージが計算ノードのローカルストレージに書き込まれる - 通常モード: 計算ノードはローカルストレージから起動する (正確には、計算ノードはPXEで起動して、Warewulfサーバから「ローカルストレージで起動せよ」という応答を受けて (応答がない場合はタイムアウトを経て)、ローカルストレージのイメージで起動する) #### イメージ構成をレイヤーで管理する Warewulf v4の特徴として挙げたい、実際に扱って「これは使い勝手が良い」と強く感じたポイントは、次のように各種のレイヤーに分けて配信イメージの構成が管理できるところです。 |レイヤー|内容|例| |---|---|---| |Runtime Overlay|OS起動中に定期的に上書きされるファイル|`/etc/hosts`など (ノード個別)| |System Overlay|OS起動時に下位レイヤーに上書きされるファイル|ネットワーク設定や`/etc/hostname`など (ノード個別)| |Container|ソフトウェア構成に沿ったファイル|`yum install`で導入するパッケージなど (ノード共通)| |Kernel|kernelとkernel module|| 配信イメージの構成がこのようにレイヤーで分離されていることにより、 - サービス提供中の計算ノードへソフトウェアを追加導入する場合のイメージを、「Container」レイヤーだけを差し替えることで準備する - ハードウェア (たとえばInfiniBand) 搭載機と非搭載機のイメージの差異を、「Kernel」と「Container」のレイヤーのみを調整することで吸収する - サービス提供中・OS起動中に変更されるファイルは「Runtime Overlay」で扱う といった、変更部分を最小範囲に留めた、逆に言えば共通部分を大きく持たせたイメージ管理ができます。 さらに、前述のように、Warewulf v4はdiskless前提なので、Warewulfサーバで変更した構成を計算ノードへ反映するには、計算ノードを1度再起動するだけですばやく済みます。各計算ノードのローカルストレージへのイメージ書き込みの面倒を見る必要がありません。この時間的・工数的なメリットは、大量の計算ノードを相手に作業しているときにはとても大きいです。 #### おすすめします サーバプロビジョニングの管理ツールとして、私はWarewulf以外を扱った経験がありません。しかしながら、今回取り上げた[Warewulf v4](https://github.com/hpcng/warewulf)は近年のHPC環境に馴染むスグレモノであり、disklessでの起動が問題とならない環境ならば選択候補の一つになり得るかもと思います。さわりだけの非常に簡単な紹介でしたが、もし機会あればお試しください。そろそろ、[Pre-release状態のv4.1.0](https://github.com/hpcng/warewulf/releases)がリリースされる頃かもしれません。 ちなみに、CentOSやRocky Linuxに関わっている[Gregory M\. Kurtzer氏](https://gmkurtzer.github.io/)が、Warewulfの開発を率いています。 ##### 参考リンク - [Rocky Linux](https://rockylinux.org/ja/) - [CentOSの代替となるRocky Linuxが一般提供され、独立した管理下に置かれる \| HPCwire Japan](https://www.hpcwire.jp/archives/47806) - warewulf3: [情報学広場:情報処理学会電子図書館 > 超大規模HPCシステムのインストール高速化の提案](https://ipsj.ixsq.nii.ac.jp/ej/?action=pages_view_main&active_action=repository_view_main_item_detail&item_id=186047&item_no=1&page_id=13&block_id=8) - [Modernizing HPC Infrasutrcture with CIQ \- Dell Technologies HPC Community](https://www.dellhpc.org/event_8-4-2021.html) --- ### 【観た映画】 フライト・ゲーム - 2021-08-01 URL: https://remoteroom.jp/medialog/2021-08-01_movie-b01420m0la/ - 視聴: [hulu.jp](https://www.hulu.jp/nonstop-2014) 2014年公開の密室サスペンスもの。原題は『Non-Stop』。本作の感想を一言でまとめると、私はけっこう気に入った。旅客機の中で起こるある状況において、一人の乗客に「9.11と同じだ」とつぶやかせているところに、[2001.9.11](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%A1%E3%83%AA%E3%82%AB%E5%90%8C%E6%99%82%E5%A4%9A%E7%99%BA%E3%83%86%E3%83%AD%E4%BA%8B%E4%BB%B6)が米国社会に与えた影響の重さを改めて感じ取った。 --- ### 【読んだ本】 大人ボン 41歳からの運転免許編 - 2021-07-21 URL: https://remoteroom.jp/medialog/2021-07-23_book-4391146495/ 自動車運転免許を取る理由は人それぞれ。手書き感の強いこの漫画は、私の場合は約二十年前、どんな気持ちを抱いて教習所に通い始めたかを懐かしく思い出させてくれた。また、免許更新の講習が安全運転を目指す意志をリロードしてくれるのと同じ効果が、本書にもあった。 一つ例を挙げると、著者の場合は免許取得後に知人を乗せての運転中、同乗者 (後部座席) に対するシートベルト着用義務に違反して減点されている件。後部座席の様子は直接は見えにくいし、この義務は、自身になんらかの手順として定着させるまでが難しいのかもしれない。私の初期の頃を振り返ると、「車内全員のシートベルト着用をまず確認→車のエンジンをかけるのはそれが終わってからにするべし」というコツをどこかで読んでいて、この順番を意識するようにしたんだった。本書は、こんな初心も思い出させてくれる。 --- ### ネットカメラ「ATOM Cam 2」所感 - 2021-07-21 URL: https://remoteroom.jp/diary/2021-07-21/ #### 約三千円って。 低価格なネットワークカメラである[ATOM Cam 2](https://www.atomtech.co.jp/series/atomcam2/)を購入しました。購入動機としては次の通り。 - 気象や空模様に興味を持っている子どもが、このカメラをiPadからコントロールして、雲の動きなどのタイムラプス動画を撮って遊ぶのにちょうど良いかも (「夏休みの自由研究」ネタ的に) - モバイルバッテリーで駆動して、自動車や自転車に積むとおもしろい動画が撮れるかも - エッジAIってどんなものか知りたい #### 発注から到着まで - 発注: 2021-07-18 (日) 夜に、[ATOMストア (公式サイト)](https://www.atomtech.co.jp/series/atomcam2/)で1台発注。兵庫県への送料込みで3,680円です - 到着: 2021-07-20 (火) 昼に、ゆうパックで到着 #### セットアップ ATOM Cam 2のセットアップは、最初にスマホに[専用アプリ](https://www.atomtech.co.jp/app/atom-dl/)をインストールして、2.4GHz帯の無線LAN環境下で進めることになります。セットアップ手順はアプリの案内の通りに進めると簡単で、途中には次のような場面もあり、先進的だなあと私は妙に楽しくなりました。 - スマホの画面に表示されるQRコードをATOM Cam 2のカメラに「映す」 - セットアップ状態をATOM Cam 2が「喋る」 なお、本体の底から挿入するmicroSDカードについては、私の環境では64GBのものは認識がされず (認識させる裏技はあるのかもしれない)、32GBのものは一発で認識OKでした。これは[公式ページの仕様](https://www.atomtech.co.jp/series/atomcam2/2/)通りの挙動に思われます。 #### Hacking! 今回届いたATOM Cam 2の初期ファームウェアのバージョンは`4.58.0.32`で、セットアップ中にファームウェア更新を実施すると`4.58.0.56`へ更新されました。このバージョンでも、下記ページで紹介されているハックは効き目があり、 - [例のごとくATOM Cam2を使い倒す\(telnetdとftpdを使う\) \- honeylab's blog](https://honeylab.hatenablog.jp/entry/2021/05/26/022510) ATOM Cam 2でtelnetdとftpdが稼働してサービスしている状態を作れます。つまり、専用アプリを使わずとも、内部の`/media/mmc/`に保存される画像ファイルをLAN内から取得できるので、いろいろと遊べそうです。 ``` $ nmap -Pn 192.168.1.XXX # ATOM Cam 2のIPアドレス Starting Nmap 7.80 ( https://nmap.org ) at 2021-07-21 00:58 JST Nmap scan report for 192.168.1.XXX Host is up (0.010s latency). Not shown: 997 closed ports PORT STATE SERVICE 21/tcp open ftp 23/tcp open telnet 9999/tcp open abyss Nmap done: 1 IP address (1 host up) scanned in 0.36 seconds ``` #### 感想 - そこそこ広い画角で感度も悪くない光学系で、多様な用途に問題なく使えそう - エッジAIによる動体検知機能などを備え、監視カメラとして多機能 (想定する第一の利用形態はこれなのであろう) - 防水・防塵であることは「夏休みの自由研究」ツールとして頼もしい (熱に強いとは言ってないので注意!) ほぼ衝動買いでしたが、それをまったく後悔させない、良いガジェットな予感がします。これは複数買いする方もいるだろうと思います。 ##### 作例: 夜間タイムラプス 下記の動画は、ATOM Cam 2を付属の磁石付きスタンドで窓際に取り付けて、ナイトモードで夜空を5秒間隔で1時間ほど撮影したタイムラプスです。専用アプリは高機能かつ操作がわかりやすくできており、このような動画を手軽に撮れそうです。 --- ### 電子図書館の対応を追加 ~借りている本情報のJSON化スクリプト~ - 2021-07-18 URL: https://remoteroom.jp/diary/2021-07-18/ [先日の記事]()に書きました、「図書館で借りている本の情報をJSON化し、返却期限が近いものを通知するスクリプトのセット」 に関して。あくまで神戸市の図書館専用のものですが、機能追加のお知らせです。 #### 2つのサイトをまたごう 実生活における私の図書館の利用としては、実物の本を借りる「[神戸市立図書館 (神戸市図書館情報ネットワーク 蔵書検索システム)](https://www.lib.city.kobe.jp/)」の他に、データとしての本を借りる「[神戸市電子図書館](https://www.d-library.jp/kobe/)」も利用することがあります。しかしながら、この2つのウェブサイトは別立てのものなので、返却期限を確認するなら2箇所を横断して行う必要があり、うまく省力化したい。 そこで、前者に加えて後者で借りている本にも対応でき、かつ、この両方のウェブサイトの情報から同じ構造のJSONを出力するように、スクリプトのセットを改造しました。 |スクリプト名|内容| |---|---| |`book2json_opac.py`|神戸市立図書館で借りている本の情報をJSON化するPythonスクリプト| |`book2json_d-library.py`|神戸市電子図書館で借りている本 (資料) の情報をJSON化するPythonスクリプト| |`json2alert.py`|`book2json_{opac,d-library}.py`が出力するJSONを読み込み、返却期限が近い本の書名を出力するPythonスクリプト| |`bookcheck_sample.sh`|`book2json_{opac,d-library}.py`と`json2alert.py`を組み合わせて起動するbashスクリプトのサンプル| GitHub にて内容を随時更新していますので、よかったらご参考にどうぞ。 - [mah\-jp/liblib: 神戸市立図書館・神戸市電子図書館で借りている本と予約している本の情報をJSON化するスクリプト+返却期限が近い本と取り置き中の予約本を通知するスクリプト](https://github.com/mah-jp/liblib) ##### 今後の予定 今回加えた「神戸市電子図書館」対応を発展させると、この電子図書館サイトにある次の問題を軽減するような機能追加も、後々できるかな……と妄想中です。 - 神戸市電子図書館サイトでは[本 (資料) を借りるための“予約”ができる](https://www.d-library.jp/kobe/g0108/guide/#reserve_book)のですが、自分に予約の順番が回ってきて「取置中」状態に変わったことをメールなどで通知してくれる手段が、現時点では存在しないようです - そのため、サイトにアクセスして行うしかない予約状況の確認を怠っている場合、本の取置中に気づかぬまま、取置期間が終了して予約が自動キャンセルされてしまうことがあります - これは不便かつかなり残念なので、「取置中」状態を自動通知する機能を実装したいところ #### Twitterメモ: 思いつき→実装 #### 参考リンク - [図書館で借りている本の情報をJSON化し、返却期限が近いものを通知するスクリプトのセット]() \[2021-07-14\] --- ### 図書館で借りている本の情報をJSON化し、返却期限が近いものを通知するスクリプトのセット - 2021-07-14 URL: https://remoteroom.jp/diary/2021-07-14/ #### 作ってみた 図書館で借りた本の返却忘れを防ぐための、次のスクリプトのセットを作って、どうせならと[GitHubで公開](https://github.com/mah-jp/liblib)しました。「神戸市立図書館」専用です。 1. `book2json.py`: 神戸市立図書館で借りている本の情報をJSON化するPythonスクリプト 2. `json2alert.py`: `book2json.py`が出力するJSONを読み込み、返却期限が近い本の書名を出力するPythonスクリプト 3. `bookcheck_sample.sh`: `book2json.py`と`json2alert.py`を組み合わせて起動するbashスクリプトのサンプル GitHubの に置いています。 - [mah\-jp/liblib: 神戸市立図書館・神戸市電子図書館で借りている本と予約している本の情報をJSON化するスクリプト+返却期限が近い本と取り置き中の予約本を通知するスクリプト](https://github.com/mah-jp/liblib) 借りている本の情報をいったんはJSON化しているので、データ的に他に流用しやすいかもしれません。よかったらどうぞ使ってみてください。リポジトリの名前は適当に「LibLib (りぶりぶ)」としています。 #### 追記 [2021-07-18] スクリプトを改造しましたので、本記事の続編を書きました。 - [電子図書館の対応を追加 ~借りている本情報のJSON化スクリプト~]() \[2021-07-18\] #### Twitterメモ: 思いつき→実装 #### 参考リンク 上記のLibLibを作って本記事を書いている時、次のページを発見しました。手段として似ているところ違うところ、参考になります。リマインダーとしてSlack通知が欲しい方はこちらが良いかもしれません。 - [図書館の返却期限リマインダーを作りました \- ぽんぽこ日記](https://ponpoko1968.hatenablog.com/entry/library_reminder_by_python) --- ### 【読んだ本】 東京ホロウアウト - 2021-06-26 URL: https://remoteroom.jp/medialog/2021-06-26_book-b09534ht8b/ 仮に2021年6月・7月の今のうちに本書を読めば、東京オリンピックの開催が近づく現実世界と、小説で描かれた世界がシンクロしてしまうかもしれぬ、という怖い想像ができる。この特権は、知的なものと捉えるなら楽しい。 [Wikipedia](https://ja.wikipedia.org/wiki/%E6%9D%B1%E4%BA%AC%E9%83%BD%E5%8C%BA%E9%83%A8)によると、東京23区の人口密度は2021年6月1日現在、15,374人/km2。調べてびっくりだが、私の居住地域の3~4倍だ。このような、人口が集中している大都市で特に起こりうる物流の逼迫という問題を、あるテロ事件をきっかけに具体化する流れで、本書は構築されている。この題材だけでも、様々な物 (生産物・排出物) を地産地消していない現代の都市化が普遍的に行き着く先を暗示しているといえるが、加えて本書では容赦なく、新型ウイルス感染拡大の状況とオリンピック開催都市の事情も、端々に描いていて痛烈だ。こんなに悪いことが重なるなんて出来すぎてる話なのだが、皮肉にも今はそれが現実……。 巻末のあとがきおよび列挙された参考文献等からは、物流に関わる業に、著者が焦点をあてた理由を生々しく感じ取ることができた。社会を機能させている豊潤な物流は様々な人のぎりぎりの働きで支えられているのだという実情を、本書は背景に持っていて関連の描写も細かいためだろうか、私にとっては読後感がドキュメンタリーのそれに少し似ているところがある。 #### Twitterメモ --- ### Oracle Cloud InfrastructureのArmインスタンスでNested VMしてx86_64を動かす - 2021-06-22 URL: https://remoteroom.jp/diary/2021-06-22/ #### はじめに 本記事は、下記の導入記の派生です。 - [Oracle Cloud InfrastructureのArmインスタンスでリモートデスクトップしたいのでxrdpを使う: Oracle Linux編 \[2021-06-13\]]() - [Oracle Cloud InfrastructureのArmインスタンスでリモートデスクトップしたいのでxrdpを使う: Ubuntu編 \[2021-06-14\]]() Oracle Cloud Infrastructure (OCI) の無料枠「Always Free Arm」 (aarch64) のインスタンスを使えるようにした後、次に思いつくのは、「OCIのArmアーキテクチャの上で、x86_64アーキテクチャは動かせるのだろうか?」という妄想です。実際にやってみると一応は動くようなのでその記録です。 - 対象インスタンス: [Oracle Cloud Infrastructure (OCI)](https://www.oracle.com/jp/cloud/) 上の「OCI Ampere A1 Compute」の、 - Ubuntu 20.04 (aarch64) #### QEMUとx86_64 OSの導入手順 最初に、Oracle Cloud InfrastructureのArmインスタンスにて、RDP接続できるデスクトップ環境を用意します。下記記事の手順に沿いますと、Ubuntu 20.04上のXfceデスクトップ環境が用意できます。 - [Oracle Cloud InfrastructureのArmインスタンスでリモートデスクトップしたいのでxrdpを使う: Ubuntu編 \[2021-06-14\]]() ちなみに、OCIのArmインスタンス自体がQEMU+KVMにて構築されているようです。今回はこの上に仮想マシンを作る、いわゆる「Nested Virtualization」を行います。 ``` dmesg | grep QEMU | grep BIOS [ 0.343414] DMI: QEMU KVM Virtual Machine, BIOS 1.4.1 12/03/2020 ``` ##### QEMUを導入 OCIのArmインスタンスに、QEMUをインストールします。Ubuntu 20.04では次の通り。 ``` ### インスタンスにて sudo apt update sudo apt install qemu-system-x86 ``` ##### x86_64のOSを導入 次に、仮想マシンにx86_64アーキテクチャのお好みのOSをインストールします。OSはここでは試しに[Debian](https://www.debian.org/)を選び、インストール画面では上から2番目の`Install`を選択して適宜進めました。 ``` ### インスタンスのデスクトップ環境にて wget https://cdimage.debian.org/cdimage/daily-builds/daily/arch-latest/amd64/iso-cd/debian-testing-amd64-netinst.iso qemu-img create debian_x86_64.img 10G ### 2CPUでメモリ4GBを割り当て qemu-system-x86_64 -drive format=raw,file=./debian_x86_64.img -cdrom debian-testing-amd64-netinst.iso -boot d -smp 2 -m 4096 ``` 仮想マシンへのOSインストールを完了した後、仮想マシン自体は次のようにすると起動できます。このNested VMの動作は高速ではないかもしれないですが、動いているだけでも偉い!と素直に思います。 ``` ### インスタンスのデスクトップ環境にて qemu-system-x86_64 -drive format=raw,file=./debian_x86_64.img -smp 2 -m 4096 ``` #### 参考リンク ##### Oracle Cloud Infrastructure (OCI) - [オラクル、Armベースのプロセッサのパワーをコア時間あたり1セントで提供、エコシステムを拡張し、 アプリ開発を迅速化 \| Oracle 日本](https://www.oracle.com/jp/corporate/pressrelease/jp20210526.html) - [Nested KVM Virtualization on Oracle Cloud Infrastructure](https://blogs.oracle.com/cloud-infrastructure/nested-kvm-virtualization-on-oracle-iaas) ##### QEMU - [PINE64でx86エミュレータQEMU を動作させる \| 日々生活を楽しむ](https://jump-up.site/2016/09/22/x86-emulator-on-pine64/) - [KVMを使う(ディスク性能編) – さくらインターネット研究所](https://research.sakura.ad.jp/2010/03/23/kvm-diskperf1/) --- ### Oracle Cloud InfrastructureのArmインスタンスでリモートデスクトップしたいのでxrdpを使う: Ubuntu編 - 2021-06-14 URL: https://remoteroom.jp/diary/2021-06-14/ #### はじめに 本記事は、下記の導入記の続きです。 - [Oracle Cloud InfrastructureのArmインスタンスでリモートデスクトップしたいのでxrdpを使う: Oracle Linux編 \[2021-06-13\]]() たとえば非力なChromebookから普段使いできる強力なリモートデスクトップ環境を、Oracle Cloud Infrastructure (OCI) の無料枠「Always Free Arm」 (aarch64) の中で作ってみたい!と考えておりまして、前回のOracle Linuxに続き、今回はUbuntuを試したのでその記録です。 - 対象インスタンス: [Oracle Cloud Infrastructure (OCI)](https://www.oracle.com/jp/cloud/) 上の「OCI Ampere A1 Compute」の、 - c) Ubuntu 20.04 (aarch64) 結果としては比較的簡単に Firefox, Visual Studio Code, LibreOffice が動作するデスクトップ環境を整えられました。今後は、このインスタンスに最大で4コア・24GBメモリを割り当てて楽しく使っていきたいと思います。 #### c) xrdp導入手順 (Ubuntu 20.04の場合) Ubuntu 20.04 (aarch64) のインスタンスを起動させた後、次の手順でコマンドを実行します。デスクトップ環境はXfceとしています。 ``` ### 作業PC ssh -L 3389:localhost:3389 ubuntu@対象インスタンス ### 対象インスタンス sudo apt update sudo apt install xrdp sudo apt install xfce4 # 途中の「Configuring lightdm > Default display manager」では「lightdm」を選択する sudo sed -i.original -e 's/allowed_users=console/allowed_users=anybody/g' /etc/X11/Xwrapper.config # ←「allowed_users」の行を置換 echo "xfce4-session" > ~/.xsession sudo passwd ubuntu ### 作業PC ### RDP接続ソフト (例: remmina) で、localhost:3389へ接続して動作確認する ``` Firefox, Visual Studio Code, LibreOfficeの導入は標準的な方法でできましたので、割愛します。 #### 参考リンク ##### Oracle Cloud Infrastructure (OCI) - [オラクル、Armベースのプロセッサのパワーをコア時間あたり1セントで提供、エコシステムを拡張し、 アプリ開発を迅速化 \| Oracle 日本](https://www.oracle.com/jp/corporate/pressrelease/jp20210526.html) ##### Ubuntu, xrdp - [第621回 Ubuntu 20\.04 LTSでxrdpを使用する:Ubuntu Weekly Recipe|gihyo\.jp … 技術評論社](https://gihyo.jp/admin/serial/01/ubuntu-recipe/0621) --- ### Oracle Cloud InfrastructureのArmインスタンスでリモートデスクトップしたいのでxrdpを使う: Oracle Linux編 - 2021-06-13 URL: https://remoteroom.jp/diary/2021-06-13/ #### はじめに Oracle Cloud Infrastructure (OCI) のheadlessな、下記のインスタンスでGUIを使おうと思い、[xrdp](http://xrdp.org/)を導入する手順の記録です。手順の中の「000.000.000.000」は、対象インスタンスのIPアドレスです。 - 対象インスタンス: [Oracle Cloud Infrastructure (OCI)](https://www.oracle.com/jp/cloud/) 上の「OCI Ampere A1 Compute」の、 - a) Oracle Linux 7.9 (aarch64) - b) Oracle Linux 8.3 or 8.4 (aarch64) 手元の作業PCは、SSHでのX転送が可能な状態を前提としています。また、リモートデスクトップとしては、個人的には「[Chrome Remote Desktop](https://remotedesktop.google.com/headless)」を最も使い慣れているのですが、LinuxのARM (aarch64) 向けのGoogle公式パッケージが現時点では存在せず、非公式パッケージで多少試しましたが導入は無理そうだったので、xrdpに至っています。 かなり我流でやってみた手順ですので、妙なところがあるかもしれません。参考程度にどうぞお願いします。 #### a) xrdp導入手順 (Oracle Linux 7.9の場合) ここではFedora Projectの「epel」を利用しました。Oracle Linuxに用意されている「ol7_developer_EPEL」を用いると、途中の`xorgxrdp-0.2.10-1.el7.aarch64`導入時に依存関係で引っかかるようでしたので。 ##### 1. X Window SystemとXfceを導入 - Xfce公式サイト: ``` ### 作業PC ssh opc@000.000.000.000 ### 対象インスタンス sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm # 以降epelが有効な状態になる sudo yum update sudo yum groupinstall "X Window System" "Xfce" ``` ``` ### 対象インスタンス sudo vim /etc/pam.d/xserver # ←「auth required pam_console.so」を「auth required pam_permit.so」へ変更する sudo vim /etc/X11/Xwrapper.config # ←「allowed_users=anybody」を追記する sudo vim /etc/ssh/sshd_config # ←「X11UseLocalhost no」を設定する sudo systemctl reload-or-try-restart sshd echo "xfce4-session" > ~/.Xclients chmod +x ~/.Xclients startx # →プロセスがエラー終了しないならとりあえずOK、Ctrl+Cで止める exit ### 作業PC ssh -O exit opc@000.000.000.000 ``` ##### 2. X転送でxcalcをテスト ``` ### 作業PC ssh -Y opc@000.000.000.000 # →「X11 forwarding request failed」のエラーが出ないことを確認する ### 対象インスタンス sudo yum install xcalc # XアプリならもちろんxcalcじゃなくてもOK xcalc # 作業PCの画面にxcalcが表示されたらXは動いている exit ### 作業PC ssh -O exit opc@000.000.000.000 ``` ##### 3. xrdpを導入してテスト ``` ### 作業PC ssh -L 3389:localhost:3389 opc@000.000.000.000 ### 対象インスタンス sudo yum install xrdp sudo systemctl enable --now xrdp sudo passwd opc ### 作業PC ### RDP接続ソフト (例: remmina) で、localhost:3389へ接続して動作確認する ``` #### b) xrdp導入手順 (Oracle Linux 8.3 or 8.4の場合) - GNOME公式サイト: ##### 1. X Window SystemとGNOMEを導入 ``` ### 作業PC ssh opc@000.000.000.000 ### 対象インスタンス sudo yum update sudo yum groupinstall "Server with GUI" ### 対象インスタンス sudo vim /etc/X11/Xwrapper.config # ←「allowed_users=anybody」を追記する startx # →プロセスがエラー終了しないならとりあえずOK、Ctrl+Cで止める exit ### 作業PC ssh -O exit opc@000.000.000.000 ``` ##### 2. X転送でxcalcをテスト ``` ### 作業PC ssh -Y opc@000.000.000.000 # →「X11 forwarding request failed」のエラーが出ないことを確認する ### 対象インスタンス sudo yum --enablerepo=ol8_developer_EPEL install xcalc # XアプリならもちろんxcalcじゃなくてもOK xcalc # 作業PCの画面にxcalcが表示されたらXは動いている exit ### 作業PC ssh -O exit opc@000.000.000.000 ``` ##### 3. xrdpを導入してテスト ``` ### 作業PC ssh -L 3389:localhost:3389 opc@000.000.000.000 ### 対象インスタンス sudo yum --enablerepo=ol8_developer_EPEL install xrdp sudo systemctl enable --now xrdp sudo passwd opc ### 作業PC ### RDP接続ソフト (例: remmina) で、localhost:3389へ接続して動作確認する ``` #### 追記 [2021-06-14] Oracle Linux編に続き、Ubuntu編も書きました。 - [Oracle Cloud InfrastructureのArmインスタンスでリモートデスクトップしたいのでxrdpを使う: Ubuntu編 \[2021-06-14\]]() #### 参考リンク ##### Oracle Cloud Infrastructure (OCI) 「Always Free Arm」の無料枠が、4Core・24GBの大盤振る舞いです。Instanceを複数台作ったら、この枠の中で各スペックを調整できます。 - [オラクル、Armベースのプロセッサのパワーをコア時間あたり1セントで提供、エコシステムを拡張し、 アプリ開発を迅速化 \| Oracle 日本](https://www.oracle.com/jp/corporate/pressrelease/jp20210526.html) - [ASCII\.jp:オラクル、OCIで“1コア=1セント/時間”のArmベースインスタンスを発表](https://ascii.jp/elem/000/004/056/4056339/) ##### EPELリポジトリ - [EPEL \- Fedora Project Wiki](https://fedoraproject.org/wiki/EPEL) - [あらためてEPELリポジトリの使い方をまとめてみた \- Qiita](https://qiita.com/yamada-hakase/items/fdf9c276b9cae51b3633) ##### chrome-remote-desktop Oracle Linuxの`chrome-remote-desktop-88.0.4324.150-1.0.1.el8.aarch64`で、下記の現象に引っかかった気がします。 - [1039016 \- chrome\-remote\-desktop/start\-host : Couldn't start host: OAuth error\. \- chromium](https://bugs.chromium.org/p/chromium/issues/detail?id=1039016) --- ### 【読んだ本】 ぼくは「つばめ」のデザイナー - 2021-06-09 URL: https://remoteroom.jp/medialog/2021-06-09_book-4062125323/ あるテーマに沿って選別された数冊の本が袋の中に入っており、それを中身がわからないまま借りる「おたのしみ袋」の試みが近所の図書館でなされていて、この本は「鉄道にもっと詳しくなれる本」の袋に入っていたものだ。漢字にはふりがなが振ってある。図書館によるさすがのセレクションで、7歳の子ども用にと思っていたが、面白くて私がしっかり読む羽目になった。 著者は、おそらく九州地方では知らぬ人はいないと私が勝手に思う、[JR九州の多数の個性的な列車](https://www.jrkyushu.co.jp/trains/)を手がけているデザイナーの水戸岡鋭治氏である。 九州新幹線「つばめ」をデザインする過程での様々な関わり、自身の生い立ち、デザインの哲学といったものが、平易な言葉遣いで語られている。平易さによって、飾り気が意味を淀ませることなく、著者の心情が読者へ隔たりなく伝わる。幼少の頃にどんなことがきっかけで何を印象深く感じて、現在まで考え続けているかと著者が述べている部分は、本書のメインターゲットであろう子ども達に、そっと“種”を残してくれそうである。その種は、「自分の中の着想は大切に思い続けて育てていくことができるよ」というメッセージのようなものだ。 また私は、著者が述べている、駅環境のみならず鉄道車両の内外を地方の“公共デザイン”の枠で捉える視点と、デザイン時に支えてもらったという関連メーカーの“職人気質”に、最近の社会情勢に感じる自分のもやもやを晴らしてくれる共通要素を、直感した気がしている。私のもやっとしたイメージを言葉にすると、最近の社会情勢は、様々な「全体と個」や「大きい個と小さい個」のパワーバランスが偏ったままの平衡状態に思える。他方、著者が言及した先ほどの2つはどちらも、ある主体が直近の利益を最優先で追求したものではない、広い視野から普遍的な本質を視ているゆえの行為で、これが良い動的平衡 (個を含む全体の幸せ?) に必要な要素なんじゃないか……、という直感です。 くうう、自分に残された意外な“種”を具体的にうまく書き表せないまま、今回の筆を置きます。 --- ### アリの巣づくり観察: 手軽なキットで始められておもしろい - 2021-06-06 URL: https://remoteroom.jp/diary/2021-06-06/ 我が家では生物 (植物を除く) はまだ飼っていないが、子どもの興味関心が、そちらにも向いてきた気がする。そこで、アリの観察でも始めてみようと、学研の次のキット『ふしぎの国のアリのすハウス』を買ってみた。 - [科学と学習PRESENTS『ふしぎの国のアリのすハウス』 | 学研出版サイト](https://hon.gakken.jp/book/1575073600) 届いた箱には「Gakken STEAM」と書かれており、次のように説明されている。文理融合型・分野横断型教育に関係する、「STEM」にArtsを加えた「STEAM」という新しいキーワード、覚えておこう。>私 > STEAM (スティーム) は「Science (科学)、Technology (技術)、Engineering (工学)、Arts (芸術)、Mathematics (数学)」の頭文字をとったことばで、感性豊かに思考し、創造する力をもった科学技術人材を育成するための総合的な文理融合型教育です。 このキットには、「ハウス」という名の厚さ1.5cmの薄型観察用ケースや、アリが砂をどこへ運んだかを識別しやすい2色の砂など必要な物が含まれていて、2,000円弱でなかなかお手頃だと思う。日本でメジャーな種類のアリや、生態を解説しているガイドブックも付いている。 #### 1日目 6月のある晴れた日。まずは自宅で、2色の砂と指定量の水を入れたハウスを最初に完成させ、次に、それを近所の公園へ持参してアリを採取した。 - 適切な大きさのアリが出入りしている巣を発見するのがまず意外に難しい。したがって、女王アリの確保なんて夢のまた夢であった - キットに付属の「アリとりカプセル」でアリを確保しようとしたが、はちみつを入れていても、もちろんすぐにはアリは来てくれない - なんとまあ、公園にいた好奇心旺盛な子どもたちのほうが群がってくるので、結局、みんなで意気投合してワイワイとアリを手で捉えたりした (アリにダメージを与える可能性があるので本来は良くない) おそらく「クロヤマアリ」の、同じ巣の出身であろう14匹ほどを確保してきて飼育を開始。だが、2匹は弱っていたのか、出身の巣が違ったのか、動かなくなってしまった (死)。餌は奢って、お酒の瓶のような下記のメープルシロップを用意した。100均ショップで売られている、いわゆる昆虫ゼリーでも良いらしい。 ハウスをリビングに設置し、いったいどこから掘るのか?と家族全員で見守っていたところ、我が家のアリたちは、ハウスの片方の端から地中へ向かって穴を掘り始めている。 #### 2日目 アリたちがひたすら働く様子、その一匹一匹の個性を見抜くことまでは出来ないが、まったく見飽きない。子どもがiPadでタイムラプス動画を撮って楽しんでいるので、私もやってみたり。 午後には、再び公園へ出かけ、また好奇心旺盛な子どもたちに助けられながら、先日と同じ巣出身のアリを5匹確保した。これら新入りをハウスに追加したところ、混乱は特に起こっていないようだ。 --- ### 【読んだ本】 はやぶさ2 最強ミッションの真実 - 2021-05-31 URL: https://remoteroom.jp/medialog/2021-05-31_book-4140886390/ 工学と理学の醍醐味と、そしてプロジェクトマネジメントの緊迫感を味わえる濃い新書だ。 工学としては、地球からN億キロメートル先では機械が自律飛行するしかないが、GPSなどもちろん整備されていない宇宙空間で、Mメートルの精度を出して機械にサンプルを回収させて地球に送る、という挑戦が想像できないくらい偉大だ。理学としては、誰も手にしたことがない、C型小惑星 (リュウグウ) のサンプルの魅力や価値が計り知れないのは、私でも容易に想像できる。これから分析がなされ、どのような新しい仮説や謎に繋がっていくのだろう。 本書ならではかもしれないと、私が感じたポイントのひとつは、「はやぶさ2」のプロジェクトチームの多彩な構成や、運営の生々しい状況が知れるところ。これはプロジェクトマネージャー本人が記した書であり、真実と銘打ったタイトルはまさに言葉のままで、伊達ではなかろう。人間には、個性や感情の起伏や疲労やミスが標準装備されていて、そのような特性を内包しながら巧みに運用されるプロジェクトチームは、強くなり、幸運を掴めるチャンスが降りてくる。 もうひとつのポイントは、「はやぶさ2」プロジェクトにおいて一定の成功が得られたあとには冒険を避ける、いわゆる安全側に傾く、組織 (JAXA) の経営的な判断を、チームでの科学に基づいた確度の高い判断を交えて議論を重ねて変えていった、と語られているところ。想像するにこれは、理念 (この場合は「科学の追求」) が組織全体で共有されている、チームの出す判断が信頼され対等に扱われている、という内部条件が整っていれば理屈上は到達できる姿に思う。しかし言わずもがなで、この内部条件を整えられる組織体のほうが稀な世であるから、本書での実践には奮起させられるのだ。 --- ### スーパーボンバーマンRのために、Nintendo SwitchへXboxコントローラーを繋ぐ - 2021-05-30 URL: https://remoteroom.jp/diary/2021-05-30/ #### ボンバーマン対戦 私はなぜか、[ボンバーマン](https://ja.wikipedia.org/wiki/%E3%83%9C%E3%83%B3%E3%83%90%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA)を遊ぶのが好きで、Xbox 360時代には、やや[TPS](https://ja.wikipedia.org/wiki/%E3%82%B5%E3%83%BC%E3%83%89%E3%83%91%E3%83%BC%E3%82%BD%E3%83%B3%E3%83%BB%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B2%E3%83%BC%E3%83%A0)な[BOMBERMAN Act:Zero](https://ja.wikipedia.org/wiki/BOMBERMAN_Act:Zero)にどハマリしてオンライン対戦を飽きずにやっていた。……と書いてからびっくりしたのだが、BOMBERMAN Act:Zeroの登場は2006年8月らしい。あれから約15年過ぎているのかよ。 さて閑話休題。最新版のボンバーマンとして、[スーパーボンバーマンR オンライン](https://www.konami.com/games/bomberman/online/jp/ja/)が2021-05-27に配信開始されたと家族から聞いた。 これはオンライン対戦が無料で、クロスプラットフォームで行えるのだという。Nintendo Switchで試してみるとやはり面白い。バトルの種類の一つ「クイックマッチ」は、最初は64人が16の部屋に分かれて始まる。一定時間経過後に部屋が間引かれ、勝ち残っている人らが残りの部屋に集まって、繰り返し戦うシステムだ。自分は強いわけでもなく全戦全勝で生き残れるなんて絶対ないんだけども、爆風を操りながらの人間同士の駆け引きは、ほんとうに飽きない。 #### 好みのコントローラーを使いたい ボンバーマン対戦をあまりにやりすぎて、SwitchのJoy-Conの、特に左側の[ひ弱なアナログスティック]() (方向レバー) を壊してしまいそうだから、事前に対策をすることにした。うちには、[パソコン用に買っていた](#%E8%B3%BC%E5%85%A5%E3%81%97%E3%81%9F%E3%82%82%E3%81%AE2-%E3%82%B2%E3%83%BC%E3%83%A0%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC)次のXboxゲームコントローラーがある。握りやすくて操作感の良いこいつを、Switchに繋げることができないだろうか? #### Mayflash MAGIC-NSというアダプター 調べてみると、ゲーム機本体とコントローラの間に介在させることで各種の規格を変換してくれる、アダプターがあるらしい。もちろんどのゲーム機メーカーも非公認な怪しい世界なわけだが、定番は「Mayflash MAGIC-NS」というものだと分かったので発注。2日後に宅配された。 |分類|品名|備考| |----|----|----| |コントローラー アダプタ|Mayflash MAGIC-NS|Amazon.co.jp| Mayflash MAGIC-NSの設定は、付属の取扱説明書に沿って進めればよかった。にも説明が載っているのでこちらを参考にもできる。ファームウェアは現時点で最新の「V1.32」で動作確認。 今回のアダプターを使うことで、まずはSwitchの「スーパーボンバーマンR オンライン」で、Xboxコントローラーの操作感 (と若干の丈夫さ?) が享受できることは確認できた。これからしばらくはボンバーマン修行に勤しむ! --- ### 【読んだ本】 気象予報と防災―予報官の道 - 2021-05-16 URL: https://remoteroom.jp/medialog/2021-05-16_book-4121025202/ 太陽の放射エネルギーの地球での吸収量と、地球からの放射量とを比較すると、地球の低緯度では前者が大きく、高緯度では後者が大きい。したがって、地球の気象と海流は、低緯度と高緯度での熱エネルギーが交換されるように発生している。理科で昔習ったこの自然環境の原理原則を、思い出させてくれるかたちで本書は始まる。 さらに、気圧配置を記した天気図からは、水平方向の気圧配置のみならず、高さ方向の大気状態も読み取れるということも再認識させられる。つまり、テレビなどで図解される天気図は、図上の気圧配置を立体として再構成できる情報を持つわけだが、普段の私はそれを意識しておらず、天気図を二次元でしか解釈していなかった。 というわけで本書に私は、気象予報・天気予報を「自分はほとんど分かっていない」とまず啓発させられた。 また、気象予報官の役務の内容やそれに向かう姿勢が、本書の半分以上を割いて詳しく紹介されている。各気象台にて毎日数回予報を出すまでの段取り、予報の発表内容をどのような原則で定めているか、災害時には実際どのような対応を行っているのか。少し驚いたのは、気象庁において予報に関する判断基準が厳格に定められているのはもちろん、その客観的な基準に関する見直しが、予報技術の進化や警報が社会に及ぼす影響を加味して適宜行われており、見直しの頻度は低くなさそうという点だ。 このような客観的な基準の運用方法は、科学に基づけば至極当然のことだろうが、今は特別、背筋が伸びる思いだ。なぜなら、世界と日本が苦しんでいるこのコロナ禍の最中、「新型コロナウイルスに関する国家的な対応の武器は科学であり、その陣頭指揮は、気象災害に対する体制と同様に、科学的な判断をベースにして動く組織が執るべき」と私は考えているから。 横道に逸れたが、それは、防災の観点で社会と真摯に向き合うことを突き詰めている著者の言葉の数々が、時代や分野を問わず、普遍的な示唆に富むと感じられるゆえだ。 #### 備考 本書の第八章「防災に軸足を移す」で取り上げられていた、「避難勧告と避難指示の違い」に関して。災害対策基本法がこの度改正され、2021-05-20より、前者の避難勧告は廃止になるとのこと。 - [災害対策基本法等の一部を改正する法律案が閣議決定されました : 防災情報のページ \- 内閣府](http://www.bousai.go.jp/kohou/oshirase/r3taisaku.html) --- ### 12年ぶりのテレビ刷新で有機ELを選ぶ - 2021-04-29 URL: https://remoteroom.jp/diary/2021-04-29/ #### 買い替えのきっかけ 予備的な部屋に置くサブテレビとして大画面のものが欲しい、という実家からの声を聴いた。そこで私は、サブでいいなら、我が家で今使っている40インチを実家に譲ろうと考えた。同時に、我が家の分を刷新しよう。 我が家の今のリビングテレビは東芝[REGZA 40FH7000](https://www.global.toshiba/jp/news/corporate/2008/09/pr1806.html) (2009年4月購入)。かなりの年代物なので液晶画面の輝度は少々下がってきているが、一応は完全に動作している。これを実家に送付して使ってもらい、もし故障したら、新しいテレビの手配をまた考える。 #### LG OLED48CXPJA [48インチ] 我が家の次のリビングテレビに求める要件を整理すると、「画面は40〜50インチの4K解像度で有機EL」「安価」「BS 4Kチューナー搭載 (現行機種はほとんど問題なさそう)」「録画機能」「YouTubeなどのネット動画サービスにある程度対応」「機敏な動作」といったところ。家電店の店頭でのリアルな表現力によく見惚れるので“有機EL”にはこだわるが、それ以外はまあ、今どき一般的な要件だろう。 これらの要件で商品検索するための価格.comでのリンクは となる。 上記リンク先に並ぶ各機種を参考にしながら、今回私はLGエレクトロニクス OLED48CXPJAを選択し、価格.com非掲載の最安値のサイトに発注した。 |分類|品名|購入価格(円)|備考| |----|----|---:|----| |48型テレビ|[LGエレクトロニクス OLED48CXPJA](https://www.lg.com/jp/tv/lg-OLED48CXPJA)|121,800円 (税込)|[アークマーケット楽天店](https://item.rakuten.co.jp/arc-market-kaden/4989027016545/)| ##### Why? LG OLED48CXPJAを選んだ理由としては、競合機種の中で最安という点と、Wiiのコントローラーのように空間で動かす、LGのマジックリモコンに家電店で触れたことがあって、その操作性に興味惹かれていたという点もひとつ。 機能についての下調べが足りず発注後に気づいたのは、現在の40FH7000で時々使う「画面分割 (2画面機能)」と「音付きの早見再生」機能は、OLED48CXPJAには非搭載であり、競合の[REGZA 48X8400](https://kakaku.com/item/K0001261214/)にはあったこと。これは仕方がないと割り切る。また、要件のひとつの「機敏な動作」は、ウェブの複数のレビュー記事を参考にしておそらく大丈夫だろうと判断したが、本来は実機確認したほうが絶対に確実だ。 購入のタイミングについては次のように考えた。今回のOLED48CXPJAは2020年型で、[LGの2021年型の有機ELテレビは発表済み](https://av.watch.impress.co.jp/docs/news/1300090.html)であり日本でも発売間近だろうから、2020年型はまもなく型落ちとなる機種である。したがって、2020年型は現時点で在庫限りだったり[価格推移](https://kakaku.com/item/K0001254399/pricehistory/)的にはほぼ底値で、今が買い時であろうと。 #### 使用感 OLED48CXPJAの到着予定はまだ不明で、遅い場合は5月連休明けの到着かもしれない。実際に使ってみて、なにかネタになることなどあればブログに書きます。 ##### 追記 \[2022-08-08\]: パネルノイズクリアが実行された 本日 (2022-08-08)、テレビ使用中に「パネルノイズクリア」が始まった。これはLGの下記公式ページによると、長時間 (2,000時間) ごとの視聴で実行されるものだという。つまり我が家のテレビ視聴は、使用開始から約15ヶ月で2,000時間に達するということなのか? 意外に見ているんだな……。 - [よくあるご質問: \[ 有機ELテレビ \] パネルノイズクリアを実行後も、テレビを点けるとメッセージが出てくる \| LG Japan](https://www.lg.com/jp/support/product-help/CT20160005-20151014245277) ##### 追記 \[2023-04-26\]: スティック型SSDを側面端子に接続 このテレビにはお古の外付け1TB HDDを接続してそこに録画番組のデータを保存してきたが、録画した番組がたまに読み出せなくなる事態が度々発生。寿命に近づきつつある1TB HDDの利用はやめ、代わりに今度はSSDの[BUFFALO SSD-PUT1.0U3-BKC](https://www.buffalo.jp/product/detail/ssd-put1.0u3-bkc.html)を購入。横幅23mmのこのスティック型ポータブルSSDは、OLED48CXPJAの向かって左側面にあるUSB端子「USB入力1」に、他のHDMIケーブルなどに干渉することなく挿すことができた。 ##### 追記 \[2023-05-01\]: マジックリモコンを2022年度モデル対応版に交換 OLED48CXPJAに付属の、2年ほど使い続けてきたマジックリモコン「MR20GB」が壊れた。具体的にはスクロールホイールが陥没した状態となった (分解したところ内部の軸受けが折れていた)。同じ型番のものは現在販売されていないので、新しい型番のものを仕入れるのが妥当だろう。そこで、当座の代替手段としてテレビにUSB接続マウスを繋いでスクロールホイールの代わりをさせながら、現在販売中の[MR22GJ](https://www.lg.com/jp/tvs-soundbars/tv-accessory/mr22gj/)を、「OLED48CXPJA」は対応機器に記載されていないが賭けをして購入した。 |機種|OLED 48CXPJAとの対応|販売状況|価格状況| |---|---|---|---| |MR20GB|対応機器に記載有り|販売終了と思われる|不明| |[MR21GB](https://www.lg.com/jp/tvs-soundbars/tv-accessory/mr21gb/)|対応機器に記載有り|「生産完了品」|6,200円〜| |[MR22GJ]https://www.lg.com/jp/tvs-soundbars/tv-accessory/mr22gj/)|対応機器に記載無し|「販売中」|4,145円〜| MR20GBとMR22GJの外観上の違いは次の通りに思う。 - MR22GJはスクロールホイールにギザギザが付いている - 外寸は全く一緒で、ボタン配置は一部変更されている 問題は果たして、2020年度モデルのOLED48CXPJAに対して2022年度モデル対応版のLG-MR22GJは使用できるのか? 実際に試したところ次の通りで、特に支障なく使用できている。 - リモコンMR22GJのストリーミングサービスボタン (アプリ関係) のところの、\[Disney+\], \[U-NEXT\], \[alexa\], \[Google アシスタント\] を押してもテレビOLED48CXPJAは無反応 - その他のボタンは問題なく動作する (MR22GJはちゃんと後方互換なのだな) ##### 追記 \[2026-03-08\]: マジックリモコンを2025年発売版に交換 2023年5月から使用してきたマジックリモコン「MR22GJ」の、決定ボタンやその他のボタンが不調になってきたので、2025年発売版の「[MR25JP](https://www.lg.com/jp/tvs-soundbars/tv-accessory/mr25jp/)」を取り寄せた。基本機能に関するリモコンボタンの互換性は保たれているようで問題なし。細かい点を言うと、例えば「録画リスト」ボタンが増設されていて、「緑」ボタンの長押しをしなくても良くなったのは嬉しい改善点だ。 #### 参考にした記事 - [【西川善司の大画面☆マニア】最強のゲーミング4Kテレビ現る\!? LG 48型は超低遅延&HDMI2\.1対応だ\!\-AV Watch](https://av.watch.impress.co.jp/docs/series/dg/1298133.html) - [「LG OLED48CXPJA」をレビュー。PS5, Xbox Series X/S, 次世代GPU搭載PCに最適な有機ELゲーミングモニタを徹底検証|自作とゲームと趣味の日々](https://jisakuhibi.jp/review/lg-oled48cxpja) 4K有機EL「テレビ」であるOLED48CXPJAを、多くの記事が「ゲーミングモニタ」の土俵で評価を行っていることにびっくり。PCやPlayStation 5等を接続するゲーミングモニタとして優れているんだそうな。しかし我が家では、稼働中のゲーム機はNintendo Switchのみで、遊んでいるゲームはどうぶつの森ぐらいなので、ゲーミングモニタとしての利用度は非常に軽い見込みである。 --- ### ディープラーニング G検定を受けてみたが →合格していた - 2021-03-20 URL: https://remoteroom.jp/diary/2021-03-20/ 筍のように増えている賢いクラウドサービスの中では、ディープラーニング (深層学習) という技術がある程度活用されているだろう。この技術を、自分は今どれだけ知っているか試す気持ちと、職場関連のちょっとした事情 (邪念) とで、日本ディープラーニング協会のG検定 (ジェネラリスト検定) 2021#1を受けた。 - [G検定とは \- 一般社団法人日本ディープラーニング協会【公式】](https://www.jdla.org/certificate/general/) G検定の趣旨は次の通り。 > ディープラーニングの基礎知識を有し、適切な活用方針を決定して、事業活用する能力や知識を有しているかを検定する。 試験時間は120分で、知識問題 (多肢選択式) が220問程度。オンラインにて実施され、自宅PCなどのウェブブラウザの画面を使う。ちなみにG検定よりも専門的な、[E資格 (エンジニア資格)](https://www.jdla.org/certificate/engineer/) という、実際の実装能力を問われる検定試験もある。 #### 使用した教材 G検定に向けての準備としては、2015年に読んでいた『[人工知能は人間を超えるか]()』を復習し、試験一週間前になってしまったがG検定の問題集を1冊購入して対策することにした。 しかし問題集を進めるにつれ、上記の2冊では全く足りないと気づいた。2冊の間を埋める、問題を解く前提となる関連用語の知識が、自分にない。どうやら私は教材検討時の最初に大きな勘違いをしていて、日本ディープラーニング協会が出している次の公式テキストや、[その他の推薦図書](https://www.jdla.org/recommendedbook/)が必要だと分かっていなかった。 だが、残り時間はほぼない中で相当な分量の知識を頭に取り込める見込みも少ない。とにかく今回は、試験対策の腰を上げるのが遅すぎたとほぼ諦めて、一夜漬けで問題集にやっとこさ目を通して、試験日を迎えた。 #### 試験の実際 試験時間120分で220問程度、という事前情報から予想できるように、この検定では、目安として1問に30秒で対応していくスピードが最重要である。時間経過を意識するため、文字が大きいデジタル時計を手元に置いた。 また、試験の直前に実態を把握したのだが、いわゆる“持ち込みあり”試験を彷彿とさせる資料参照を[禁止しているふうではない](https://youtu.be/A508pQ27ISw?t=1193) (この件に詳しく言及しているブログ: [日本ディープラーニング協会G検定でGoogle検索はありなのか? \- kusano\_k’s blog](https://kusano-k.hatenablog.com/entry/2020/11/19/232123))。一方、「G検定はGoogle検定?」というジョークを見かけたほど、ウェブ検索ならよほど切れ味良い技を繰り出さない限り、回答に関する情報を瞬時に得ることは難しい。たとえば、「○○○について、4つの選択肢の中から最も**不適切**なものを選べ」という問題に答えるための検索は、一度で済まなくて工数がかかる。 つまり事実上、頼れるのは自身の脳と記憶だけ、という状況に追い込まれることが必然。その意味で、リアル人間向けのとてもよく出来た試験だ。時計を見ながら全ての問題に目を通しておおよそ答えた段階で、残り時間は10分もなかった。 #### 感想 合否の発表は3月31日からとのこと。自信のほどは……全くありません。G検定に合格したい気持ちの火種がまだあるようだったら、次回の実施2021#2 (2021年7月) に向けて、今回よりまともに準備したいと思います。 ##### 追記 (合格していた) [2021-04-01] 上記のように自信は皆無の状態でしたが、「合格」の通知メールが届きました。G検定のこれまでの回の合格率は、60%程度とほぼ一定です。したがって毎回調整してボーダーラインを定めていると思われ、今回の私の成績は相対的に、ラインよりたまたま上だった、ということかと思います。 - [2021年第1回「G検定」合格率は63\.77%、20代は1467人で最多](https://ledge.ai/jdla-g-kentei-2021-1st-result/) ``` From: "G検定試験事務局" Date: Thu, 01 Apr 2021 13:00:43 +0900 Subject: 【受験結果】JDLA Deep Learning for GENERAL 2021#1 ○○○ ○○ 様 この度は、2021年3月20日(土)開催の JDLA Deep Learning for GENERAL 2021#1 を受験頂き、 ありがとうございました。 下記の通り受験結果をお知らせ致します。 ================= 【 合 格 】 ================= 総受験者数 6,062名 合格者数  3,866名 ※得点および合格ラインは開示しておりません。  あらかじめご承知おきください。 ``` --- ### 子ども用GPS端末『みてねみまもりGPS (第1世代)』開封の儀と超簡単レビュー →第2世代が登場している件 - 2021-03-10 URL: https://remoteroom.jp/diary/2021-03-10/ この春から小学校に通う子どものために、位置情報を通知する専用端末を導入し、登下校時に携帯させてみようと考えています。様々な子ども用GPS端末のなかから、初期費用と通信費が安めという理由で、我が家では『みてねみまもりGPS (第1世代)』を選択しました。 - [【公式】みてねみまもりGPS \| お子さまの成長をやさしく見守ります](https://mitene.us/gps) 意外なことに、SNSのmixiが懐かしい[株式会社ミクシィ](https://mixi.co.jp/)が運営しているそうです。ただ、この位置情報みまもりサービスは2021年3月に開始したばかり。現時点ではウェブ上にレビューが見当たりません。そこで人柱erとして、到着したばかりのデバイスを開封し、写真多めで紹介したいと思います。 #### 購入方法 みてねみまもりGPSは、[公式サイト](https://mitene.us/gps)からリンクされているAmazon.co.jpなどで販売されています。色はどれも淡めで、ホワイト・ブルー・ピンク・グリーンの4色展開です。 |項目|金額| |---|--:| |初期費用|みてねみまもりGPS 本体の購入費| |月額通信費|528円 (税込)| #### 開封の儀 シンプルな外装。「GPS (Global Positioning System)」という単語を知らなければ、このデバイスはどんな働きをするものか、表側からは見当が付かないレベル。 中身は、GPS端末本体、冊子、短めの充電用USB Type-Cケーブル、本体と同系色の専用ストラップです。 くうぅ。この時期の保護者を狙い撃ちする、ちょっと泣かせるメッセージ。 端末本体は、実際の子どもの手のひらよりも一回り小さめのサイズ。 専用アプリインストール用のQRコード。 冊子には、わかりやすいイラストで利用手順が載っています。 #### 利用手順 ##### 1. 専用アプリをインストール 後ほどクレジットカード情報を入力する保護者のスマホに、専用アプリ「みてねみまもりGPS」をインストールします。 - iOS/iPad: - Android: ##### 2. アカウントとGPS端末を登録 専用アプリを起動して次の作業を行います。 - 保護者のメールアドレスを用いてアカウント登録を行います - 月額通信量を支払うためのクレジットカード情報を登録します - USB Type-Cケーブルを使って、GPS端末を充電開始しておきます - 次のアプリ画面にて「新しいGPS端末を連携する」を選択して、GPS端末の側面に印刷されている7文字の英数字を入力します - 5分ほどで、GPS端末とアカウントの連携が完了し、GPS端末の実際の位置情報が、専用アプリの地図画面に表示されるようになります - 専用アプリ画面左上の \[三\] アイコンの中の歯車アイコンを押すことで、たとえばGPS端末の稼働モードを変更できます - 高頻度モード: 最短1.5分間隔でみまもります (初期値) - 省エネモード: 最短3分間隔でみまもります - スリープモード: 次に充電するまでみまもりを停止します ##### 3. 他のスマホでも見守る 保護者スマホ1台の他に、みまもるスマホを追加する場合は次の手順になります。 - 第二のスマホやタブレット (iPad等) にも、専用アプリをインストールし、最初に作ったアカウントとは別のメールアドレスを使って、第二のアカウント登録を行います - 第二スマホの専用アプリにて「認証コードを使ってみまもりに参加する」を選択し、6文字の英数字の認証コードを画面表示します - 保護者スマホの専用アプリ画面左上の \[三\] アイコン > 歯車アイコン > みまもっている人 > みまもる人を追加する を押し、第二スマホに表示されている認証コードを入力します - 第二スマホでも、当該GPS端末のみまもりができるようになります ちなみに我が家では、子どもが使っているiPadに専用アプリをインストールして上記の参加設定を行い、子ども自身が、自分のみまもりに参加する形にしました。地図が好きなので、自身の移動履歴をかなり楽しむんじゃないかと思いまして。 #### 充電LEDの色、リュックへの取り付け GPS端末の充電状態は、点灯中のLEDの色で区別されるようです。赤が充電中、緑が充電完了です。 子どもが持ち歩くリュックへ、GPS端末を専用ストラップを使って取り付けると、次の写真のようになりました。小さなカラビナを併用するとより便利な場合もあろうかと思います。 #### 感想 現在のところは開封日当日における感想にとどまりますが、この『みてねみまもりGPS』を選択して、問題はなさそうに思っています。 - 評価がまだ見当たらない新しいサービスに今回手を出しましたが、GPS端末にはとりあえず初期不良なさそうだし、専用アプリも期待を裏切らない出来 - GPS端末を手に取ると、視覚的な印象よりも重量感があるが、バッテリー容量が1800mAhと大きいせいだろうか - 初期費用+月額通信費の総コストに関して、やはり今のところ最安値クラス? かつ解約がアプリから簡単にできる - [公式サイト](https://mitene.us/gps)によると、よく行く場所を自動で学習して通知等するらしいが、どんな動作をするのか楽しみ (←私個人の趣味) 『みてねみまもりGPS』の利用を続けていき、新しいことがわかればまた続編を書く……かもです。 ##### 追記 (1号機: 位置情報更新されず無反応) [2021-03-13] 「みてねみまもりGPS」を利用して5日目ですが、次のような病状が出ました。初期不良に当たったのかもしれません。 1. 本日の外出にGPS端末を持っていった後、GPS端末は帰宅した状態になっていても、アプリ上のGPS端末の位置は外出先のままで更新されていない。ちなみに最終的な情報でのバッテリー残量は「90%」であった 2. GPS端末に充電しようとUSBケーブルを挿したが、LEDが「赤色」にも「緑色」にもならず、暗いまま点灯しない GPS端末にリセットボタン等はなく、利用者としては何も出来ない状況に陥っています。そこで、パッケージに同梱されていた案内チラシに従って、アプリ内からカスタマーセンターへ問い合わせを開始しました。 ##### 追記 (1号機: 機能復活?) [2021-03-16] 2021-03-13の夜に[上記の病状](#追記-1号機-位置情報更新されず無反応-2021-03-13)が出てそのまま置いていたGPS端末「みてねみまもりGPS」に、本日USBケーブルを挿してみたところ、なんとLEDが「赤色」に点灯しました。充電が開始された証です。そしてスマホ側では次の変化が起こりました。 1. スマホには「端末を充電してください」の通知が到着した。表示されているバッテリー残量は「0%」 2. スマホのアプリ上のGPS端末の位置情報が最新の場所 (自宅) に変わった GPS端末と、「みてねみまもりGPS」サーバとの通信が再開したためと思われます。この状況変化もカスタマーセンターへ連絡済みです。 なお、2021-03-13に発生の今回の無反応現象について、カスタマーセンターからは「ファームウェアの問題の可能性がある。弊社でも至急調査中。ファームウェア修正で対応できる場合にはオンラインにて自動更新予定」と回答を得ています。引き続き様子見しながら、続報を待ちたいと思います。 ##### 追記 (1号機: 位置情報更新されず白色LED点灯) [2021-03-27] [2021-03-16の追記](#追記-1号機-機能復活-2021-03-16)の際に、異常が収まったようだったGPS端末「みてねみまもりGPS」は、本日今度は次のような状況に至ってしまいました。 1. 2021-03-27 15時頃を最後に、アプリ上の位置情報が更新されていない。最終的なバッテリー残量は「90%」 2. 2021-03-27 夜現在、GPS端末のLEDが「白色」点灯状態 (白色点灯に気づいたのは夕方頃) うーむ、これはいったいどうしたものか。カスタマーセンターに再度、GPS端末の故障の可能性について問い合わせをしています。 ##### 追記 (1号機: 本体交換で2号機へ) [2021-04-01] [2021-03-27の追記](#追記-1号機-位置情報更新されず白色led点灯-2021-03-27)の後、「GPS端末は本体故障と考えられるため交換する」とカスタマーセンターから回答があり、本日、宅配便での引き換えの形で代替品 (便宜上「2号機」と表記) を受け取りました。1号機と同じブルー色の、GPS端末「みてねみまもりGPS」2号機は、1号機で遭遇した不具合は発生せず、現在のところ問題なく利用できています。 以上、初物デバイスなりのトラブルも色々あったわけですが、「みてねみまもりGPS」 (2号機) がこのままずっと正常に動作して、この春から小学校生活を始める子どもの軌跡を、日々淡々とマップに描いてくれるならば、親としてとても安心です。 ##### 追記 (2号機: 本体交換で3号機へ) [2021-04-08] [2021-04-01の追記](#追記-1号機-本体交換で2号機へ-2021-04-01)の後、まるでデジャブのようですが、休日の外出に持ち出していた2号機が次のような状況に至ってしまいました。 1. 2021-04-03 11:45頃を最後に、アプリ上の位置情報が更新されていない。最終的なバッテリー残量は「90%」 2. 2021-04-03 21:00時点で、GPS端末のLEDが「白色」点灯状態 3. USBケーブルでの給電を行ってもLEDは白色のまま そのため、再びカスタマーセンターへ問い合わせを行って本体交換となり、2021-04-07に「みてねみまもりGPS」3号機を受け取った次第です。3号機はこれまでと何が違うのか、1号機・2号機からファームウェアなどにどういった修正が行われているのか、詳細は情報提供されておらず不明です。 さて。子どもの小学校通学が数日中にとうとう始まりますので、3号機をぴかぴかのランドセルに取り付けました。今度こそ恒久的に、「みてねみまもりGPS」が毎日正常に動作してくれることを願います! ##### 追記 (3号機: 順調に稼働中) [2021-04-18] [2021-04-08の追記](#追記-2号機-本体交換で3号機へ-2021-04-08)の後から使用している3号機は、約10日過ぎた本日2021-04-18まで、何も問題なく稼働しています。これまでの紆余曲折を考えると嬉しいことです。 バッテリーの容量については、毎日の通学と週末の外出といった通常利用の範囲では、週に1回の充電で余裕で足りるスタミナがあるし、それを1度ぐらい忘れても、つまり2週間ほど充電しなくてもおそらく大丈夫だろうと思われます。また、電波の送受信に関しては、ランドセルの蓋の下にあるポケットや薄手のバックパックのポケットの中に入れておいても、GPS信号を捉えて位置情報を発信してくれるようなので、GPS端末自体をむき出しにしておく必要はなくて、事前に紛失の可能性を減らしておくことができます。 現時点での総評として。「みてねみまもりGPS」は、費用と機能のバランスの面で個人的には満足しています。私には他のGPS端末の利用経験がないのですが、2021年春時点でのGPS端末比較検討の選択肢の一つにしておいて、これは問題ないかと思います。 ##### 追記 (端末不具合に関する公式情報) [2021-04-21] 私は今になって初めて気付いたのですが、「みてねみまもりGPS」のGPS端末の不具合に関する公式な情報発信は、専用アプリ「みてねみまもりGPS」画面左上の \[三\] アイコン > お知らせ にて行われているようです。 閲覧できるお知らせ情報は、実際はウェブページですので以下でリンクをしておきます。ここでは、GPS端末の不具合に関しての公式サポートの対応がどのように行われてきたか、時系列で把握できます。 - [端末ファームウェア不具合の対応について(4/21追記)](https://phone.gps.mitene.us/app/informationdetail?no=11) ##### 追記 (第2世代が登場している) [2022-02-03] 私が2021年3月に購入して上記レビューを行っているのは『みてねみまもりGPS (第1世代)』に関してでした。2022年2月現在、モデルチェンジした『みてねみまもりGPS (第2世代)』が登場しているのでリンクしておきます。 第1世代と第2世代でどのような違いがあるのか。[公式サイト](https://mitene.us/gps)などの情報によりますと、測位方式に「SBAS」が追加され、バッテリー容量が200mAh増量されています。第1世代のかわいらしい外観はそのままに、第2世代は順当に進化しているものと予想します。 |項目|みてねみまもりGPS 第1世代|みてねみまもりGPS 第2世代| |---|---|---| |発売年|2021年|2022年| |測位方式|GPS衛星5種・A-GPS・Wi-Fi・携帯基地局・加速度センサー|GPS衛星5種・A-GPS・Wi-Fi・SBAS・携帯基地局・加速度センサー| |バッテリー|リチウムイオン1800mAh|リチウムイオン2000mAh| |サイズ|幅48mm×高さ48mm×厚み20mm|幅48mm×高さ48mm×厚み20mm| |重さ|51g|54.5g| --- ### 【読んだ本】 エコハウスのウソ2 - 2021-03-06 URL: https://remoteroom.jp/medialog/2021-03-06_book-4296106910/ この冬は、在宅勤務している北側の部屋を居心地よくするために、隙間風を遮り、窓からの冷気の緩和を試みるなどした ([2020-12-30](), [2021-01-24]())。次にはリビングの二酸化炭素濃度を可視化してみて ([2021-01-25]())、暖かさを保ちながらの適度な換気って、けっこう難しいものだと実感した。そんな我が家は、住宅設備に手を入れることが出来ない賃貸マンションだけれども、最新の住宅技術では、快適な暮らしと省エネをどう実現しているのだろう?と思い本書を手にした。 タイトルは挑発的であるが、内容は、各種の検証に裏付けられた堅実な技術書といった趣き。住宅のエネルギー効率化の根本には物理学があるわけだから、これは期待通り。さらに本書の読み応えは、たとえば売電に関する日本の制度を噛み砕きながら、今あるべき現実的な姿を説明しているところにある。その説明も分かりやすく、カラフルな模式図や比較表が、左右ページのどちらかには必ず配置されているという頻度で多く登場する。 省エネ指標や住宅の建築基準には、現実に則さないモデルを用いている部分もあるらしい。設計時にその数値を満たすだけではなくて、徐々に温暖化している現代の、地域の四季を通じた実際の生活状況において、数十年の長いスパンで、住む人が嬉しい住宅とは。これは難しくてワクワクするテーマだ。住宅とは、「作って終わり」の単発では不幸と我慢を強いてしまう、改修すること前提で維持すべきITシステムに似ているかもしれない。 --- ### Gmailアカウントでのメール送信が簡単にできるmsmtpの導入方法 - 2021-03-05 URL: https://remoteroom.jp/diary/2021-03-05/ Raspberry Pi OSで稼働しているラズパイおよびUbuntuマシンから、Gmailアカウントを使ってメールを送信するために、msmtpを導入した。設定は簡単であった。 SMTPサーバを立てない環境でのお手軽なSMTPクライアントとして、これまでは[SSMTP](https://wiki.archlinux.jp/index.php/SSMTP)を多く利用していたが、[Raspberry Pi OS「buster」の環境ではSSMTPをうまく動作させることができないらしい](https://www.raspberrypi.org/forums/search.php?keywords=buster+ssmtp&terms=all&author=&fid%5B%5D=28&sc=1&sf=all&sr=topics&sk=t&sd=d&st=0&ch=300&t=0&submit=Search)。今回よりmsmtpへ乗り換えることにし、自分用メモとして、msmtpの導入方法を残しておきます。 #### SMTPクライアント「msmtp」 「msmtp」というSMTPクライアントの、本家サイトは次のURLだ。 - msmtp Home: - msmtp Manual: ここでは次のようなサーバ環境・状況を想定し、サーバのコマンドラインでのメール送信が行え、さらにcron標準出力やシステムメールが送信がされるように、msmtpを設定する。 |項目|内容| |---|---| |サーバOS|Raspberry Pi OS or Ubuntu| |サーバ利用者|現時点ではひとり (自分) だけ| |ユーザアカウント|user1| |user1のGmailアドレス|example1 \[at\] gmail.com| |上記Googleアカウントの2段階認証|有効化済| ##### 1. インストール 1. サーバに2つのパッケージ`msmtp`, `msmtp-mta`をインストールする ``` #### Raspberry Pi OS (Raspbian GNU/Linux 10 (buster)) $ sudo apt install msmtp msmtp-mta #### Ubuntu 20.04.02 $ sudo apt install msmtp msmtp-mta ``` 2. 設定ファイルのサンプル`*.example`等は次の場所にインストールされる ``` $ ls -al /usr/share/doc/msmtp/examples/ total 32 drwxr-xr-x 6 root root 4096 Mar 4 23:11 . drwxr-xr-x 3 root root 4096 Mar 4 23:11 .. drwxr-xr-x 2 root root 4096 Mar 4 23:11 find_alias drwxr-xr-x 2 root root 4096 Mar 4 23:11 msmtpq drwxr-xr-x 2 root root 4096 Mar 4 23:11 msmtpqueue -rw-r--r-- 1 root root 532 Feb 12 2019 msmtprc-system.example -rw-r--r-- 1 root root 2828 Feb 12 2019 msmtprc-user.example drwxr-xr-x 2 root root 4096 Mar 4 23:11 set_sendmail ``` ##### 2. 設定ファイル作成 msmtpにSMTP認証させるために、Google アカウントの[アプリパスワード](https://myaccount.google.com/apppasswords)にてmsmtp用のパスワード「XXXXXXXXXXXXXXXX (16文字)」を作成し、それをmsmtpの設定ファイルに記載する必要がある。 このパスワードをsystem wideな設定ファイル (`/etc/msmtprc`) に記載すると、将来的にサーバへ自分以外をユーザ追加することになったら、そのユーザもパスワードを読めて問題となりそうだ。そこで、msmtp用のパスワードを、各ユーザ別の設定ファイル (`~/.msmtprc`) に記載する方針とする。 1. msmtp用の`aliases`ファイルを編集し、ユーザアカウントごとのメール送信先を定義する。ちなみに「default」は規定のメール送信先となるので定義をまとめることもできる ``` $ sudo vim /etc/aliases $ sudo chmod 644 /etc/aliases $ cat /etc/aliases root: example1@gmail.com user1: example1@gmail.com ###default: example1@gmail.com ``` 2. ユーザuser1の設定ファイル`~/.msmtprc`を編集する ``` $ vim ~/.msmtprc # 内容は下記catの通り $ chmod 600 ~/.msmtprc $ cat ~/.msmtprc defaults syslog LOG_MAIL aliases /etc/aliases account gmail host smtp.gmail.com port 587 user example1 password XXXXXXXXXXXXXXXX from example1@gmail.com tls on tls_starttls on tls_certcheck off auth on account default : gmail ``` 3. 作成した設定ファイルをroot (= これも自分) のホーム領域にも複製する ``` $ sudo cp -p /home/user1/.msmtprc /root/ $ sudo chown root.root /root/.msmtprc ``` ##### 3. 動作確認 次のコマンドで、SMTPのやり取りが画面表示されて実際にメールが送信され、かつ、msmtpの記録がsyslogに残るようであれば動作OKだ。 ``` $ echo "test" | msmtp -v example1@gmail.com $ grep msmtp /var/log/syslog ``` --- ### 特定APの起動をトリガーに、ラズパイの無線接続先を自動切替 - 2021-03-03 URL: https://remoteroom.jp/diary/2021-03-03/ #### 近いAPへ自動接続してほしい 自宅の中でRaspberry Pi Zero WH (以下ラズパイZero) の稼働を開始している。無線接続は次のような状態にしていて、 1. 自宅LANの中で2つの無線アクセスポイントAP-MainとAP-Subを運用していて、どちらのAPも共通のSSID `MY_HOUSE_AP` で運用している 2. 24時間起動のラズパイZeroを、SSID `MY_HOUSE_AP` に無線接続している 3. AP-SubはラズパイZeroに近接しているが、省エネのために、部屋内の人間が必要なときだけAP-Subの電源をON/OFFしている 4. AP-Subが起動していない時は、多少の通信ロスは許容するので、ラズパイZeroは遠くのAP-Mainに自動的に接続していてほしい 5. AP-Subが起動している時は、通信ロスを極力抑えるため、ラズパイZeroはすばやく自動的に、無線接続をAP-Mainから近接のAP-Subへ切り替えてほしい 箇条書きした各要素を、AP別に表にまとめるとこうなる。 ||AP-Main|AP-Sub| |---|---|---| |SSID|MY_HOUSE_AP|MY_HOUSE_AP| |稼働時間|24時間連続|不定期に電源ON/OFF| |ラズパイZeroとの距離|遠い|近接| |接続優先度の希望|Low|High| 上記の状態のうち、4はAP-Subへ接続できないことからフォールバック的に自動的に行われるのだが、5は、ラズパイZeroがAP-Mainに接続を維持できている間は起こらないように思う。そこで5を実現するため、AP-Subの起動を検出したらラズパイZeroの無線を再接続させる仕掛けを作ってみた。 ラズパイZeroなどのIoTデバイスを無線接続で利用する上で、圏内の無線アクセスポイントを全台かならずしも常時電源ONにはしていない、という場合のひと工夫として、ご紹介です。 #### 無線を再接続させるスクリプト ##### 内容・ロジック 仕掛けは、ラズパイZeroで実行するbashスクリプトの形で、`reconnect_wlan.sh`と名付けた。[ソースコードは最後に掲載](#reconnect_wlansh)。Raspberry Pi OS (Raspbian GNU/Linux 10 (buster)) で動作確認を行っている。 スクリプトのロジックは次のとおり。無線の再接続の後は自動的に、電波強度の強い (= 近い) ほうの無線アクセスポイントにラズパイZeroが繋がることを暗に期待している。 - AP-Mainには接続しているはずのラズパイZeroから、AP-Sub (固定IPアドレスを想定) へのping疎通を確認できたら、AP-Subが起動していると見なす - さらに現時点の接続先APがAP-Subではない場合に、`wpa_cli`のreconfigureを実行して、無線の再接続を行わせる ##### 使い方 スクリプト`reconnect_wlan.sh`を`chmod +x`した後、root権限で定期的にcron実行しておく。 ``` */1 * * * * timeout 55s /home/foo/reconnect_wlan.sh >/dev/null 2>&1 ``` スクリプトが想定通りに動作し、AP-Subの起動を検知して無線の再接続が行われる際には、`/var/log/syslog`に次のようなログが記録される。ここでは、「D8:07:B6:XX:XX:XX」はAP-Subの、「6C:E4:DA:YY:YY:YY」はAP-MainのMACアドレスである。 ``` Mar 3 23:19:01 raspi0 reconnect_wlan.sh[32492]: wlan1: target = D8:07:B6:XX:XX:XX, now = 6C:E4:DA:YY:YY:YY Mar 3 23:19:01 raspi0 reconnect_wlan.sh[32492]: wlan1: trying to reconnect... Mar 3 23:19:32 raspi0 reconnect_wlan.sh[32492]: wlan1: target = D8:07:B6:XX:XX:XX, now = D8:07:B6:XX:XX:XX ``` #### P.S. iwlist wlanN scanning 今回の、pingを用いる`reconnect_wlan.sh`スクリプトを書き終えて満足した後に、近接のAP-Subの電波が飛んでいるかどうかを、定期的に `$ sudo iwlist wlanN scanning` で調べてみるという方法もアリと気づいた。ああ、このほうが電波強度も参考情報として取り入れられるしスマートな気がする。orz #### ソースコード ##### reconnect_wlan.sh ```bash ###!/bin/bash ### reconnect_wlan.sh (ver.20210303) for root@raspi0 TARGET_AP='MY_HOUSE_AP' # Name of Access Points TARGET_IPADDRESS='192.168.1.NNN' # Nearest AP's IP address TARGET_MAC='D8:07:B6:XX:XX:XX' # Nearest AP's MAC address TARGET_NIC=`basename /run/wpa_supplicant/*` CMD_LOGGER="logger -p user.info -t `basename $0`[$$]" CMD_ACTION="sudo /usr/sbin/wpa_cli -i ${TARGET_NIC} reconfigure" function get_mac() { local TMP_MAC=`/usr/sbin/iwconfig ${TARGET_NIC} 2>/dev/null | grep -A1 "${TARGET_AP}" | grep "Access Point:" | awk '{print $6}'` echo ${TMP_MAC} } function make_log_msg() { local TMP_MSG="${TARGET_NIC}: target = ${TARGET_MAC}, now = ${NOW_MAC}" echo ${TMP_MSG} } ping ${TARGET_IPADDRESS} -c 1 >/dev/null if [ $? == 0 ]; then # Nearest AP is online NOW_MAC=`get_mac` if [ ${NOW_MAC} != ${TARGET_MAC} ]; then # reconnect LOG_MSG=`make_log_msg`; ${CMD_LOGGER} "${LOG_MSG}" LOG_MSG="${TARGET_NIC}: trying to reconnect..."; ${CMD_LOGGER} "${LOG_MSG}" sleep 10 ${CMD_ACTION} sleep 20 NOW_MAC=`get_mac` LOG_MSG=`make_log_msg`; ${CMD_LOGGER} "${LOG_MSG}" fi fi ``` --- ### 【読んだ本】 炎の塔 - 2021-02-23 URL: https://remoteroom.jp/medialog/2021-02-23_book-4396634730/ タイトルが暗示するのは、高さ450mで100階建てという、恐ろしく巨大なビルディングの成れの果てだ。あらゆる物を舐め尽くす炎に、居合わせた人々や圧倒的少数の消防士たちが追い込まれながら、命を救おうとするドラマ。その中に分かりやすく、現代の世相を滲ませている。寝床で読み進めて、だいたい二晩で終えた。 ネタバレになるので具体的には書きませんが、伏線がある程度予想通りに回収されるところは、こちら読者としての醍醐味のひとつであるし、それを超える構想で「おおっ?!」と言わせるストーリーを展開できるかどうかは、作者の腕の見せどころ。後者に関して、私はまあまあの納得度でした。 --- ### ショックアブソーバを「純正形状」TEIN EnduraProに交換して乗り心地向上を狙う - 2021-02-14 URL: https://remoteroom.jp/diary/2021-02-14/ 年代物の車の、消耗部品であるショックアブソーバを交換したのでそのレビューです。あえて純正品ではなく、「純正形状」がウリのひとつである社外品を選択したところが参考になるかもと思います。 #### ショックアブソーバ交換に至った経緯 車の点検はいつもディーラーでやっていて、12ヶ月の法定点検 (2020年7月) と6ヶ月点検 (2021年1月) の際に「ショックアブソーバ左側2本からオイル漏れ有り」と指摘され、このままだと次の車検 (2021年7月) に通らないことは分かっていた。 ディーラーが作ってくれた、左側2本を交換する場合の見積もりは、技術料込みで5万円強。どうせ換えるなら、足回り刷新の意味で4本とも交換したいが、おそらく2倍程度の費用がかかると予想される。ちなみに、対象の車はこんな感じで言わずもがな古い。 |項目|内容| |---|---| |形式|GF-JCG10| |登録年|2000年 (私の乗り始めは2014年から)| |走行距離|約107,000km (私の乗り始めは約87,000kmから)| 一応気に入っている車だから今後も乗り続けるために費用をかけるのか、それとも…… (ごにょごにょ) と悩みは大きく、しばらく判断を保留していた。 しかしながら、オイル漏れの2度目の指摘の後、私が心理的にも影響を受けたのか、乗り心地の悪化が非常に気になりだした。性格的にはおっとりしたセダンなのに、走りがやたらドタバタするのは違和感がある。しかもとうとう、子どもから「酔う」という苦情および乗車拒否反応も出た。家族ドライブするためにはもう、早急にショックアブソーバ交換の手を打つしかない。 #### 社外品を選択 ##### 乗り心地向上の仕組み? ショックアブソーバの交換に関して、ウェブ検索して情報収集していると、社外品で「純正形状」のものがあると分かった。「TEIN EnduraPro (エンデュラ・プロ)」という商品。私には“社外品イコール車高調”という固定概念があったから、それって逆にどういう特徴があるんだ?と気になって詳しく調べると、 - [TEIN\.co\.jp: EnduraPro / EnduraPro PLUS \- 製品紹介](https://www.tein.co.jp/products/endurapro.html) 純正と同じ形状ながら、純正品よりも乗り心地を良くするための「ハイドロ・ハンプ・ストッパ (H.B.S.)」という仕組みが入っているらしい。次のCar Watchのページに詳しい。ちなみに「EnduraPro」は調整機能なし、「EnduraPro PLUS」は減衰力調整機能付きの製品である。 - [テインの新戦略、お手頃な純正形状ダンパー「エンデュラプロ プラス」に試乗 \- Car Watch](https://car.watch.impress.co.jp/docs/news/1218984.html) ショックアブソーバは装着を事前に試すことが出来ない大掛かりな部品であるが、興味惹かれるし純正部品に換えるよりは試し甲斐 (おもしろみ) がありそう。ということで今回は、私のニーズに方向性が合っていそうなこのEnduraProを選ぶことに決定。 ##### オートバックスで発注 神戸市内にある大きいオートバックスの、慣れない窓口でいろいろ相談させてもらって4本交換を発注。内容は次の通り。車を預けて翌々日に受け取った。ちなみに、交換で4本取り外した純正ショックアブソーバを見せてもらい、触ってみた左後ろの1本は、ショックアブソーバを収縮させても伸びる方向に戻らず、いわゆる抜けていて機能を失っていることが確認できた。 |項目|内容| |---|---| |店舗|[スーパーオートバックス SAサンシャインKOBE店](https://www.autobacs.com/store/top/top?store=091727)| |費用|約11万円| |内訳|TEIN [VSY20-A1MS2](https://tein.co.jp/srch/jps_search.php?maker=default&carmodel=default&modelyear=default&item=default&restype=1&allvch=0&genuine=0&partno=VSY20-A1MS2) (2本) + [VSY21-A1MS2](https://tein.co.jp/srch/jps_search.php?maker=default&carmodel=default&modelyear=default&item=default&restype=1&allvch=0&genuine=0&partno=VSY21-A1MS2) (2本) へ交換, ショックアブソーバ周りの純正部品いろいろ交換, 工賃, ホイールアライメント調整| ホイールアライメント調整に関しては、実際の調整結果の報告書が付いてくる。 #### 交換後の所感 ショックアブソーバ4本のEnduraProへの交換後、まだ50kmも走行しておらず、高速走行も未体験であるが、街乗りのレベルで体感できる変化は次の通り。 - 足回りが以前より丁寧に動いていて、路面に凹凸があることは忠実に乗員へ感じさせるが、足回りより上のキャビンは相対的に動きが抑制されている印象を受ける - 低速でカーブに入る時に、車体が地面とほぼ平行のままに、いわゆるロール少なめに向きを変える (ということは逆に、交換前はイン側の足がすぐ伸びて車体が浮かぶような挙動をしていたと思われる) - ブレーキングして停止する時の、車体前方が沈みこんだ後に戻る揺れの収まりが早くなった - 停止中、ブレーキを踏んだままATのギアをNからDに入れた時の、駆動系のブルっとする振動が小さくなった - アイドリング中のエンジン回転数が安定した時 (たしか規定値は650rpm)、車体の一部に起こっていた共鳴のようなものがほとんどなくなった 交換前と違いが生まれていることは確実に言えて、車を操っていて楽しい。だがこれは、機能的に劣化していたショックアブソーバが元通り動くようになったためか、純正部品よりも乗り心地を高めたというEnduraProの特性が大きいのかは、私には経験不足で判断できない。 しかし、交換前より乗り心地は明らかにマシで良い方へ変わるので、古い車に乗り続ける場合、劣化しているショックアブソーバの交換は検討に値すると思う。 #### 余談: 交換前後の変化の可視化には失敗 ショックアブソーバの交換話をブログに書くための材料として、ショックアブソーバの交換前と交換後の変化を、せっかくだから体感に留まらず何らかの客観的指標で測っておきたいと実は考えていた。 参考にしたのは次のTEINの公式動画で、この動画では、1分50秒の部分からハンプを乗り越える際の車体の挙動を撮影して、リアバンパーの軌跡を比較することで、H.B.S.の有無による変化を可視化している。 そこで私は、公式動画をある程度真似ることにする。近所のスクールゾーンの道路に最近設置された平べったい蒲鉾上のハンプを、一定速度で乗り越えた時の、車内での加速度変化を、スマホアプリ [phyphox](https://phyphox.org/) で記録するという方法を考えた。 だがしかし、実際の実験では、比較実験の基本である「初期条件を揃える」ことに失敗してしまった。チャンスは1度しか無いのに非常に残念。まったく参考にならないがいちおう加速度記録の画像を貼っておきます。 ##### 交換前の加速度変化 (ボツ) まず、ショックアブソーバ交換前の車で、ハンプを乗り越える際の加速度を記録した。測定開始から約5秒のところでハンプを乗り越えている。 ただし、乗り越え時の走行速度の目標値は「15km/h」としていたが、実際はもっと遅かったかもしれず記録として確かなものがない。そもそも一人で前を見ながら運転して、車のアナログメーターでもなくスマホナビ画面のGPS情報による速度を読み取るのはかなり無理であった…… (「[ダイナミック セーフティ テスト Dynamic Safety Test](https://www.youtube.com/playlist?list=PL75D0B8504A4546BA)」の進入テストにて助手席の方が速度を声で逐一読み上げている理由がよく理解できた)。 そうだ! ドライブレコーダーの動画を掘り起こせば速度も動画に同時記録されているはずだ、と数日後には気づいたのだが、時間経過により16GBの保存容量の中で動画ファイルが上書きされており、走行速度に関する証拠がないという痛恨のミス。 ##### 交換後の加速度変化 (ボツ) ショックアブソーバ交換後の車で、ハンプを乗り越える際の加速度も一応記録したけれども、交換前の実験と初期条件 (走行速度や記録開始時からの乗り越えタイミング) が揃えられていないため、交換前とうまく比較できない。このときは11km〜13km/hぐらいの走行速度。 --- ### 【読んだ本】 富士山頂 - 2021-02-12 URL: https://remoteroom.jp/medialog/2021-02-12_book-4167112418/ 久しぶりに読む新田次郎の小説。気象庁に勤めながら作家を兼業しているという主人公の設定を、ユニークだなぁと最初感じたがそれは私が知識不足なだけだった。この作品は、作者自身の経験を元にした記録文学に位置づけられるもの。 1960年代の、当時世界最大となる気象レーダーを富士山頂に設置するプロジェクトを軸にして話は進む。誰も手がけたことのないレーダー設備の設計と製造をどの業者に託すのか、何百トンという資材を雪の時期を避けて山頂にどうやって運ぶのか、そして薄い空気の中で人員を動かして気象レーダーを完成させ、さらに暴風雨をしのぎながら実運用できるのか。 こうした絶え間ない困難を、さまざまな人たちが思考して乗り越えていくさまには、感服するしかない。そこには技術的なものだけでなく、組織運営の面での工夫も描かれている。また、政治的で泥臭い攻防も、まるで暴露本かというようなレベルでどっぷり書かれており、当時の時代を感じさせるとともに痛快だ。 作者の射影である主人公は、気象レーダー設置の責任者を担いつつ、どのような想いで作家の仕事に身を入れるべきなのかを迷っていた。人間個人にあるこの葛藤が話に織り込まれているからこそ、私にとって本作は印象深い。 P.S. 今回、2021年1月に開始された[神戸市電子図書館](https://www.d-library.jp/kobe/)を初めて利用した。専用アプリいらずの、PCやスマホのブラウザで電子図書を読む仕組みが採用されており、時を選ばず手軽に読書ができるとわかった。 --- ### LANの内壁を抜けて外へ通信させる ~SSHとproxychains-ng~ - 2021-02-07 URL: https://remoteroom.jp/diary/2021-02-07/ #### 経路的にSSHできるなら戻れるのでは? インターネットへのアクセスがFirewallの設定で遮断されているLAN内のサーバへ、リモートからSSHログインし、そのサーバ上でインターネットのリソースを使いたい、という状況はよくある。 そんな状況に相当する、OS・導入パッケージの更新作業`apt update && apt upgrade`や新しいモジュールの導入作業`pip install`を、必要なファイルをscpでコピーしてから行う、“オフラインインストール”で実施することは不可能ではない。が、オンラインインストールよりも手間と時間を費やさねばならず、億劫なことになりがちだ。 しかし考えてみると、手元のマシンからサーバへSSHログインはできているのだから、逆向きの経路を作って、サーバからインターネットへアクセスしようとする通信をスマートにその経路へ流すことはできないだろうか? もしこれが可能なら、手元のマシンをインターネットアクセス時の踏み台にできるぞ。 そう当たりをつけて調べてみると、やはり予想通り、SSHトンネリングと組み合わせての便利なツールがこの世に存在していたのであった。 #### proxychains-ngというwrapper 今回見つけたツールは、次の`proxychains-ng (proxychains4)`というもの。 - [rofl0r/proxychains\-ng: proxychains ng \(new generation\) \- a preloader which hooks calls to sockets in dynamically linked programs and redirects it through one or more socks/http proxies\. continuation of the unmaintained proxychains project\. the sf\.net page is currently not updated, use releases from github release page instead\.](https://github.com/rofl0r/proxychains-ng) 末尾の`-ng`はNew Generationの意味で、元々あるツール`proxychains`の後継とのこと。 このツールは、OSのライブラリ環境をハックし、ネットワークを利用する各種コマンドにwrapperとしてかますだけの簡単操作で、コマンドでの通信がSOCKS/HTTPプロキシを経由するように仕向けてくれるもの (Torのtorsocksと同様かな)。DNSアクセスもうまく処理してくれるそうだ。 ##### 想定環境 次の図のような環境において、「サーバBからインターネットを使う」動作を、`proxychains-ng`とOpenSSHを併用することで実現する。 ``` [マシンA] --> (インターネット) --> [Firewall] --> [踏み台サーバJ] --> [サーバB] ``` マシンAとサーバBは、次の条件を満たしているものとする。 - お手元のマシンA: 1. インターネットへアクセスできる 2. 踏み台サーバJなどを経由したSSH多段接続またはSSH直接接続で、LAN内のサーバBにログインできる - LAN内のサーバB: 1. sshdが動作している 2. インターネットへのアクセスがFirewallなどで遮断されている 3. `proxychains-ng`を導入可能 (root権限は必須ではない) #### proxychains-ngをサーバBへ導入 `proxychains-ng`の最新版を、[Releases · rofl0r/proxychains\-ng](https://github.com/rofl0r/proxychains-ng/releases)から取得してサーバBに転送し、次のコマンドで展開してmakeする。ちなみにmakeは、x86_64の他にaarch64アーキテクチャでも問題なく行えた。 ```bash $ tar Jxvf ./proxychains-ng-4.15.tar.xz $ cd proxychains-ng-4.15 $ ./configure --prefix=/usr --sysconfdir=/etc $ make $ ls -al proxychains4 libproxychains4.so # makeされたファイルを確認 $ sudo make install # optional (やらなくても動作可能) ``` 設定ファイル`proxychains.conf`の一例として、次の内容のファイルを用意する。 ```bash $ cat /etc/proxychains.conf strict_chain proxy_dns quiet_mode remote_dns_subnet 224 tcp_read_time_out 15000 tcp_connect_time_out 8000 [ProxyList] socks5 127.0.0.1 1080 ``` 設定ファイル`proxychains.conf`は、[README](https://github.com/rofl0r/proxychains-ng/blob/master/README)によると次の順に探索されるので、自分の好みの場所に設置しておく。 ``` proxychains looks for config file in following order: 1) file listed in environment variable PROXYCHAINS_CONF_FILE or provided as a -f argument to proxychains script or binary. 2) ./proxychains.conf 3) $(HOME)/.proxychains/proxychains.conf 4) $(sysconfdir)/proxychains.conf ** ** usually /etc/proxychains.conf ``` なお、実行ファイル`proxychains4`を引数無しで実行すると、次の使い方メッセージが表示される。 ```bash $ ./proxychains4 Usage: ./proxychains4 -q -f config_file program_name [arguments] -q makes proxychains quiet - this overrides the config setting -f allows one to manually specify a configfile to use for example : proxychains telnet somehost.com More help in README file ``` #### SSHにSOCKSプロキシのふりをさせる マシンAからサーバBへSSHアクセスするための設定 (SSH多段接続など) は、すでに出来ているものとして説明は省略。 ##### a) sshコマンドを2つ組み合わせる方法 SOCKSプロキシのふりをさせるSSHトンネリングの方法は、[sshポートフォワーディングについて図示してみる \- Qiita](https://qiita.com/fkshom/items/844a1be031ae3eb4bcea#%E3%83%AA%E3%83%90%E3%83%BC%E3%82%B9%E3%83%80%E3%82%A4%E3%83%8A%E3%83%9F%E3%83%83%E3%82%AF%E3%83%9D%E3%83%BC%E3%83%88%E3%83%95%E3%82%A9%E3%83%AF%E3%83%BC%E3%83%89)で紹介されている次の2つが伝統的なものらしい。これらではsshの`-R`と`-D`の組み合わせを使う。詳細は、図もある各リンク先を参照。 - [sshポートフォワーディングについて図示してみる - Qiita > コマンド(パターン1)](https://qiita.com/fkshom/items/844a1be031ae3eb4bcea#%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B31) - [sshポートフォワーディングについて図示してみる - Qiita > コマンド(パターン2)](https://qiita.com/fkshom/items/844a1be031ae3eb4bcea#%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B32) ##### b) sshコマンド1つの方法: "reverse dynamic forwarding" 比較的新しい、SOCKSプロキシのふりをさせるSSHトンネリングの方法として、[接続先のサーバーへインターネット接続を共有しつつssh接続する \- Qiita](https://qiita.com/m4saka/items/b9defd7542eee3551759)で見つけた次の方法が簡素なので、今回これを覚えておきたい。こちらではsshの`-R`のみを使う。 ```bash ### マシンAで実行 $ ssh -R 1080 ユーザB@サーバB ``` この指定方法でSOCKSプロキシのふりをさせることができるのは、[OpenSSH 7.6](https://www.openssh.com/txt/release-7.6)での新機能`ssh(1): add support for reverse dynamic forwarding.`によると思われる。 #### サーバBからインターネットへ 上記 b) のようにマシンAで`ssh -R 1080 ユーザB@サーバB`を実行した後、次にサーバBでは、`curl`や`apt`などの、インターネットを利用するコマンドの前に`proxychains4`を付けて実行する。 ```bash ### マシンAで実行 $ ssh -R 1080 ユーザB@サーバB ### サーバBで実行 $ proxychains4 curl ifconfig.me [proxychains] config file found: /etc/proxychains.conf [proxychains] preloading /usr/local/lib/libproxychains4.so 217.178.XXX.YYY $ sudo proxychains4 apt update (以降省略) ``` するとこれだけで、LAN内にあるサーバBから、マシンAを踏み台にしたインターネットへの通信が成立する。 長い間、当該環境での制約と思い込んでいたネットワーク上の壁を、こんなにも簡単に抜け出てしまえるとは。SSH周りは奥が深い。 ##### 追記 [2021-02-08] サーバBのbash (シェル環境) ごと`proxychains4`を介して起動しておけば、シェルの上のプロセスは自動的にプロキシ経由の通信になる、という大技を紹介している記事を発見。 - [proxychains bashでちょっと楽に \- 196Log](https://thinline196.hatenablog.com/entry/2020/12/09/234053) - [How to Use Proxychains to Redirect Traffic Through Proxy Server](https://www.linuxbabe.com/desktop-linux/how-to-use-proxychains-to-redirect-your-traffic-through-proxy-server) やってみたら確かにそうなる。 ```bash ### マシンAで実行 $ ssh -R 1080 ユーザB@サーバB ### サーバBで実行 $ proxychains4 bash [proxychains] config file found: /etc/proxychains.conf [proxychains] preloading /usr/local/lib/libproxychains4.so $ curl ifconfig.me 217.178.XXX.YYY $ sudo proxychains4 bash ``` --- ### 【読んだ本】 「深層」カルロス・ゴーンとの対話~起訴されれば99%超が有罪になる国で~ - 2021-01-29 URL: https://remoteroom.jp/medialog/2021-01-29_book-b08727chfj/ しばらくは忘れていたが、「あれはどう説明されるものなのだ?」という戸惑いと懐疑心を、また強く抱くことになった。ゴーン氏が2018年11月に東京地検特捜部に逮捕され、2019年12月に日本を脱出してレバノンで記者会見を開いた、あの一連の事案。 当時は、推定無罪の前提なしに、報道によって世論が作られていく構図がどこか感じられた。報道の情報源が非常に限られている、内容が政治的かつセンセーショナルで他社に先んじる速報性が最重視される、という二つの状況が重なったとき、報道は、情報元が意図する一色に世論を染める格好の手段となりうることは論を待たない。 本書は、東京地検特捜部の検事も経て現在は弁護士という著者が、脱出前からゴーン氏にインタビューを行って記したもの。具体的に日本の刑事司法制度の問題点をあぶり出し、実状を“人質司法”と断じている。国際的な比較で説明されている制度設計上の問題や、慣例化による機能不全がそこにあるらしいと読みとった私が感じたのは、お上を疑う機能をデフォルトで備えそれが常時働くように、日本社会と組織と個人のOSを更新する必要がある、ということ。 本書の終盤では、この事案を深層から駆動した歯車を二つ見極めたかのように、特捜部のある個人と、日産自動車のある個人に、言及をしている。それぞれの組織の中の歯車は、論理の衣を着た感情や剥き出しの欲をその力の源としてしまったのかどうか、数年先かもしれないが、事案の説明がもしなされれば、分かるのであろう。 --- ### 二酸化炭素濃度をラズパイで測り、換気が必要な時にスマートスピーカーが声で教えてくれる仕組みを作ろう - 2021-01-25 URL: https://remoteroom.jp/diary/2021-01-25/ 本記事は次の記事の続編です。 - [Raspberry Pi 400にセンサーつないで温度・湿度・気圧を測定 \[2020-11-18\]]() - [Raspberry PiのUbuntu環境で温湿度・気圧センサーBME280を動かす方法 \[2020-11-19\]]() - [温湿度・気圧センサーの値をThingSpeakでグラフ化し、スマホアプリで確認する方法 \[2020-12-20\]]() 今回は、NDIR式の二酸化炭素センサーMH-Z19Cの入手と、次の作業に関する記録です。 1. CO2センサーを、すでに温湿度・気圧センサーを接続しているRaspberry Pi 4に追加接続 2. リビングの二酸化炭素濃度が上昇したときに住人へ換気を促す仕組みを構築 #### 1. はじめに ##### 購入した材料 Raspberry Piに接続できるCO2センサーとしては、NDIR (非分散型赤外線吸収法) 式の「MH-Z19」という型番のものがメジャーであるらしい。そのシリーズである、末尾に「C」が付いたMH-Z19Cと、ジャンパーワイヤーを購入した。 |分類|品名|購入価格(円)|備考| |----|----|---:|----| |CO2センサー|[Winsen MH-Z19C](https://www.winsen-sensor.com/sensors/co2-sensor/mh-z19c.html)|3,100|メルカリ| |ジャンパーワイヤー|[ELEGOO JP-EL-CP-004](https://www.elegoo.com/collections/parts-accessories-1/products/elegoo-multicolored-dupont-wire-kit)|990|Amazon.co.jp| ##### ラズパイOSでCO2センサーの動作確認 最初に、届いたCO2センサーのハードウェア的な動作確認をせねばならない。最終的にはUbuntuサーバをやっているラズパイと接続したいわけだが稼働中であり、まずは、普段暇している[Raspberry Pi 400]()と接続する。Raspberry Pi 400のOSは標準的な「Raspberry Pi OS」にしてあるおかげで、CO2センサーとの接続に関してウェブ上に多くある先人の知見を参照でき、戸惑う部分がない。 次の2つのページを参照して、Rapsberry Pi 400にて、センサーが示すCO2濃度 (単位はppm) の値を取得できた。 - [Raspberry Pi 4とMH\-Z19Bで二酸化炭素濃度を計測してみた \| Developers\.IO](https://dev.classmethod.jp/articles/raspberry-pi-4-b-mh-z19b-co2/) - [mh\-z19 · PyPI](https://pypi.org/project/mh-z19/): 配線図が「cabling」に掲載されている 部屋の窓を開けてたっぷり外気を取り入れた状態を計測すると、それらしく約400ppmを示す。また、センサーに息を吹きかけるとちゃんと濃度が上がる、という理科の実験をして、うちの子どもの気を引くことにも成功した。 ```bash $ sudo python3 -m mh_z19 {"co2": 948} ``` #### 2. Ubuntu (Raspberry Pi 4) にCO2センサーを接続 ##### 温湿度・気圧センサーと同時接続 自宅サーバのRaspberry Pi 4には、[2020-11-19の記事]()にて紹介した状態で、すでに温湿度・気圧センサーのBME280を接続している。今回は、このBME280用の配線が6本あるところに、CO2センサーMH-Z19C用の配線を4本加えることになる。 なお、各センサーとの接続に用いるラズパイ側のGPIOピンは、電源系を別にすると、前者は「SDA」と「SCL」、後者は「TXD」と「RXD」であり、互いに独立している。つまりラズパイ1台に対し、物理的にはこれらセンサー2つを無加工で同時接続可能ということだ。各センサーの「GND (Ground)」として指定のピンがバッティングするところは、どのGNDピンでも良いだろうと判断して配線した。 ##### ラズパイUbuntuでMH-Z19を使用する設定 自宅サーバRaspberry Pi 4のOSであるUbuntu (20.04.1 LTS (Focal)) で、CO2センサーMH-Z19Cを使用する設定は、Raspberry Pi OSの場合とは勝手が異なるらしい。シリアル通信周りが異なるため、と推測している。 ###### 実際にやった手順 今回はいろいろと情報検索したり模索した結果、次の参考ページの「Answer」欄にある情報を元に、 - [raspbian \- RPi4 Serial port not working on either Raspberry OS or Ubuntu \- Raspberry Pi Stack Exchange](https://raspberrypi.stackexchange.com/questions/114366/rpi4-serial-port-not-working-on-either-raspberry-os-or-ubuntu/116860#116860) 次のような手順で、Ubuntu (Raspberry Pi 4) にてCO2センサーMH-Z19Cを使用できるようにした。一部パスしたところもある。 1. 【パスした】~~add `enable_uart=1` to `/boot/config.txt`~~ - パスした理由: Ubuntuでは`/boot/firmware/config.txt`にすでに`enable_uart=1`が書いてあるため 2. remove `console=serial0,115200` from `/boot/firmware/cmdline.txt` on Ubuntu ~~and `/boot/cmdline.txt` on Raspberry Pi OS~~ 3. disable the serial console: `sudo systemctl stop serial-getty@ttyS0.service && sudo systemctl disable serial-getty@ttyS0.service` 4. 【パスした】~~make sure you have `pyserial` installed if you're using the python serial library, not `python-serial` from `apt`.~~ - パスした理由: システムでの余計な変更を避けるため最初パスしたら、そのまま動いたので。私の環境には`pyserial`が入っていたのだろう 5. create the following udev file: 【→作成したファイル】`/etc/udev/rules.d/98-mhz19.rules` ``` KERNEL=="ttyS0", SYMLINK+="serial0" GROUP="tty" MODE="0660" KERNEL=="ttyAMA0", SYMLINK+="serial1" GROUP="tty" MODE="0660" ``` 6. and reload your udev rules: `sudo udevadm control --reload-rules && sudo udevadm trigger` 7. change the group of the new serial devices ``` sudo chgrp -h tty /dev/serial0 sudo chgrp -h tty /dev/serial1 ``` 8. The devices are now under the tty group. Need to add the user to the tty group and dialout group: ``` sudo adduser $USER tty sudo adduser $USER dialout ``` 9. update the permissions for group read on the devices ``` sudo chmod g+r /dev/ttyS0 sudo chmod g+r /dev/ttyAMA0 ``` 10. reboot これらの手順1~10を経ると、Raspberry Pi OSの場合と同様に、Ubuntuでも次のコマンドでCO2濃度の値を取得できた。 ```bash $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.04 DISTRIB_CODENAME=focal DISTRIB_DESCRIPTION="Ubuntu 20.04.1 LTS" $ sudo python3 -m mh_z19 {"co2": 617} ``` ###### root権限なしでMH-Z19Cの値を読む方法 (不採用) MH-Z19へのアクセスを、sudoせずに、つまりroot権限を使わずに行う方法については、モジュール`mh_z19`の作者による次の記事がある。 - [How to use without root permission\. · UedaTakeyuki/mh\-z19 Wiki](https://github.com/UedaTakeyuki/mh-z19/wiki/How-to-use-without-root-permission.) この記事にしたがって、実際に`/dev/serial0`の権限設定を行ってから、`--serial_console_untouched`オプションを付けてモジュールmh_z19を一般ユーザ権限で実行すると、MH-Z19の値を読めるようだ。 ```bash $ python3 -m mh_z19 --serial_console_untouched {"co2": 1223} ``` しかし私の環境の場合、センサーへのアクセスを繰り返して値を読んだ時に、たまに何らかのエラーが出ることがあった (詳細は失念した)。このため今回は動作の安定性を重視し、root権限を使わないアクセスは諦めることにした。 #### 3. CO2濃度が閾値を超えたら住人へ換気を促す CO2濃度を常時監視できるようになったので、次は、リビングのCO2濃度が高まったら、住人へ、換気を促す仕組みを作る。促す際には部屋のスマートスピーカーをしゃべらせることにする。 以降の内容は、私の家の環境に完全に依存したものになってしまうことご了承ください。一部分でも参考になれば幸いです。 ##### 前提条件 今回用意する仕組みに必要な、前提条件はおよそ次の通り。 - 自宅LAN内にGoogle Home MiniなどのGoogleスマートスピーカーを置いている - 自宅LAN内で`google-home-notifier`を稼働させている (参考: [Google Home/Nestを喋らせるgoogle-home-notifierの導入マニュアル \[2020年12月版\]]() ) - 自宅LAN内またはインターネット上にウェブサーバを置いている - 発声が人間のアナウンサーのようにとても自然な[VoiceText Web API](https://cloud.voicetext.jp/webapi)の、無料利用登録を済ませている ##### スクリプト類を作成 ###### CO2濃度を取得するmh-z19_thingspeak.sh root権限のcronを使ってサーバ上で24時間実行する前提の、bashスクリプトを作成した ([ソースコードは最後に掲載](#mh-z19_thingspeaksh))。次のような動作をする。 - MH-Z19から取得したCO2濃度の値のみを標準出力する - 第一引数があるときは、その引数をThingSpeakの「Write API Key」とみなして、値をThingSpeakへ送信する (参考: [温湿度・気圧センサーの値をThingSpeakでグラフ化し、スマホアプリで確認する方法]()) `mh-z19_thingspeak.sh`を動かすため、root権限のcrontabを次のように設定している。 ``` FILE_CO2=/tmp/co2_value.dat */1 * * * * timeout 10s 【設置ディレクトリ】mh-z19_thingspeak.sh >/dev/null; sleep 10; timeout 10s 【設置ディレクトリ】mh-z19_thingspeak.sh 【ThingSpeak_WRITE_API_KEY】 >${FILE_CO2}.tmp 2>&1; chmod o+r ${FILE_CO2}.tmp; mv ${FILE_CO2}.tmp ${FILE_CO2} ``` ###### CO2濃度を監視するco2_alert.sh 一般ユーザ権限のcronを使ってサーバ上で毎日8時台~21時台に実行する前提の、bashスクリプトも作成した ([ソースコードは最後に掲載](#co2_alertsh))。次のような動作をする。 - 第一引数をファイル名としてファイルを読み込み、その内容を最新のCO2濃度の値とする - CO2濃度≧警告値 (1500ppm) のとき - 状態が「ok」のとき - 状態を「alert」として記録する - ★『いま○○○○ppmなので換気して!』と言う音声ファイルを用意してgoogle-home-notifierで再生する - 状態が「alert」のとき - 状態「alert」が一定時間 (30分) 継続していたら再度★を実行する - CO2濃度≦安心値 (1000ppm) のとき - 状態が「ok」のとき - 何もしない - 状態が「alert」のとき - 状態を「ok」として記録する - 『○○○ppmに下がりましたので換気完了!』と言う音声ファイルを用意してgoogle-home-notifierで再生する - 各音声ファイルは1ppm単位の個別のものとし、VoiceTextで作成したものをローカルにキャッシュする `co2_alert.sh`を動かすため、一般ユーザ権限のcrontabを次のように設定している。 ``` FILE_CO2=/tmp/co2_value.dat */1 8-21 * * * sleep 40; timeout 10s 【設置ディレクトリ】co2_alert.sh ${FILE_CO2} >/dev/null 2>&1 ``` #### 4. CO2濃度アラートを数日動かした結果 ##### 二酸化炭素濃度に関して リビングのCO2濃度を測定して可視化したことで、気づいたこと。 - リビングでのCO2濃度1500ppmという閾値は、我が家の暮らしぶりにおいて1日に3回ほど強制換気するきっかけとなるもの。冬場はこのぐらいの設定で良いかなと感じている - リビングの換気は、台所の換気扇を一定時間強めに稼働させることでも行えるようだ。なお、窓の上部に付いている換気小窓は、各部屋で常に1~2cmほど開けている - 台所の換気扇の電源をスマートコンセントで制御できれば、換気も自動化出来て良いだろうが、構造的には難しそうなので妄想レベルに留まる - 朝起床した後に寝室の空気がリビングに流れ込むと、リビングのCO2濃度が瀑上がりすることに驚いた。すなわちこれは、ほぼ締め切った状態の寝室のCO2濃度は、就眠中におそらく何千ppmという高い状態まで上昇していることを意味する ##### スマートスピーカーに喋らせる声の工夫に関して Googleスマートスピーカーに喋らせる部分は、[co2_alert.sh](#co2_alertsh)を見ると分かるように、音声ファイルを`ffmpeg`で結合することで、それらしいジングル (キャッチーな音) が各音声ファイルの冒頭に入るよう工夫した。(なお、`google-home-notifier`の通常のテキスト→音声化を用いつつ、切れ目なくジングルを挿入する方法は思いつかなかった) また、流暢な発声をする[VoiceText Web API](https://cloud.voicetext.jp/webapi)には感情のパラメータもあるので、特に換気完了のお知らせは`emotion=happiness, emotion_level=3`と陽気な感じに設定し、アニメのキャラクターボイスのように溌剌としゃべってもらっている。 - 「【ニュース速報のようなピポパポ音♪に続いて】二酸化炭素濃度が現在1523ppm。少し換気をしましょう!」 - 「【明るいチャイム音♪に続いて陽気な声で】987ppmまで下がりました。換気完了です!」 アラートの通知のあり方として、通知音にどのような工夫ができるかを試すのは楽しかったし、今回の通知方法は家族の受けも良いようで、スマートスピーカー連携を作った甲斐がある。昨今のコロナ渦で注目されている換気の重要性を、私も含め家族へ身近なところから意識させることにつながるかな。 #### ソースコード ##### mh-z19_thingspeak.sh ```bash ###!/bin/bash ### mh-z19_thingspeak.sh THINGSPEAK_APIKEY=$1 THINGSPEAK_FIELD='field4' # 各自のThingSpeakに合わせて要調整 THINGSPEAK_URL='https://api.thingspeak.com/update' if [ `whoami` == "root" ]; then VALUE_CO2=`python3 -m mh_z19 | jq -r '.co2'` else VALUE_CO2=`python3 -m mh_z19 --serial_console_untouched | jq -r '.co2'` fi echo ${VALUE_CO2} if [ -n "${THINGSPEAK_APIKEY}" ]; then curl -s ${THINGSPEAK_URL} -X POST -d "${THINGSPEAK_FIELD}=${VALUE_CO2}" -H "X-THINGSPEAKAPIKEY: ${THINGSPEAK_APIKEY}" >/dev/null fi ``` ##### co2_alert.sh ```bash ###!/bin/bash ### co2_alert.sh ### usage: $0 if [ $# != 1 ]; then exit 1 fi CO2_NOW=$(cat "$1" | awk '{print $1}') if [ ${CO2_NOW} -lt 1 ]; then exit 2 fi CO2_ALERT=1500 CO2_OK=1000 SEC_ALERT=1800 TEXT_CO2_OK="${CO2_NOW}ppmまで下がりました。換気完了です!" TEXT_CO2_ALERT="二酸化炭素濃度が現在${CO2_NOW}ppm。少し換気をしましょう!" DIR_BASE='【設置ディレクトリ】' DIR_SOUND="${DIR_BASE}/cache/" mkdir -p ${DIR_SOUND} FILE_SOUND_IN_OK="${DIR_BASE}/News-Accent01-1.mp3" # https://otologic.jp/free/se/news-accent01.html FILE_SOUND_IN_ALERT="${DIR_BASE}/News-Alert03-1.mp3" # https://otologic.jp/free/se/news-alert01.html TYPE_SOUND='wav' FILE_SOUND_OUT="/tmp/co2.${TYPE_SOUND}" # ウェブサーバからアクセスできるように別途工夫 (例: symlink) FILE_STATUS='/tmp/co2_status.dat' TMP_FILE=$(mktemp --suffix=.wav -u) ### 鉄板のtmpfile処理 https://fumiyas.github.io/2013/12/06/tempfile.sh-advent-calendar.html func_atexit() { #[[ -n ${DIR_TMP-} ]] && rm -rf "${DIR_TMP}" [[ -n ${TMP_FILE-} ]] && rm -f "${TMP_FILE}" } trap func_atexit EXIT trap 'rc=$?; trap - EXIT; func_atexit; exit $?' INT PIPE TERM func_savevoice() { TMP_FILENAME=$1 TMP_TEXT=$2 TMP_EMOTION=$3 TMP_EMOTIONLEVEL=$4 VOICETEXT_APIKEY='【VoiceText API KEY】' if [ -z "${TMP_EMOTION}" ]; then curl "https://api.voicetext.jp/v1/tts" \ -o "${TMP_FILENAME}" \ -u "${VOICETEXT_APIKEY}:" \ -d "text=${TMP_TEXT}" \ -d "speaker=hikari" >/dev/null else curl "https://api.voicetext.jp/v1/tts" \ -o "${TMP_FILENAME}" \ -u "${VOICETEXT_APIKEY}:" \ -d "text=${TMP_TEXT}" \ -d "speaker=hikari" \ -d "emotion=${TMP_EMOTION}" \ -d "emotion_level=${TMP_EMOTIONLEVEL}" >/dev/null fi } func_voice() { CO2_STATUS=$1 TEXT_CO2=$2 if [ "${CO2_STATUS}" == 'ok' ]; then FILE_SOUND_IN=${FILE_SOUND_IN_OK} EMOTION='happiness' EMOTION_LEVEL=3 else FILE_SOUND_IN=${FILE_SOUND_IN_ALERT} EMOTION='' EMOTION_LEVEL= fi HASH_TEXT=`echo ${TEXT_CO2} ${FILE_SOUND_IN} ${EMOTION} ${EMOTION_LEVEL} | md5sum | awk '{print $1}'` if [ -e "${DIR_SOUND}/${HASH_TEXT}.${TYPE_SOUND}" ]; then : else func_savevoice "${TMP_FILE}" "${TEXT_CO2}" ${EMOTION} ${EMOTION_LEVEL} ffmpeg -y -loglevel quiet -i "${FILE_SOUND_IN}" -i "${TMP_FILE}" -filter_complex [0:a][1:a]concat=n=2:v=0:a=1 "${DIR_SOUND}/${HASH_TEXT}.${TYPE_SOUND}" >/dev/null fi rm "${FILE_SOUND_OUT}" cp -p "${DIR_SOUND}/${HASH_TEXT}.${TYPE_SOUND}" "${FILE_SOUND_OUT}" URL_BASE='http://【google-home-notifierサーバ】:8091/google-home-notifier/?text=' wget -q -O - "${URL_BASE}http://【自宅LAN内のウェブサーバ】/co2.${TYPE_SOUND}" } func_savestatus() { echo $1 >${FILE_STATUS} # ok, alert } func_durationstatus() { TMP_NOW=`date +"%s"` TMP_MOD=`date +"%s" -r ${FILE_STATUS}` if [ $((TMP_NOW - TMP_MOD)) -ge ${SEC_ALERT} ]; then echo 1 else echo 0 fi } if [ -e "${FILE_STATUS}" ]; then CO2_STATUS=`cat ${FILE_STATUS} | awk '{print $1}'` else func_savestatus 'ok' exit 0 fi if [ ${CO2_NOW} -ge ${CO2_ALERT} ]; then # CO2の値≧警戒値 if [ "${CO2_STATUS}" == 'ok' ]; then # 警告スタート func_savestatus 'alert' func_voice 'alert' "${TEXT_CO2_ALERT}" else # 警告続行中 TMP_FLAG=`func_durationstatus` if [ "${TMP_FLAG}" -eq 1 ]; then func_savestatus 'alert' func_voice 'alert' "${TEXT_CO2_ALERT}" fi fi elif [ ${CO2_NOW} -le ${CO2_OK} ]; then # CO2の値≦安心値 if [ "${CO2_STATUS}" == 'ok' ]; then # OK継続中 : else # OKスタート func_savestatus 'ok' func_voice 'ok' "${TEXT_CO2_OK}" fi fi ``` --- ### 100均商品を活用したプチプチの壁で、冷気対策Ver.2 - 2021-01-24 URL: https://remoteroom.jp/diary/2021-01-24/ #### 北側の窓には追加対策が必要 2020年の末に、住まいの断熱対策を行いました。次の記事の通りです。 - [古い住まいの寒さ対策 ~すきま風を止めてプチプチで断熱~ \[2020-12-30\]]() この対策の結果、すきま風に由来する玄関と廊下の冷え込みは軽減したようだし、南側に位置するリビングと寝室は、冬ごもりがより快適にできる環境になったように思います。しかしながら、北側に位置する書斎 (在宅勤務を行う仕事部屋) は、もうちょっと寒さを抑えたい……。 特に、書斎の窓からの冷気をさらに抑える方法はないかな、と考えながら、100均のDAISOを訪ねた際に、前回と同様にプチプチを使った防寒対策で、しかも両面テープや画鋲などを使わず住宅設備にダメージなしで施工できる方法を思いついて、実際にやってみました。本記事はその記録です。 #### 思いついたこと ##### 施工前の状態 (2020-12の対策後) 今回の施工前の、つまり2020年12月に防寒対策を行った後の北側の窓の状態は、上の写真の通り。はがせる両面テープを駆使して、窓全体にプチプチを1枚貼り付けてあります。 ##### アイデアと準備物 この窓の室内側、カーテンと窓の間に、下半分だけでいいので隙間のないプチプチの壁を設けることで、部屋の空気が窓で放熱して下降する際の冷気をダムのように、ある程度せき止めることができるのでは? DAISOの店頭でこのアイデアをひらめいて、次のものを調達。お財布にはさほど響かない実験です。なお、プチプチは前回購入したロール ([川上産業 d40L 三層品 幅600mm×全長42m](https://www.putiputi.co.jp/products/841)) がたっぷり余っているため問題なし (むしろ余りすぎが問題)。 |分類|品名|購入価格(円)|備考| |----|----|---:|----| |収納用品|65-100cmのつっぱり棒 3本|300|DAISO| |文房具|マグネットクリップ 4個|400|DAISO| |文房具|強力マグネット 1セット (※この品は不要でした)|100|DAISO| ##### プチプチの壁 プロトタイプ 購入してきたDAISOの品を開封し、仮組みしてみたプロトタイプは次の写真の通りです。小さいながらネオジム磁石を内蔵している「マグネットクリップ」が、イメージ通りの磁力と利便性を発揮して、両端のつっぱり棒 (スチール製) にくっつき、そしてプチプチを簡単に固定してくれます。 よし! これならば、両面テープなど使わずに部屋に取り付けられるし、反対に取り外す場合も容易です。 ###### 事後談 プロトタイプの段階では、「強力マグネット」数個を、真ん中のつっぱり棒にプチプチを固定する意図で使ってみましたが、本番では不要でした。本番に使ったプチプチはより厚く、両端から張力をかけていれば、特に落ちたりたわむことはなかったので、真ん中のつっぱり棒に固定は不要でしたし、固定するならば、本番のプチプチの厚みの問題で「強力マグネット」の磁力のみでは不足気味でした。 #### 施工内容 施工の内容は、次の写真2枚の通りです。最初に3本のつっぱり棒を窓の内側、左端・中央・右端に縦方向で固定し、両端のつっぱり棒にプチプチを固定しました。前回とは比較にならないほど短時間で作業できました。 追加したプチプチの壁の左右と下部では、プチプチと部屋の壁とを密着させて隙間がない状態にしています。これにより、窓に直接触れた部屋内の冷気は、下降して窓とプチプチの壁の間に滞留し、多くは部屋の内側に落ちていかない、という状態を作ったつもりです。 --- ### Pi-holeのAdリストを手軽に充実 - 2021-01-23 URL: https://remoteroom.jp/diary/2021-01-23/ #### DNSレベルのAdブロックは効果絶大 [Pi-hole](https://pi-hole.net/)を自宅LANに導入してから、半年ほどが過ぎた。導入当時に次のブログを書いた。 - [Pi-holeの紹介 ~自宅LAN全部まとめてAd Blocking~ \[2020-07-17\]]() > Pi-holeでなにができるか。自宅LANでこれを動かしておくと、自宅LANの中にスマホやPCなどのインターネット端末が、OSを問わず多数あるとしても、それらのDNSの正引きをPi-holeでまとめてフィルタリングできます。つまりは各端末から、広告等を配信しているインターネット上のサーバ (ドメイン) へのアクセスを発生させないようにできます。 Pi-holeがもたらすネット広告 (Ad) のブロック効果は非常に強力で、着目しているコンテンツ以外に気を取られることが激減する。その視覚的な静寂に、私も家族もすっかり慣れてしまった。 ちなみに、何らかの事情でネット広告を見て確認したいときには、逆に、端末側でのDNS設定変更などのひと手間が必要になる。 #### 1) ブロックリストの簡単追加ツール Pi-holeには、ブロックするドメインのリストが初期状態でいくつか登録されていて、さらにリスト追加でブロック対象を拡充できるが、公開されているリストを探す作業にはそれなりに手間がかかる。しかし今回、GitHubで「pihole5-list-tool」という次のツールを見つけ、これを使うと、Pi-holeへ数十個のブロックリストを追加する作業が簡単に行えたのでご紹介。 - [jessedp/pihole5\-list\-tool: A tool for quickly and easily bulk adding allow and ad/block lists to a Pi\-hole 5 installation](https://github.com/jessedp/pihole5-list-tool) ##### 実行方法 pihole5-list-toolの実行は、Pi-holeを導入しているサーバにて、上記のGitHubページの[installation](https://github.com/jessedp/pihole5-list-tool#installation)と[usage / running](https://github.com/jessedp/pihole5-list-tool#usage--running)に記載の、次のコマンドで行える。 ```bash $ sudo pip3 install pihole5-list-tool --upgrade $ sudo pihole5-list-tool ``` pihole5-list-toolを実行すると、途中に、追加するブロックリストのレベルを選択する画面が現れる。各選択肢と、その後に自動的に導入されるブロックリストの数を確認したところ、次のようになった。 |選択肢|説明|導入リスト数| |---|---|--:| |Firebog \| Non-crossed lists|Use when someone is usually around to allow falsely blocked sites|47| |Firebog \| Ticked lists|Use where no one will be allowing falsely blocked sites|32| |Firebog \| All lists|Use when someone will always be around to allow falsely blocked sites|55| 私の環境の場合は、ブロックが最も緩めのレベルである `Ticked lists` を選択している。説明にあるように、誤ってブロックされたサイトの解除操作を行う回数は極力減らしたいので。 ##### 追加されるドメインの数 pihole5-list-toolが追加した32個のリストをPi-holeに適用することで、ブロック対象ドメイン数は次のように増加した。 ||適用前|適用後| |---|--:|--:| |ブロック対象ドメイン数|109,576|316,329| pihole5-list-toolのリスト適用前のブロック状態 (フィルタリング性能) でも、自宅LANでインターネットを使っている際に特に不満はなかったのだが、今回追加された約20万個の膨大なブロック対象ドメイン数は、将来も平穏を得るための一種の保険みたいなものと考える。 #### 2) ブロックリストの効果確認ツール 「Pihole Adlist Tool」という次のツールも見つけた。これは、ツールを実行するサーバで動作しているPi-holeのブロックリスト (Adlist) と、実際にブロックしたドメインのログを突き合わせて、それぞれのブロックリストの適用回数を集計してくれるものである。 - [yubiuser/pihole\_adlist\_tool: An tool to analyse how your pihole adlists cover you browsing behavior](https://github.com/yubiuser/pihole_adlist_tool) Pi-holeに登録しているブロックリストが、自分の環境でのインターネット利用状況にどれほどマッチしているか、無用なリストを登録していないか、効果測定したい時に活用できると思う。 ##### 実行方法 Pihole Adlist Toolの実行方法は次の通り。 ```bash $ git clone https://github.com/yubiuser/pihole_adlist_tool $ cd pihole_adlist_tool $ ./pihole_adlist_tool ``` 私の環境での実行結果の一部は次の通りだった。`hits_covered`の数が大きいリストは、確実に効果が出ているものと判断できる。 ``` id enabled total_domains domains_covered hits_covered unique_domains_covered address ---------- ---------- ------------- --------------- ------------ ---------------------- ---------------------------------------------------------------- 1 1 58866 715 318802 44 https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts 2 0 https://mirror1.malwaredomains.com/files/justdomains 3 1 34 1 4327 https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt 4 1 2701 13 4463 https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt 11 1 74628 648 236127 https://warui.intaa.net/adhosts/hosts_lb.txt 12 1 74628 648 236127 https://warui.intaa.net/adhosts/hosts_lb_ipv6.txt 14 1 31201 323 56918 10 https://logroid.github.io/adaway-hosts/hosts_no_white.txt (後略) ``` --- ### 何度目かのGitチャレンジとMarkdownメモ管理のためのツール - 2021-01-03 URL: https://remoteroom.jp/diary/2021-01-03/ 新年に挑戦したくなる新しいこととして、「GitコマンドとGitHubをもっと深く使ってみよう」と私は考えた。きっかけは、[Netlify](https://www.netlify.com/)にこのサイトのコピーを無料のお試しで作ろうとした時に、サイトデータをGitHubのリポジトリに保存しておかねばならず、しかしGitコマンドの操作に自分はほんと不慣れだという事実を思い知ったので。 Gitコマンド操作を強制的に日常化して慣れるためには、このサイトRemoteRoomのデータをGit管理してみるのが手っ取り早い。そこで、今までは基本的にDropboxで同期して複数マシンで扱っていたサイトの記事ファイル (Markdown) を、これからはGitHubのプライベートリポジトリにも保存して扱ってみることにする。 本記事には、まだ少しだが調べて見つけた、GitコマンドのサポートをしてくれそうなCUIツールと、Markdownに関する目新しくて気になるGUIツールをメモしてみる。私の普段遣いのマシンの環境は Chromebook (Crostini), Ubuntu, macOS, Android (Termux) なので、できる限り、これらのどこでも同じように使えるツールを揃えていく方針だ。 #### Tig: text-mode interface for Git CUIベースで、Gitリポジトリの履歴をカーソルキーで閲覧するようなツールを探してみると、すぐにTigが見つかった。 - [Introduction · Tig \- Text\-mode interface for Git](https://jonas.github.io/tig/) 直感的な画面でわかりやすく、これはぜひ導入しておきたい。手元の環境には次のコマンドでインストールできた。 - Crostini, Ubuntu: `sudo apt install tig` - macOS: `brew install tig` - Termux: `pkg install tig` Tigで、試しになんとなくから取得したリポジトリを閲覧してみると次のような画面になる。 #### git-foresta: Text-based git log graph viewer Gitのロググラフを閲覧する、git-forestaも見つけた。[git-forest – display the commit history forest](http://inai.de/projects/hxtools/)というツールに手を入れたものとのこと。コミットなどの状況を、Tigよりも気軽に確認するのに良いかな。 - [CUIで見やすい git コミットグラフ: git\-foresta 作った \- Qiita](https://qiita.com/takaakikasai/items/fc684d95c9841069889b) - [takaaki\-kasai/git\-foresta: git\-foresta: Text\-based git log graph viewer](https://github.com/takaaki-kasai/git-foresta) 手元の環境には、マニュアル通りの次のワンライナーでインストールできた (`~/bin/`ディレクトリが予め存在していることが前提)。`git-foresta`の動作にはPerl環境が必要である。 - Crostini, Ubuntu, macOS, Termux: `curl -L https://github.com/takaaki-kasai/git-foresta/raw/master/git-foresta -o ~/bin/git-foresta && chmod +x ~/bin/git-foresta` git-forestaで、上記のTigと同じリポジトリを閲覧してみると次のような画面になる。 #### Obsidian: A knowledge base that works on local Markdown files. 名前でウェブ検索すると「黒曜石」が先にヒットしてしまう、このObsidianというツールは、ローカルのMarkdownファイルを対象に、PKM (Personal Knowledge Management; 個人知識管理) するためのものらしい。まだ得体がしれず、使い始めるまで一山ある気がするものの、おもしろそうなのでとりあえずインストールしてみよう。 - [Obsidian](https://obsidian.md/) インストールは、各OSごとの実行ファイルをダウンロードして実行すれば良い。ただし、aarch64のChromebook (Crostini) だと、ダウンロード時にアーキテクチャが正しく認識されなかったかもしれない。その場合は、[Download \- Obsidian](https://obsidian.md/download)から「AArch64/ARM64 AppImage」を選んだほうが確実だ。 Obsidianの概要や使いこなしについては、次のような、詳しい方が発信している情報を追ってみようと思っている。 - [メモアプリObsidianマガジン|滝林夏来|note](https://note.com/takibayashi/m/m38cd2861c756) - [Zenn & Hugo in Obsidian : OHZフローによるナレッジベースとアウトプットコンテンツの完全統括](https://zenn.dev/estra/articles/ohzflow-zenn-hugo-obsidian) --- ### 【読んだ本】 わたしの家系図物語(ヒストリエ) ―調べてカンタン! すごいご先祖がわかる - 2021-01-01 URL: https://remoteroom.jp/medialog/2021-01-01_book-4788716119/ 家族の歴史を示す資料の一つである家系図を、最初は自身の分から遡るように戸籍を取り寄せることで、次には、祖先の出身地の同姓や寺院にコンタクトしたりといった深い調査を行うことで、作り上げる方法を本書は述べている。高校生が自分のルーツを探り始めるという物語仕立てとなっていて、最終的にはかなり先代までルーツが判明する。その成功体験を共有する形で、すらすら読むことができた。 私がいま本書を読もうと思ったのは、この年末年始に帰省をしていないことがきっかけだ。毎年のように実家に帰省している時には、近い間柄の親族・親戚の話は割と自然と耳に入る。一方で、没後長い親族に関して改めて知る (かつ記録を残す) ようなことはなかなかやらない。そもそも私は、2親等の祖父母のことさえ良く知らない。つまり正直なところ、家族関係に興味を持ち始めている6歳の子どもに正確に語れる情報を持っていない。そんな中で、帰省という口頭伝承の機会を一回パスしたことは、けっこうな痛手となりうる。祖父母の代は元気だけども今年で94歳だしな……。 そろそろ一度、家族の歴史を資料化しておかなければまずいぞ、という危機感をちょっと持ち始めたのであった。主人公の高校生のように調査を駆使して数百年も遡る気はないけども、戸籍を取り寄せるぐらいはやるかもしれない。ちなみに、戸籍の保管期間は現行法で「150年」とのこと。期間を過ぎると廃棄となるので、戸籍の取り寄せだけでも早く行っておくことを本書は勧めている。 --- ### Google Home/Nestを喋らせるgoogle-home-notifierの導入マニュアル [2020年12月版] - 2020-12-31 URL: https://remoteroom.jp/diary/2020-12-31/ #### デバイスを喋らせるおもしろさ 今は「[Google Nest](https://store.google.com/jp/product/google_nest_mini)」へシリーズ名を変えているGoogle製のホームデバイス「Google Home」を、コマンドで好きに喋らせる仕掛けの一つとして、Node.jsで動作する次の google-home-notifier がある。 - [noelportugal/google\-home\-notifier: Send notifications to Google Home](https://github.com/noelportugal/google-home-notifier) ホームデバイスを喋らせる仕掛けをセットアップしておくと、部屋にいる家族に声で伝えたいことを外出中に喋らせたり、自宅サーバの起動完了を声で知ることができたりと、様々なことに応用できて便利だ。しかしながら、google-home-notifier本家の開発当時から数年が経過している関係で、現時点でこれを導入して動かすためには追加の手順が必要となっている。 そこで、今後の自分の為も含め、2020年12月時点でのgoogle-home-notifierの導入手順をまとめる。 ##### ブログに残したい出来事 2020年12月の初め。google-home-notifierが利用するモジュールのひとつ、次のgoogle-tts-apiが、`Error: get token key failed from google`というエラーでコケるようになり、その結果google-home-notifierも使えなくなった。 - [GitHub \- zlargon/google\-tts: Google TTS \(Text\-To\-Speech\) for node\.js](https://github.com/zlargon/google-tts) 自力ではエラーを解決できず苦肉の策を考えていたところ、「とりあえず暫定対応してみました」と、いきなり、パッチ主の [@freddiefujiwara](https://twitter.com/freddiefujiwara) さんからTwitterでメンションが。こんなありがたい、嬉しい出来事はブログ記事にして残すしかない。(感謝) #### google-home-notifier 導入マニュアル ##### 導入環境 google-home-notifierの導入を試したPC環境は次の通り。 |PC|IPアドレス|アーキテクチャ|OS| |---|---|---|---| |自宅サーバ1 (Raspberry Pi 4)|192.168.1.2|aarch64|Ubuntu 20.04.1 LTS| |自宅サーバ2 (ECS LIVA)|-|x86_64|Ubuntu 20.04.1 LTS| Googleホームデバイスとして、サーバと同じLANに、Google-Home-Miniを2台、Chromecast-Audioを1台、無線接続している。各デバイスのIPアドレスはDHCPで割り当てている。以下の導入手順は、自宅サーバ1を対象にした例である。 ##### 導入手順 導入手順は、基本的には、[google-home-notifier本家ページのListener](https://github.com/noelportugal/google-home-notifier#listener)に記述されている内容で進める。ただし、サービスを外部公開するための[ngrok](https://ngrok.com/)の代わりに私は[別の方法](#ps-ngrokの代替手段)を使うことにして、ngrok関連の処理を外している。 1. `$ git clone https://github.com/noelportugal/google-home-notifier` 2. `$ cd google-home-notifier` 3. package.jsonの「"google-tts-api"」行を[このように変更する](#手順3-packagejsonの変更箇所) 4. (対象環境がラズパイの場合) 追加作業を行う→ 5. `$ npm install` 6. browser.jsの一部を[このように変更する](#手順6-browserjsの変更箇所) 7. 付属のexample.jsの代わりに、[自作server.jsを保存する](#手順7-自作serverjsの内容) 8. `$ node server.js` 9. サーバ (192.168.1.2) の次のURLにアクセスする→ 以上の、手順1~9を行うと、Google-Home-Miniが「Hello Google Home」と喋ってくれるはず。 ##### 手順3) package.jsonの変更箇所 google-tts-apiのバージョン指定を「0.0.6」に変える。[google-tts-api本家ページのCHANGELOG](https://github.com/zlargon/google-tts/blob/master/CHANGELOG.md#006-dec-5-2020)に`Fix the change of Google Translate API`と記述されている版だ。 ```diff $ diff -up package.json.original package.json --- package.json.original 2020-12-31 17:50:35.286898269 +0900 +++ package.json 2020-12-31 17:51:16.306740064 +0900 @@ -17,7 +17,7 @@ "body-parser": "^1.15.2", "castv2-client": "^1.1.2", "express": "^4.14.0", - "google-tts-api": "0.0.2", + "google-tts-api": "0.0.6", "mdns": "^2.3.3", "ngrok": "^2.2.4" } ``` ##### 手順6) browser.jsの変更箇所 [google-home-notifier本家ページのAfter "npm install"](https://github.com/noelportugal/google-home-notifier#after-npm-install)の記述内容に従う。 ```diff $ diff -up browser.js.original browser.js --- browser.js.original 1985-10-26 17:15:00.000000000 +0900 +++ browser.js 2020-12-31 17:56:17.874159294 +0900 @@ -118,7 +118,7 @@ Browser.create = function create(service Browser.defaultResolverSequence = [ rst.DNSServiceResolve() -, 'DNSServiceGetAddrInfo' in dns_sd ? rst.DNSServiceGetAddrInfo() : rst.getaddrinfo() +, 'DNSServiceGetAddrInfo' in dns_sd ? rst.DNSServiceGetAddrInfo() : rst.getaddrinfo({families:[4]}) , rst.makeAddressesUnique() ]; ``` ##### 手順7) 自作server.jsの内容 [example.js](https://github.com/noelportugal/google-home-notifier/blob/master/example.js)を元に、次の変更を行っている。 - ngrok関連の処理をコメントアウト - 喋らせたいホームデバイスの名前 (の前方の共通部分) を`deviceName`で指定し、IPアドレスでの指定は行わないので関連の処理をコメントアウト ```js $ cat server.js var express = require('express'); var googlehome = require('./google-home-notifier'); // var ngrok = require('ngrok'); var bodyParser = require('body-parser'); var app = express(); const serverPort = 8091; // default port // var deviceName = 'Google Home'; var deviceName = 'Google-Home-Mini'; // var ip = '192.168.1.20'; // default IP var urlencodedParser = bodyParser.urlencoded({ extended: false }); app.post('/google-home-notifier', urlencodedParser, function (req, res) { if (!req.body) return res.sendStatus(400) console.log(req.body); var text = req.body.text; if (req.query.ip) { ip = req.query.ip; } var language = 'ja'; // default language code if (req.query.language) { language; } // googlehome.ip(ip, language); googlehome.device(deviceName,language); if (text){ try { if (text.startsWith('http')){ var mp3_url = text; googlehome.play(mp3_url, function(notifyRes) { console.log(notifyRes); res.send(deviceName + ' will play sound from url: ' + mp3_url + '\n'); }); } else { googlehome.notify(text, function(notifyRes) { console.log(notifyRes); res.send(deviceName + ' will say: ' + text + '\n'); }); } } catch(err) { console.log(err); res.sendStatus(500); res.send(err); } }else{ res.send('Please GET "text=Hello Google Home"'); } }) app.get('/google-home-notifier', function (req, res) { console.log(req.query); var text = req.query.text; if (req.query.ip) { ip = req.query.ip; } var language = 'ja'; // default language code if (req.query.language) { language; } // googlehome.ip(ip, language); googlehome.device(deviceName,language); if (text) { try { if (text.startsWith('http')){ var mp3_url = text; googlehome.play(mp3_url, function(notifyRes) { console.log(notifyRes); res.send(deviceName + ' will play sound from url: ' + mp3_url + '\n'); }); } else { googlehome.notify(text, function(notifyRes) { console.log(notifyRes); res.send(deviceName + ' will say: ' + text + '\n'); }); } } catch(err) { console.log(err); res.sendStatus(500); res.send(err); } }else{ res.send('Please GET "text=Hello+Google+Home"'); } }) app.listen(serverPort, function () { //ngrok.connect(serverPort, function (err, url) { //console.log('Endpoints:'); //console.log(' http://' + ip + ':' + serverPort + '/google-home-notifier'); //console.log(' ' + url + '/google-home-notifier'); //console.log('GET example:'); //console.log('curl -X GET ' + url + '/google-home-notifier?text=Hello+Google+Home'); //console.log('POST example:'); //console.log('curl -X POST -d "text=Hello Google Home" ' + url + '/google-home-notifier'); // ); }) ``` #### 自作server.jsのエラー問題が未解決 実は、上記の手順を経て起動した自作server.jsのサービスは、Google Homeを1度喋らせたあとにプロセスが意図せぬエラーで終了してしまう。その時の内容は次の通り。 ##### server.js: エラー終了時のログ ``` $ node server.js *** WARNING *** The program 'node' uses the Apple Bonjour compatibility layer of Avahi. *** WARNING *** Please fix your application to use the native API of Avahi! *** WARNING *** For more information see *** WARNING *** The program 'node' called 'DNSServiceRegister()' which is not supported (or only supported partially) in the Apple Bonjour compatibility layer of Avahi. *** WARNING *** Please fix your application to use the native API of Avahi! *** WARNING *** For more information see { text: 'Hello Google Home' } Device "Google-Cast-Group-e8c73b83ff0b441a884936424a32536e" at 192.168.1.199:32161 Device "Google-Home-Mini-01a09e213c39b4d7151557adf3e31cf7" at 192.168.1.198:8009 timeout parameter is deprecated Device "Google-Home-Mini-e7dac5c24c8c4720c163b58859be6799" at 192.168.1.199:8009 timeout parameter is deprecated Device "Chromecast-Audio-42b0162ed37bd719776536eb4f73c9d5" at 192.168.1.197:8009 Device notified Device notified _http_outgoing.js:470 throw new ERR_HTTP_HEADERS_SENT('set'); ^ Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client at ServerResponse.setHeader (_http_outgoing.js:470:11) at ServerResponse.header (/home/foobar/tmp/google-home-notifier/node_modules/express/lib/response.js:771:10) at ServerResponse.contentType (/home/foobar/tmp/google-home-notifier/node_modules/express/lib/response.js:599:15) at ServerResponse.send (/home/foobar/tmp/google-home-notifier/node_modules/express/lib/response.js:145:14) at /home/foobar/tmp/google-home-notifier/server.js:86:15 at /home/foobar/tmp/google-home-notifier/google-home-notifier.js:35:11 at /home/foobar/tmp/google-home-notifier/google-home-notifier.js:70:7 at /home/foobar/tmp/google-home-notifier/google-home-notifier.js:95:9 at /home/foobar/tmp/google-home-notifier/node_modules/castv2-client/lib/controllers/media.js:81:5 at fn.onmessage (/home/foobar/tmp/google-home-notifier/node_modules/castv2-client/lib/controllers/request-response.js:27:7) ``` ##### server.js: googlehomenotifier.serviceでサービス化 上記のエラーは、HTTPヘッダに関する何らかの不具合が起こっているためだろうと思うが、私がNode.jsを理解できておらず、どうやってエラーを解決すればいいか分からない。うーん。 しかし、落ちてしまうサービスを起動し直せば、google-home-notifierが再び利用できることは分かっているので、ものすごいバットノウハウなのであるが、文字通り「落ちたサービスを起動し直す」ようにした。 具体的には、次のサービスファイル`googlehomenotifier.service`を用意した上で、自作server.jsをsystemd配下のサービスとした。サービスファイルに`RestartSec=5`と記述しているので、server.jsのサービスが停止して5秒するとサービスを再起動してくれる。 ``` $ cat /etc/systemd/system/googlehomenotifier.service Description=google-home-notifier Server After=syslog.target network-online.target [Service] Type=simple User=root ExecStart=/usr/local/bin/node server.js Restart=on-failure RestartSec=5 KillMode=process WorkingDirectory=/home/foobar/tmp/google-home-notifier [Install] WantedBy=multi-user.target ``` #### P.S. ngrokの代替手段 自宅のgoogle-home-notifierをインターネットから使う、ngrok以外の手段として。 インターネットに公開されているサーバを1台用意して (以下VPSと表記)、次のような仕掛けを作ると、自宅サーバへインターネットから直接アクセスできない状態でも、`https:///google-home-notifier`へPOSTした内容を自宅のGoogle Homeが喋るようにできる。 1. VPSの8091/tcp (localhost:8091) へ通信すると、その通信がgoogle-home-notifierを動かしている自宅サーバの8091/tcpへ届くように、自宅サーバにてautosshを用いた持続的なSSHポートフォワーディングを実行する ([autosshをサービス化してSSH接続を強化 \[2019-07-18\]]() の応用) 2. VPS上のnginxでリバースプロキシを設定し、localhost:8091をHTTPS (443/tcp) で公開する そしてさらに、上記の公開URL`https:///google-home-notifier`へテキストをPOSTする入力フォームも用意すると、どこからでも、フォームへ入力した言葉を自宅のGoogle Homeが喋るというシステムができあがる。 --- ### 古い住まいの寒さ対策 ~すきま風を止めてプチプチで断熱~ - 2020-12-30 URL: https://remoteroom.jp/diary/2020-12-30/ 古い賃貸マンションの住まいで、冬をより快適に過ごすために、マンション退去時に原状回復できる程度の寒さ対策を試してみました。本記事はその記録です。 ちなみに、私がここに住んで9年目のいま、急に防寒に乗り出した動機は、在宅勤務で長時間過ごす仕事部屋が北側に位置していて、そこでの冷え込みが体に堪えるようになってきたためです。 #### 防寒1: 玄関からの隙間風を止める 北側に位置する玄関の扉と戸当りの間から、隙間風が入り込んできていた。おそらくこの影響で、玄関と廊下とその隣の仕事部屋が深々と冷え込むのは、これまでの我が家の冬の風物詩だった。 また、廊下とリビングの間のドアの下には、ケーブルを通せる5mmほどの隙間が空いている。[実際にCAT7フラットLANケーブルを通すことができて](#%E8%BF%BD%E8%A8%98-2020-08-22)それはそれで便利なのであるが、隙間の不必要な部分は塞ぎたい。 そのためのアイテムとして、次の2品を入手した。 |分類|品名|購入価格(円)|備考| |----|----|---:|----| |波型テープ|[スコッチ® 玄関ドア用 戸あたり波型テープ EN-58](https://www.scotch.jp/3M/ja_JP/scotch-brand-jp/products/catalog/~/%E3%82%B9%E3%82%B3%E3%83%83%E3%83%81-%E7%8E%84%E9%96%A2%E3%83%89%E3%82%A2%E7%94%A8-%E6%88%B8%E3%81%82%E3%81%9F%E3%82%8A%E6%B3%A2%E5%9E%8B%E3%83%86%E3%83%BC%E3%83%97-EN-58-%E9%BB%92-3-5-mm-x-8-5-mm-x-5-m-12-%E3%83%91%E3%83%83%E3%82%AF-%E7%AE%B1/?N=4335+3293036370+3294529191&preselect=3293786499&rt=rud)|609|Amazon.co.jp| |パイルフィット|[ニトムズ パイルフィット 6 x 6G](https://www.nitoms.com/products/madoeco_clearance_tape_pilefit/)|376|Amazon.co.jp| 波型テープは高さ3.5mmで、押しつぶすことができる構造になっている。これを玄関の戸当りの四辺にぐるりと貼り付けると、玄関ドアを閉めても生じていた隙間をおおよそ埋めることができた。灰色の毛が生えている帯状のパイルフィットを、廊下とリビングの間のドアの下辺 (床に向いている部分) に貼り付けると、床と扉の隙間がちょうど埋まり、かつ扉の開閉時の大きな摩擦抵抗とはならないようにできた。なお、パイルフィットの余った分を、波型テープでは埋めきれていない、玄関ドアの隙間部分に貼ったりもしている。 波型テープの対策により、玄関側からやってくる隙間風は大部分カットできているように思う。嬉しいことに、玄関ドアの遮音性が高まったようで、外界から聞こえてくる音が小さくなった。また、パイルフィットの遮音性も意外にあるようで、たとえば、廊下側にある洗面所の洗濯機の稼働音やブザー音が、リビングでは以前よりも遠く聞こえる。 #### 防寒2: 窓からの冷気を止める 外気温が低いとき、窓の室内側では空気が下降しているのを感じる。これは部屋の温かい空気が窓に触れて冷却されている、つまり放熱していることを示唆している。この放熱を抑えるにはどうすればいいかを調べていたところ、次の記事にたどり着いた。 - [アルミ箔とプチプチは有効? 1000円でできる放熱対策を検証してみた \(1/4\) \- ITmedia エンタープライズ](https://www.itmedia.co.jp/bizid/articles/1202/14/news006.html) 気泡緩衝材である[プチプチ®](https://ja.wikipedia.org/wiki/%E6%B0%97%E6%B3%A1%E7%B7%A9%E8%A1%9D%E6%9D%90#%E5%95%86%E6%A8%99%E3%81%A8%E8%A3%BD%E9%80%A0%E4%BC%81%E6%A5%AD)を使って空気層を増やし断熱する技を検証している。素材としてのプチプチはハサミで簡単に加工できるし良いアイデアだと考え、次の2品を入手した。なお、プチプチは本当は10mもあれば十分だと思うが、それぐらいの長さの売り物を発見できなかったので仕方なく42m……。プチプチの太巻きには業務用の趣があり、家族には「なによこれ!?」と驚かれた。 |分類|品名|購入価格(円)|備考| |----|----|---:|----| |プチプチ|[川上産業 d40L 三層品 幅600mm×全長42m](https://www.putiputi.co.jp/products/841)|1,848|Amazon.co.jp| |両面テープ|[ニトムズ はがせる両面テープ強力接着用 15×10](https://www.nitoms.com/products/proself_dbst_removable_sp/)]|339|Amazon.co.jp| 上記の検証記事では、本来の窓とプチプチの間に空間を設け、プチプチを内側のもう一枚の窓のようにすることで断熱効果を高めているようだが、うちの場合はこのような設置が難しい。そこで、基本的に窓の外枠にプチプチを貼るようなイメージで、しかしできるだけ窓のガラスにプチプチが密着しないようにして、次の3箇所で施工した。どの箇所も窓はもともと曇りガラスであり、窓からの眺めをプチプチで妨げはしていない。 - 仕事部屋の北側窓の全体 - リビングの南側窓の下半分 (下記の写真参照) - 寝室の南側窓の下半分 施工時の注意点としては、気温が低いと両面テープの粘着力があきらかに低下し、両面テープの片面を剥離させるのさえ難しくなるので、両面テープをドライヤーなどで温めてから貼る必要がある。 プチプチの断熱効果については、定量的な測定はしていない。しかしながら、窓際付近特有の寒さがこれまでより弱まっている感覚はある。 ##### 追記 [2021-01-24] - [100均商品を活用したプチプチの壁で、冷気対策Ver.2 \[2021-01-24\]]() #### 防寒3: 仕事部屋の足元の冷えを抑える 仕事部屋に、すなおに暖房器具を置いてもいいのだけれども、それ以前の対策として。机に座った際の足元に次の断熱シートを敷き詰めた。断熱シートに足を置いていると、硬い床からの冷たさは伝わってこないし、(自身の放射熱の反射で) 足の裏が温められる感覚もあるので、少しは効いているようだ。 |分類|品名|購入価格(円)|備考| |----|----|---:|----| |断熱シート|東和産業 断熱シート シルバー 約46.5×46.5cm|1,654|Amazon.co.jp| ##### 最終手段: 寝袋を併用する 仕事部屋がよっぽど冷えるときは、椅子に座った状態で、体の腰から下をシュラフ (寝袋) に潜らせておく防寒手段もある。体を動かしづらくはなるが、実際やってみると悪くないです。 --- ### 懐かしの30ピンDock付き音響機器をBluetooth対応にするアダプタ - 2020-12-27 URL: https://remoteroom.jp/diary/2020-12-27/ #### Dockコネクタはさすがに廃れた その昔、iPhoneの他に、音楽再生向けのiPodというApple製品があり、それには接続端子として、3cmほどの幅の「Apple 30ピン Dockコネクタ」が付いていた。[Wikipedia](https://ja.wikipedia.org/wiki/Dock%E3%82%B3%E3%83%8D%E3%82%AF%E3%82%BF#Apple_Dock%E3%82%B3%E3%83%8D%E3%82%AF%E3%82%BF)によると、この端子は2003~2016年の製品に存在していたらしい。 iPodは大流行していたから、Dockコネクタを備えてiPodを挿すだけで接続が完了する、iPhone/iPod直挿し対応のオーディオ機器もそれなりに数多く登場していた。私の家でもその類の[YAMAHA TSX-70](https://jp.yamaha.com/products/audio_visual/desktop_audio/tsx-70_beige__j/)を寝室の枕元に置いていたが、iPod自体を使わなくなって以降かなり長い間、この機器は単なる字光式のデジタル時計になってしまっていた。 #### Dock端子をBluetooth対応に変える物 ところが、である。最近ふとウェブ検索したところ、「Dockコネクタに挿すBluetoothアダプタ」というジャンルの製品が登場していて、それらが数千円で購入できることを知った。もしやこれを用いると、もともとBluetooth非対応のTSX-70を、まるでBluetooth対応が標準機能であるかのように、簡単にスマホから鳴らせるようになるのではないか? 今や、家族それぞれがBluetooth対応のガジェットを操る時代である。特に、子どもも鳴らせるスピーカーがあったら、勝手に繋げて遊ぶようになって楽しいかもしれぬ。そういう邪念も膨らんで、次のDockLinQ Proを購入した。 |分類|品名|購入価格(円)|備考| |----|----|---:|----| |Dockコネクタ対応Bluetoothアダプタ|INVERY DockLinQ Pro|2,914|Amazon.co.jp (2020年12月購入)| #### DockLinQ Proを簡単レビュー DockLinQ ProをTSX-70に挿すと、Bluetooth対応のスマホ等の音楽再生機器からは、「DockLinQ Pro」というその名の通りのBluetoothデバイスが見える。スマホの音楽再生先をDockLinQ Proに切り替えるだけで、TSX-70からあっけなく、クリアな音質で音楽が流れ始めた。 これは今風で簡単だし、使用機会が無くなったDockコネクタ対応機器を復活させることができる、とても良いアイテムだと思った。たとえば、ミニマリスト的なスタイルが素晴らしい[Bose SoundDock](https://japan.cnet.com/article/20381732/)などを、いま所有している方にもお薦めです。 なお、今回接続を試したTSX-70では、自身が給電されているならばDockコネクタへ常に給電しているようで、DockLinQ Proも常にBluetooth接続を待ち受ける状態になる。このため、同じ部屋の中で、複数のBluetooth接続をスマホでやりくりする場合には、スマホの音声出力先がいまどこなのか、接続先を意識する必要が出てくるかもしれない。 --- ### 温湿度・気圧センサーの値をThingSpeakでグラフ化し、スマホアプリで確認する方法 - 2020-12-20 URL: https://remoteroom.jp/diary/2020-12-20/ 本記事は次の記事の続編です。 - [Raspberry Pi 400にセンサーつないで温度・湿度・気圧を測定 \[2020-11-18\]]() - [Raspberry PiのUbuntu環境で温湿度・気圧センサーBME280を動かす方法 \[2020-11-19\]]() 第3弾の今回は、自宅サーバRaspberry Pi 4に接続したセンサーBME280の温度・気圧・湿度の時系列データを、ThingSpeakでグラフ化することが目標です。 #### 温度・気圧・湿度をグラフ化する手順 ##### Step-1. ThingSpeak側の準備 今回のグラフ化では、[ThingSpeak](https://thingspeak.com/)の「FREE License」を利用します。ThingSpeakとはなにかというと、運営元MathWorksのサイトにはこう書かれています。 - [ThingSpeak Documentation \- MathWorks 日本](https://jp.mathworks.com/help/thingspeak/index.html) > ThingSpeak は Internet of Things (IoT) プラットフォームであり、クラウドでセンサーのデータを収集および保存したり、IoT アプリケーションを開発したりできます。ThingSpeak™ IoT プラットフォームでは MATLAB® でデータを解析し可視化できるアプリを提供しており、そのデータに基づいてアクションを実行することができます。センサー データは Arduino®、Raspberry Pi™、BeagleBone Black、および他のハードウェアから ThingSpeak に送信できます。 私はこれまで、ThingSpeakを知りませんでしたが、IoTのデータを蓄積・分析するプラットフォームとして、世界中の人々に広く使われているような雰囲気があります。また、サードパーティのアプリ (後述) を用いると、スマホでもグラフがすばやく閲覧できて素敵です。 ThingSpeak側で行う準備は次の通りです。 1. アカウントの作成: [ThingSpeak](https://thingspeak.com/)の「Get Started For Free」からアカウントを作成します。メールアドレスの登録が必要です 2. Channelの作成と設定: My Channelsでチャンネルをひとつ作成し、SettingsでField 1,2,3を有効化し、この順番で「温度 (℃)」「気圧 (hPa)」「湿度 (%)」と名前を付けます 3. データ書き込み用のAPIキーの取得: 作成したチャンネルにデータを書き込むときに必要な、16文字の「Write API Key」をメモしておきます ##### Step-2. Pythonスクリプトの準備 今回の目標達成のために、[スイッチサイエンス社から提供](https://github.com/SWITCHSCIENCE/samplecodes/tree/master/BME280)されているサンプルコード `bme280_sample.py` を改造して、`bme280_thingspeak.py` を作成しました ([ソースコードは最後に掲載](#bme280_thingspeakpy))。改造のポイントは次の通りです。 1. Python 3対応 2. 各値のoversamplingを「x1」から「x8」に変更 - 参照: [BME280搭載 温湿度・気圧センサモジュールの使い方](https://trac.switch-science.com/wiki/BME280) 3. ThingSpeak.comへのデータ送信機能を追加 - 第1引数を付与して実行すると、その引数をThingSpeakの「Write API Key」とみなして、測定値3つをThingSpeakへ送信します。第1引数が付与されていないときの挙動は `bme280_sample.py` と同じです `bme280_thingspeak.py` は次のような形で実行します。「Write API Key」を、ここでは仮に `0123456789ABCDEF` としています。 ```bash $ python3 bme280_thingspeak.py "0123456789ABCDEF" temp : 18.00 ℃ pressure : 1025.58 hPa hum : 51.59 % ThingSpeak : 200 ``` 一度手動でテスト実行して問題がなければ、次に、Raspberry Piサーバ上のcronなどで定期実行を仕掛けます。 ###### 追記 [2021-01-05] `bme280_thingspeak.py` の定期実行を続けて気づいたこと。サーバ再起動後、センサーから最初に取得するデータは、たとえば気圧なら600hPaぐらいと、異常な値になる傾向に気づきました。そこでcron 1回実行につき、次のようにスクリプトを2回実行し、1回目のデータは捨てて、2回目のデータをThingSpeakへ送信するようにしました。毎回のcron実行時にこれをやるのは無駄ですが、暫定対応として。 ``` ### [room-condition] */2 * * * * timeout 20s /home/foobar/bme280_thingspeak.py >/dev/null; sleep 10; timeout 20s /home/foobar/bme280_thingspeak.py "0123456789ABCDEF" >/dev/null 2>&1 ``` ##### Step-3. ThingSpeakサイトで確認 実際にcronで2分ごとにデータ送信を行っているデータを、ThingSpeakサイトで確認すると次のようになります。 ##### Step-4. スマホで確認 ###### アプリで確認 Step-3のデータを、Androidアプリの [ThingView - ThingSpeak viewer](https://play.google.com/store/apps/details?id=com.cinetica_tech.thingview) (無料版) で閲覧した画面は次のようになります。ちなみに、閲覧する時間幅を調整する機能は無料版にはなく、このアプリの有料版 [ThingView Full](https://play.google.com/store/apps/details?id=com.cinetica_tech.thingview.full) に備わっています。 ###### ホーム画面のWidgetで確認 Step-3のデータを、Androidアプリの [IoT ThingSpeak Monitor Widget](https://play.google.com/store/apps/details?id=ua.livi.thingspeakmonitor) の、ホーム画面上のWidgetとして表示した画面は次のようになります。Widget右下のグラフのアイコンを押すと、全画面でグラフも描画されます。 #### 感想 「部屋の温度・気圧・湿度の変化をグラフで見たい……」という思いつきから始めた、Raspberry Piとセンサーを接続したIoT的な試みは、私の初めてにしては意外なほど、いい感じの完成度となりました (自己満足)。ThingSpeakとその関連アプリが整備されているおかげで、部屋内のセンサーの各測定値やグラフをスマホの画面まで自動的に届けることが、こんなに簡単にできるとは。 この次は、センサーを別途手に入れ次第、二酸化炭素濃度のグラフ化をやってみるつもりです。 ##### 追記 [2021-01-25] - [二酸化炭素濃度をラズパイで測り、換気が必要な時にスマートスピーカーが声で教えてくれる仕組みを作ろう \[2021-01-25\]]() #### ソースコード ##### bme280_thingspeak.py 今回作成した `bme280_thingspeak.py` のソースコードは次の通りです。[オリジナルとのdiff](#オリジナルとのdiff)も掲載します。 ```python ###!/usr/bin/env python3 ### Original: https://github.com/SWITCHSCIENCE/samplecodes/blob/master/BME280/Python27/bme280_sample.py from smbus2 import SMBus import time import sys import requests bus_number = 1 i2c_address = 0x76 bus = SMBus(bus_number) digT = [] digP = [] digH = [] t_fine = 0.0 if len(sys.argv) > 1: thingspeak_api_key = sys.argv[1] # ThingSpeak's Write API Key else: thingspeak_api_key = '' def post_thingspeak(value1, value2, value3): url = 'https://api.thingspeak.com/update' params = { 'api_key': thingspeak_api_key, 'field1': value1, # temp 'field2': value2, # pressure 'field3': value3, # hum } r = requests.get(url, params=params) return r.status_code def writeReg(reg_address, data): bus.write_byte_data(i2c_address,reg_address,data) def get_calib_param(): calib = [] for i in range (0x88,0x88+24): calib.append(bus.read_byte_data(i2c_address,i)) calib.append(bus.read_byte_data(i2c_address,0xA1)) for i in range (0xE1,0xE1+7): calib.append(bus.read_byte_data(i2c_address,i)) digT.append((calib[1] << 8) | calib[0]) digT.append((calib[3] << 8) | calib[2]) digT.append((calib[5] << 8) | calib[4]) digP.append((calib[7] << 8) | calib[6]) digP.append((calib[9] << 8) | calib[8]) digP.append((calib[11]<< 8) | calib[10]) digP.append((calib[13]<< 8) | calib[12]) digP.append((calib[15]<< 8) | calib[14]) digP.append((calib[17]<< 8) | calib[16]) digP.append((calib[19]<< 8) | calib[18]) digP.append((calib[21]<< 8) | calib[20]) digP.append((calib[23]<< 8) | calib[22]) digH.append( calib[24] ) digH.append((calib[26]<< 8) | calib[25]) digH.append( calib[27] ) digH.append((calib[28]<< 4) | (0x0F & calib[29])) digH.append((calib[30]<< 4) | ((calib[29] >> 4) & 0x0F)) digH.append( calib[31] ) for i in range(1,2): if digT[i] & 0x8000: digT[i] = (-digT[i] ^ 0xFFFF) + 1 for i in range(1,8): if digP[i] & 0x8000: digP[i] = (-digP[i] ^ 0xFFFF) + 1 for i in range(0,6): if digH[i] & 0x8000: digH[i] = (-digH[i] ^ 0xFFFF) + 1 def readData(): data = [] for i in range (0xF7, 0xF7+8): data.append(bus.read_byte_data(i2c_address,i)) pres_raw = (data[0] << 12) | (data[1] << 4) | (data[2] >> 4) temp_raw = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4) hum_raw = (data[6] << 8) | data[7] compensate_T(temp_raw) compensate_P(pres_raw) compensate_H(hum_raw) def compensate_P(adc_P): global t_fine pressure = 0.0 v1 = (t_fine / 2.0) - 64000.0 v2 = (((v1 / 4.0) * (v1 / 4.0)) / 2048) * digP[5] v2 = v2 + ((v1 * digP[4]) * 2.0) v2 = (v2 / 4.0) + (digP[3] * 65536.0) v1 = (((digP[2] * (((v1 / 4.0) * (v1 / 4.0)) / 8192)) / 8) + ((digP[1] * v1) / 2.0)) / 262144 v1 = ((32768 + v1) * digP[0]) / 32768 if v1 == 0: return 0 pressure = ((1048576 - adc_P) - (v2 / 4096)) * 3125 if pressure < 0x80000000: pressure = (pressure * 2.0) / v1 else: pressure = (pressure / v1) * 2 v1 = (digP[8] * (((pressure / 8.0) * (pressure / 8.0)) / 8192.0)) / 4096 v2 = ((pressure / 4.0) * digP[7]) / 8192.0 pressure = pressure + ((v1 + v2 + digP[6]) / 16.0) print("pressure : %7.2f hPa" % (pressure/100)) global post_pressure post_pressure = pressure/100 def compensate_T(adc_T): global t_fine v1 = (adc_T / 16384.0 - digT[0] / 1024.0) * digT[1] v2 = (adc_T / 131072.0 - digT[0] / 8192.0) * (adc_T / 131072.0 - digT[0] / 8192.0) * digT[2] t_fine = v1 + v2 temperature = t_fine / 5120.0 print("temp : %-6.2f ℃" % (temperature)) global post_temperature post_temperature = temperature def compensate_H(adc_H): global t_fine var_h = t_fine - 76800.0 if var_h != 0: var_h = (adc_H - (digH[3] * 64.0 + digH[4]/16384.0 * var_h)) * (digH[1] / 65536.0 * (1.0 + digH[5] / 67108864.0 * var_h * (1.0 + digH[2] / 67108864.0 * var_h))) else: return 0 var_h = var_h * (1.0 - digH[0] * var_h / 524288.0) if var_h > 100.0: var_h = 100.0 elif var_h < 0.0: var_h = 0.0 print("hum : %6.2f %" % (var_h)) global post_humidity post_humidity = var_h def setup(): #osrs_t = 1 #Temperature oversampling x 1 osrs_t = 4 #Temperature oversampling x 8 #osrs_p = 1 #Pressure oversampling x 1 osrs_p = 4 #Pressure oversampling x 8 #osrs_h = 1 #Humidity oversampling x 1 osrs_h = 4 #Humidity oversampling x 8 mode = 3 #Normal mode t_sb = 5 #Tstandby 1000ms filter = 0 #Filter off spi3w_en = 0 #3-wire SPI Disable ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | mode config_reg = (t_sb << 5) | (filter << 2) | spi3w_en ctrl_hum_reg = osrs_h writeReg(0xF2,ctrl_hum_reg) writeReg(0xF4,ctrl_meas_reg) writeReg(0xF5,config_reg) setup() get_calib_param() if __name__ == '__main__': try: readData() if len(thingspeak_api_key) > 0: p = post_thingspeak( '{:.02f}'.format(post_temperature), '{:.02f}'.format(post_pressure), '{:.02f}'.format(post_humidity)) print("ThingSpeak : %d" % (p)) except KeyboardInterrupt: pass ``` ##### オリジナルとのdiff - オリジナル: [samplecodes/bme280\_sample\.py at master · SWITCHSCIENCE/samplecodes](https://github.com/SWITCHSCIENCE/samplecodes/blob/master/BME280/Python27/bme280_sample.py) ```diff $ diff -up ./bme280_sample.py.20160829 ./bme280_thingspeak.py --- ./bme280_sample.py.20160829 2020-12-20 17:04:09.554538956 +0900 +++ ./bme280_thingspeak.py 2020-12-20 18:30:36.845542555 +0900 @@ -1,7 +1,11 @@ -#coding: utf-8 +#!/usr/bin/env python3 + +# Original: https://github.com/SWITCHSCIENCE/BME280/blob/master/Python27/bme280_sample.py from smbus2 import SMBus import time +import sys +import requests bus_number = 1 i2c_address = 0x76 @@ -14,6 +18,21 @@ digH = [] t_fine = 0.0 +if len(sys.argv) > 1: + thingspeak_api_key = sys.argv[1] # ThingSpeak's Write API Key +else: + thingspeak_api_key = '' + +def post_thingspeak(value1, value2, value3): + url = 'https://api.thingspeak.com/update' + params = { + 'api_key': thingspeak_api_key, + 'field1': value1, # temp + 'field2': value2, # pressure + 'field3': value3, # hum + } + r = requests.get(url, params=params) + return r.status_code def writeReg(reg_address, data): bus.write_byte_data(i2c_address,reg_address,data) @@ -92,7 +111,9 @@ def compensate_P(adc_P): v2 = ((pressure / 4.0) * digP[7]) / 8192.0 pressure = pressure + ((v1 + v2 + digP[6]) / 16.0) - print "pressure : %7.2f hPa" % (pressure/100) + print("pressure : %7.2f hPa" % (pressure/100)) + global post_pressure + post_pressure = pressure/100 def compensate_T(adc_T): global t_fine @@ -100,7 +121,9 @@ def compensate_T(adc_T): v2 = (adc_T / 131072.0 - digT[0] / 8192.0) * (adc_T / 131072.0 - digT[0] / 8192.0) * digT[2] t_fine = v1 + v2 temperature = t_fine / 5120.0 - print "temp : %-6.2f ℃" % (temperature) + print("temp : %-6.2f ℃" % (temperature)) + global post_temperature + post_temperature = temperature def compensate_H(adc_H): global t_fine @@ -114,13 +137,17 @@ def compensate_H(adc_H): var_h = 100.0 elif var_h < 0.0: var_h = 0.0 - print "hum : %6.2f %" % (var_h) - + print("hum : %6.2f %" % (var_h)) + global post_humidity + post_humidity = var_h def setup(): - osrs_t = 1 #Temperature oversampling x 1 - osrs_p = 1 #Pressure oversampling x 1 - osrs_h = 1 #Humidity oversampling x 1 + #osrs_t = 1 #Temperature oversampling x 1 + osrs_t = 4 #Temperature oversampling x 8 + #osrs_p = 1 #Pressure oversampling x 1 + osrs_p = 4 #Pressure oversampling x 8 + #osrs_h = 1 #Humidity oversampling x 1 + osrs_h = 4 #Humidity oversampling x 8 mode = 3 #Normal mode t_sb = 5 #Tstandby 1000ms filter = 0 #Filter off @@ -142,6 +169,12 @@ get_calib_param() if __name__ == '__main__': try: readData() + if len(thingspeak_api_key) > 0: + p = post_thingspeak( + '{:.02f}'.format(post_temperature), + '{:.02f}'.format(post_pressure), + '{:.02f}'.format(post_humidity)) + print("ThingSpeak : %d" % (p)) except KeyboardInterrupt: pass ``` --- ### MUTEが簡単にできるマイク Elgato Wave:3 にチェンジ - 2020-12-16 URL: https://remoteroom.jp/diary/2020-12-16/ #### FIFINE K670 = ★★☆ 自宅でのテレワーク、在宅勤務時に、私の場合はマイクを断続的に使う。2020年7月に導入したマイクは[FIFINE K670](https://fifinemicrophone.com/collections/microphones/products/usb-microphone-for-mac-and-windows-k670)という機種で、その使用感は、[2020-08-08の記事](#3-%E3%83%93%E3%83%87%E3%82%AA%E4%BC%9A%E8%AD%B0%E3%81%AE%E9%9F%B3%E5%A3%B0%E5%85%A5%E5%8A%9B%E6%94%B9%E5%96%84-2020-07)に一度書いたように、ほぼ満足であった。 しかし、FIFINE K670を5ヶ月以上使ってきて不満が募った点を述べるとするならば、1つ目は、マイク単体で瞬時にミュートON/OFFする操作が事実上行えない点だ。たとえば、Jitsiで同僚との会話中にくしゃみが出そう……というときに、マウスを掴んでのブラウザ画面の操作ではなく、かつボリュームつまみを物理的に回す操作でもなく、手元ですばやくミュート (消音) できると嬉しい。2つ目としては、これまでに何度、ミュートしていないつもりで、ミュート状態のマイクに向かって、虚しく語りかけていたことか。できればこの事故を発生しづらくする工夫がマイク自体に欲しいところ。 以上をまとめると、次のマイクに求める新たな機能的条件はこの2つになる。音質はもちろんFIFINE K670と同等以上が条件だ。 - マイク単体で瞬時にミュート操作が可能なこと - マイク自体にミュート状態の表示機能があること #### Elgato Wave:3 = ★★★ 上記の機能的条件を満たし、FIFINE K670での不満を解消できるUSB接続マイクロフォンとして、YouTubeやニコニコ動画での動画配信をよく観ている家族から、配信者がどんなマイクを使っているかの情報も仕入れた上で、[CORSAIR Elgato Wave:3](https://www.elgato.com/ja/wave-3)を選択した。 |分類|品名|購入価格(円)|備考| |----|----|---:|----| |USB接続マイクロフォン|[CORSAIR Elgato Wave:3](https://www.elgato.com/ja/wave-3)|18,700|Amazon.co.jp| ##### 使用感 Elgato Wave:3をまず半日使った感想として。自分の声をヘッドフォンで直接モニタリングしてみると、Elgato Wave:3は、これまでのFIFINE K670よりもホワイトノイズが小さいことはすぐに分かった。音質的には問題ない。 また、ミュート操作については次の自作動画 (13秒) の中で実際にやってみた。マイクの上部をそっとタップするだけの簡単操作でON/OFFができ、ミュート状態はマイク前面のLEDの色 (通常は白, ミュート時は赤) で判断できる。 このマイクの黒い外観には、装飾的な要素がほぼなく、道具としての全体の佇まいが良い。そしてミュート機能に関して、私と同じような要件を求める方には、Elgato Wave:3、お薦めできます。 --- ### 【読んだ本】 葉っぱはなぜこんな形なのか? 植物の生きる戦略と森の生態系を考える - 2020-11-27 URL: https://remoteroom.jp/medialog/2020-11-27_book-4065156696/ うちの子どもは、かなり小さい頃からシンボルマークの記号や葉っぱの形に興味を持っていたので、そういった類の図鑑を家に揃え始めていた。すると葉っぱの図鑑に関しては自然と、著名な樹木図鑑作家である「林さん」 (我が家ではこう呼んでいる) の良書を必ずセレクトすることになる。 その林将之氏作の本書は図鑑ではなく、エッセイの色が濃いものであって、著者の生い立ちや思考の方法、自然観が述べられている。葉の形状や葉の付き方、樹木の生育状況を観察し、そこから植物が生きるための戦略がどのようなものであるか、仮説を立てて考察する。著者は、既存の説がどうであるかにはさほどとらわれずに、自身の知覚で考えて仮説を立てるというスタンスを己に課していることがよく伝わってきた。 話題は植物だけに留まらず、クマ、シカの人間との関係性、日本でのオオカミの絶滅の影響など、森の生態系へと広がり、最後には、人間とは自然の中の存在なのか外の存在なのか、という問題提起がされる。もちろん二項対立とはならない。なお、本書にある「植物は人間を意識しているか」という問いが、たいへん印象深かった。なぜならば私にとって、植物の立場から人間を見ている向きの思考方法が新鮮であり、自分の思考が一面的であることに気付かされたからだ。 #### 子どもが愛読している三冊 --- ### Raspberry PiのUbuntu環境で温湿度・気圧センサーBME280を動かす方法 - 2020-11-19 URL: https://remoteroom.jp/diary/2020-11-19/ 本記事は次の記事の続編です。 - [キーボード一体型「Raspberry Pi 400」入手→技適未取得機器の申請→Octaneベンチマークとった \[2020-11-14\]]() - [Raspberry Pi 400にセンサーつないで温度・湿度・気圧を測定 \[2020-11-18\]]() #### 1. はじめに [前回の記事]()では、手元で遊んでいる、キーボード一体型の[Raspberry Pi 400](https://www.raspberrypi.org/products/raspberry-pi-400-unit/)に温湿度・気圧センサーのBME280を初めて接続して、これらの接続方法を確立した。 今回はその接続方法を、自宅サーバをやっている、箱型の[Raspberry Pi 4 Model B](https://www.raspberrypi.org/products/raspberry-pi-4-model-b/)に対して適用し、念願の「室内温度・湿度・気圧のグラフ化」を実現する準備を進める。 ##### 材料 - [スイッチサイエンス > BME280搭載 温湿度・気圧センサモジュール ピンヘッダ実装済](https://www.switch-science.com/catalog/2323/) - [サンハヤト > テストワイヤ TTW-202](https://www.sunhayato.co.jp/material2/ucb12/item_1125) - [スイッチサイエンス > Raspberry Pi 4 Model B / 4GB(OKdo製)](https://www.switch-science.com/catalog/5947/) #### 2. OS側準備と接続確認まで 前回の記事で温湿度・気圧センサーBME280との接続を確立したRaspberry Pi 400の、OSはラズパイ界標準のRaspberry Pi OSであった。これは標準OSであるためにウェブ上に接続方法の知見が多く、迷うところはほとんどなかったが、今回のRaspberry Pi 4はOSがUbuntuだ。 |PC|用途|導入OS| |---|---|---| |Raspberry Pi 400|未定|Raspberry Pi OS| |Raspberry Pi 4 Model B|自宅サーバ|Ubuntu 20.04.1 LTS (Focal)| とりあえずのスタンスでUbuntuにてBME280を動かした方法を以下に述べるが、不慣れなため本来は不要な操作も、無駄に行ってしまっている可能性があります。あらかじめご了承ください。 ##### ラズパイのI2C通信の機能を有効にする 最初に`raspi-config`コマンドを導入する。 ###### コマンド導入: 失敗編 ラズパイ上のUbuntuで、ラズパイ/Raspberry Pi OS固有のコマンドを使えるようになるのかもしれない、次のPPAを発見した。 - [Ubuntu Pi Flavour Maker PPA : “Ubuntu Pi Flavour Maker Team” team](https://launchpad.net/~ubuntu-pi-flavour-makers/+archive/ubuntu/ppa) > Assorted software and drivers to support the creation of community created Ubuntu images for the Raspberry Pi 2, 3 & 3+ しかしながら、これはRaspberry Pi 4とUbuntu 20.04 (Focal) の組み合わせ向けではないようで、このPPAリポジトリを加えて`sudo apt update`かけたあと、`sudo apt install raspi-config`ではパッケージがないと言われた。 ###### コマンド導入: 成功編 次のブログで紹介されている手順をやってみる。ラズパイのDebianのリポジトリを参照させる方法だ。 - [Trading on Raspberry Pi with Ubuntu 18\.04 \| Trenki’s Dev Blog](https://trenki2.github.io/blog/2019/05/14/trading-with-raspberry-pi/) ちなみに、UbuntuとDebianの各バージョンの名称の対象表は、次のページにある。 - [What Debian version are the different Ubuntu versions based on? \- Ask Ubuntu](https://askubuntu.com/questions/445487/what-debian-version-are-the-different-ubuntu-versions-based-on) Debianの名称は、実際のラズパイのUbuntu環境でも確認ができ、 ```bash $ cat /etc/debian_version bullseye/sid ``` Ubuntu 20.04に対応するDebianは「bullseye」とわかるが、ブログの手順にそのまま当てはめると `http://archive.raspberrypi.org/debian bullseye Release` 部分で404 Not Foundになるので、適当にひとつ古い「buster」へ変えている。 以上をまとめると、ブログの手順を部分的に変更した次の手順で、ラズパイのUbuntu 20.04環境に`raspi-config`コマンドが導入できた。 ```bash $ echo 'deb http://archive.raspberrypi.org/debian/ buster main' | sudo tee /etc/apt/sources.list.d/raspberrypi-debian.list $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 7FA3303E $ sudo apt update $ sudo apt install raspi-config ``` ~~そして次のコマンドで、ラズパイのI2C通信の機能を有効にして、本体とOS側の準備を整える。~~ ```bash $ sudo raspi-config # CUI画面が起動する $ sudo apt install i2c-tools ``` ~~`sudo raspi-config`でCUI画面が起動するので、\[3 Interface Options\]→\[P5 I2C\]→「Would you like the ARM I2C interface to be enabled?」→\[Yes\]→「The ARM I2C interface is enabled」と進んでいけば良いはず。~~ ###### 追記 [2021-01-18] Raspberry Pi用のUbuntu 20.04.1 LTSにおいては、`raspi-config`の導入と、上で次のように書いた設定変更は不要だと判明した。 > `sudo raspi-config`でCUI画面が起動するので、\[3 Interface Options\]→\[P5 I2C\]→「Would you like the ARM I2C interface to be enabled?」→\[Yes\]→「The ARM I2C interface is enabled」 変更が不要な理由としては、ラズパイ用Ubuntuのデフォルト設定に`enable_uart=1`が書かれていて、I2C通信がすでに有効化されているから、らしい。 ```bash $ grep enable_uart /boot/firmware/*.txt /boot/firmware/config.txt:enable_uart=1 /boot/firmware/syscfg.txt:enable_uart=1 ``` ##### センサーを配線して電源ON ラズパイをshutdown (電源OFF) して、ラズパイのGPIOとセンサーBME280との配線を、[前回の記事の接続手順と同様に](#3-%E6%8E%A5%E7%B6%9A%E6%89%8B%E9%A0%86)実施する。その後にラズパイを電源ONする。 OS起動後に次のコマンドを実行し、「76」が現れたら、センサーとの通信はうまく行っている状態と思われる。 ```bash $ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- 76 -- ``` #### 3. サンプルスクリプトのpython3対応 前回同様、次のページで公開されているサンプルのPythonスクリプトで、センサーの動作を確認する。 - [samplecodes/BME280/Python27 at master · SWITCHSCIENCE/samplecodes · GitHub](https://github.com/SWITCHSCIENCE/samplecodes/tree/master/BME280/Python27) ただし、このPythonスクリプトはPython 2.7環境で動かすことが前提の内容。前回のRaspberry Pi 400 (Raspberry Pi OS) ではセンサーの接続方法の確立と動作確認だけが目的だったため、Pythonのバージョンは適当に2系で済ませたが、自宅サーバの環境ではPython 3系を基本にしているので、サンプルスクリプトをPython 3で動作するよう改造する。 しかしPython 3でエラーとなるのは、サンプルスクリプト内の3つの`print`文の部分だけで、ほんのちょっとの手直しで済む。手元にダウンロードした`bme280_sample.py`と、Python 3用の手直し版との差分は次の通り。`print`以降を丸括弧でくくったのみだ。 ```bash $ diff ./bme280_sample.py ./bme280_sample_python3.py 95c95 < print "pressure : %7.2f hPa" % (pressure/100) --- > print("pressure : %7.2f hPa" % (pressure/100)) 103c103 < print "temp : %-6.2f ℃" % (temperature) --- > print("temp : %-6.2f ℃" % (temperature)) 117c117 < print "hum : %6.2f %" % (var_h) --- > print("hum : %6.2f %" % (var_h)) ``` #### 4. センサーから値を取得できることを確認 ラズパイのPython 3環境に`smbus2`モジュールを追加したあと、サンプルスクリプトを実行する。気温・気圧・湿度それぞれで、室内環境に応じた現実的な値が表示されれば、動作確認OKである。 ```bash $ sudo pip3 install smbus2 $ sudo python3 bme280_sample_python3.py temp : 25.03 ℃ pressure : 1022.40 hPa hum : 50.65 % ``` #### 5. 一般権限で/dev/i2c-1へアクセスする ちなみにsudoしない場合、サンプルスクリプトの実行は次のようにエラーとなる。 ```bash $ python3 bme280_sample_python3.py Traceback (most recent call last): File "bme280_sample_python3.py", line 9, in bus = SMBus(bus_number) File "/usr/local/lib/python3.8/dist-packages/smbus2/smbus2.py", line 279, in __init__ self.open(bus) File "/usr/local/lib/python3.8/dist-packages/smbus2/smbus2.py", line 308, in open self.fd = os.open(filepath, os.O_RDWR) PermissionError: [Errno 13] Permission denied: '/dev/i2c-1' ``` エラーの原因は、エラーメッセージに表示されているように`/dev/i2c-1`へのアクセス権限が無いためであり、`ls -al`でも見て取れる。 ```bash $ ls -al /dev/i2c-* crw-rw---- 1 root i2c 89, 1 Apr 2 2020 /dev/i2c-1 ``` そこで次のコマンドで、スクリプトを実行するユーザ (一般権限) を`i2c`というグループに追加すればこの問題は解消する。 ```bash $ sudo gpasswd -a $(whoami) i2c ``` グループ追加後はログオフして (SSH master connectionも切って)、再ログインを行う。以降は、サンプルスクリプトをユーザ自身の権限で動かすことができる。 ```bash $ python3 bme280_sample_python3.py temp : 25.05 ℃ pressure : 1022.25 hPa hum : 51.13 % ``` #### 6. To be continued. 今回はここまで。一気に測定値 (気温・気圧・湿度) のグラフ化まで行いたかったが、力尽きました。 次回以降の記事で、自宅サーバRaspberry Pi 4に接続したセンサーBME280の測定値を、[ThingSpeak](https://thingspeak.com/)でグラフ化する内容をやってみたいと思います。 ##### 追記 [2020-12-20] 続編できました。 - [温湿度・気圧センサーの値をThingSpeakでグラフ化し、スマホアプリで確認する方法 \[2020-12-20\]]() --- ### Raspberry Pi 400にセンサーつないで温度・湿度・気圧を測定 - 2020-11-18 URL: https://remoteroom.jp/diary/2020-11-18/ 本記事は次の記事の続編です。 - [キーボード一体型「Raspberry Pi 400」入手→技適未取得機器の申請→Octaneベンチマークとった \[2020-11-14\]]() #### 1. センサー接続に初挑戦 私は特に用途を決めずに、[キーボード一体型のRaspberry Pi 400](https://www.raspberrypi.org/blog/raspberry-pi-400-the-70-desktop-pc/)を購入しましたが、それとは関係なしにいま手元には、「部屋の温度・湿度・気圧を自宅サーバ (Raspberry Pi 4) で計測したいな……」と考えて調達した、BME280というセンサーも届いている。 ちょうどいい。センサーの動作確認も兼ねて、Raspberry Pi 400での温度・湿度・気圧の取得に挑戦してみよう。ちなみにラズパイに電子部品をつなぐのは今回が初めてです。 #### 2. 材料 - [スイッチサイエンス > BME280搭載 温湿度・気圧センサモジュール ピンヘッダ実装済](https://www.switch-science.com/catalog/2323/) - [サンハヤト > テストワイヤ TTW-202](https://www.sunhayato.co.jp/material2/ucb12/item_1125) 今回はとりあえず配線のみ試せればいいやと考えて、ブレッドボードは仕入れていません。 #### 3. 接続手順 Raspberry Pi 400には「Raspberry Pi OS」を導入してある想定です。 1. ラズパイのI2C通信の機能を有効にする - GUI: ラズベリー印の \[メニュー\] > \[設定\] > \[Raspberry Pi の設定\] > \[インターフェース\] を開き、\[I2C\] を有効に切り替える → そのあと指示通りにOS再起動を行う - CUI: `sudo raspi-config` でGUIと同様に行えるらしい 2. 安全のためラズパイの電源をOFFにして、次の2つのページを参考にラズパイとセンサー間の配線を行う - ピン配置: [Raspberry Pi Documentation - Raspberry Pi OS > GPIO and the 40-pin Header](https://www.raspberrypi.com/documentation/computers/os.html#gpio-and-the-40-pin-header) - 配線図: [Raspberry Pi で温湿度気圧センサを使う \- Qiita](https://qiita.com/yukataoka/items/8f9046587c978e91f689#%E9%85%8D%E7%B7%9A%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6) > 配線について ``` ### 引用元: https://qiita.com/yukataoka/items/8f9046587c978e91f689 SDI (BME280) -> SDA P03 (Raspberry Pi) SCK (BME280) -> SCL P05 (Raspberry Pi) GND (BME280) -> GND P06 (Raspberry Pi) SDO (BME280) -> GND P09 (Raspberry Pi) Vio (BME280) -> 3.3v P01 (Raspberry Pi) CSB (BME280) -> 3.3v P17 (Raspberry Pi) ``` 3. 配線済みの状態で、ラズパイの電源をONにする 4. 次のコマンドを実行して、「76」が表示されることを確認する。これは「I2Cアドレスは0x76」であることを意味するらしい ```bash $ sudo apt install i2c-tools $ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- 76 -- ``` 5. 次のコマンドを実行して、python2環境に`smbus2`モジュールを導入 ```bash pip --version # python 2系のpipであることを確認 sudo pip install smbus2 ``` 6. 次のコマンドを実行して、スイッチサイエンス社提供のBME280用サンプルコード`bme280_sample.py`を取得 ```bash $ git clone https://github.com/SWITCHSCIENCE/samplecodes $ cd samplecodes/BME280/Python27 $ ls -al 合計 16 drwxr-xr-x 2 pi pi 4096 11月 17 23:42 . drwxr-xr-x 4 pi pi 4096 11月 17 23:42 .. -rwxr-xr-x 1 pi pi 3873 11月 17 23:42 bme280_sample.py -rwxr-xr-x 1 pi pi 14 11月 17 23:42 requirements.txt ``` 7. 次のコマンドを実行して、温度・気圧・湿度が取得できることを確認する ```bash $ python bme280_sample.py temp : 25.93 ℃ pressure : 1026.02 hPa hum : 51.49 % ``` このように、センサーからの各種の値がラズパイで取得できれば、あとはサンプルのPythonスクリプトを参考に、煮たり焼いたり、お好みで加工すればいいですね。私は[ThingSpeak](https://thingspeak.com/)で、これら3つの測定値のグラフを描画することを次の目標にします。 P.S. 上の写真では、ラズパイで取得した値との比較対象として、iPadで「[phyphox](https://apps.apple.com/jp/app/phyphox/id1127319693)」というアプリを開き、気圧のグラフを表示しています。 --- ### キーボード一体型「Raspberry Pi 400」入手→技適未取得機器の申請→Octaneベンチマークとった - 2020-11-14 URL: https://remoteroom.jp/diary/2020-11-14/ 本記事は、キーボード一体型「Raspberry Pi 400」の実機レビューです。ラズパイ400はUKのサイトから購入しています。 #### 1. 欲するままに 11月2日。仕事の後にTwitterを開くと、キーボード一体型ラズパイ「Raspberry Pi 400」の登場を、公式アカウントがつぶやいているのを見つけた。なんてキュートな佇まいなんだよ。 マウスやケーブル類とガイド本をセットした "Personal Computer Kit" と、本体のみの "unit" の2種類がある。 - [Raspberry Pi 400 Personal Computer Kit](https://www.raspberrypi.org/products/raspberry-pi-400/) - [Raspberry Pi 400 unit](https://www.raspberrypi.org/products/raspberry-pi-400-unit/) 従来の箱型「Raspberry Pi 4」のユーザとして特に気になる発熱の問題は、内蔵されている横長ヒートシンクにより解消されているようだし、「とにかくこれは買いだ」と、つぶやき発見から30分足らずでunitを発注していた。発注後は次の流れにて、約9日後にUKから日本に到着した。 - \[2020-11-02 18:54\] 本体のみのunit「[Raspberry Pi 400 – US](https://shop.pimoroni.com/products/raspberry-pi-400?variant=32280738037843)」を[Pimoroni](https://shop.pimoroni.com/)にて発注 - \[2020-11-04 19:13\] Pimoroniから出荷のお知らせメールが届く - \[2020-11-11\] 日本・兵庫県に到着 キーボードモデルとしてはUSキーボードを選択。価格は、本体£66.90+送料£10.00=合計9,385円である。 ##### 用途は? 上に書いた「とにかくこれは買いだ」は、直感に近い判断に基づいており、このラズパイの用途を真面目には考えぬままの発注だ。 1980年代、私が最初に触ったマイコンは、キーボード一体型の、親戚から譲ってもらったFujitsu FM-7とFM-8であった。カセット式で遊びやすいMSXマシンを羨ましく思いながらF-BASICでプログラムを作り、友達関係や学校の部活などでは、MZ-1500, PC-8201, PC-E200, PC-6000/6601, X1turbo, PC-8001/8801, X68000, PC-9801などに触れていった。 このような経験をもつ者にとって、キーボード一体型のRaspberry Pi 400は、当時コンピュータに熱くなっていたことの記憶が現代技術とともに凝縮された、魅力ある、不可避なオブジェクトに見えてしまうのではないか。……と、盛大に言い訳しときます。 #### 2. 技適未取得機器を短期利用する手続 UKから直接購入するRaspberry Pi 400には、「技適マーク」が、つまり[Wikipedia](https://ja.wikipedia.org/wiki/%E6%8A%80%E9%81%A9%E3%83%9E%E3%83%BC%E3%82%AF)によると「技術基準適合証明と技術基準適合認定のいずれかあるいは両者の認証がなされていることを表示するマーク」が、貼り付けられていないとの情報があった。 そこで、今回のRaspberry Pi 400のような技適マークがない機器を日本国内で利用するべく、次の制度を活用する。 - [総務省 電波利用ホームページ|その他|技適未取得機器を用いた実験等の特例制度](https://www.tele.soumu.go.jp/j/sys/others/exp-sp/) 届出方法は、次のINTERNET Watchのページに詳しい。なお、届出時に記入しておきたいRaspberry Pi 400の「FCC-ID」は、たとえば外箱の裏面左下にFCCのマークとともに記載がある。 - [技適未取得機器の申請がこんなにカンタンに! マイナンバーカードさえあればスグに実験OK UDM米国版で試してみた【イニシャルB】 \- INTERNET Watch](https://internet.watch.impress.co.jp/docs/column/shimizu/1258174.html) 届け出に必要な物については、オンライン手続きの場合には、アカウント作成の本人確認の段階でマイナンバーカードが必要だ。私はコロナ禍の最中にマイナンバーカードを取得済みで、かつ、次のICカードリーダがたまたま家にあったので、比較的スムースに手続きできたと思う。「01-20201111-07-XXXXXX」という届出番号が付与された。 |必要な物|今回用いた物| |----|----| |PC|Windows 10とMicrosoft Edge導入済のPC (物理)| |ICカードリーダ|[SCR3310](https://www.ntt.com/business/services/application/authentication/jpki/download2.html)| |マイナンバーカード|自身のもの| #### 3. 開封の儀 Kitではなく本体のみの「Raspberry Pi 400 unit」の内容物は、あまりに清くて驚くほどだった。紙一枚の同梱もなく、本当にキーボード型の本体しか入っていない。 #### 4. OSを導入 Raspberry Pi 400のストレージ (microSDカード) として、高耐久の64GBのものを用意した。これにラズパイ界の標準OSであるRaspberry Pi OSを書き込んで、動作確認を行った。 ##### 4-1. Raspberry Pi Imagerをインストール 次のRaspberry Pi Imager (rpi-imager) を手元のパソコンにインストールする。私の場合はUbuntu環境にインストールしたので以降もこの前提で。 - [Raspberry Pi Downloads \- Software for the Raspberry Pi](https://www.raspberrypi.org/downloads/) ##### 4-2. microSDカードにOSイメージを書き込む パソコンでmicroSDカードを読み書きできるようにしてから、Raspberry Pi ImagerをUbuntuのターミナルから `sudo rpi-imager` で起動する。[CHOOSE OS] ボタンで「Raspberry Pi OS (32-bit)」を選択し、microSDカードへの書き込みを行う。OSイメージのダウンロード速度があまり出ないようで、完了まで10分以上かかる。 【追記・経験談】もし子ども (うちの場合は6歳児) がラズパイを使う予定があるならば、OSは、アプリケーションがより多く導入済みである「Raspberry Pi OS Full (32-bit)」のほうがベター。たとえばゲームだと、[Minecraft Pi Edition](https://www.minecraft.net/ja-jp/edition/pi)やその他数種類がすぐに遊べるようになっている。 ##### 4-3. ラズパイを起動 Raspberry Pi 400の端子面にある挿入口へ、OSイメージを書き込んだmicroSDカードを差し込む。次にUSB-C端子経由で本体へ電源供給することで、そのまま電源ONが実施される。microSDカードや本体の初期不良がなければ、Raspberry Pi OSが無事に起動してデスクトップ画面が拝めるだろう。 なお、これまでのラズパイと異なり、Raspberry Pi 400では電源ONをボタン操作で行うことができる。電源OFF状態のときに、キーボードの「Fn + F10」を押すと電源ONとなる。 ##### 4-4. Octaneベンチマーク Raspberry Pi 400のデスクトップ環境の操作は、主観では特に引っかかりなく軽快に動く感触だ。ベンチマークも走らせよう。手元の他のPCと性能比較ができる手軽な指標として、[Octane 2\.0 JavaScript Benchmark](https://chromium.github.io/octane/)を用い、それぞれ3回以上計測した平均値は次の通り。 |PC|Octane Score Avg.|OS, Browser|関連記事| |---|---:|---|---| |Gemini PDA|5,126|Android, Brave|[2019-03-15]()| |**Raspberry Pi 400**|9,545|Raspberry Pi OS, Chronium|[2020-11-14]()| |Chromebook Spin 311|9,715|Chrome OS, Chrome|[2020-10-13]()| |MacBook Air 13 (Mid 2013) A1465|23,740|macOS, Brave|| |ThinkCentre M75q-1 Tiny|40,768|Ubuntu, Brave|[2020-07-07]()| |iPad Air (第3世代) A2152|43,426|iPadOS, Brave|| |Mac mini (2018) A1993|48,751|macOS, Brave|[2020-09-13]()| Raspberry Pi 400は、日本の販売代理店にて [8,750円(税別)](https://raspberry-pi.ksyic.com/news/page/nwp.id/99) での販売が予定されている。価格性能比の観点から、上記のスコアに不満はない。ちなみに今このブログ記事は上記のChromebook Spin 311で書いているが、この機種と同程度の操作感で使えそうだ。 #### 5. 感想・おすすめ度合い Raspberry Pi 400は、佇まいのキュートさと低価格というポジションを併せ持った、そしてラズパイなので使いこなすためのナレッジも十分に蓄積された、パソコンの世界では比類ない面白い製品だ。Linux環境に触れてみたい方や、Linuxが動くおもちゃを欲する方には、強くおすすめできる。日本国内で容易に入手できるようになる頃にでも、実機に一度触れてみてください。 現段階の私がひとつ贅沢を言うならば、Raspberry Pi 400のキーボードの真ん中に、ThinkPadの赤いポッチ (TrackPoint) があったら良いな、とひらめいた。しかしTrackPointのようなやや繊細な部品を用いるのは、教育現場にも展開されるラズパイの、道具としての可用性を下げるデメリットもあるぞと考え直した。 #### 追記 [2021-05-08] UKから直接購入したRaspberry Pi 400に関して、上記の[2. 技適未取得機器を短期利用する手続](#2-%E6%8A%80%E9%81%A9%E6%9C%AA%E5%8F%96%E5%BE%97%E6%A9%9F%E5%99%A8%E3%82%92%E7%9F%AD%E6%9C%9F%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E6%89%8B%E7%B6%9A)で行った、「技適未取得機器を用いた実験等の特例制度」に基づく無線局の開設届出には、180日以内という期限が設定されている。私の場合は開設届出が「2020-11-11」だったので、その期限は「2021-05-09」。 そこで本日、下記サイトから当該無線局の廃止届出を行った。 - [総務省 電波利用ホームページ|その他|技適未取得機器を用いた実験等の特例制度](https://www.tele.soumu.go.jp/j/sys/others/exp-sp/) 開設の際に本人確認を伴うアカウント作成は完了しているので、今回はマイナンバーカードを使うことなく届け出が可能だった。今後のRaspberry Pi 400の利用時には、無線局として再度の開設届出が必要と思われる。その際には、前回と異なる実験の目的を考案して、それに基づいた届出内容になる。 --- ### 【読んだ本】 邦人奪還―自衛隊特殊部隊が動くとき― - 2020-10-31 URL: https://remoteroom.jp/medialog/2020-10-31_book-b089ll1fs4/ おもしろくて、秋の夜長に、ほぼ一気に読んだ。タイトルの「自衛隊特殊部隊」はどのような組織なのか、本当に存在するのかさえ知らなかったものの、ところどころ、私でも「ここはフィクションではない。作者が知る現実を描いている」と明瞭に感じられる記述があった。 弾丸が頭上を飛び交っている状況では、指揮命令系統に沿って報告を上げて判断を仰ぐことはできない。自分たち組織は何のために動いているのか、その目的が身体に染み込んでいなければ、こうした極限の場での各自の即時判断はできない。例えばこういった、組織の普遍性を記述したところだ。また、自衛隊の組織のあり方や隊員の苦悩に関する問題提起が、行間ににじみ出ている気がする。 小説としての伏線の回収具合には意外性があってハッとさせられた。これは作者が読者に投げかける、思考訓練の材料かもしれない。また、本書は、「もっとも大きな絵を描いているやつの姿は見えない。なぜならば陰謀のプロは現れるはずがない」という世界観に基づいているものと思う。他方はたして今の世界情勢では、どうなっているのだろう、と考えさせられもする。 --- ### 【読んだ本】 路 - 2020-10-26 URL: https://remoteroom.jp/medialog/2020-10-26_book-b00xjceqfg/ 伏線が集まってくる予感はしていた。生きていく中で人が抱くであろう希望や思いを、路にまとめあげた珠玉の作品だ。 思い返せば私は、2006年の年末から年明けにかけて、両親と初の台湾ツアー旅行をしていて、有名な観光地を巡ったりした。新年を迎えるカウントダウンのときには地上で盛り上がる大群衆の中にいて、同世代のツアー仲間と、露天で買った台湾ビールを片手に、[Taipei 101のビル全体から豪勢な花火が上がる様子](https://www.flickr.com/photos/mah_japan/2372058768/in/album-72157604304352807/)を眺めた。台北の街がまとう夜の熱狂感を、懐かしみながら本書を味わった。あの数日後の2007年1月5日に、本作品の中心にある台湾高速鉄道は開業したのだそうだ。 本書を読んで、台湾の歴史的背景などほぼ何も知らずの状態で旅行してたんだなと、痛感させられている。 --- ### with_itemsとregisterを組み合わせたAnsible playbookで苦労した - 2020-10-22 URL: https://remoteroom.jp/diary/2020-10-22/ 趣味と仕事にて、[Ansible](https://www.ansible.com/)を使いこなせるよう勉強中です。今回は、古いログファイルを削除するplaybookを書く際に、気づけたことがあったのでメモします。 #### 古いログファイルを削除するplaybook playbookで実現したい操作を簡単に書くと、「対象ディレクトリ内にある古いファイルをfindモジュールで発見してregisterしておき、次にwith_itemsのループでファイルを削除すること」となる。サンプルのplaybookは、ウェブ検索で大量に見つけられる。 しかし、対象ディレクトリを複数にしようと考えた場合に、私にとっては一気に難しくなってしまったのであった。 ##### 対象ディレクトリが1つの場合 対象ディレクトリが「`~/.screen_log/`」の1つであるplaybookは、次のようになる。簡素に書けて素晴らしい。 ```yaml - hosts: all tasks: - name: Find old logfiles find: path: "~/.screen_log/" age: "30d" register: files_found - name: Delete old logfiles file: path: "{{ item.path }}" state: absent with_items: "{{ files_found.files }}" ``` #### 対象ディレクトリが2つ以上の場合 対象ディレクトリが2つ以上の場合、「Find old logfiles」部分を、対象ディレクトリを複数指定できるようにwith_itemsを使って書くのが普通だろう。 しかしこの状態にしたところ、「Delete old logfiles」部分が対象ディレクトリ1つの場合と同じままだと動かない。1,2時間悩んで`debug`など使いながら理解したこととして。 「Find old logfiles」部分をwith_itemsを使って書いた場合は、files_foundに登録されるデータの構造が変わり、階層が追加された内容となるのだ。そこで、「Delete old logfiles」部分のファイル情報抽出で、下記のように`map()`や`list()`を使うようにしたら問題解決した。 ```yaml - hosts: all tasks: - name: Find old logfiles find: paths={{ item.path }} age={{ item.age }} with_items: - { "path":"~/.screen_log/", "age":"30d" } - { "path":"~/.tmux_log/", "age":"30d" } register: files_found - name: Delete old logfiles file: path: "{{ item.path }}" state: absent #with_items: "{{ files_found.files }}" # エラーになる with_items: "{{ files_found.results | map(attribute='files') | list }}" ``` --- ### Chromebook Linux環境の初期セットアップメモ - 2020-10-19 URL: https://remoteroom.jp/diary/2020-10-19/ Chromebookに備わるLinux環境 (Crostini) の初期セットアップのメモです。次の記事の続編となります。 1. [Chromebook Spin 311 英語キーボード版が安いので購入 \(Amazonプライムデー\) \[2020-10-13\]]() 2. [ARM版Chromebook Linux環境へのHomebrew導入手順 \[2020-10-17\]]() 対象の環境は次の通りです。 |項目|内容| |---|---| |機種|[Acer Chromebook Spin 311 (CP311-3H-A14N/E)](https://acerjapan.com/notebook/chromebook/spin311/CP311-3H-A14NE)| |CPU|MediaTek M8183C (aarch64)| |Chrome OS|86.0.4240.77 (Official Build) (32ビット)| #### ソフトウェア ##### 日本語入力のMozc ###### fcitx-mozcの導入 2020-10-17時点の次のページの情報を参考にして、`apt install fcitx-mozc`などを行った。 - [ChromebookにLibreOfficeをインストールしてみました \- LibreOffice日本語チームBlog](https://ja.blog.documentfoundation.org/2019/12/05/install-libreoffice-on-chromebook/) 各設定ファイルには次の追記をしている。 ``` $ tail -n 4 /etc/systemd/user/cros-garcon.service.d/cros-garcon-override.conf Environment="GTK_IM_MODULE=fcitx" Environment="QT_IM_MODULE=fcitx" Environment="XMODIFIERS=@im=fcitx" Environment="GDK_BACKEND=x11" ``` ``` $ tail -n 1 ~/.sommelierrc /usr/bin/fcitx-autostart ``` ###### 右ALTでfcitxを起動 右のALTキーを押すことで、fcitx-mozcの日本語入力が起動するようにしたい。この設定は、次のコマンドで起動するfcitxの設定画面の、[Global Config] > [Hotkey] にて、Trigger Input Methodの1つに「Ralt」を登録すると可能だ。 ``` $ fcitx-configtool ``` ###### ローマ字定義をAZIKに設定 ローマ字打ちでAZIK入力を使いたいので、次のローマ字テーブル`romantable.txt`に、1つ「`- ー`」 (ハイフンマイナス→長音符号) という定義を追加したものを、Mozcの設定画面で読み込ませる。 - [AZIK配列のいつも使うGoogle日本語入力用ローマ字テーブル](https://gist.github.com/youcune/8149126) Mozcの設定画面は、次のコマンドで開くことができる。 ``` $ /usr/lib/mozc/mozc_tool --mode=config_dialog ``` その他参考として、Mozcの辞書ツールや単語登録の起動方法はこちら。 - [JapaneseEnvironment/Mozc \- Debian Wiki](https://wiki.debian.org/JapaneseEnvironment/Mozc) ##### Visual Studio Code (VSCode) 公式のarm64版debが公開されているので、次のページから「.deb ARM64」のパッケージをダウンロードして、インストールする。 - [Download Visual Studio Code \- Mac, Linux, Windows](https://code.visualstudio.com/Download) ##### ターミナル デスクトップPCのUbuntuと環境を揃えるため、`xfce4-terminal`を導入する。ターミナルのフォントはCicaへ変えてみた。ちなみにVSCodeの方は、使い慣れたNasuMのまま。 - [miiton/Cica: プログラミング用日本語等幅フォント Cica\(シカ\)](https://github.com/miiton/Cica) - [Nasuフォント : 見た目が似ている文字を判別しやすくするフリーフォント \- itouhiroはてなブログ](http://itouhiro.hatenablog.com/entry/20140917/font) #### ハードウェア ##### 画面保護フィルム 自分の背景や顔が反射するグレアの画面は苦手なので、ノングレア化する画面保護フィルムとして、次のものを購入して貼り付けた。私の Acer Chromebook Spin 311 (CP311-3H-A14N/E) に正式に適合なのかわからなかったが、問題なく使えている。画面の上品さが増したかも (当社比)。 なお、Spin 311への貼り付け方にはコツが要るので注意。保護フィルムの大きさは、11.6インチの液晶画面部分から1-2mm広いぐらいでマージンがない。しかしながらSpin 311のように、画面と枠の部分に段差がない機種の場合、貼り付けの際にフィルムを寄せる“物理的なガイドが無い”わけで、11.6インチの部分をぴったり覆うように保護フィルムを貼ることはかなり難しい。保護フィルムを貼る前にあらかじめ、液晶画面部分のすぐ外側の縁に沿ってセロハンテープや養生テープを貼ることで、仮の段差を作っておくと良いと思う。 --- ### ARM版Chromebook Linux環境へのHomebrew導入手順 - 2020-10-17 URL: https://remoteroom.jp/diary/2020-10-17/ #### 気軽なモバイルLinux環境 [先日購入]()したARM版のChromebookでは、Crostiniという名のLinux環境 (LXCでの提供) が使えるようになっていた。Googleでは単に「[Linux(ベータ版)](https://support.google.com/chromebook/answer/9145439?hl=ja)」と言っている。これが予想を超えて面白く、かつ有用な機能だと気づいた。 Chromebookは比較的安価なパソコンだが、これを購入することで、数年先までの自動更新が保証された盤石のブラウザ環境+クラウド環境に加えて、Crostiniが使える機種ならば、ハードウェアとの相性を気にしなくて良いLinux環境も手に入る。そのLinux環境は、[標準機能で簡単に、まるごとGoogle Driveなどへバックアップしてレストアもできる](https://support.google.com/chromebook/answer/9592813?hl=ja)。 個人的にはこの気軽さは、「モバイルLinux」として最高だと思った。想像するに、Chromebookを用いる学校などでのICT教育で、Linux環境としてこのCrostiniを用いることが想定されているのかもしれない。 #### Homebrew for Linuxを使いたい 私はCrostiniでの環境構築を徐々に進めていて、エディタのVisual Studio Code、日本語入力のfcitx-mozcなどをまず導入した。次に、静的サイトジェネレータである[Hugo](https://gohugo.io/)を導入しようと試みたら、aptで導入されるHugoはバージョンがえらく古かった。ならばここは`brew`、すなわち、macOSでも使っているパッケージ管理システムの[Homebrew](https://brew.sh/)に登場願おう。 ##### 公式サイトの手順→導入失敗 次のようなChromebookのCrostini環境にて、 |項目|内容| |---|---| |機種|[Acer Chromebook Spin 311 (CP311-3H-A14N/E)](https://acerjapan.com/notebook/chromebook/spin311/CP311-3H-A14NE)| |CPU|MediaTek M8183C (aarch64)| |Chrome OS|86.0.4240.77 (Official Build) (32ビット)| Homebrew公式サイトの「Install Homebrew」手順を実行したところ、2020-10-17時点だと、次のような「aarch64用のRuby 2.6.3_2が見つからない」エラーで失敗してしまう。あくまで勘だがこの原因は、[releases/tag/2.6.3_2](https://github.com/Homebrew/homebrew-portable-ruby/releases/tag/2.6.3_2)に、aarch64用のアーカイブが置かれていないからかもしれない。 ``` $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" (中略) Error: No Homebrew ruby 2.6.3_2 available for aarch64 processors! Error: Failed to install Homebrew Portable Ruby and cannot find another Ruby 2.6.3! If there's no Homebrew Portable Ruby available for your processor: - install Ruby 2.6.3 with your system package manager (or rbenv/ruby-build) - make it first in your PATH - try again Failed during: /home/linuxbrew/.linuxbrew/bin/brew update --force ``` ##### ひと工夫した手順→導入成功 そこで、手順を次のようにひと工夫してみたところ、ARM版 (aarch64) のChromebookのCrostini環境に、Homebrewが無事導入できたのでご紹介です。 - aarch64用portable-ruby-2.6.3を、Homebrewが想定している場所にあらかじめ置いておく - その上で、公式サイトのAlternative手順にて、Homebrewをインストールする ###### Step-1. ruby aarch64バイナリをあらかじめ設置する ```bash $ mkdir -p ~/.cache/Homebrew $ cd ~/.cache/Homebrew $ wget https://github.com/Homebrew/homebrew-portable-ruby/releases/download/2.6.3/portable-ruby-2.6.3.aarch64_linux.bottle.tar.gz $ sudo mkdir -p /home/linuxbrew/.linuxbrew/Library/Homebrew/vendor $ cd /home/linuxbrew/.linuxbrew/Library/Homebrew/vendor $ sudo tar -zxvf ~/.cache/Homebrew/portable-ruby-2.6.3.aarch64_linux.bottle.tar.gz $ cd portable-ruby $ sudo ln -sf 2.6.3 current $ ls -al ``` ###### Step-2. rubyにPATHを通して使えることを確認する ```bash $ export PATH=/home/linuxbrew/.linuxbrew/Library/Homebrew/vendor/portable-ruby/current/bin:$PATH $ which ruby && ruby -v /home/linuxbrew/.linuxbrew/Library/Homebrew/vendor/portable-ruby/current/bin/ruby ruby 2.6.3p62 (2019-04-16 revision 67580) [aarch64-linux] ``` ###### Step-3. 公式サイトのAlternative手順にて、Homebrewをインストールする - [Homebrew on Linux — Homebrew Documentation > Alternative Installation](https://docs.brew.sh/Homebrew-on-Linux#alternative-installation) ここでは、公式手順にあるPATH「`~/.linuxbrew`」を「`/home/linuxbrew/.linuxbrew`」に置き換えている。 ```bash $ cd /home/linuxbrew/.linuxbrew/ $ sudo git clone https://github.com/Homebrew/brew /home/linuxbrew/.linuxbrew/Homebrew $ sudo mkdir /home/linuxbrew/.linuxbrew/bin $ sudo ln -s /home/linuxbrew/.linuxbrew/Homebrew/bin/brew /home/linuxbrew/.linuxbrew/bin $ eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv) ``` ###### Step-4. brewコマンドが使えることを確認する ```bash $ cd $ which brew && brew -v /home/linuxbrew/.linuxbrew/bin/brew Homebrew 2.5.6-67-gaa97179 Homebrew/linuxbrew-core N/A ``` ###### Step-5. brew環境を更新し、異常がないことを確認する ```bash $ sudo chown -R $(whoami) /home/linuxbrew/.linuxbrew/ $ brew update --force (中略) Already up-to-date. $ brew doctor (※必要な対応を行う) $ brew doctor (特になにも言われなくなる) ``` - ※1度目の`brew doctor`実行時に、`You should create these directories and change their ownership to your account.`など言われたらその対応を実施 Homebrewの導入は以上です。 さて。やっとここまで来たので念願の`brew install hugo`をしてみたところ、今度は、Hugoの動作に必要なGoの導入時に、`Error: Your CPU architecture (arm64) is not supported.`というエラーが出ている。頭を抱える状態です……。【完】 --- ### Chromebook Spin 311 英語キーボード版が安いので購入 (Amazonプライムデー) - 2020-10-13 URL: https://remoteroom.jp/diary/2020-10-13/ 2台目のChromebookとして、小型軽量で英語キーボード搭載の [Acer Chromebook Spin 311 (CP311-3H-A14N/E)](https://acerjapan.com/notebook/chromebook/spin311/CP311-3H-A14NE) を先ほど購入しました。Amazonプライムデーの品として、通常価格から8,000円引きの「31,800円」で安く出ていたので思わずポチった次第です。 なお、私は英語キーボードにこだわって選択しましたが、ポチる際に気付いたのは、Chromebook Spin 311の日本語キーボード版のほうは、なんと同じ価格でストレージが「64GB」と2倍であること……。一般的には日本語キーボード版のほうがお買い得度高めに思います。 今回のAmazon.co.jpでのプライムデー開催期間は「2020-10-13(火) 〜 14(水) 23:59」です。この機種以外にも [数機種のChromebook](https://www.amazon.co.jp/s?k=chromebook&tag=remoteroom-22) が安くなって出ているので、Chromebook好きはぜひ攻めてみても良いかもしれません。 #### 2台目としてChromebook Spin 311を選んだ理由 ポチったChromebook Spin 311は、私にとって2台目のChromebook。Chromeデバイス選択時に重要な要素である、[自動更新ポリシー](https://support.google.com/chrome/a/answer/6220366?hl=ja)によるOSの更新期限は、本機の場合「2028年6月」まであるので、OSサポート上はあと7年以上安心して使える見込みです。 そしていわゆるモバイル好きにとって、“筐体の小ささ・軽さ”はなによりも重要で、本機は1.05kg。物理メモリは多い方がそりゃ良いのですが、8GBのものだと価格帯が上がる。悩ましい。ここ何ヶ月か、下記のような機種と比較検討していましたが、価格的に今しか無いチャンスだと判断して、この悩みを断ち切りました。 #### 1台目のChromebook Flip C100PA 私の1台目のChromebookは [ASUS Chromebook Flip C100PA](https://www.asus.com/jp/Laptops/ASUS_Chromebook_Flip_C100PA/) です。2016年6月頃にメモリ4GB版を購入してから、900g未満の筐体を活かして通勤や旅行に気軽に持っていったり、自宅での子どもの色々体験PCにしたり、[Termux](https://termux.com/)を入れてLinux端末として遊んでいたものの、OSの更新期限が2020年7月で切れている状態です。今後は、Chromeデバイスとしては引退させて、次のページを参考にArch Linux化するかもしれません。 - [Asus Chromebook Flip C100P \| Arch Linux ARM](https://archlinuxarm.org/platforms/armv7/rockchip/asus-chromebook-flip-c100p) - [ASUS Chromebook Flip C101PA \- ArchWiki](https://wiki.archlinux.jp/index.php/ASUS_Chromebook_Flip_C101PA) - 関連記事: [code-serverでブラウザからVSCode Anywhere! \[2019-04-18\]]() --- ### 無線ルータAtermを再起動するPythonスクリプト - 2020-10-06 URL: https://remoteroom.jp/diary/2020-10-06/ 自宅のルータ兼無線アクセスポイントが、勝手に再起動することがこの夏から二度ほど発生しました。当日の室温が高かったせいかもしれないが、たとえば在宅勤務中に不意に再起動したら業務に支障も出るので、予防的に週に2度、インターネットをほぼ使用していない時間帯に、定期的に再起動をかけることにしました。 我が家で使用している機種は、[NEC Aterm WG2600HP3 (PA-WG2600HP3)](https://www.aterm.jp/product/atermstation/product/warpstar/wg2600hp3/)。このAtermの管理画面には再起動をスケジューリングするような機能は無く、定期的な再起動の仕掛けは自ら用意する必要があります。そこで、管理画面をSeleniumで操作して再起動まで自動で行うPythonスクリプトを用意し、これを、24時間稼働しているサーバにてcron実行するようにしました。 ``` 0 7 * * mon,thu timeout 5m /home/USERNAME/script/reboot_aterm.py ``` ちなみに、cron設定時刻の月曜・木曜の朝 (07:00) というのは家庭ごみを出すタイミングと同じで、これだと、自宅回線のインターネットがいつ途絶えるかを家族も覚えやすいためです。 Atermを再起動するスクリプト`reboot_aterm.py`は次のように簡単な内容ですが、もし参考になればと思いご紹介です。 ```python ###!/usr/bin/env python3 ### reboot_aterm.py (Ver.20220118) import sys import time from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.webdriver.common.alert import Alert username = 'admin' password = 'Atermの管理者パスワード' url = 'http://'+username+':'+password+'@192.168.10.1/index.cgi/reboot_main.html' timeout = 10 options = webdriver.ChromeOptions() options.add_argument('--headless') options.add_argument('--disable-gpu') driver = webdriver.Chrome(options=options) def wait_element(attribute, target): try: if attribute == 'ID': element_present = EC.presence_of_element_located((By.ID, target)) elif attribute == 'CLASS_NAME': element_present = EC.presence_of_element_located((By.CLASS_NAME, target)) elif attribute == 'XPATH': element_present = EC.presence_of_element_located((By.XPATH, target)) elif attribute == 'CSS_SELECTOR': element_present = EC.presence_of_element_located((By.CSS_SELECTOR, target)) WebDriverWait(driver, timeout).until(element_present) except TimeoutException: print('ERROR: Timed out waiting for page to load. %s = %s' % (attribute, target), file=sys.stderr) driver.quit() sys.exit(1) else: return True driver.get(url) wait_element('CSS_SELECTOR', '.btn.blue') # 「再起動」ボタン driver.find_element_by_css_selector('.btn.blue').click() time.sleep(2) Alert(driver).accept() time.sleep(5) driver.quit() ``` P.S. 小物スクリプトを私はこれまで手慣れたPerlで書くことが多かったが、最近は勉強のため、とりあえずPythonで書いてみるようにしています。Pythonは、ウェブ上の知見も多いし、比較的少ないコード量で思った以上のことを実現できるような感覚があり、触ってて楽しいです。 --- ### Joy-Conのドリフト現象を自力修理 (Nintendo Switch) - 2020-10-04 URL: https://remoteroom.jp/diary/2020-10-04/ #### リスクを取って自力修理 家族が使っているNintendo Switchの、Joy-Conのアナログスティックが不調となり、触れていないのに一方向へ微妙な入力が入り続ける、いわゆる“ドリフト現象”が発生し始めていた。こうなると『どうぶつの森』などでの操作がしづらくなる。 この不調を解消する方法には、主に「任天堂で修理」もしくは「自力で部品交換」の二つがあり、うちでは家族会議により後者を行うことに決定。修理の確実さよりも、出費と待ち時間の少なさを取った形だ。 - 任天堂で修理: 正規の修理であるが多少の工賃がかかり、修理済み品の到着まで、何日間かわからないがSwitchで遊べない期間が生じる - 自力で部品交換: 自らJoy-Conを分解しての部品交換なのでリスクはあるが、うまく修理ができれば、Switchで遊べない期間は1時間足らず 当然、Joy-Conを分解すると正規の保証は効かなくなると思うがそのリスクも込みである。私は、Nintendo Switchではほとんど遊ばないのであるが修理作業を担当。 #### ポイントは修理マニュアル Amazon.co.jpから届いたのは、[Swing-by service](https://swing-by-service.com/)が出品している次の品である。(追記: 購入した物がAmazon.co.jpで検索出来なくなっていたので別の物へリンクしています。\[2023-01-01\]) パッケージには、ドラクエ風味の洒落っ気があって思わずニヤける。 パッケージの内容物としては、Joy-Conのアナログスティックを支持部分から取り替える、修理部品そのもの4個のほかに、修理マニュアルが、Joy-Conの左用と右用のそれぞれ1枚ずつ同梱されていた。「ジョイコンスティック修理パーツ」としてAmazon.co.jpに様々な出品がある中で、今回の品の価値のひとつは、この付属の修理マニュアルにあると思う。 修理自体の作業は、たとえば下記のドライバーセットとピンセットをまず手元に用意し、この丁寧な修理マニュアルを見ながら、Joy-Conの分解と部品の交換を焦らずに進めて完了。その後の家族によるどう森での動作確認にて、「直った!」認定をいただきました。 --- ### INEVITABLE ja night「行政サービスにおける、Gov Tech / Civic Tech の不可避な流れ」にオンライン参加 #inevitableja - 2020-09-28 URL: https://remoteroom.jp/diary/2020-09-28/ テーマの「行政サービスにおける、Gov Tech / Civic Tech の不可避な流れ」にぴぴっと惹かれるところがあって、Google Cloud主催の、次のオンラインイベントに先程参加した。ちなみにこのイベント名は、「いねびたぶるじゃないと」と発音するようだ。 - [INEVITABLE ja night #12](https://cloudonair.withgoogle.com/events/inevitable-ja-night-12) - 放送日: 2020-09-28(月) 21:00-22:20 - テーマ: 「行政サービスにおける、Gov Tech / Civic Tech の不可避な流れ」 スピーカーは次の4名。司会は小島氏で、平氏と関氏を交えての3人のセッションがメイン部分である。 - [平 将明 氏](https://twitter.com/TAIRAMASAAKI): 前内閣府副大臣, 自由民主党 衆議院議員 - [関 治之 氏](https://twitter.com/hal_sk): 一般社団法人コード・フォー・ジャパン 代表理事 - 近藤 和彦 氏: グーグル・クラウド・ジャパン合同会社 カスタマーエンジニア - グローバル パブリック セクター - [小島 英揮 氏](https://twitter.com/hide69oz): Still Day One合同会社 代表社員 パラレルマーケター・エバンジェリスト 内容は、これからの日本を展望する Gov Tech / Civic Tech におけるいわば当事者の話で、期待した以上にとても刺激的であった。完全に自分のための備忘録であるが、参加中ちょっと熱い気持ちで、[#inevitableja](https://twitter.com/hashtag/inevitableja) のハッシュタグを付けて放ったツイートを10個貼っておく。「法律を作れるから壊せる」と書いた時には、以前読んだ書籍『[法のデザイン—創造性とイノベーションは法によって加速する]()』を思い出した。 --- ### mozcの入力モード切替を英語キーボードのAlt_Rで行う設定 (Ubuntu 20.04LTS) - 2020-09-27 URL: https://remoteroom.jp/diary/2020-09-27/ Ubuntu 20.04 LTSを、言語として日本語を選択して導入した、かつ英語キーボードを接続する環境にて。 この環境で、mozc日本語入力のONとOFFを右ALT (右親指一本) で切り替えられるようにする設定を、いつも忘れてしまう自分のためにここにメモっておきます。 #### 設定方法 1. デスクトップ左下の 点が9つのアイコン (以下■アイコン) > 設定 > 地域と言語 > 入力ソース にて、「英語 (米国)」をごみ箱ボタンで削除して「日本語 (Mozc)」のみにする 2. 次の内容のファイルを作成する ``` $ cat ~/.Xmodmap remove mod1 = Alt_R keycode 108 = Zenkaku_Hankaku Kanji ``` 3. 動作確認として、端末上で `xmodmap ~/.Xmodmap` を実行する 4. 文字入力を行うウィンドウにフォーカスが当たった状態でAlt_Rを押して、デスクトップ右上に表示される入力モード表示が、Alt_Rを押すたびに「A」→「あ」→「A」→...と切り替わっていくならば設定が効いている 5. 上記設定がログイン時に自動的に適用されるように、■アイコン > 自動起動するアプリケーションの設定 にて、次の内容を追加する ``` - 名前: Alt_R -> Zenkaku/Hankaku - コマンド: /usr/bin/xmodmap /home/YOURNAME/.Xmodmap - 説明: (任意入力) ``` 6. デスクトップ環境へ再ログインし、ログイン完了後からすぐにAlt_Rで入力モード切替が行えることを確認 #### 画面写真 --- ### Mac mini (2018) を分解してメモリ増設 - 2020-09-13 URL: https://remoteroom.jp/diary/2020-09-13/ i7のMac mini (整備済製品) を購入し、メモリを増設して64GB化したことの記録。 #### 購入品 ##### Mac mini本体 + 64GBメモリ Mac本体は、できるだけ高い性能のものをコスパ良く入手するために、Appleの整備済製品が放出されるタイミングを監視しておき、「Core i7-8700B」を載せた最上位のMac mini A1993を狙い撃ちした。 ちなみに事前の機種検討において、画面一体型のiMacは、画面が他のPCで利用できないので却下、MacBook Proは現在業務用に1台使っているが、ノート型はやはり高負荷時の発熱問題から逃れられないので追加はしない、という経緯を経て、Mac miniに狙いを定めていた次第。 |分類|品名|購入価格(円)|備考| |----|----|---:|----| |PC|[Mac mini 3\.2GHz 6コアIntel Core i7 \- スペースグレイ \[整備済製品\]](https://www.apple.com/jp/shop/product/G0ZTPJ/A/Refurbished-Mac-mini-32GHz-6-core-Intel-Core-i7-Space-Gray)|124,080|Apple| [Apple認定整備済製品](https://www.apple.com/jp/shop/refurbished)は、たとえば今回のMac miniの場合は新品の約15%引きの価格で新品同様の品が手に入るので、お買い得感がある。もし整備済製品を狙えない場合は、5%ほどのポイント還元のある家電量販店で新品を購入するのも良案だと思う。 今回購入のMac miniはメモリ8GBと少量なので、もちろん増設が前提である。上限の64GBまで盛る。 |分類|品名|購入価格(円)|備考| |----|----|---:|----| |メモリ|[Transcend JM2666HSE-32G](https://jp.transcend-info.com/Products/Item.aspx?PN=JM2666HSE-32G)|2枚: 24,960|e-TREND| ##### 分解用の道具 Mac miniを分解するにはちょっとした道具が要る。分解を実際にやってみると、次の、以前買っていたドライバーセットと、ドラレコ装着時に車の内張りを剥ぐために使ったリムーバーセットで事足りた。 |分類|品名|当時の購入価格(円)|備考| |----|----|---:|----| |ドライバー|Xiaomi Wiha 24 in 1 Precision Screwdriver Kit|2,850|Amazon.co.jp| |リムーバー|[KTC ハンディリムーバーセット ATP2015](https://ktc.jp/catalog/index-category/category-list/atp2015)|3,661|Amazon.co.jp| #### 増設の方法 Mac miniの分解方法は、[Mac mini Late 2018の分解 \- iFixit](https://jp.ifixit.com/Guide/Mac+mini+Late+2018%E3%81%AE%E5%88%86%E8%A7%A3/115210) で予習したり、次のような解説動画を見ながらステップバイステップで進めていけば良いと思う。注意点としては、間違ったサイズのドライバーでネジを回してネジを丸めてしまわない、無線LANのアンテナ線の取り外しを忘れない、というところ。 ##### 内部構造を鑑賞 分解して現れるMac miniの内部構造は、率直に言って美しかった。秘められた黒い機械空間は、ミクロな都市や工場の構造物であるかのようだ。「さすがに高いだけあるなぁ……」と妙な感心をしながら写真に収めた。 #### 増設後の確認 メモリ増設後にMac miniを組み立てて、何も問題なければ無事にOSが起動する。システムの状況を確認すると次のようになっており、メモリ2枚は正しく認識されている。 64GBのメモリ空間とは如何ほどの広さか。私の常用環境にて次の負荷をかけた状態を作ってみると、使用済みメモリは23GBとなった。64GBを使い切る場面はなかなか発生しないかもしれない。 - 割当メモリ8GBの仮想WindowsマシンをVirtualBoxで起動 - Google Chromeでタブを10個開いてYouTube動画を10個再生 --- ### Jitsi Meetサーバ運用のポイントメモ2 - 2020-09-01 URL: https://remoteroom.jp/diary/2020-09-01/ 本記事は、オープンソースなビデオ会議システム「Jitsi Meet」に関する次の記事の続編です。 - [\[2020/05/31\] オープンソースなビデオ会議システム「Jitsi Meet」の導入方法]() - [\[2020/06/09\] Jitsi Meetサーバ運用のポイントメモ1]() #### マイクMuteに関わるミスを減らそう Jitsi Meetを使ってビデオ会議している時に、次のようなミスはよくやってしまう。少なくとも私は。 - 自身のマイクをミュート (消音) しているのに参加者との対話を真剣に行ってしまう - 逆に、マイクをミュートしているつもりで実際はミュートしておらず、鼻歌などの無用な音を配信してしまう ##### なぜミスが起こるのか このようなミスが起こってしまうのは、UIの観点では情報不足のためではないか、具体的には、Jitsi Meetのブラウザ画面で自身のマイクのミュート状態が大きく常時表示されていないことが原因のひとつではないか?……と気づいた。 以下、PCのブラウザでJitsi Meetを利用している場合を想定しての話です。 自身のマイクのミュート状態は、次の画面写真の下部にあるツールバー (TOOLBAR) の、中央部分の (赤丸の左の) マイクアイコンの形により把握できる。しかしツールバーからフォーカスが外れると、数秒後にツールバーは自動的に隠れてしまう。画面要素が減ることで見かけはシンプルになるが、ツールバーが隠れていると、ミュート状態の認識がやりにくくなって、過去にミュート操作したかどうかという曖昧な記憶に頼りがちになる。これが今回の私の仮説。 ##### UI設定を変更してミス防止 このツールバーの常時表示は制御可能なのか、公式ドキュメントでの記述を発見できていないが、変数名からして、公式サービスの [`https://meet.jit.si/interface_config.js`](https://meet.jit.si/interface_config.js) にも含まれる次の値がどうみてもそれだろう。 ``` TOOLBAR_ALWAYS_VISIBLE: false, ``` いわゆるオンプレミス、自前で構築したJitsi Meetサーバでは、サーバ上のファイル `/usr/share/jitsi-meet/interface_config.js` に該当の設定項目を発見できた。このファイルを編集してTOOLBAR_ALWAYS_VISIBLEの値を`true`へ変更する。 ``` TOOLBAR_ALWAYS_VISIBLE: false, ↓ TOOLBAR_ALWAYS_VISIBLE: true, ``` 次に、Jitsi Meetに参加しているブラウザ画面を再読込すると、(`https://自前サーバ/interface_config.js`も再読込されて) 設定変更が有効となり、ツールバーが自動的に隠れなくなる。 この設定変更により、ビデオ会議の各参加者の、マイクのMuteに関わるミスは減少するだろうか。この先もしばらく続きそうな在宅勤務を通じて、Let's 実験です。 ##### 追記 [2020-09-03] Jitsi Meetに関係する次のupgradeが実施されたあと、「TOOLBAR_ALWAYS_VISIBLE: true,」へ設定変更していた `/usr/share/jitsi-meet/interface_config.js` は、「false」の内容で上書きされていた。 ``` 2020-09-02 23:00:35 upgrade jitsi-videobridge2:all 2.1-273-g072dd44b-1 2.1-304-g8488f77d-1 2020-09-02 23:01:29 upgrade jitsi-meet:all 2.0.4857-1 2.0.4966-1 2020-09-02 23:01:30 upgrade jicofo:all 1.0-612-1 1.0-626-1 2020-09-02 23:01:52 upgrade jitsi-meet-web:all 1.0.4289-1 1.0.4370-1 2020-09-02 23:01:58 upgrade jitsi-meet-web-config:all 1.0.4289-1 1.0.4370-1 2020-09-02 23:01:59 upgrade jitsi-meet-prosody:all 1.0.4289-1 1.0.4370-1 2020-09-02 23:02:03 upgrade jitsi-meet-turnserver:all 1.0.4289-1 1.0.4370-1 ``` `/usr/share/jitsi-meet/interface_config.js` は、次の`dpkg -S`で調べるとjitsi-meet-webのパッケージに含まれているので当然のことだな。自身の設定を永続化させたいならば、なんらかの方法を検討しなきゃいけない。 ``` $ dpkg -S /usr/share/jitsi-meet/interface_config.js jitsi-meet-web: /usr/share/jitsi-meet/interface_config.js ``` ##### 追記 [2020-09-15] 上記の`/usr/share/jitsi-meet/interface_config.js`における「TOOLBAR_ALWAYS_VISIBLE: true,」への設定変更を、ansibleのplaybookで用意すると次の内容になる。必要時に適宜、このplaybookをJitsi Meetサーバに適用すると良さそうだ。 ``` - hosts: all tasks: - name: Change TOOLBAR_ALWAYS_VISIBLE to true become: yes replace: backup: yes path: /usr/share/jitsi-meet/interface_config.js regexp: '^ TOOLBAR_ALWAYS_VISIBLE: false,' replace: ' TOOLBAR_ALWAYS_VISIBLE: true,' ``` --- ### 【読んだ本】 スバル――ヒコーキ野郎が作ったクルマ - 2020-08-17 URL: https://remoteroom.jp/medialog/2020-08-17_book-b082hgy6c9/ 中島飛行機を前身とする企業の物語なので、第二次世界大戦における航空機の役割や、日本での開発の実状に関する記述も少なくない。戦争を、「どのような目的のために、国家が論理的にどのような戦略を立て、それをどのように統括して遂行したか」を示す大局的な記録だと認識するとして。私が本書にて初めて知ることができたのは、敵国の本土を攻撃可能な戦略爆撃機が戦争終結兵器として極めて有効であったこと、かつ、当時の日本国は生産技術的にこれを作り得なかったという事実である。 企業も、競合に対して優位性があるものを作るところが生き残る。本書には、SUBARU (旧・富士重工業) が、自動車市場において自分たちの優位性とは何かを、迷いながら見出してきた歴史が記されている。出資銀行による束縛や、他社の車を受託生産していた過去があったとは知らなかった。また、旗艦車のLEGACYがモデルチェンジのたびに“アメリカナイズ”されてきたのは記憶に新しいが、アメリカを最大の市場とする製品企画に舵を切った経緯も、アメリカのディーラーの生の声とともに説明されている。 「パイロットを守る」が原点というSUBARUの優位性は、2020年後半に登場が予告されている新型LEVORGでは、どれほど濃厚に表現されているだろう。一人の車好きとして個人的にはとても期待している。なお、本書の「長いあとがき」にある、著者ならではの生い立ちとSUBARUにまつわる話には、あとがきにふさわしい説得力があった。 --- ### 快適な在宅勤務環境をつくる5アイテム - 2020-08-08 URL: https://remoteroom.jp/diary/2020-08-08/ COVID-19対応により、在宅勤務が私のデフォルトである状態が2020年4月中旬から始まり、4ヶ月が経過しようとしている。自宅のプチ書斎にて仕事を快適に、円滑に行えるようにするため、これまで都度あーだこーだと調査・吟味しながら各種アイテムを導入してきたので、いったんまとめてみよう。リモート勤務環境を改善したい方にとっての、なにかの参考になればと思います。 #### 0. イスと4Kモニタ [2009-05, 2015-11] 最初はゼロ番として、すでに保有していたものから。Gmailの記録によると2009年5月、定番のアーロンチェアを購入した。「将来は家で“[SOHO](https://ja.wikipedia.org/wiki/Small_Office/Home_Office)”するかもしれんからこれぐらいの自己投資は必要!」と当時の私は奮起したのだと思うが、身体に負担がかかりにくいこのイスの座り心地に、現在も助けられている。 2015年11月には4Kモニターを購入していた。在宅勤務で4Kを使っていると、やはり情報の一覧性が高く、職場の2Kモニターと比較して効率良く仕事できることを実感する。画素数比と同じ4倍とまではいかないかもしれないが。 分類|品名|当時の購入価格(円)|備考| |----|----|---:|----| |イス|[ハーマンミラー アーロンチェア](https://www.hermanmiller.com/ja_jp/products/seating/office-chairs/aeron-chairs/) AE113AWB PJG1BBBK4E03|140,000|楽天ショップ| |4Kモニター|[DELL P2415Q](https://japancatalog.dell.com/pd/P2415Q.html)|50,349|DELL| #### 1. 机の広さ確保 [2020-04] 在宅勤務を開始した直後、机にさっそくコーヒーをこぼした。縦50cm・横120cmの机一つでは作業場として面積不足だと思い知り、かつ飲み物を置く場所は分離したいので、近所のIKEAで次のサイドテーブルを購入して組み立てた。これを既存の机に寄せてL字型の作業場にしている。重量級のモニターなどを載せるには華奢だが、安価だし、もし在宅勤務が終了しても、デザイン的に他の部屋で違和感なく使えそうである。 |分類|品名|購入価格(円)|備考| |----|----|---:|----| |サイドテーブル|[IKEA VITTSJÖ ヴィットショー ラップトップスタンド](https://www.ikea.com/jp/ja/p/vittsjoe-laptop-stand-black-brown-glass-80250250/)|2,999|IKEA| #### 2. 据え置きPC刷新 [2020-06] 据え置きPCを、メモリ32GBの小型PC「Lenovo ThinkCentre M75q-1 Tiny」へ刷新した。このPCについての詳細は次の記事に書いています。 - [\[2020/07/07\] 小型の "ThinkCentre M75q-1 Tiny" を購入、PCゲームを始めたくなった]() M75q-1はなかなかパワフルであり、通常のUbuntuデスクトップ環境として、そして自宅内の仮想環境基盤としても活用している。後者はたとえば次のようにしておくことで、手元で操作する普段のMac環境のマシンリソースを消費することなく、Windows環境の作業を行えるようになって便利だ。 1. M75q-1のVirtualBoxの中で、メモリを8GB割り当てたWindows 10の仮想マシンを動かしておく 2. Microsoft ExcelやWordといったWindows環境での作業が必要な時には、このWin10仮想マシンをリモートデスクトップ経由で操作する #### 3. ビデオ会議の音声入力改善 [2020-07] 在宅勤務中は、Jistiをほぼ繋ぎっぱなしにしている。主に使用しているJitsi MeetサーバはVPS上に構築したもので、構築・運用ノウハウ的なものを次の記事に書いています。 - [\[2020/05/31\] オープンソースなビデオ会議システム「Jitsi Meet」の導入方法]() - [\[2020/06/09\] Jitsi Meetサーバ運用のポイントメモ1]() ビデオ会議の際には、スムースな意思疎通のためこちらの音声を明瞭に伝えたいわけだが、空冷するため仕事用ノートPC (MacBook Pro) にファンの風を当てながらの状態で、それを実現するためにはどうするか。PC内蔵のマイクを使わずにマイクを外付けするのがベストだろうと判断し、USB接続の外付けマイクロフォンをメルカリで安く購入した。 |分類|品名|購入価格(円)|備考| |----|----|---:|----| |USB接続マイクロフォン|[FIFINE K670](https://fifinemicrophone.com/collections/microphones/products/usb-microphone-for-mac-and-windows-k670)|中古: 3,000|メルカリ| この中古K670が手元に届き、実際に使って分かったこととして。ボリュームつまみが付いていたり形状的には使いやすいものの、マイクの性能としては、巷の評判で言われているように無音時のホワイトノイズが目立つ気がする。ぶっちゃけ、カセットテープ時代の“ヒスノイズ”を思い出させてくれる。 もしK670が発するホワイトノイズが、USBの電源ラインから混入するノイズならば、USB接続を電気的にアイソレートするとノイズを減らせるかもしれない、と思いついて、次のようなアイテムも導入してみた。しかしながら、これらの効果の程は私の環境では不明だったので、万人へのお勧めはいたしません。オーディマニア向けの安心小物だと思ってください……。 |分類|品名|購入価格(円)|備考| |----|----|---:|----| |USBアイソレータ|ARCELI USB to USBアイソレータモジュール|1,999|Amazon.co.jp| |フェライトコア|PLUS CREATE フェライトコア 6個セット|497|Amazon.co.jp| K670に関する余談として。自分自身とのJitsi Meetビデオ会議で実験したところ、Jitsi Meetにおいてデフォルトで効いているノイズ抑制機能 (サーバ側で「disableNS: true」と記述するとノイズ抑制機能が無効化される) がうまく働いているようで、K670のホワイトノイズは、Jitsi Meetビデオ会議中には相手に伝わりにくくできそうでもある。言い換えるとこのFIFINE K670は、入力音声を無処理で用いる場合には特に要注意なマイクであろう。 ##### 追記 [2020-12-16] - [MUTEが簡単にできるマイク Elgato Wave:3 にチェンジ \[2020-12-16\]]() #### 4. インターネット接続の最速化 [2020-07] 自宅のインターネット回線は、通信速度が致命的に遅かった某プロバイダから、2020年2月にIIJmioひかり (IPv6 IPoEオプション) へ切り替えていたおかげで一日中300Mbps程度はほぼ確保できており、日々の家族の動画視聴や、在宅勤務においても不満はなにもない。ただし、プチ書斎の仕事用PCを5GHz帯で無線接続した状態では、リビングのアクセスポイントとの距離や途中の障害物があるためここまでの速度は出ない。 プチ書斎でも回線速度をフル活用するためには、途中のドアを物理的にうまく通過させつつ、1Gbps規格以上の有線接続をするしかない (電灯線を用いるPLC接続は以前やったことがあるが実効速度数十Mbpsだったと思う)。よし、思い立ったら吉日だ。在宅勤務での特にビデオ会議は、長時間の通信の安定性が重要だしね……という名目で自分を納得させて、次のアイテムを揃えて配線をした。ちなみにうちは賃貸マンションであるため、原状回復の観点を重要視している。 |分類|品名|購入価格(円)|備考| |----|----|---:|----| |5ポートハブ|[NETGEAR GS305-300JPS](https://www.jp.netgear.com/home/products/networking/switches/soho-ethernet-switches/GS305.aspx)|2台: 3,960|NTT-X| |フラットLANケーブル|[SANWA SUPPLY KB-FL6A-05W](https://www.sanwa.co.jp/product/syohin.asp?code=KB-FL6A-05W)|2本+送料: 1,972|Amazon.co.jp| |LANケーブル (屋外対応版)|[ELECOM LD-VAPF/SV05](https://www.elecom.co.jp/products/LD-VAPFSV05.html)|1,015|NTT-X| |LAN延長コネクタ|UGREEN 型番不明|960|Amazon.co.jp| |ピン|[+d ニンジャピン 15pcs](https://koncent.jp/?pid=7063802)|880|楽天ショップ| 屋内LAN配線の課題であるドアの部分は、次の写真のように、アルミで覆われており曲げることのできる薄いLANケーブルを隙間に配線した。写真では、アルミ色のLANケーブルをドア枠に貼り付けていないのでLANケーブルが浮いている状態だが、ドアを締めると隙間に沿うように形が変わる。 ##### 追記 [2020-08-22] その後の残念な報告として。リビングと廊下の間のドアの上枠部分で上記のLANケーブル (屋外対応版) [ELECOM LD-VAPF/SV05](https://www.elecom.co.jp/products/LD-VAPFSV05.html) を10日間ほど使用していたところ、LANのリンクスピード低下が発生し、本来の1Gbpsではなく100Mbpsで通信していることに気づいた。このLANケーブルはアルミで保護されているとはいえ、毎日に何度も開閉するドアと当たることでどこか損傷し、LANケーブルを通る電気信号の品質が1Gbpsを保てない状態になってしまったのだろう。 この問題は、LANケーブルをきつく曲げてドアを通す限り再発する可能性が高いと判断し、今度は床面とドアの間にある、5mmほどの隙間に注目した。床のほうにはドアの「戸当り」が無いから、LANケーブルを隙間に通すことができれば無理に凹凸に合わせて曲げる必要はない。そこで次のフラットLANケーブルを新たに調達し、ドアの下に直線的に通すことで、LANケーブルを損傷してしまう心配は消えた。最初から床の方に通せばよかった! |分類|品名|購入価格(円)|備考| |----|----|---:|----| |フラットLANケーブル|[サンワサプライ KB-FL7-05WN](https://www.sanwa.co.jp/product/syohin.asp?code=KB-FL7-05WN)|1,370|ビックカメラ| #### 5. ビデオ会議の映り改善 [2020-08] 仕事でのビデオ会議中、必要なブラウザ画面や端末画面をリモート共有し、3で導入した外付けマイクに向かって話しかけながら、カメラ越しにコミュニケーションする際の心がけとして、身体を使ったリアクションをなんとなく大きめにやっている気がする。このような現状で、業務上のやり取りとしては一応事足りているとして。 昨今の動画配信ブームを傍目で見ていると、いちおう配信側としての欲が出てきた。こちらの様子をより高忠実に、つまりもっと明度のレンジを広く鮮明に、そしてアングルを変えて中継できてもいいよなぁと。そう考え始めると、既存のPC (MacBook Pro or MacBook Air) の内蔵カメラでは限界がある。 そこで、ボケ味の効く一眼レフカメラのライブビュー画面をHDMIキャプチャでPCに入力して……、なんて究極な投資は今できないので、ウェブカメラのレベルでの次のアイテムを選択した。このC980 (オフホワイト色: C980OW, グラファイト色: C980GR) を、まずはC980付属ソフトウェアは全く使わず、Ubuntuに接続して試してみたところ、照明を弱めにした部屋でもかなり明るめの映像が撮れている。心持ち重めの筐体で安定してディスプレイの上に設置できるし、スタンドを取り替えると三脚への取り付けも可能だ。ウェブカメラとしては比較的高価だが盤石であり、出来の良さを感じる一品である。 |分類|品名|購入価格(円)|備考| |----|----|---:|----| |ウェブカメラ|[Logicool StreamCam C980OW](https://www.logicool.co.jp/ja-jp/product/streamcam)|20,350|ヨドバシ.com| ##### 追記 [2020-08-11] [Logicool StreamCam C980 (C980OW, C980GR)](https://www.logicool.co.jp/ja-jp/product/streamcam) は、カメラ本体から延びる取り外し不可のケーブルの末端が、USB 3.1 Type-Cの形状をしている。このため、カメラを接続するPCやUSBハブ側の差し込み口がType-Aの形状の場合、次のような「USB Type-C→Type-A (オス) 変換アダプタ」が別途必要となる。 --- ### 【読んだ本】 未来をつくる言葉―わかりあえなさをつなぐために - 2020-07-28 URL: https://remoteroom.jp/medialog/2020-07-28_book-b083z2ksw9/ 言葉を他者に返したり呼びかけたり、文字に記したりまた読解するといった、言葉を使う日常を、私たちは代々営み続けている。本書は、その営みが本来的に帯びている「なにか」をとても巧みに、言葉へ翻訳してくれている書であり、「なにか」は私の受信アンテナを介して、私にも想起された。 言葉はなんのために生まれているのだろう。言葉や様々な表現を通して生まれる、人々の関係性とはいったい何だろう、と考える探究の旅へ、読者は導かれていく。著者の思考の道筋として感心するのは、この旅は必ず日常の中から着想され、そこに起点を持つものであるが、ホモサピエンスの歴史を鳥瞰していくような長い視点を伴うものとなること。思考の連続性に知的好奇心がひどくくすぐられる。 また、著者の語りにあり、私も親として数年前から実感して納得していることとして。産まれてきた子どもは、こちらが緻密に教えたわけでもないのに、周りの環境からひとりでに言語を獲得し、知識体系を編み出し、気づきを伝えたり、自分を表現していく能力を持っている。あの驚異的な成長過程に接すると、人間は、そう出来るように出来ているとしか思えない。 しかし他方で、世の中には、投げつけたり、惹きつけることが主目的と思える言葉も飛び交っている。私たちがそれを見聞きする状況に辛さを覚えるとき、一度立ち止まって本書の内容を思い出したり、副題「わかりあえなさをつなぐために」の意味を考えてみると、言葉を持つ者としての原点に立ち返る、心の再起動ができるかもしれない。 P.S. 著者、ドミニク・チェン氏の作品『[Last Words / TypeTrace](https://typetrace.jp/)』の、大変印象深い動画があるので貼り付けておきます。 --- ### Pi-holeの紹介 ~自宅LAN全部まとめてAd Blocking~ - 2020-07-17 URL: https://remoteroom.jp/diary/2020-07-17/ #### Pi-holeでなにができるか DNSフィルタリング機能を備えたDNSサーバソフトウェア、「Pi-hole」を簡単に紹介します。 Pi-holeでなにができるか。自宅LANでこれを動かしておくと、自宅LANの中にスマホやPCなどのインターネット端末が、OSを問わず多数あるとしても、それらのDNSの正引きをPi-holeでまとめてフィルタリングできます。つまりは各端末から、広告等を配信しているインターネット上のサーバ (ドメイン) へのアクセスを発生させないようにできます。 このようなネットワークレベルでの「Ad Blocking」の利点のひとつとして、子どもが使うChromebook (モバイルノート) やiPad (タブレット端末) それ自体には特殊な設定等をしなくても、端末の画面には大半のインターネット広告が表示されなくなるので、親としては比較的穏やかな気持ちで、安心して子どもの端末操作を見守っておけるようになります。 #### 公式サイトとインストール方法 Pi-holeの公式サイトはこちら。 - [Pi\-hole® – A black hole for Internet advertisements](https://pi-hole.net/) ラズベリーっぽいロゴやPiが付いた名称から、小型コンピュータ「Raspberry Pi」に特化したソフトウェアかな?と思わせる部分がありますが、Raspbian (Raspberry Pi OS) に限らず、Ubuntu, Debian, Fedora, CentOSへインストール可能で、Dockerコンテナも用意されています。 Pi-holeのインストール方法の詳細は、公式サイトのドキュメントでご確認ください。私の場合はUbuntuが動いているx86_64の自宅サーバに、Pi-holeを次のコマンドでインストールしました。 ```bash $ curl -sSL https://install.pi-hole.net | bash ``` ##### 導入時の諸注意やポイント - Pi-holeのインストールが完了すれば、`http://サーバのIPアドレス:80/` でPi-holeの管理画面へアクセスできるようになります (ポート番号80は環境によっては変更となる) - 自宅LAN内にDHCPサーバが複数動いていると、LAN内での混乱のもとになる可能性があるため、DHCPサーバは1台のみにするのがベターだと思います (既存のルータのDHCP機能を有効化したままにするか、既存ルータのDHCP機能は無効化してPi-holeをDHCPサーバとして有効化するか) - いずれの場合でも、Pi-holeのDNSサーバ機能をDHCPクライアント端末が使うためには、DHCPサーバ側の設定で、端末が使用するDNSサーバをPi-holeのIPアドレスとすることが必要です - Pi-hole管理画面の `Group Management > Adlists` に追加するリストとして、たとえば、次のサイトで配布されている「AdAway」用を流用できます - [悪いインターネット \| 広告ホスト](https://warui.intaa.net/adhosts/) #### Pi-holeの効果 Pi-holeの管理画面では、次の画像のように、Pi-holeが処理したDNSクエリーの総数やブロックした割合が確認できるようになっています。私の家のLAN環境 (DHCPクライアント数20ぐらい) では平均的に、おおよそ10%強のDNSクエリーがブロックされている状態です。 ##### 参考情報: YTadsblocker 参考として、Pi-holeと組み合わせて使うこのようなスクリプトもあります。 - [GitHub \- deividgdt/ytadsblocker: YTadsblocker is a script to block all the Youtube's advertisement in Pi\-Hole](https://github.com/deividgdt/ytadsblocker) ###### 追記 [2020-08-11] いろいろと興味あって調べていたのだが、次のページの2020-07-11の書き込みに、こうあります。YouTubeのVideo ADsは、Pi-holeで遮断することは難しそうだとわかります。 - [How do I block ads on YouTube? \- Help \- Pi\-hole Userspace](https://discourse.pi-hole.net/t/how-do-i-block-ads-on-youtube/253/510) > Ultimately, youtube video ads are served from the same content domains as the videos themselves, so the only sure fire way to block ads on youtube is to block youtube all together :wink: ##### 追記 [2021-01-23] Pi-holeのブロックリストを簡単に追加するツールについて書きました。 - [Pi\-holeのAdリストを手軽に充実 \[2021-01-23\]]() #### 外出先でもPi-holeを使うために Pi-holeは我が家のインターネット利用に大きな安心をもたらすものだとわかり、外出先での家族の端末のDNSサーバとしても、自宅のPi-holeを利用しようと次に思いつきました。しかし、私の家 (IPv6/IPoEでDS-Lite) のように、インターネットへのポート開放ができない回線の場合は、インターネットから自宅サーバに直接アクセスさせることはおそらく難しい。 そこで、[SoftEther VPN](https://ja.softether.org/)を使った、次のような仮想ネットワークを作りました。 ``` 自宅のPi-hole (SoftEther VPN Client) ----[VPN]---- WebARENAのVPS (SoftEther VPN Server) ----[VPN]---- 外出先の端末 (L2TPクライアント) ``` インターネット上のVPSにSoftEther VPN Serverをインストールしてサービスさせ、自宅のPi-holeサーバはそのVPN Clientとして常時VPN接続しておきます。そして、外出先で端末がL2TPクライアントとしてVPN接続を確立している状態でのDNSサーバとして、自宅Pi-holeを使用するように諸々設定しました。 これで、家族の端末が4G/LTE回線や公衆無線LANを利用中でも、VPN接続をONに切り替えるだけで、その端末では自宅LANの中と同じく透過的にPi-holeのDNSフィルタリング機能を享受できます。さらに、端末側で、DNSサーバとの通信だけではなく全ての通信がVPNを通るように設定すると、公衆無線LAN利用時の通信のトンネル化も実現できて一石二鳥です。 なお、おそらくはDNSフィルタリングとは関係なく端末がVPN接続状態かどうかの関係ですが、私の端末 (Android) のアプリのなかには、VPN接続時に、「VPN接続時には利用できません」という表示を出すものがありました。そのようなアプリを使う時には、端末でVPN接続をOFFする必要があります。 ##### 追記 (SoftEther経由でPi-holeを使う設定) [2022-07-04] > そして、外出先で端末がL2TPクライアントとしてVPN接続を確立している状態でのDNSサーバとして、自宅Pi-holeを使用するように諸々設定しました。 上記の部分に関して、「どのように設定していますか?」という質問メールをいただきました。その回答として設定のエッセンスを追記します。 1. 自宅Pi-holeのSoftEther VPN上のIPアドレスを、DHCP取得ではなくたとえば`192.168.30.2`に固定する ``` #### Ubuntuの場合 $ cat /etc/netplan/98-softether.yaml network: version: 2 renderer: networkd ethernets: vpn_softether: addresses: - 192.168.30.2/24 gateway4: 192.168.30.1 nameservers: addresses: [192.168.30.1] search: [] routes: - to: 192.168.30.0/24 via: 192.168.30.1 metric: 999 $ ip address show vpn_softether | grep 'inet ' inet 192.168.30.2/24 brd 192.168.30.255 scope global vpn_softether ``` 2. SoftEther VPN Serverでの「SecureNAT機能」を有効化し、かつ、仮想DHCPサーバでの「クライアントに割り当てるDNSサーバーのアドレス」として自宅Pi-holeのSoftEther VPN上のIPアドレス (`192.168.30.2`) を指定する - SecureNAT機能の設定画面: - 参考ページ: [3\.7 仮想 NAT および仮想 DHCP サーバー \- SoftEther VPN プロジェクト > 仮想 DHCP サーバー機能の設定項目](https://ja.softether.org/4-docs/1-manual/3/3.7#.E4.BB.AE.E6.83.B3_DHCP_.E3.82.B5.E3.83.BC.E3.83.90.E3.83.BC.E6.A9.9F.E8.83.BD.E3.81.AE.E8.A8.AD.E5.AE.9A.E9.A0.85.E7.9B.AE) 3. 自宅Pi-holeの「Interface settings」を「Permit all origins」へ変更する (SoftEther VPN経由での自宅Pi-holeへのアクセスは、仮想インタフェース`vpn_softether`を通ってくるため) - 参考ページ: [Interfaces \- Pi\-hole documentation](https://docs.pi-hole.net/ftldns/interfaces/) おおよそ以上の設定で、外出先の端末をVPNクライアントとしてSoftEther VPN Serverへ接続した際、外出先端末へはSoftEtherの仮想DHCPサーバからIPアドレスが割り当てられ、かつ、外出先端末のDNSサーバとしてはデフォルトのSoftEther VPN Server自体ではなく自宅Pi-holeが利用されるようになります。 --- ### 小型の "ThinkCentre M75q-1 Tiny" を購入、PCゲームを始めたくなった - 2020-07-07 URL: https://remoteroom.jp/diary/2020-07-07/ コスパが異様に良いために祭りネタになっていた、Lenovoの小型PC「ThinkCentre M75q-1 Tiny」を、据え置きPCを刷新するつもりで1台購入した。 PC本体の大きさは「約34.5 x 182 x 179mm」。ハードカバーの本のようなサイズ感覚で、どこにでも置きやすい。 #### 購入したもの1: 本体一式 |分類|メーカー・機種名|価格(円)| |----|----|---:| |PC本体|Lenovo [ThinkCentre M75q-1 Tiny:価格.com限定 パフォーマンス](https://kakaku.com/item/K0001218252/) 11A4CTO1WW ※1|38,245| |メモリ|Crucial [Ballistix Sport LT 32GB Kit (2 x 16GB) DDR4-2666 SODIMM](https://www.crucial.jp/memory/ddr4/bls2k16g4s26bfsd) BLS2K16G4S26BFSD|15,380| |SSD|Western Digital [WD Blue™ SN550 NVMe™ SSD](https://shop.westerndigital.com/ja-jp/products/internal-drives/wd-blue-sn550-nvme-ssd#WDS500G2B0C) (500GB) WDS500G2B0C|8,780| |ACアダプター|Lenovo [ThinkPad スリム 135W ACアダプター(スリムチップ)](https://www.lenovo.com/jp/ja/accessories-and-monitors/chargers-and-batteries/chargers/PWR-ADP-BO-Slim-135W-Adapterslimtip/p/4X20Q88542) 4X20Q88542 ※2|3,300| |合計|※3|65,705| - ※1 カスタマイズ時に変更したもの: - 【選択】128GB M.2 2242 NVMe, インテル Wireless-AC 9260 + Bluetooth - 【追加】HDMIポート, バーティカル スタンド 3 - ※2 Lenovo発行の半額クーポンを利用して購入。標準の65Wより大容量の、135WのACアダプターを別途発注した理由は、[供給電力によって制限されているらしいM75q-1のグラフィック性能を解放するため](https://www.google.com/search?q=ThinkCentre+M75q-1+Tiny+135W)。 - ※3 本構成の結果、M75q-1本体に付属していた次のパーツが余る: 8GBメモリ, 128GB SSD (NVMe M.2 2242), 65W ACアダプター ##### 旧PCとの比較 据え置きPCとして、これまではノート型のThinkPad T450sに、外部モニターとキーボードを付けて使っていた。簡単に新旧比較を行ってみる。 |項目|旧|新| |----|----|----| |PC|ThinkPad T450s|ThinkCentre M75q-1 Tiny| |購入時期|2015年8月|2020年6月| |CPU|[Intel Core i7-5600U](https://ark.intel.com/content/www/jp/ja/ark/products/85215/intel-core-i7-5600u-processor-4m-cache-up-to-3-20-ghz.html)|[AMD Ryzen 5 PRO 3400GE](https://www.amd.com/ja/products/apu/amd-ryzen-5-pro-3400ge)| |[CPU Mark](https://www.cpubenchmark.net/compare/AMD-Ryzen-5-PRO-3400GE-vs-Intel-i7-5600U/3565vs2456)|3,078|8,218| |SSD|SATA 500GB|NVMe 500GB| |搭載メモリ|12GB|32GB| |常用OS|Linux Mint 18.3|Ubuntu 20.04 LTS| 約5年ぶりのPC刷新で、CPU Mark (ベンチマーク) の値は3,078→8,218と、約2.7倍に向上している。偶然の一致ですがメモリ搭載量も約2.7倍になった。ちなみに今回のM75q-1一式の購入費用は、T450sの半分程度に収まっている。 #### 購入したもの2: ゲームコントローラー ThinkCentre M75q-1 Tinyが届いてセットアップした後、「このマシンは[Steam](https://store.steampowered.com/)でゲームできる程度には速いぞ」と気づき、PCゲームの世界も覗いてみようと思い立った。 初めてのPC用ゲームコントローラとしては、様々な種類があり迷ったものの、私は過去に初代XboxとXbox 360を使っていたので、慣れているXbox純正の中古品を選択した。 |分類|メーカー・機種名|価格(円)| |----|----|---:| |コントローラー|[Microsoft Xbox ワイヤレス コントローラー WL3-00160](https://www.xbox.com/ja-jp/accessories/controllers/night-ops-camo-special-edition)|4,950 (中古・送料別)| まず最初にやっているゲームは『[DiRT Rally](https://store.steampowered.com/app/310560/DiRT_Rally/)』である (期間限定で無料配布されていたときに入手)。やはり同じ形状のコントローラであるためか、Xbox時代に遊んでいたDiRTやForzaでの指使いを、すぐに思い出してきた。 ちなみに、M75q-1に導入したUbuntu 20.04 LTSで、Xbox ワイヤレス コントローラーをBluetooth接続で使うために、ArchWikiのページを参考に次の対応を行っている。 - [Gamepad - ArchWiki > Connect Xbox Wireless Controller with Bluetooth](https://wiki.archlinux.org/index.php/Gamepad#Connect_Xbox_Wireless_Controller_with_Bluetooth) ``` $ sudo vim /etc/modprobe.d/xbox_bt.conf # 新規作成、次の1行を追記 options bluetooth disable_ertm=1 $ sudo reboot # 設定有効化のためには再起動する ``` --- ### Jitsi Meetサーバ運用のポイントメモ1 - 2020-06-09 URL: https://remoteroom.jp/diary/2020-06-09/ 本記事は、先日の [オープンソースなビデオ会議システム「Jitsi Meet」の導入方法 \[2020-05-31版\]]() の続編です。Jitsi Meetサーバを実際に数日運用し、行った設定や改善のメモです。 #### 会議室作成者の限定 [自前サーバに前回導入ができた]()ビデオ会議システムJitsi Meetでは、個人サーバ管理者として一応、会議室の作成者を限定したいと考えていた。この設定を案内しているページは次の通り。 - [Secure Domain setup · Jitsi Meet Handbook](https://jitsi.github.io/handbook/docs/devops-guide/secure-domain) - [Enable authentication in your instance of Jitsi Meet \- Get Blogged by JoKi](https://jochen.kirstaetter.name/authentication-jitsi-meet/) これらの案内のとおりに設定すると、会議室作成者の限定が行えた。実際には次のような認証画面が設定される。 1. 好きな名前の会議室 (ミーティングのURL) へ最初にアクセスしたとき、次の「ホストを待っています…」画面が出てくる。\[私はホストです\] を押す。 2. 次にIDとパスワードを尋ねる「パスワード required」画面になるので、`prosodyctl register` で作成したユーザのID・パスワードを入力する。 #### 参加直後のハウリング防止 会議室に参加者が入るとき、音が突如ハウリングする事故がどうしても起こりがちだ。せっかくの自前サーバなので、会議室参加時の初期状態を一律で「音声ミュート」に変更しておき、皆の耳が痛くなるこの種の事故を減らすことにしよう。 Jitsi Meetの会議室に関する設定は、次の設定ファイル`meet.example.com-config.js`に書かれており、サーバから参加者へはURL「https://meet.example.com/config.js」で配信される仕組みだ。「音声ミュート」については`startWithAudioMuted`を`true`へ変更すれば良い。 ``` $ cat /etc/jitsi/meet/meet.example.com-config.js | grep startWithAudioMuted startWithAudioMuted: true, ``` ただし試してみた限りでは、上記の音声ミュート設定が効くのはPCブラウザでの参加者に対してのみで、iOS/AndroidのJitsi Meetアプリでの参加者に対しては、どうも効かないようだった。 #### メモリ逼迫の対策 ##### 定期的なサービス再起動 今回構築したJitsi Meetを、4,5人の間で1日8時間以上繋ぎっぱなしにするビデオ会議に、4日間ほど実際に使ってみたところ、ある時に接続が切れる現象が発生した。 サーバの状態を調べたところ、Jitsi Videobridge (jvb) のJavaプロセスのメモリ利用量が肥大していて、メモリ1GBのサーバの、2GBのSwap領域はほぼ残りがないぐらいだったから、きっとメモリ逼迫だったのでしょう。 このメモリ逼迫への安直な対処として、jitsi-videobridge2サービスを定期的に再起動することにした。次のようなコマンドを、会議室を使っていることがない早朝の時間帯にcronで仕込めば良いと思う。 ``` $ sudo systemctl restart jitsi-videobridge2.service ``` ##### Swap使用率等の監視 ついでにこの機会に、当該サーバのSwapやメモリの使用率をグラフ化して監視を始めることにした。データ可視化・監視サービスとしては、最近存在を知ったIIJの [Machinist](https://machinist.iij.jp/) を、「フリープラン」で試す。 - [Machinistでリモートワーク中の自宅環境を分析する \| IIJ Engineers Blog](https://eng-blog.iij.ad.jp/archives/5789) MachinistへのSwap使用率のデータ送信を、無理矢理にcron内の1行で行うとすると、次のようになる。 > MACHINIST_API_KEY=XXXXXXXXXXXXXXXX > > */5 * * * * MACHINIST_VALUE=$(free | sed -n 3p | awk '{print $3/$2 * 100}'); MACHINIST_JSON="{\"agent\": \"$(hostname -s)\",\"metrics\": [{\"name\": \"Swap Used (Percent)\",\"namespace\": \"$(uname -s)\",\"data_point\": {\"value\": ${MACHINIST_VALUE}}}]}"; curl -s -X POST -H "Content-Type: application/json" -H "Authorization: Bearer ${MACHINIST_API_KEY}" https://gw.machinist.iij.jp/endpoint -d "${MACHINIST_JSON}" 実際のSwap使用率グラフは次の画像のようになる。通知は、Swap使用率が50%を超えたら来るように設定した。Machinistは、フリープランでも「直近1ヶ月分のデータを保存」とのことでありがたい。比較的長期間のデータが眺められそうだ。 --- ### 【観た映画】 ルパン三世 カリオストロの城 - 2020-06-06 URL: https://remoteroom.jp/medialog/2020-06-06_movie-b001gc15eg/ - 視聴: [iTunes](https://itunes.apple.com/jp/movie/id1304577348) 陰謀との遭遇、出会い、憧れ高まる心、組織におけるしがらみと個人の生き様まで、凝縮して描き、観る者を取り込んでしまう。ベンチマーク的な冒険活劇という言葉を贈りたい、傑作であった。 私は以前にも本作を観たことがあったと思うのだが、組織人としての銭形警部のわびしい心情に共感もする大人になってしまうとは、小さい頃の私には分からなかったに違いない。 シーンを高める音楽も良かったと思うし、とてつもなく細やかな執念の描画に驚く。なお、制作時にはおそらくコンピュータの助けはない、1979年公開の作品である。 --- ### オープンソースなビデオ会議システム「Jitsi Meet」の導入方法 [2020-05-31版] - 2020-05-31 URL: https://remoteroom.jp/diary/2020-05-31/ 昨今のコロナ事情の在宅勤務などで、ビデオ会議システムを利用することが増えた。私は[Jitsi Meetの公式サービス「meet.jit.si」](https://meet.jit.si/)を使うことも多いが、このシステムはオープンソースで公開されていて、いわゆるオンプレミス、自前のサーバ上でも構築できるというのだ。 ならば、ネットワーク的に近い場所にひとつ構築してみるしかないだろう。もしうまく行ったら、将来的にはビデオ会議の画質などのパラメータを自分で調整してみたいし。 #### 導入対象サーバの環境 今回、Jitsi Meetを導入するサーバの環境は次の通り。 |項目|内容| |----|----| |サービス|[Oracle Cloud Free Tier](https://www.oracle.com/jp/cloud/free/)| |リージョン|ap-tokyo-1 (東京)| |インスタンスのタイプ・シェイプ|VM.Standard.E2.1.Micro (1/8 OCPU, Mem: 1GB) ※Always Free対象| |サーバ名|meet.example.com| |OS|Ubuntu 20.04 LTS (当初の18.04 LTSからアップグレードした状態)| |Webサーバ (導入済)|Nginx| |SSL証明書 (取得済)|[Let's Encryptのワイルドカード証明書](https://certbot.eff.org/glossary#wildcard-certificate)| ##### サーバ側のネットワーク帯域について 実際に、Jitsi Meetでのビデオ会議を同一LAN内の3~5者で利用した場合は、サーバ側のネットワーク帯域はUp/Downともに常時2~8Mbps程度使用されていた。 Oracle Cloudでは~~通信量制限はないので良いが~~ (訂正) 「アウトバウンド転送量は月10TBまで無料」なので、計算上は問題なさそうだが、通信量に応じて課金されるサーバへの導入は、「パケ死」に注意が必要に思う。 #### Jitsi Meetインストール方法 基本的に、一次情報源である、公式サイトの次のドキュメントにしたがって進めればよいと思う。二次情報のなかには、後述の通信ポートの情報が古いものがあったりするので。 - [Self\-Hosting Guide \(Debian/Ubuntu server\) · Jitsi Meet Handbook](https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-quickstart) ##### 1. 事前準備: 通信の許可 Jitsi Meetが使用する通信ポートに関して、公式ドキュメントには次の記載がある。 > - 80 TCP - for SSL certificate verification / renewal with Let's Encrypt > - 443 TCP - for general access to Jitsi Meet > - 4443 TCP - for fallback network video/audio communications (when UDP is blocked for example) > - 10000 UDP - for general network video/audio communications > - 22 TCP - if you access you server using SSH (change the port accordingly if it's not 22) これらの通信がインターネットからサーバへ届くように、Oracle Cloudの場合は次の設定を変更し、通信を許可しておく。 1. 「イングレス・ルール」で許可 - `Networking > Virtual Cloud Networks > HOGEHOGE > Security List Details > Ingress Rules` 2. 「セキュリティ・ルール」で許可 - `Networking > Virtual Cloud Networks > HOGEHOGE > Network Security Group Details > Security Rules` 3. サーバのOSのファイアウォール (ufwやiptables) で許可 - Ubuntuの場合: `/etc/iptables/rules.v4` など ##### 2. 公式ドキュメントの手順でインストール [公式ドキュメント](https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-quickstart)に沿って、最初から順に進めていく。`apt install jitsi-meet` を実行した後の、具体的な流れは次の通り。 - 導入サーバのhostnameを聞かれるので「meet.example.com」と入力する - この質問は先日2020-05-30に`apt install jitsi-meet`を実行したときには無く、2020-05-31に実行したときには現れた。ちなみに、2020-05-30に私が導入を試した際には、install/uninstallを繰り返したりした後、サーバのホスト名とJitsi Meetの内部機構でのドメイン名がうまく噛み合わなくなったようで、Jitsi Meetをうまく動作させることが出来なかったが、パッケージの改善がされたのかもしれない - 質問「SSL certificate for the Jitsi Meet instance」に対しては、今回の環境では事前にSSL証明書を取得済みなので、「I want to use my own certificate」を選択する - 「Full local server path to the SSL key file」には、Nginx設定の`ssl_certificate_key`の内容を入力する - 「Full local server path to the SSL certificate file」には、Nginx設定の`ssl_certificate`の内容を入力する ##### 3. NAT環境用の設定 `apt install jitsi-meet`完了後の作業として。今回のサーバ自体には「10.0.0.X」という、ローカルネットワークのIPアドレスが割り当てられており、サーバがいわゆるNAT配下にあることになる。このため、[Advanced configuration](https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-quickstart#advanced-configuration)を実施する。 ``` sudo vim /etc/jitsi/videobridge/sip-communicator.properties --- ###org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES=~ # この行はコメントアウトする org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=<サーバのローカルIPアドレス> # 行追加 org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<サーバのグローバルIPアドレス> # 行追加 --- ``` ##### 4. いよいよ動作確認 ここまでの設定の変更が行えたら、Jitsi Meet関連のサービスを次のように再起動して、各サービスの再起動後の状態が「active (running)」であることを確認する。 ``` sudo systemctl restart prosody.service systemctl status prosody.service sudo systemctl restart jicofo.service systemctl status jicofo.service sudo systemctl restart jitsi-videobridge2.service systemctl status jitsi-videobridge2.service sudo systemctl restart nginx.service systemctl status nginx.service ``` 次に、Jitsi Meetの導入URLとなる`https://meet.example.com/`へ、Google Chromeなどのブラウザでアクセスし、2者間や3者間でのビデオ会議を行ってみる。 サーバ側では、`dstat`コマンドなどでビデオ会議中の負荷や通信量を観測していると楽しい。なお、手元にある端末をすべて並べて、5者でのビデオ会議まで試してみたが、今回の環境では特に問題なかった。こんなに使える環境が無償だなんて、Jitsiさん、Oracleさんありがとう!! #### Jitsi Meetアンインストール方法 [公式ドキュメントのUninstall](https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-quickstart#uninstall)の手順に加えて、次のディレクトリの削除も行っていたほうが良いように思う。もしJitsi Meetの再インストールを行うことになった場合、前回分の設定が残っていないクリーンな状態にしておくほうが、トラブルが少ないであろうから。 ``` sudo rm -rf /etc/jitsi/ sudo rm -rf /var/lib/prosody/ sudo rm -rf /var/log/prosody/ sudo rm -rf /usr/share/jicofo/ sudo rm -rf /usr/share/jitsi-*/ ``` #### お役立ち情報 ##### ログ出力の抑制 Jitsi Meetのログファイル`/var/log/jitsi/jvb.log`のサイズ増加が激しい場合には、次のページの対応を行えばよい。 - [Jitsi Meetのログが大量に出ているので抑制してみた \| ろっひー](https://rohhie.net/reduce-jitsis-log-output/) ##### 会議室履歴の削除 導入したJitsi Meetのトップページには、当該ブラウザで使用した会議室の履歴が表示されるようになるが、これをクリアしたい場合はどうするか。この履歴情報はブラウザのローカルストレージに保存されているので、次のページを参考に削除を行えば会議室の履歴もクリアされる。 - [How to clear local storage in Google Chrome browser? \| LeadsHook Knowledge Base](https://www.leadshook.com/help/how-to-clear-local-storage-in-google-chrome-browser/) ##### 会議室作成者の限定 Jitsi Meetのデフォルト状態では、アクセスしてきた誰もが会議室を作成できる。しかし個人サーバの管理者としては、「誰もが作成できる」点には一応制限をかけておきたい。そのため例えば、NginxでBASIC認証をかけようかと考えたが、iOSやAndroidの専用アプリ「Jitsi Meet」はBASIC認証には対応していない予感がする (確認はしていない)。 公式ドキュメントにある、会議室の作成権限を限定する手順は次の通り。やってみて成功したらまたレポートします。 - [Secure Domain setup · Jitsi Meet Handbook](https://jitsi.github.io/handbook/docs/devops-guide/secure-domain) ###### 追記 [2020-06-09] Jitsi Meetにおける、会議室作成者を限定する設定に成功しましたので、こちらの記事を参照ください。 - [\[2020-06-09\] Jitsi Meetサーバ運用のポイントメモ1]() --- ### 設定で問題を回避する例 ~ARM系計算機+リソース監視Ganglia~ - 2020-05-20 URL: https://remoteroom.jp/diary/2020-05-20/ CPUがARM系 (AArch64アーキテクチャ) である計算機に対し、[Ganglia Monitoring System](http://ganglia.info/)によるリソースモニタリングを導入する作業をした。 この場合、Gangliaノードとなる計算機側にgmondというデーモンを導入する必要があるのだが、gmondとaarch64の組み合わせによる一つの問題に遭遇し、それを回避するworkaroundがわかったので、珍しい情報かもしれないと思いメモしておきます。 #### 対象のGanglia環境 |項目|内容| |----|----| |バージョン|[3.7.2](http://ganglia.info/?page_id=66)| |サーバのCPU (gmetad,gmond)|x86_64アーキテクチャのなにか| |ノードのCPU (gmond)|aarch64アーキテクチャのなにか| ※上記のGangliaバージョン3.7.2は2015年7月リリースで、記事執筆時点の最新版 #### 遭遇した問題の内容 Gangliaノードのaarch64計算機のgmondから得られる情報を、Gangliaサーバのgmetadが読み込む際に、次の「XML_ParseBuffer() error at line 9999:#012not well-formed (invalid token)#012」というエラーが発生した。Ganglia Web Frontendでは、当該計算機のいくつかのリソース情報のグラフが描画されない状態になる ``` May 21 00:00:00 user.info server /usr/sbin/gmetad[99999]: Process XML (hoge-System): XML_ParseBuffer() error at line 9999:#012not well-formed (invalid token)#012 ``` gmetadにエラーを発生させるXMLの実際のデータや、XMLとしての妥当性検証の結果は、次のコマンドで確認できる。 ```bash $ telnet | tail -n +4 > hoge.xml $ cat hoge.xml $ xmllint --valid --noout hoge.xml hoge.xml:9999: parser error : CharRef: invalid decimal value | tail -n +4 > hoge.xml $ xmllint --valid --noout hoge.xml ``` 4. aarch64計算機のリソース情報が、Ganglia Web Frontendに欠損なく反映されるのを待つ 以上。もし実際に上記のworkaroundをやってみる方がいらっしゃれば、どうかその環境でもうまく行きますように。 #### P.S. 最近の一枚 記事の内容とは関係ありませんが、昔からの計算機のイメージとして。 --- ### Chromeブラウザの拡張機能でSSH接続 - 2020-05-19 URL: https://remoteroom.jp/diary/2020-05-19/ ブラウザGoogle Chromeの拡張機能を使うと、Chromeから直接SSH接続ができることは、そんなに広く知られたことじゃないかもしれない。時々役に立つこともあるので、簡単にメモしておきます。 SSH接続で使うChrome拡張機能は次の2つ。後者のSSH Agentがあると、公開鍵認証でSSHログインする場合に楽ができます。 1. [Secure Shell App \- Chrome ウェブストア](https://chrome.google.com/webstore/detail/secure-shell-app/pnhechapfaindjhompbnflcldabbghjo) 2. [SSH Agent for Google Chrome™ \- Chrome ウェブストア](https://chrome.google.com/webstore/detail/ssh-agent-for-google-chro/eechpbnaifiimgajnomdipfaamobdfha) 「Secure Shell App」「SSH Agent for Google Chrome™」の使い方や諸注意は、次のサイトに詳しいのでリンクしておきます。なお、このリンク先では動作未確認となっているEd25519の鍵は、私のテストでは動作OKでした。 - [Chromium OS \(Chrome\)のSecure ShellでSSH Agentを使う](https://blog.c6h12o6.org/post/chromium-ssh-and-agent/) --- ### 【観た映画】 ドリーム - 2020-05-04 URL: https://remoteroom.jp/medialog/2020-05-04_movie-b07c4tlt7q/ - 視聴: [iTunes](https://itunes.apple.com/jp/movie/id1186448768) 1960年代の宇宙開発競争に奮闘しているNASAを舞台に、3人の黒人女性が、努力で当時の差別を跳ね返して望む夢を掴んでいく、実話ベースの映画。原題は『HIDDEN FIGURES』である。本作の概要から容易に予想されることとして、職務において抜きん出た高い能力を発揮し、そして自らの次の目標を目指す者を、理不尽な理由を付けて起用しない職場環境、またはそうはさせず押し留めようとする社会勢力が幾度も描かれる。 この映画には全体に爽快さがあるし、おそらく大多数に受け入れられやすい内容だろうと考える。その一つの要素として思うに、アメリカ合衆国として、宇宙競争でソ連に勝利する可能性を何が何でも高めなければならない、すなわち結果が国益に大きく関わるという究極の状況において、当時のNASAにある、肌の色そして性別で差別をしていた制度や風習が、コストとメリットの観点でどれだけ切迫した状況と釣り合わないものか、コントラストが分かりやすいからだ……。 と、わざと斜に構えた見方を書いてみたが、これは冗談。本作のエッセンスは、理不尽を見抜いて物事を変えていくことが道を拓く、と巧みに伝えているところだと思う。そのためには人に、論理的思考と洞察力、行動、社会的風習を脇に置いて飛躍のできる想像力が欠かせない、と改めて教えられる。 --- ### 【観た映画】 スマスイ - 2020-04-25 URL: https://remoteroom.jp/medialog/2020-04-25_movie/ #### "Thank you, Our Healthcare Heroes." [須磨海浜水族園](https://kobe-sumasui.jp/)の[映画『スマスイ』](https://twitter.com/sumasui_movie)が、[YouTubeで期間限定無料配信](https://www.youtube.com/watch?v=COBSHovRBhI)されていると知り、居間のテレビで家族とのんびり観た。YouTube版の冒頭には、新型コロナウイルスの対応に尽力している医療従事者に向けた“Thank you, Our Healthcare Heroes.”のメッセージが表れる。 Twitterにつぶやいた感想は次の通り。このつぶやきに付け加えるとするならば、水族園を幾度か訪れたことがある人なら馴染みの景色が映画の舞台であり、どの登場人物にも感情移入してしまいそうなわかりやすさがあり、端的に言って長すぎない、という点が心地よかった。 > いま映画『スマスイ』観ました! ほっこりなりました。 > > また、大学時代に博物館実習を須磨海浜水族園で受けたので、バックヤードでの餌づくりの様子や風景も思い出しました。 #### 映画 ~~(公開期間: 2020-05-06(水) 23:59まで)~~ - [映画『スマスイ』期間限定で無料配信 25日から 新型コロナで外出自粛中の神戸市民のため \| ラジトピ ラジオ関西トピックス](https://jocr.jp/raditopi/2020/04/23/48068/) \[2020-04-23\] - [閉園の神戸須磨海浜水族園が舞台 映画『スマスイ』ユーチューブで無料配信中! 思い出の姿を鮮やかに記録 \| ラジトピ ラジオ関西トピックス](https://jocr.jp/raditopi/2023/05/31/507815/) \[2023-05-31\] --- ### 在宅勤務の課題とQoL - 2020-04-20 URL: https://remoteroom.jp/diary/2020-04-20/ 昨今の新型コロナウイルス対応にて、私も先週木曜日から初の在宅勤務を始めたわけだが、3日目を終えた本日までに、業務自体以外のことで浮かび上がってきた在宅勤務上の課題がある。具体的にはQoLに関する、下記の「歩数不足」と「読書等不足」だ。 心身の恒常性を維持するためには、通勤がない在宅勤務のリズムのなかにも、これらを解決する取り組みをあえて差し込みたい。現時点の見通しでは、5月の大型連休明けが在宅勤務の期限であるが、それまでは、この新たな習慣づけをするために自分をうまくハックしなければ……。 #### 課題1. 歩数不足→運動不足 1つ目は健康管理に関する課題で、在宅勤務では明らかに、歩数不足になりつつあること。歩数データを簡単にまとめると次の通り。電車で片道約25分+徒歩で片道約15分の、階段昇降を含む通勤が相応の歩数を稼いでいる一方、在宅勤務では1,000歩台にとどまってしまいそう。 |日付|勤務形態|歩数|備考| |----|----|---:|----| |2020-04-13(月)|通勤|5,444|| |2020-04-14(火)|通勤|4,987|| |2020-04-15(水)|通勤|5,356|| |2020-04-16(木)|在宅勤務|6,663|昼に子どもとめいっぱい散歩して疲労| |2020-04-17(金)|在宅勤務|1,932|夕方に車で買い出し| |2020-04-20(月)|在宅勤務|1,416|昼の散歩なし| #### 課題2. 読書等不足→インプット不足 2番目の課題として、通勤電車の中で読書とポッドキャストのリスニングを行っていたが、その機会を、家族と暮らす中での在宅勤務ではまだうまく設けられていないこと。在宅勤務では、仕事を終えて書斎を出るとすぐにリビングへと入る動線しかない。この観点だと、通勤には、孤立する時間を自分へ自動的にもたらす作用があったわけだ。 --- ### 脆弱性情報をIPAへ報告して修正されました #情報処理安全確保支援士 - 2020-04-19 URL: https://remoteroom.jp/diary/2020-04-19/ あるウェブサービスで発見した脆弱性の届出を、[独立行政法人 情報処理推進機構 (IPA)](https://www.ipa.go.jp/) へ行った。その脆弱性は無事に修正されたようなので、届出から修正完了までの時系列などを記しておきます。参考になれば幸いです。 #### 届出から修正完了までの時系列 - \[2019-12-11 00:21\] 某eラーニングサイトの脆弱性 (後述) を届出 - 届け出は、IPA (独立行政法人 情報処理推進機構) の [脆弱性関連情報の届出受付](https://www.ipa.go.jp/security/vuln/report/) ページにて、「(2) ウェブアプリケーション脆弱性関連情報」から行った - \[2019-12-11 09:56\] IPAからのメール「届出情報受信のご連絡」を受信 (本件の取扱い番号 IPA#NNNNNNNN も連絡される) - \[2019-12-11 14:04\] IPAからのメール「届出情報受理のご連絡」を受信 - \[2019-12-11 19:39\] IPAからのメール「取扱い開始のご連絡」を受信 - \[2020-02-26\] IPAからのメール「届出受理証明書のご連絡」を受信 - \[2020-03-05\] IPAからのメール「修正完了のご連絡」を受信 #### 脆弱性の内容 某eラーニングサイトの限定公開コンテンツには、ID・パスワード認証が設けられている。しかしながら、ある特定のURLへ直接アクセスすると、コンテンツの内容が認証無しに閲覧できてしまった。その“特定のURL”のヒントは、各コンテンツのHTMLソース内に記述されている。 このような、「認証の不備」もしくは「セッション管理の不備」に該当すると考えられるウェブアプリケーションの脆弱性を、正規のユーザとしてサイトを利用中に発見した。 #### なぜサイト運営側ではなくIPAに伝えたか 今回の脆弱性を、某eラーニングサイトの運営企業には伝えず、IPAに伝えたのはなぜか。それは、ウェブサイトの運営側に関わったこともある私自身の経験上、単なる第三者からの指摘に対しては、サイト運営側が誠実に対応を行うとは限らないこともあろうと予想したため。しかも上記の不備は、某eラーニングサイトの仕様の根幹に関わっている、大穴の脆弱性である可能性もあるかもしれない。本件の状況において、もっとも迅速着実に対応がなされるためには、いわゆる「外圧」を使う、「虎の威を借る」方法がベストだろうと考えた。 なお、発見した脆弱性の対処法、届出先については、本記事執筆中に見つけた次のページが大変参考になります。 - [アカネちゃん、JVNに謝辞が載る:こうしす! こちら京姫鉄道 広報部システム課 @IT支線(17) \- @IT](https://www.atmarkit.co.jp/ait/articles/1909/19/news005.html) #### IPAへの届出時に戸惑った点 私がこの脆弱性を発見する際には、“特定のURL”へ正規のログイン時のCookie情報やReferer情報を渡さなくても、コンテンツが閲覧できてしまうかの確認として、いわゆる「強制ブラウジング」攻撃に近い行為を行っている。この行為が、法的に問題がないものとみなされるかどうか、正直戸惑った。 IPAの次のガイドラインを読み込んだ結果、この行為は、届出時の記入情報を確認するために必要な範囲内だろうと判断し (この判断は私の自己流のものなので、ケースに応じて各自ご判断ください)、問題の“特定のURL”もいくつか具体的に記載して届出を行った。 - [脆弱性関連情報の届出受付:IPA 独立行政法人 情報処理推進機構](https://www.ipa.go.jp/security/vuln/report/) > [情報セキュリティ早期警戒パートナーシップガイドライン \-2019年版\-](https://www.ipa.go.jp/files/000073901.pdf) \[PDF\] IPAのガイドラインで特に注視した部分を、次に引用しておく。 ##### (上記ガイドライン P.24) Ⅴ.ウェブアプリケーションに係る脆弱性関連情報取扱 > 2.発見者の対応 > 1\) 脆弱性関連情報の発見・取得 > > 脆弱性関連情報の発見・取得に際しては、関連法令に触れることが無いように留意してください。法的な論点に関しては、付録3を参照してください。 ##### (上記ガイドライン P.35) 付録3 法的な論点について > (2)不正アクセス禁止法に抵触しないと推察される行為の例 > > 脆弱性の発見に最も関係が深い不正アクセス禁止法に対しては慎重な扱いが求められます。といっても脆弱性を発見する際に、必ずしも不正アクセス禁止法に抵触するとは限りません。以下に、不正アクセス禁止法に抵触しないと推察される行為の例を挙げます。 > > 1\) ウェブアプリケーションの利用権者が、正規の手順でログインする等して通常のアクセスをした際に、ブラウザとサーバとの通信の内容を観察したところ、それだけで脆弱性の存在を推定できた場合。 > 3\) アクセス制御による制限を免れる目的ではなく、通常の自由なページ閲覧を目的として、日付やページ番号等を表すと推察される URL 中の数字列を、別の数字に差し替えてアクセスしてみたところ、社会通念上、本来は利用できてはならないはずと推定される結果が、偶発的に起きてしまった場合。(ただし、積極的に多数の数字列を変えて試す行為等は、制限を免れる目的とみなされる可能性があります。) #### 感想 届けるべきところに届け出たことで、世の中のITの脆弱性のひとつを塞ぐきっかけを作れたことは、純粋に良かったと思う。そして認証不備の脆弱性がうまく再現できたのだろうか、IPAからの「取扱い開始のご連絡」メールが、届出日当日に送られてきたのには驚いた。 脆弱性をIPAへ届け出るという手段は、[情報処理安全確保支援士](https://www.ipa.go.jp/siensi/toberiss/) (RISS; 登録セキスペ) の資格維持のために受講したオンライン講習の中で取り上げられており、私はそれではじめて詳しく知ったのだった。今回IPAへの届出を実際に行えたことは、~~受講費用が高額な~~講習が役に立ったのかもしれないし、支援士としての務めを果たせたような気もしてちょっと嬉しい。 ##### IPA「脆弱性関連情報 届出受理証明書」の書面 --- ### 【読んだ本】 地面師たち - 2020-03-10 URL: https://remoteroom.jp/medialog/2020-03-10_book-b07zcqw6md/ 弱みのあるターゲットを見極める。ターゲットを間違いなく騙せるよう、可能な限り周到な計画を立て完全な準備を整え、じっくりと襲う。相当に切れる策士に統括された詐欺ビジネスのチームが、ターゲットから不動産の利権を餌に多額の金を奪うさまを、私は共犯者として、契約を“クラック”する頭脳の戦争として楽しむことができた。本作はこの手際の描写が実際的で、見事な手際に呆れるほどの感銘を受ける。 他方で本作は、精神が歪んでしまった故に、人が犯罪の策士として完全動作するさまも織り込んだストーリーである。このような人の狂気を、さもありなんと感ずることはできるが、狂気の受け側を想像もし、人の弱さも痛感させられる。つまり、欲がある私がもし策士の狂気に対面したら、詐欺を暴き生き抜けるというような、いわゆる勝てる気が、ほとんどしません……。 --- ### Android版『NHK キッズ』のご利用は開発者向けオプションOFFで - 2020-03-07 URL: https://remoteroom.jp/diary/2020-03-07/ Android版の『NHK キッズ』アプリは、Androidスマホ・タブレットの「開発者向けオプション」をONにしていると、アプリ起動後のタイトル画面 (上の画像) から、音楽は流れているが先へ進まない状態になる。「開発者向けオプション」をOFFにすると正常に使えることが、我が家では今日判明! - [NHK キッズ \| NHK for School](https://www.nhk.or.jp/school/kids/) - [NHK キッズ \- Google Play のアプリ](https://play.google.com/store/apps/details?id=jp.or.nhk.kids&hl=ja) 我が家のiOS端末での『NHK キッズ』はちゃんと正常に使える一方、様々なOSバージョンがある約5台のAndroid端末ではどれも使えず、なぜか全滅。ウェブ検索しても原因がわからず、ほんとにここ数ヶ月悩んでいた。全滅だったのは、我が家のAndroid端末に対しては私が一律「開発者向けオプション」をONにして、画面描画のアニメーションを切っていたから、というオチ。 アプリ開発元は説明に一言、この「開発者向けオプションOFF必須」の旨を書いていてほしいです! 以上、同じ悩みを持つAndroid使いへ、役立つかもな情報でした。 #### 追記 \[2020-09-24\] Android版『NHK キッズ』アプリのページを本日ふと覗いてみますと、次のような不具合修正の情報が載っていました。 - [NHK キッズ \- Google Play のアプリ](https://play.google.com/store/apps/details?id=jp.or.nhk.kids&hl=ja) > 新機能: 開発者向けオプションが有効化されている場合の不具合を修正しました。 > > 更新日: 2020年5月19日 そこで手元のAndroidタブレットにて「開発者向けオプション」をON (有効化) に変更した上でアプリの動作確認をしてみますと、2020年3月時点と違い、有効化したままでもアプリが使用できました。不便だったところを直してもらえてよかったよかった! --- ### 「テザリングできない」問題の解決法 (Xiaomiスマホ + IIJmio) - 2020-03-04 URL: https://remoteroom.jp/diary/2020-03-04/ Xiaomiのスマートフォンでこれまでは可能だったWi-Fi接続でのテザリングが、ある時できなくなっていることに気づいた。テザリングがだめになったタイミングとして思い当たるのは、2020年1月か2月に実行された、スマホOSのアップデートだ。 AndroidやAPNの設定などを色々と調べた結果、今回のテザリング不可問題をどうにか解決できたので、解決法をメモとして書き残しておきます。 #### 端末とSIM |項目|内容| |---|---| |端末機種|[Xiaomi Mi 9T](https://www.mi.com/global/mi-9-t)| |端末OS|MIUI Global 11.0.4 (Android 10)| |使用SIM|[IIJmio データ通信専用SIM タイプD](https://www.iijmio.jp/hdd/spec/typed.jsp)| #### 困った状況 Wi-Fi接続でのテザリングがだめな状況は、具体的には次の通り。 1. Xiaomiスマホで「ポータブルホットスポット」 (いわゆるWi-Fi接続テザリング) を開始する 2. 無線の子機からXiaomiスマホへの接続は確立したように見える 3. しかしながら、無線の子機からインターネットアクセスができない…… #### 解決方法 1. Xiaomiスマホの「設定」を開き、「SIMカードとモバイルネットワーク」→「SIMカード設定 (NTT DOCOMO)」→「アクセスポイント名」→「IIJmio」の右端「>」マークを選択する ~~(※ここはWi-FiをONにしていると次に進まない?ことに注意)~~。 2. 現れる「アクセスポイントの編集」画面で、次の2つの項目の設定を変更したあと、「その他」→「保存」を選択する。 - MVNOの種類: \[なし\] → \[SPN\] に変更する - MVNO値: \[NTT DOCOMO\] を入力・または既に \[NTT DOCOMO\] であることを確認 3. 念の為、4G/LTE接続を、機内モードのON→OFFなどでやり直したあと、テザリングを試す 以上、端末的にレアな環境での情報かもしれませんが、同様な状況でお困りの方は試してみてください。 --- ### 【読んだ本】 貧乏人の経済学――もういちど貧困問題を根っこから考える - 2020-02-28 URL: https://remoteroom.jp/medialog/2020-02-28_book-b01h0835mo/ 人間の経済的行動の根拠や貧困の要因について、現在の社会では、たとえば二項対立のような単純な構図を用いて、これらが安易に説明されがちという問題がみられる。本書は、それらを理解するための調査手法として、「ランダム化比較試験」が有効であることを示した。たいへんな準備や時間を要すると思われるが、比較実験の場を作り、実際にデータを取って検証することで、現象の要因を推定し、科学で言う“もっとも確からしい”結論を得ている。 また、貧困のある国の政治の大枠が仮にダメでも、制度設計でのうまい工夫があれば、問題の状況は末端から改善できてそれが政治を変えうる、という事例も登場する。 本書を、私は2020年の年始から2回読んだのだが、その途中から、世界の情勢は新型コロナウイルス (COVID-19) の感染拡大によって、急に大きく変わってきた。今感じているのは、人類が未知の感染病に立ち向かう取り組みは、人々が貧困から脱出しようとする取り組みに、似ているということ。リソース不足で時間のバッファもない状態のまま、襲ってくる大波に立ち向かうしかない点が同じに思える。 これから、感染病拡大抑制や経済活動維持の観点における、社会的な行動の変容を促す施策が、世界中の国や地域で放たれていく。この現実は、ある種の比較試験の様相になるかもしれない。そして、それらの施策の効果を維持し、高めるためには、行動経済学がもたらす知見を取り入れるべきだろうと気付かされる意味でも、本書は示唆的だと思う。 --- ### 【観た映画】 フォードvsフェラーリ - 2020-02-09 URL: https://remoteroom.jp/medialog/2020-02-09_movie-b0851z5j6q/ 鑑賞直後の感想として、Twitterに、「咆哮と振動が好きなかた、貫くことに惹かれるかたへ。」と書いた。咆哮という言葉は、車 (マシン) のエンジンなどが、そのエンジン回転数の上下に伴って奏でる音の全てを指しているつもり。 この映画の中にいくつかあった、思わせぶりな運びで観客を楽しませるシーンが好きだ。迫真のチェイスを熱く再現し、また、現実には起こりうる容赦ない辛さの描き方が、しっとりと静かであるところも好みだ。 今回とても久しぶりに映画館へ出向いた日は、全然気づかなかったのだが、アカデミー賞の発表前日であった。第92回アカデミー賞「音響編集賞」の受賞、おめでとうございます。 --- ### Xiaomi「Miスマートバンド4」で健康管理はじめ - 2020-01-23 URL: https://remoteroom.jp/diary/2020-01-23/ ウェアラブルデバイスやスマートウォッチと呼ばれる類のガジェットとして、Xiaomiの『[Miスマートバンド4 / Mi Band 4](https://www.mi.com/jp/mi-smart-band-4/)』を2019年12月末から使い始めている。購入価格は4,000円弱だ。その簡単なレビューを書きました。 #### 私の腕時計感 - 普段: 仕事の日はおおよそ腕時計をする。慣れない場所でコンパスが役に立つこともあり、太陽電池駆動のPROTREKを長く愛用中 - 以前使っていたウェアラブルデバイス: [Sony Ericsson LiveView MN800](https://www.sonymobile.co.jp/company/press/20110617_mn800.html) → [Sony SmartWatch 3 (SWR50)](https://www.sony.jp/sp-acc/products/SWR50/) LiveViewについては、昔過ぎてもうあまり印象を覚えていない。SmartWatch 3は遊び甲斐のあるものだったが、充電を一日二日怠ると電池がカラになっていた。そのため、世話する必要があるガジェットが他にも多い生活の中で、次第に使わなくなってしまった。 #### Mi Band 4への期待と実際 私自身の加齢に伴い、Mi Band 4には、腕に付ける情報端末というよりは「アクティビティトラッカー (活動量計)」としての機能を第一に期待した。すなわち、毎日の睡眠時間や心拍数を計測してくれる機能。公称で「電池が20日もつ」というスタミナ性能にも期待。ここまで長くないとしても、フル充電が一週間に一度で済む程度なら十分だろう。なお、スマホをほぼ手放さない暮らしをしている今、スマホ本体と重複するような機能 (例: SmartWatch 3にあったBluetooth音楽再生機能) は、ウェアラブルデバイスには不要と割り切る。 そして実際にMi Band 4を約3週間使ってきて、次のように感じている。 ##### 長所 - 電池消費が「5%/day」程度と穏やかで素晴らしい (座りすぎ通知: ON, 手首を持ち上げて情報を表示: OFF, 心拍数検出: 自動心拍数検出と睡眠アシスタント という、必ずしも節電指向ではない設定) - 軽くて、腕に付けていることが気にならない - 歩数や睡眠時間 (深い眠り・浅い眠り)、一日中の心拍数が自動計測され、スマホアプリ『[Mi Fit](https://play.google.com/store/apps/details?id=com.xiaomi.hm.health&hl=ja)』上で可視化されるのが楽しい - このため、毎朝かかさず体組成計に乗り、アプリに体重も手入力して同時記録させることが習慣化した! ##### 短所 - 充電時には本体とベルト部分を外さなくてはならないが、その際に本体周辺のベルトをぐにゃっと変形させる必要があり、ベルトが傷んだりしないかな…… - ただし、GearBestやメルカリで[検索](https://jp.gearbest.com/sale/mi-band-4/?priceRange=1)するとわかるように、Mi Band 4の交換用バンドは安くて多種類出回っているので、交換は気軽にできそう #### 現時点の結論 私は日常的にスポーツをするたちではなくて、健康管理に関しては一日8,000歩の歩行を目標とする程度だ。この軽いモチベーションを、出来が良い「アクティビティトラッカー」は後押ししてくれて、日常生活における健康管理の具現化・習慣化に有用であることが、実際に『[Miスマートバンド4 / Mi Band 4](https://www.mi.com/jp/mi-smart-band-4/)』を使ってよくわかった。 無理して頑張らない状態で、続けられる気がする。そしてもう一つ買って、家族に勧めようと考えている。体内年齢を算出してくれる体組成計と併用すると、健康管理の数値目標をたとえば「体内年齢 = 実年齢 - N歳」と定めてそれをキープするよう、生活習慣を見直すことにも繋げられる。 --- ### 【読んだ本】 三つ編み - 2020-01-09 URL: https://remoteroom.jp/medialog/2020-01-09_book-b07r77mrbh/ 本書のタイトルの前では月並みとなってしまう表現だけれども、3つの時の流れが、それぞれの情緒性豊かに編み込まれてついにひと束となる。優美さに富む、現代の物語だ。 私が思うに、3つの流れの主人公は誰もが、束縛というある種のトンネルを抜けなくちゃならなくて、結果、主人公は、未来をコントロールする気迫を持って未来に向かっていく。読了時の余韻としては心が満充電されるかのような、新年一冊目の読書にふさわしいものだった。 また、末尾の解説で気付かされたこととして、本書は全体的に、それぞれの社会に存在するジェンダーギャップを描いてもいる。それを文字通りに“ギャップ”の存在と捉え、無くすべきものと考えるか、それは文化的に当たり前であって不変的だと思うのか。きっと、後者の認識を持って本書を読み通すことは、相当に難しいだろう。 --- ### 【読んだ本】 欺す衆生 - 2019-12-28 URL: https://remoteroom.jp/medialog/2019-12-28_book-b07zr24mrj/ 福岡県弁護士会サイトの[弁護士会の読書](https://www.fben.jp/bookcolumn/)というコラムを、なにかのきっかけで、以前からチェックしている。そこで紹介されていた本書「だます しゅじょう」は、詐欺を様々に詰め合わせて展開していく物語であった。 人を騙しての金稼ぎに関して、ある一線を引いて身を立てていた主人公が、脱出困難なスパイラルへ堕ちていく様子は、息苦しくてこちらの気分が塞ぐほど。だが、「その一線の意味をどう感じるか」とか、「いま私は『堕ちていく』と書いたが、実際にdownなのかそれは逆にupなのか」と考え始めると、絶対の答えは一つではなさそう、というのが今の私の答えになる。 多少大げさに言えば、社会での生存本能と倫理観の、交線を、人生の中でどういう形にすることを自身の善とするかの、複雑さを垣間見せている物語だ。各種の詐欺のメカニズムが把握できる点や、実世界の時事ネタを取り込んでいる面白さも良かった。 --- ### 【読んだ本】 火星の人 - 2019-12-24 URL: https://remoteroom.jp/medialog/2019-12-24_book-b00o1vjzlo/ 視覚的なイメージを抱かせる表現が多いと思った。読んでいるうちにどうしても絵が、すなわち映画化されたものが観たくなるような文体である。ちなみに私は、本書を原作としているSF映画『オデッセイ』はまだ観ていない。 生活に使う道具類の原理や仕組みを、と言っても、この物語での主人公の生活の場は、たった独りぼっちの火星表面なのであるが、それらをまず漏れなく完璧に把握していること。さらに、縦横無尽にアイデアを出して道具を組み合わせ使い尽くすこと。本番前には動作テストを怠らないこと。これらの行いを、悲観を持たず真面目に進めていくことで活路が拓く様が私には印象深い、一気に読めるエンターテインメントだ。 --- ### 新年を迎えるにあたり、キーボードに2020年カレンダーを備える - 2019-12-15 URL: https://remoteroom.jp/diary/2019-12-15/ 2019年終盤の追い込みが始まりそうな今日このごろ。「[FILCO、1年分のカレンダーが刻印されたキーキャップセット - PC Watch](https://pc.watch.impress.co.jp/docs/news/1221231.html)」という記事にて、キーボードのキーをカレンダー刻印済みのものに交換できる製品を知り、この情報凝縮感がとてつもなく欲しくなった。 [ダイヤテックのオンラインショップ](https://www.diatec.co.jp/products/list.php?s%5B%5D=100:1002:10009)でポチっと購入。届いたこの「FILCO Calendar Keycap Set 2020」を、手元のキーボードのF1~F12キーとしてさっそく取り付けたので、写真で紹介です。キーキャップ (キートップ) を取り外すのは付属の工具を使えば意外に簡単で、その動画も撮ってみました。 正直、何ヶ月か先の日付や曜日を確認することは卓上カレンダーでもできますが、一風変わったしゃれた感があって、キーキャップ上のカレンダーも良いのではないでしょうか…… (^^;;。 #### 写真と動画 #### 参考リンク FILCO Calendar Keycap Set 2020として、「日本の祝日入り」と「祝日表記なし」の2タイプが選択できます。 今回の交換を行ったキーボードは[FILCO FKBN87M/EB](https://www.diatec.co.jp/products/det.php?prod_c=569)で販売終了製品なので、後継の[FKBN87M/EB2](https://www.diatec.co.jp/products/det.php?prod_c=763)へリンクしておきます。 --- ### 【読んだ本】 リーダーが育つ変革プロジェクトの教科書 - 2019-12-09 URL: https://remoteroom.jp/medialog/2019-12-09_book-b07l3j8vhb/ 変革が要求されるプロジェクトを成功に近づけるためのリーダーシップとは、どのような行動様式であるか、そして、どのような状況で育つものなのか、ファシリテーションのプロが、プロの気概を込めて解説している。教科書という名前に忠実だと感じさせる論理的な内容でありながら、泥臭さと、生々しい温度も伝わってくる。 おそらくそれが、変革プロジェクトの実際だからであろう。“そもそも論”に立ち返ることを厭わず、視点は複眼的に、メンバーの育成も織り込む。もし自分がプロジェクトを担うようなことがあれば、本書を教科書としてまた開かねばなるまい。 ちなみに、著者は焼き鳥屋が好きなのか? 文章表現に焼き鳥屋が幾度も登場するのは、個人的になんだかおもしろかったところ。 そして本書をじっくり堪能したあと、同じ著者による、2017年07月に読んだ書籍『会社のITはエンジニアに任せるな!』を読み返している。この『会社のITはエンジニアに任せるな!』の内容を、競争優位性を得るために会社のITをプラント化するプロジェクトで、いわば『リーダーが育つ変革プロジェクトの教科書』で言う具体例の一つだと捉えたならば、以前読んだ時よりも一層、内容を理解しやすく思える。 - [【読んだ本】 会社のITはエンジニアに任せるな!]() [2017/07/07] --- ### SONY WI-1000Xへの音声入力に使える、安価なmicroUSB変換アダプタ - 2019-11-22 URL: https://remoteroom.jp/diary/2019-11-22/ #### 特殊USB接続ケーブルを紛失 2018年2月に購入したネックバンド型イヤホン[SONY WI-1000X](http://www.sony.jp/headphone/products/WI-1000X/)は、気軽に良い音を持ち歩けるノイキャンワイヤレスであり、通勤時に大活用中。 - [3個目のノイズキャンセリング・イヤフォン、SONY WI-1000Xの所感 \[2018-02-14\]]() しかし私は先日、このイヤホン専用のキャリングポーチと、その中に入れていた専用USBケーブルをどこかで紛失してしまった。ポーチは単なる袋なので代わりはいくらでもあるが、USBケーブルのほうは、アナログの音声を、イヤホンのmicroUSB形状の端子へ入力する少し特殊な接続ケーブル (3.5mm 3極ミニプラグ→microUSB) であり、メーカ純正品を取り寄せるしかないのかな……と悩んでいた。 #### メジャーな品で代用できるか ネット検索してみると、流れる信号が逆向きである、音声出力が得られるmicroUSB端子を、携帯電話やスマホの中で備えている機種があるという。ならばいっちょ試してみようか。「microUSB音声出力変換アダプタ」としてメジャーな製品のひとつらしい[藤本電業 EH-M01BK](http://www.fscweb.co.jp/hpdata/page2-14_microhe2.html)を仕入れて、イヤホンSONY WI-1000Xに接続したところ……。 やりました! たとえばMacBook Airの3.5mmステレオミニプラグの音声出力を、イヤホンWI-1000Xに入力して聴くことができるようになりました。数百円という安価な出費で、しっかり問題解決できて嬉しい。以上、お気に入りイヤホンの使いこなし報告です。 --- ### 【読んだ本】 ハンターキラー 潜航せよ (上)(下) - 2019-11-13 URL: https://remoteroom.jp/medialog/2019-11-13_book-b07pdxlkxm-b07pdyvlfq/ 本作の構成に関して。各章には、タイトルとして連番が付けられているだけであり、硬派な印象を感じた。また、ひとつの章の中でも描かれる状況・場所が切り替わることが多く、読者は物語を想像しながら追従するのに脳内カロリーを多めに使う気がする (Kindle端末の場合、冒頭の登場人物の一覧ページを写真に撮っておくのは追従に有効だ)。そのストレスにより、多地点で危機的状況が同時進行している切迫感が、読者に強く意識付けられる効果があるように思えた。 表紙のイラストで一目瞭然であるが、本作には潜水艦部隊が登場し、その船内や戦闘中の描写がえらく細かいのは、著者の一人に原子力潜水艦艦長の経験があるからなのだろう。排他的な価値観を持つ一派が、他が抗えないほどの強大な攻撃力をもってクーデターを企んだら……という世界を、大作映画のように楽しんだ。 --- ### 【読んだ本】 フェルマーの最終定理 - 2019-10-28 URL: https://remoteroom.jp/medialog/2019-10-28_book-b01n6jbyjx/ 数百年解かれずに存在するような数学の難題に、知力で挑む、とはどのような生き様であるか。本書は、古代から現代に至るまでの数々の数学者が切り開いてきた論理の道や精神的・肉体的な苦難を描いており、そこに冷静と情熱が同居しているかのよう。こちらにも探究心が飛び火して気持ちが高まる。十代の頃、数学の問題を、一捻りして解いてみるのが好きだったことを思い出した。 また、言い方を変えれば、数学には人を魅惑する大きな力があることを、本書は示している。Wikipediaを引いてみると、数学は、「形式科学」という、記号システムによって抽象的な構造が記述される科学に分類されるとあった。 この「抽象」という記述から、飛躍して感じたこととして。いまの私の日々は、具体的なものと抽象的なもの、頭の中を占めている割合は (生活に追われて?) 前者のほうが大部分かもしれない。しかし、後者について思考をしようとする意識も、オーバーに言えば自分の内的世界に肉を付けてきただろうし、これからもそうである気がするのだ。 --- ### 【読んだ本】 三体 - 2019-10-17 URL: https://remoteroom.jp/medialog/2019-10-17_book-b07ts9xtsd/ 物理学の世界で、物の大きさの値を対数表現 (log10) することが多いが、いわゆるそのスケールを自在に操っている、壮大なストーリー。また、登場人物に関する心理描写も多彩で読者を置き去りにするようなことはない。 三部作とのことなので、続き (の日本語訳) が出るのを楽しみにするしかないです。 P.S. 物語の第一部である本書は、ストーリーの上でも、科学の発展における、基礎研究の重要さを認識させてくれる。考えてみるとこの認識は、SFという文学が社会で享受されるために必要な条件でもあるなあ……。←日本国の現状を思いつつ --- ### 【読んだ本】 色彩を持たない多崎つくると、彼の巡礼の年 - 2019-10-09 URL: https://remoteroom.jp/medialog/2019-10-07_book-b017cndcha/ 描かれている出来事は実は普遍的なもので、読者自身の過去に照らしたら、必ず何らかの共通項が見い出せそう。そう感じながら読んだ。 色彩と言ってしまうと、なんらかの物理量のような、視覚的・空間的で、かつ一瞬のイメージに囚われるかもしれないが、人に纏わる色彩は、長い時間経過が生み出す触感みたいなものもあるだろう。この物語をどう表現していいのか正直わからないのだが、時間と省察は、テーマにあるのではないかと想像する。 --- ### 【読んだ本】 サブスクリプション――「顧客の成功」が収益を生む新時代のビジネスモデル - 2019-09-17 URL: https://remoteroom.jp/medialog/2019-09-17_book-b07hy1tnd9/ 読み進めていくにつれ分かったのは、本書の視点は主としてビジネスを行う側にあるということ。私は、サブスクリプションによる、一般消費者の生活の変革をどう描くのだろう?と、本書に当初なぜか期待してしまっていたが、これは私の全くの勘違いであった。 この勘違いをさっそく払拭し、いわば起業家や経営者のつもりで、彼らが持つであろう意識を想像しながらだと、本書の示唆は大変有意義なものに思える。 現在の時流とともに伸びていくビジネスは、物ではなくサービスを提供する形態になる。それには、顧客第一主義の姿勢が不可欠。また、サブスクリプションモデルを採用すれば双方に可能なこととして、利用者は好みのサービスプランを適宜選択できるし、提供側はサービス内容を改良していけるし、サービスの値付けも状況に応じて動的に調整できる。さらに、サブスクリプションモデルの特性として売上予想の確度の高さがあり、なるほど、と膝を打つ思いだった。 事例紹介で記憶に残ったものは、ギターで有名なFenderが、ギターの練習に役立つスマホアプリをリリースし、そのアプリから取得できるデータを活用しながら、ユーザとの長いスパンでの関係性を築こうとしているというもの。この一例から引き出せる、サブスクリプションモデルに欠かせない要素は多いように思う。 --- ### 【読んだ本】 戦争の大問題―それでも戦争を選ぶのか。 - 2019-08-19 URL: https://remoteroom.jp/medialog/2019-08-19_book-b073cttpdz/ 時代の世論は揺らいで社会の空気を変え、人々が「常識はこうだ」「真実はこうだ」「だからこうすべきだ」と判断する際の相対的な基準が、絶対的には異常な方へ、急激にズレることがある。この急激なズレは、メディアや意見者や為政者が、時代を煽って作り出しているものかもしれない。優越を得るために、支持を稼ぐために。 本書は、2017年の出版だが、戦後日本全般に対しての普遍性のある主張だと捉えることができ、ちょうどこの2019年8月現在の国際情勢や日本国内の、どこか不穏な空気に対しても、力強い問題提起をしていると思う。本書から感じた説得力を極めて短い言葉にすると、戦争という選択をしないために大切なことは、戦争の**酸鼻を極めた**部分 (←本書に登場する言葉) と全体を複眼的視野で知り、激情に依るのではなく冷静に国家的経営判断をすること、となろう。 戦争という選択の着火点になりうると、本書のみならず歴史が語っている、“大きい主語”を伴って肯定されがちな嫌○や反○の高まりについて。調べてみたところ、内閣府が公開している [世論調査・外交に関する世論調査一覧](https://survey.gov-online.go.jp/index-gai.html) (概略版のPDFファイルが閲覧しやすい) では、アメリカ・ロシア・中国・韓国などの他国に対する、日本国民 (母集団の標本数: 3,000人) が抱く親近感の年次変化を見ることができる。確かに、ここ10~20年の間に、被調査者が「親しみを感じない」割合が目立って増加中の近隣諸国がある。 これを、「うねりが深刻化している・増加傾向を逆転させなければならない事態」と捉えるか、「もっと叩こう・商機にしよう」と好戦的に捉えるか。どちらが、長く包括的な幸せに近づく状況認識だろうか? さらに、他国に対する親近感に関して、母集団へ影響を及ぼしているのは、おそらく殆ど、メディアや意見者や為政者が発した情報であろう。母集団の個人の立場としては、自分の考えや認識がどこから得た情報を解釈したものか、自身が頼る判断基準の相対的な偏りは如何ほどか、といったメタ思考的な留意が常に必要だと考える。 以上、勢いが先行して、読書感想から逸脱する内容になったかもしれない。本書のような、戦争に至るメカニズムと安全保障の真相を分析している書物を、いま、一度読むべきに思う。 --- ### 【読んだ本】 いま、絶望している君たちへ パラアスリートで起業家。2枚の名刺で働く - 2019-08-02 URL: https://remoteroom.jp/medialog/2019-08-02_book-b07syz1649/ 障害者に特化した人材紹介会社などを立ち上げている方の、半生記。著者は、大学生時代に緑内障による視覚障害者となった。その後は中学高校時代に部活動でやっていた柔道に再び打ち込み、パラアスリートとして活躍もしている。 とても正直かつ赤裸々に描かれている、片目ずつ「見えなくなった」ことで陥る絶望は、もし私が著者の立場なら、それがどれだけ自分を萎縮させる程の深さなのか想像できなかった。そこから著者は、困難に対して自分をリブートする。障害者の仕事のあり方についての、著者自身の就職活動と仲間から得た知見をもって会社を興し、道着の帯を締め、拓いた道を進んでいる。 視覚障害がある方の、たとえば、スーツの上下や靴下の左右のペアの揃え方、図書館の本の読み方、といった日常的HOW-TOを知ることもできた。後者の図書館の本については、書物のバリアフリーを実現する技術の存在自体はやんわりと把握しているが、「何をどこで借りるのか」という実際を私は知らず。[サピエ](https://www.sapie.or.jp/)というサイトで書物の音声データをダウンロードできるそうだ。 また著者は、2020年開催の東京パラリンピックを、障害者がアスリートという文脈においてだけでなく、多様な社会の一員として大きく取り上げられる機会になると捉えている。これは、先日の第25回参議院議員通常選挙で、2名の重度身体障害の方が国会議員に当選したことで私が感じた点と同じで、なるほどそうだと思う。 本書を読んでからふと気づいたのは、私の勤務場所の敷地にある点字ブロックの色が、敷地の路面のレンガや石材としっかり同系色にしてあること。いわゆる見え方がステルスな点字ブロックだ。本書で述べられている、弱視の人にとって見えにくい点字ブロックがこんなに身近にあるとは……。“正確に知って改める”ことで障害を減らせる、誤解が解ける、その前段階の事柄は、世の中にまだまだあるのだと考えさせられる。 --- ### タミヤデビュー・マブチデビューで思うこと - 2019-07-29 URL: https://remoteroom.jp/diary/2019-07-29/ うちの子を「タミヤデビュー・マブチデビュー」させたのでその記録です。子どもは現在5歳3ヶ月。 #### 組み立てたキット [タミヤ](https://www.tamiya.com/japan/)とは、言わずとしれた模型メーカーで、マブチとは、工作用モーターを供給している[マブチモーター](https://www.mabuchi-motor.co.jp/)のことだ。今回組み立てたキットは、大丸神戸店で先日開催されていた『[家族みんなのロボットゆうえんち 〜楽しくて便利なテックライフを体験しよう〜](https://www.daimaru.co.jp/kobe/robotyuenchi/)』に出向いた際に購入した、[タミヤ ロボクラフトシリーズ No.17 ぷるぷる・テントウムシ(振動移動タイプ)](https://tamiyashop.jp/shop/g/g71117/)である。 このキットは、樹脂や針金のパーツ、モーター (FA130) と単4の電池ボックス、サイズ違いのビス10本ほどから成り立っている。精密ドライバーも1本付属していて、作り始めてから「予想以上に緻密な作業が必要そうだぞ?」と感じて確認してみたら、対象年齢が10歳以上のキットであった。キットの可愛い外観にすっかり私は騙されたのかもしれない (←ってか難易度の確認を全く忘れていたのがいけない)。しかしながら、ビスを挿すような比較的簡単な作業を子どもに任せ、ねじ回しはこちら主導でコツを伝えたりしながらなんとか一緒に作り上げた。制作には1時間少々かかったかもしれない。 #### 好奇心の泉 テントウムシのお尻に取り付けたスイッチをONにすると、モーターに直結した偏心ホイールが高速回転することにより、テントウムシ全体がぷるぷる振動して、針金の足と床面の作用によりテントウムシが前進していく。左右のバランスでどちらかに旋回し続けるようにもできる。やたら動作音が激しいおもちゃであるが、床面を蹴る作用・反作用がわかりやすい車輪タイプと違って、足となる針金と床面がどのように作用して動いているのかを真剣に考えると、物理学的に奥深いおもちゃでもある。 子どもは、完成したテントウムシを様々な平面に乗せて、どんな平面だとテントウムシがよく動くのか、自分なりに探ってみていた。また、「テントウムシのお腹のところのモーターは、電池から電気をもらって回転しているんだよ」と誘導したらモーター自体にも興味を持ったらしく、家庭や都市の中でどこにモーターが使われているかも教えてみた。 とりあえず私としては、ここに書くまでもないが、子どもには好奇心を絶やさず発揮し続けてくれたらね……と願う次第。今回のような小さなきっかけを、これからもたくさん、積み重ねていけるだろうか。 --- ### autosshをサービス化してSSH接続を強化 - 2019-07-18 URL: https://remoteroom.jp/diary/2019-07-18/ #### autosshがなぜかいなくなる SSHのセッションを極力持続してくれるツールとして「autossh」がある。 - [Ubuntu Manpage: autossh — monitor and restart ssh sessions](http://manpages.ubuntu.com/manpages/bionic/en/man1/autossh.1.html) このautosshを自宅のUbuntuサーバで利用中、いつのまにかSSHセッションのプロセスがいなくなっていることがあって (他のプロセスが上限近くまでメモリ消費する時間帯が毎日あるせいかもしれない)、時折困っていた。autosshのオプションを変更したりして改善を試みたものの、埒が明かない。 状況の改善には、対処療法的ではあるが「autosshのプロセス監視が必要かな?」と考えていたところ、autosshをsystemdでサービス化する方法があることを知った。これだと、何らかの原因でもしautosshのサービスが落ちても、サービス再起動の処理をsystemdに任せることができるらしい。 #### systemdでサービス化する方法 autosshのサービス化をsystemdでどのように行えばいいか、具体的な方法をウェブ検索してみると、断片的な情報も多いが、次のリンクにあった一連の作業手順が良くまとまっていて、そのまま過不足無く使えたので、ご紹介します。 - [Systemd service for autossh · GitHub](https://gist.github.com/ttimasdf/ef739670ac5d627981c5695adf4c8f98) どのような手順なのか、簡単に解説です。 1. ファイル`/etc/default/autossh@example`と`/etc/systemd/system/autossh@.service`の雛形をcurlで取得する 2. サービス化するautosshの実行ユーザとして「tunnel」を用意し、初回のSSH公開鍵認証を済ませる 3. `/etc/default/autossh@example`を、ファイル名の「example」部分を任意の文字列に、たとえば「host1」に変更して複製する (このファイル名がサービスの識別子になる) 4. `/etc/default/autossh@host1`内の次の2行を、実施したいSSHポートフォワーディングの内容に合わせて編集する ``` TARGET_HOST=remote.example.com FORWARDS=-L 7474:127.0.0.1:7474 ``` 5. `systemctl start autossh@host1.service`でサービスを起動し、正常に起動するかどうかログを確認する 6. サービスが正常に起動したなら、`systemctl enable autossh@host1.service`で自動起動を設定しておくとよし #### サービスの状態確認 サービスの状態確認は、`systemctl status autossh@host1.service`で行うことができる。下記はその一例。 ``` $ systemctl status autossh@host1.service * autossh@host1.service - Keeps an ssh tunnel to host1 open Loaded: loaded (/etc/systemd/system/autossh@.service; indirect; vendor preset: enabled) Active: active (running) since Wed 2019-07-17 19:54:26 JST; 1 day 3h ago Main PID: 1476 (autossh) Tasks: 2 (limit: 4915) CGroup: /system.slice/system-autossh.slice/autossh@host1.service |-1476 /usr/lib/autossh/autossh -NT -o ExitOnForwardFailure=yes -o ServerAliveInterval=10...(省略) `-1560 /usr/bin/ssh -NT -o ExitOnForwardFailure=yes -o ServerAliveInterval=10 -o ServerAl...(省略) Jul 17 19:54:26 host2 systemd[1]: Started Keeps an ssh tunnel to host1 open. Jul 17 19:54:27 host2 autossh[1476]: port set to 0, monitoring disabled Jul 17 19:54:27 host2 autossh[1476]: starting ssh (count 1) Jul 17 19:54:27 host2 autossh[1476]: ssh child pid is 1560 ``` #### 感想 今回のautosshサービスを24時間以上動かしているが、接続は切れておらずいまのところ問題なし。 実は私、今回はじめて、ユーザプロセスのsystemdでのサービス化をやってみたのだった。これは楽だし実用的だなぁ、と巨人の肩の上に乗る威力を思い知る。良いテンプレートを参考にするとほぼ難しくないし、他のプロセスのサービス化にも挑戦してみる気になっている。 --- ### 【読んだ本】 「社会を変える」を仕事にする――社会起業家という生き方 - 2019-07-12 URL: https://remoteroom.jp/medialog/2019-07-12_book-b00ve1p84c/ 縦書きの所々の言葉がフォント大きめ状態という、どこか懐かしさを覚える体裁をしていた (読んだのはKindle版)。本書の全体、そしてその大きめな言葉の部分には特に、著者の本音と真面目さがブレンドされた語りとなっていて、私の場合はそれとうまく波長が合ったのか、先を知りたい気持ちでどんどん読み進んだ。 著者は、病児保育を事業の一つにしている「[フローレンス](https://florence.or.jp/)」というNPOを興して経営している方だ。小さな子どもの具合が、突然悪くなってしまうのはまったく自然なことだが、そうすると保護者は安定的な仕事ができない。どうしたら良いのか。 現代の日本社会に抱いたひとつの疑問をたまごのように温め続け、孵化させるためにさまざまな試行錯誤をし、行政機関と折衝し、問題解決が可能な事業体を作り上げていくまでの様を、知ることができた。ちなみに本書は2007年の出版。NPOを対象とする助成金の弊害について言及もあり、できるだけ自立的な経営で事業を継続していく形を、著者が最重要視していたことが端々から伝わってくる。 --- ### 【読んだ本】 ハロー・ワールド - 2019-07-08 URL: https://remoteroom.jp/medialog/2019-07-08_book-b08xq7lwkd/ 読む前の、軽く流して読めるものという予想と異なっていたのは、読者の側の、ITを理解するスキル、そして、ITを現実世界に適用する際のモラルをどう考えるかといった想像力を、試されているかのようなストーリーであること。こういう予想外は、挑戦的で楽しい。そこで、どうせなら主人公の心情にしっかり浸りながら楽しむべく、本書を二度読んだ。 本書は5つの物語から成る。主人公にはソフトウェア開発の腕があって、当初は「何でも屋」を自称しているエンジニアだったが、次第に自覚的に、社会的な問題解決のためにその能力を発揮していきながら物語は進行する。各物語に、私なりのキーワードを添えると次のようになる。 - 「ハロー・ワールド」: アプリ配信, スパイウェア, 秘匿と正義 - 「行き先は特異点」: GPS, 自律機械の生命感 - 「五色革命」: ライブ配信, 革命 - 「巨象の肩に乗って」: 検閲, 暗号化メッセージングと自由 - 「めぐみの雨が降る」: 仮想通貨, スマートコントラクト, 経済施策 どの物語も、技術的にはほぼ現実味があるんじゃないかな……と思わせる。そしてなぜかSF的な近未来というより、まさに「今」の、臨場感に満ちている。 --- ### ウインカーバルブのLED化、予想よりはるかに眩しくて保留→やっぱり使用 - 2019-06-18 URL: https://remoteroom.jp/diary/2019-06-18/ #### 古い車の灯りもLEDに 古い車でも、交換可能な電装系や電球は、新しい型に変えておきたいと思う。特に車外の灯りの類は点灯の反応速度が良いほうが、被視認性の面から安全であろうし。という考えに基づき、うちの車のブレーキランプ・テールランプはすでにLED化してある。今回は、いわゆるウインカー、[方向指示器](https://ja.wikipedia.org/wiki/%E6%96%B9%E5%90%91%E6%8C%87%E7%A4%BA%E5%99%A8)のバルブのLED化を試みた。 ウインカーのバルブ (球) がもともと白熱電球である車の場合、バルブをLEDに替えただけだと、その電気抵抗値の違いによって「ハイフラ」が発生してしまう (詳細は [LEDのハイフラとは \| 大塚商会](https://www.otsuka-shokai.co.jp/products/led/qa/high-flasher.html) を参照)。このハイフラの抑制を、抵抗を内蔵させることによりポン付けのみで行えるLEDバルブが最近出回っていることに気づき、こりゃ交換が簡単でよさげだと、まずは次のものを1セット (2個入り) 購入した。 #### ウインカーバルブ 交換前とLED交換後の比較 夜間の屋内駐車場にて、リアのウインカーのバルブ交換作業中に撮影した動画を、アニメーションGIFに変換して貼ります。 ##### Before: ノーマルバルブ (白熱電球) バルブ交換前、リアの両方ともノーマルな時の点滅状況。灯りが呼吸をしているかのような、幼いときから見慣れてきた輝度の変化がある。 - アニメーションGIF画像: ##### After: 右側のみLEDバルブ 右側のバルブのみ交換した時の点滅状況。輝度がゼロとイチの2値に見えるのは承知の上だが、今回のバルブ、こんなに激しく「爆光」とは予想しておらず。左側のシャッターを極めて広く明るく照らしているし、うちの車には光量多すぎて適合しそうにない!(+_+) - アニメーションGIF画像: #### 結論および教訓 結局、今回購入したウインカー用のLEDバルブを使うのは保留しました。教訓としては、事前にもう少し調べて、私としてはLEDの点滅の切れ味が第一に欲しいわけだから、明るさは逆にLEDとしては控えめに調整されているものを選ぶべきだった。もしくは、ウインカーに関してはLED化にこだわるのをやめるか。 以上、愛車のウインカーのLEDバルブ化を検討する際の、参考情報のひとつになればと思います。 ##### 追記 (現在はLEDバルブ使用中) \[2023-01-09\] > 結局、今回購入したウインカー用のLEDバルブを使うのは保留しました。 2019年6月当時にはこう記載していたが、その数カ月後から、レビューしたウインカー用のLEDバルブをリアに取り付けて使用中です。安全に繋がる視認性を最優先した次第。 --- ### 【読んだ本】 すばらしい新世界 - 2019-06-17 URL: https://remoteroom.jp/medialog/2019-06-17_book-b08q3pz8xs/ 過去の読書記録によると、私がこの物語を最初に読んだのは2001年6月。当時は大学院生で、研究と称してインターネットにどっぷり浸かって泳いでいた頃である。会社勤務をして家族がいる今の状況とは境遇が異なり、体は比較的身軽だったであろう。この物語の感想としては、チベットの電力のない土地に小型風力発電を開発しようとする技術者が出向くという設定に、私は元々再生可能エネルギーが好きだしその普及を願っていることもあり、自身の将来のひとつを重ねるような形で、あこがれた記憶が特に強く残っている。 本書を今回読み直し、全体としてとても先進的に感じた。また、主人公の技術者、林太郎に感情移入する部分が、過去の私とおそらく異なっていることに気づき自分でも驚いた。たとえば彼の、子どもへの想いや教育観、宗教における大局観、異文化の認識と肯定、仕事というか人生で為していくことの意味付け。いずれも、過去から未来への時間軸を伴っている、世代を思う概念だ。 林太郎は旅によりこれらを培った。私は約18年の時間や経験によって、本書から得るものが変わった。そして引き続き変わりなく、インターネットにこのような駄文を書き残しながら、持続可能な新世界を望み、ずっと求めていく懲りない性分を再び自覚している。 --- ### 【読んだ本】 法のデザイン—創造性とイノベーションは法によって加速する - 2019-06-06 URL: https://remoteroom.jp/medialog/2019-06-06_book-b071v8j53d/ 「法により創造性やイノベーションを加速させる」とはどのようなことなのか。本書は、法をデザインする、すなわちリーガルデザインのマインドが、これを可能とする道筋を示している。このマインドは、短絡的に不変の枠組みを定めるような方向性とは違う。本書の一部を以下に引用する。 > 大切なことは、ルールは時代とともに変わっていく/変わっていくべきという認識と、ルールを「超えて」いくというマインドである。ルールを超えていくことは、ルールを破ることを意味しない。ルールがどうあるべきかということを主体的に考えて、ルールに関わり続けていくことを意味する。ルールを最大限自分寄りに活かすことは知性の証明に他ならない。 また、コモンズについて《リソースの自由利用性》と定義し、この領域を《創造性、イノベーションの源泉となる「余白」》だと捉えている。音楽などの芸術的な分野や、不動産、家族、政治といった社会的な分野における、法とコモンズの関わりの現状と、展望を示していく。紹介されているいわばエッジの効いたビジネスやアートの実例に、うならされる。 個人的にはコモンズと聞いたならば、デジタル情報の世界で目にする[Creative Commons](https://creativecommons.jp/)を連想する程度の、これまで使い慣れない言葉でしかなかった。実際のところコモンズは、有形な物でいうとたとえば公道や街の公園や公海なども含まれる、幅広い概念であるのだ。この考え方が新鮮で、自分に、現実の社会を新しく考え直すためのメタ視点が芽生えたような気がする。 本書の強いメッセージとして、法は、人々の社会的行動が潤滑に回るように、本来あるものだということ。さらに、法はデザインをするものということ (日々交わす契約の、法に上書きできる範囲での契約のデザインも含む。BtoBな場面で契約内容を練ることは経験しているけど、BtoCやたとえば個人住居の賃貸借契約でもデザインはあり得る)。私の中のルールが変えられたかのような、刺激的な余韻が残っている。 --- ### 【読んだ本】 キッド - 2019-05-27 URL: https://remoteroom.jp/medialog/2019-05-27_book-b096k6rhjz/ 緊張の糸が解けない日中関係、戦闘行為と憲法での定義の狭間にあって存在揺らぐ自衛隊。といった今時な日本の情勢を題材として、うまく練り込んであるアクション小説であったと思う。無数の監視カメラと連携する「顔認識システム」と、ビックデータ解析が、日本の警察組織により秘密裏に運用されている形で登場し、ITの眼に包囲される社会が現実的に描画されている。一気に読んで楽しめた。 そして昨今、このような社会にはもう突入済みであると捉えてよいかと思う。Google PhotosやFacebookに触れる日常でわかるように、写真から個人識別を行うシステムの能力は進化を止めない。実世界での個人追跡システムは、その能力に加え、顔や通行・商取引データの“照合・名寄せ”が多地点間で行われた場合に完成する。 いまは明るい未来の為に、個人追跡システムの適切な運用ポリシーについて議論がされる時代であるが、本作品の設定のように秘密裏の存在はいわば世の常。個人的には、自己の一部として、何物とも連携しない陰のわたしを保ち続けたいので、システムを回避するなんらかの防衛術を得ておく必要も感じる。 --- ### 【読んだ本】 銃・病原菌・鉄 (上下巻) - 2019-05-21 URL: https://remoteroom.jp/medialog/2019-05-21_book-b00dnmg8q2-b00dnmg8qc/ 分量が多くて、上下巻を読み通すのに一ヶ月以上かかった。紀元前一万一千年前、世界の各大陸に分散する人類は、みな狩猟採集生活を送っていたという。そこから繁栄していく人類の、現在にいたるまでの各民族の分布は、収穫に向いた植物や家畜化できる動物が生息していたか、そして人口が稠密化しやすい地理的条件であったか、といった大陸毎の環境要因の違いによって生まれている、というのが本書の主張である。 特定の植物を表す単語の言語間の変遷を遡ることで、その植物の原産地を推定する、歴史言語学の手法をはじめて知った。本書を読みながら、古代の人々の集落や耕す農地が移動もしくは拡大していく様を、何千年のスケールで、頭の中にドキュメンタリー映画のような生々しい映像を (勝手に) 浮かべて想像することを楽しんだ。 その映像を、私は通勤途中の車窓でながめる、現代日本の都市風景に重ね合わせもして、次のようなことを考えたのでした。 - これまでは自然を活かして、自然に従って繁栄してきた人類の方向性は、未来にはどれほど変わるのか - 世界最大級の人口を有していて地理的な統治期間が長い、中華人民共和国の人々の繁栄を、本書で言う、大きな民族の一般傾向に沿うものとして捉えられるかどうか (原著は1997年出版であり、現在の中国の経済的発展に関しての記述は特にないので、このような仮説を立てた) --- ### code-serverでブラウザからVSCode Anywhere! - 2019-04-18 URL: https://remoteroom.jp/diary/2019-04-18/ #### VSCodeをChromebookから使える? [Visual Studio Code (VSCode)](https://code.visualstudio.com/) を、私はOS XとLinuxにて愛用している。統合開発環境としてはあまり使い込んでないが。snapが使える環境では、VSCodeをMicrosoft公式版snapで導入する選択肢も最近増えたようだ。 - [Install Visual Studio Code for Linux using the Snap Store \| Snapcraft](https://snapcraft.io/code) 先月、このVSCodeをウェブブラウザ経由で利用できるサーバ版「code-server」がOSSで登場、というニュースを見つけ、 なぬーっ!?と驚いた私は、ChromebookからもVSCode使いたい衝動を抑えきれず、code-serverを既存のVPSにセットアップしてみたのでここに導入手順をメモします。 code-serverの使用感は実際のところ快適だ。このブログ記事をcode-server上で打っているくらい。主な感想として: 1. 「headlessのLinuxデスクトップで通常のVSCodeを動かし、その画面へ[Chrome Remote Desktop](https://support.google.com/chrome/answer/1649523?co=GENIE.Platform%3DDesktop&hl=ja)経由でChromebookからアクセス」という構成を作ったこともある。それと比較すると、code-serverを用いるサーバ・クライアント構成のほうがはるかに反応が良い 2. code-serverの編集対象には、サーバ側での手慣れた手段 (mount) でローカル以外のストレージも容易に設定できるので、自分用のファイル編集の踏み台として、code-serverひとつ立てておくと便利 #### code-server導入手順 今回の導入環境は次の通り。 |項目|内容| |---|----| |VPS環境|1vCPU, メモリ: 1GB, OS: Ubuntu 18.04 LTS| |導入ドメインの例|code.example.com| ##### 0. Coderとcode-serverの関係 まずはサービスとソフトウェアの関係性を確認。オンラインでVSCodeを提供するサービス (SaaS) として「Coder」が存在しており、 - [Coder is an online IDE serving VSCode\.](https://coder.com/) そのOSS版が「code-server」という位置づけになっている。Coderのサイトの「HOST YOURSELF」ボタンは、次のGitHubページにリンクしている。 - [GitHub \- cdr/code\-server: Run VS Code on a remote server\.](https://github.com/cdr/code-server) ##### 1. code-serverをお試し code-serverにはDocker版も用意されているが、今回はサーバリソースが少ない関係でバイナリ版を利用する。[Releases](https://github.com/cdr/code-server/releases)にアクセスして最新の「code-serverN.NNN-vscN.NN.N-linux-x64.tar.gz」をダウンロードし、次のようにして```~/bin/code-server```で実行できるようにする (意図としては、code-serverを別バージョンに差し替えても実行パスを同じにするため)。 ``` cd ~/bin wget https://github.com/cdr/code-server/releases/download/……-linux-x64.tar.gz tar xvzf code-serverN.NNN-vscN.NN.N-linux-x64.tar.gz ln -s ./code-serverN.NNN-vscN.NN.N-linux-x64/code-server . ``` 次に、[Getting Started](https://github.com/cdr/code-server#getting-started)のBinariesにある手順にしたがえば、code-serverを起動させ、 での動作確認ができる。 ###### 参考: code-serverの起動オプション一覧 ``` $ ~/bin/code-server --help Usage: code-server [options] Run VS Code on a remote server. Options: -V, --version output the version number --cert --cert-key -e, --extensions-dir Set the root path for extensions. -d --user-data-dir Specifies the directory that user data is kept in, useful when running as root. --data-dir DEPRECATED: Use '--user-data-dir' instead. Customize where user-data is stored. -h, --host Customize the hostname. (default: "0.0.0.0") -o, --open Open in the browser on startup. -p, --port Port to bind on. (default: 8443) -N, --no-auth Start without requiring authentication. -H, --allow-http Allow http connections. -P, --password Specify a password for authentication. --disable-telemetry Disables ALL telemetry. --install-extension Install an extension by its ID. --bootstrap-fork Used for development. Never set. --extra-args Used for development. Never set. -h, --help output usage information ``` ##### 2. Nginxでリバプロ code-serverへは、ブラウザから暗号化通信でアクセスしたいし、SSL証明書はオレオレではなく認証済みのものにしたい。そのため、(サーバに導入済の) Nginxのリバースプロキシ機能を有効化し、code-server自体はhttpで、Nginxとブラウザの間をhttpsで通信させることにする。 [Nginx Reverse Proxy](https://github.com/cdr/code-server/blob/master/doc/self-hosted/index.md#nginx-reverse-proxy)にある設定ファイルの内容を基本に、次の4要素を加えた、code.example.com用のNginx設定ファイルは以下のようになる。 1. httpアクセスはhttpsへリダイレクトする 1. https://code.example.com へのアクセスをBASIC認証で制限する 1. SSL証明書は、Let's Encrypt発行のワイルドカード版 (*.example.com) を使う 1. /favicon.ico (ファビコン) へのアクセスはcode-serverではなくファイルへ向かわせる (サーバの```/var/www/code.example.com/favicon.ico```には、お好みのアイコンファイルを設置しておく) ``` server { listen 80; server_name code.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name code.example.com; ssl on; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; location = /favicon.ico { root /var/www/code.example.com; } location / { proxy_pass http://localhost:8443; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Accept-Encoding gzip; auth_basic "Restricted"; auth_basic_user_file /etc/nginx/htpasswd_example.com; } } ``` ##### 3. code-serverを本格起動 Nginxのリバースプロキシを有効化した状態で、code-serverを次のように起動する。 ``` $ ~/bin/code-server --allow-http --no-auth /home/USER/project ``` 次に へブラウザでアクセスし、BASIC認証を経て、まさにVSCodeそのものの画面が描画されれば導入完了。ブラウザを全画面表示にすると没入感が高まる。 もし異常があれば、Nginxのログなどを見ながらトラブルシューティングをどうぞ……。 #### 使いこなしの小技 ##### 他のファイルシステムを編集 サーバに他のファイルシステムをmountしておき、そのmountポイントを含むディレクトリを、code-serverの初期ディレクトリに指定することで、code-serverを通じてmount元のファイルを編集することができる。 私が実践しているのは、次のような、[rclone](https://rclone.org/)を用いたDropboxのmount。Dropboxの場合は、[本家のコマンドライン版Dropboxデーモン](https://www.dropbox.com/ja/install-linux)を動かしてもよいだろう。mountについては他の方法 (例: autossh+sshfs) でも問題なく可能だろうし、VSCode Anywhere構想が広がります。 ``` $ rclone --daemon --vfs-cache-mode=writes mount dropbox:/SOMEDIR/ /home/USER/mnt/Dropbox/ $ ~/bin/code-server --allow-http --no-auth /home/USER/mnt/Dropbox & ``` ##### 拡張機能はどうなるの? code-serverで、VSCodeの特徴である拡張機能 (Extensions) をどう扱うかについては、たとえば次の記事が詳しいようだ。 - [リモートサーバー上でvscodeを動かしてブラウザからアクセスする ―code\-serverのススメ \- Qiita](https://qiita.com//canonrock16/items/b043a996fe1175298207) 私の場合は、普段のVSCodeの環境を見ながらcode-serverへ拡張機能を一度手動でインストールすることで同期させ、一応は落ち着いている。 ###### 追記 (2019-04-25): 拡張機能の同期にsshcodeを応用できる 上記のように構築した、恒久的にcode-serverを動かしておきたいサーバに対し、一度、普段のVisual Studio Code (VSCode) を利用している手元のMacやLinuxの環境から、次のsshcodeを実行する。すると、sshcodeの賢い機能により、手元のVSCodeの拡張機能がサーバ側に同期されるようだ。正直、変態過ぎます! (褒) - [GitHub \- cdr/sshcode: Run VS Code on any server over SSH\.](https://github.com/cdr/sshcode) --- ### 「もうすぐ帰る」をゆるく伝える仕掛けの作り方 - 2019-04-16 URL: https://remoteroom.jp/diary/2019-04-16/ #### もうすぐ帰る→ライト点灯の自動化 2019年3月の終わり頃、[Slackで「今から帰る」を伝える夫婦 自動化してストレスが減った話](https://www.excite.co.jp/news/article/E1549453789812/)というウェブ記事がTwitterで話題になっていた。生活の中で複数のクラウドサービスやスマートスピーカーを組み合わせて家族のコミュニケーションに活用している話で、そりゃあ良いツールがあるのだったら、自動化が適したところは自動化して負担減らしていくほうが楽しいですよね。 我が家では、私が勤務先から帰路に就いて自宅のそばに近づいたら、リビングにある小型スポットライトが自動で点灯する仕掛けを作っていて、2018年夏頃から運用している。しかし上記の記事をきっかけに、相方から「どういう仕掛けでやってるか知らない」という声が聞こえてきたので、我が家の仕掛けについてここに記しておこう。 帰宅を伝えるインターフェースとしては、Slack・LINEの通知やGoogle Homeでの発声 (例: [google-home-notifier](https://github.com/noelportugal/google-home-notifier)) も技術的には可能であるが、何通りか試した結果、生活を刺激しない程度にゆるくて、物理空間に残る通知が可能な、ライトを点灯させるインターフェースがちょうど良いかもなと思っている。 ちなみに、「ライトの点灯に気づいたら夕食の味噌汁など温め始めるようにしているよ」とのこと。実は単に仕掛けを作ってみたかっただけの、私の想像を超える有効活用をしてもらっていて、ありがたいです……。 #### 仕掛けに必要な物と各動作 「平日夜に私の帰宅が近づいたら、自動で自宅リビングのライトが点灯する仕掛け」は、次のような物を用いて実現している。 - 必要な物: 1) IFTTTから制御可能なスマートプラグ, 2) 電源供給と点灯が連動するライト, 3) Androidスマホ 1. 2. - 必要なAndroidアプリ: Trigger, Tasker, Termux (※有料アプリも含みます) 仕掛けは、次の各動作の連携から成る。 1. アプリTriggerで、次のタスクを設定しておく: 「月~金の18:00~22:00の間に、スマホが自宅を中心とする数百メートル圏内に入ったら、Taskerのタスクsendmail_iftttを実行」 2. Taskerのタスクsendmail_iftttは、Termux環境のsendmail_ifttt.shを実行する 3. bashスクリプトであるsendmail_ifttt.shは、Muttを使ってメールをtrigger@applet.ifttt.com宛に送信する 4. IFTTTのAppletで、「特定のタグのメールがIFTTTに届いたらスマートプラグの電源をONする」を設定しておく 5. 自宅リビングに置いたスポットライトの電源制御をスマートプラグで行う このような動作を連携させておけば、スマホを持つ私が所定の時間帯に自宅に接近することがトリガーになってTriggerが動き出し、次の表の流れでランプ点灯までの仕掛けが自動的に発動するわけだ。 |仕掛けの在り処|連携の流れ| |-----|-----| |[1] Androidスマホ|Trigger → Tasker → bash → Mutt → [2]| |[2] クラウド| → Gmail → IFTTT → Smart Life → [3]| |[3] 自宅| → スマートプラグ → ライト点灯| #### 仕掛けの作り方 ##### Step-1: スマートプラグのIFTTT連携を設定 自宅の好みのところに取り付けたライトの、電源の制御をスマートプラグで行うように物理配線をする。次に、ウェブサービス同士を連携させる[IFTTT](https://ifttt.com/)からスマートプラグが制御できるように設定を行う。 私の場合は、IFTTT対応のスマートプラグのアプリが[Smart Life - Smart Living](https://play.google.com/store/apps/details?id=com.tuya.smartlife&hl=ja)というものであったので、次のページを参考に、スマートプラグとIFTTTを連携させた。 - [IFTTT\(イフト\)対応スマートコンセントの連携から利用方法まで解説する](https://ifttt-japan.club/ifttt-smart-plug) ##### Step-2: Termuxをスマホにインストール Android上でLinuxの端末環境を実現するアプリ、[Termux](https://termux.com/)をスマホにインストールする。Termux上のスクリプトをTaskerから実行するためには、オプションの「Termux:Task」が別途必要なのでこれもインストールする。 - [Termux \- Google Play のアプリ](https://play.google.com/store/apps/details?id=com.termux) - [Termux:Task \- Google Play のアプリ](https://play.google.com/store/apps/details?id=com.termux.tasker) ##### Step-3: Termux環境にMuttをインストールして設定 人間の操作 (インタラクション) 無しに自動的にメールを送信するツールとして、Termux環境の[Mutt](http://www.mutt.org/)を用いる。これをTermux画面で```pkg install mutt```してインストールし、```~/.muttrc```にGmailの送受信設定を書く。 Gmailの送受信設定として、私の場合は、[Consolify your Gmail with MUTT](https://blog.onetwentyseven001.com/consolify-your-gmail-with-mutt/)を参考に次のような.muttrcを用意した。「YOUR-APPLICATION-PASSWORD」には、[Googleアカウントの「アプリ パスワード」](https://myaccount.google.com/apppasswords)で作成できる、今回のMutt用のパスワードを記述する。 ``` set from = 'YOUR-ADDRESS@gmail.com' set realname = 'YOUR-REAL-NAME' set imap_user = 'YOUR-ADDRESS@gmail.com' set imap_pass = 'YOUR-APPLICATION-PASSWORD' ### REMOTE GMAIL FOLDERS set folder = 'imaps://imap.gmail.com:993' set spoolfile = '+INBOX' set postponed ='+[Google Mail]/Drafts' set trash = '+[Google Mail]/Trash' ###set any_label = '+[Google Mail]/any_label' ### LOCAL FOLDERS FOR CACHED HEADERS AND CERTIFICATES set header_cache =~/.mutt/cache/headers set message_cachedir =~/.mutt/cache/bodies set certificate_file =~/.mutt/certificates ### SMTP SETTINGS set smtp_url = 'smtp://YOUR-ADDRESS@smtp.gmail.com:587/' set smtp_pass = 'YOUR-APPLICATION-PASSWORD' # use the same password as for IMAP ### SECURING set move = no #Stop asking to move read messages to mbox! set imap_keepalive = 900 ``` さらに、TaskerからTermux上のスクリプトを起動するためには、スクリプトをディレクトリ```~/.termux/tasker/```に保存しておく必要がある (symlinkされたものでも構わない)。このディレクトリ内に、たとえばsendmail_ifttt.shという名前で次のbashスクリプトを保存して実行属性を付加する。 ###!/bin/bash MUTT_SUBJECT=$1 MUTT_TO='trigger@applet.ifttt.com' MUTT_PATH='/data/data/com.termux/files/usr/bin/mutt' ${MUTT_PATH} -s "#${MUTT_SUBJECT}" "${MUTT_TO}" < /dev/null ##### Step-4: メールをトリガーにするIFTTTアプレットを作成 IFTTTにて、「タグ#area_homeのメールがIFTTTに届いたらスマートプラグの電源をONする」Appletを次の手順で作成する。ちなみにIFTTTでは、受信メールのSubjectの冒頭に「#」があれば、以降のSubject内容がメールのタグとして認識される。 1. を開く 1. 「+this」をクリック 1. Serviceとして「Email」を選択 1. Triggerとして「Send IFTTT an email tagged」を選択 1. Tagとして「area_home」を入力 1. 「+that」をクリック 1. Serviceとして「Smart Life」を選択 1. Actionとして「Turn on」を選択 1. 「Which device/group?」で操作したいスマートプラグを選択 1. 「Create action」を押す ##### Step-5: メール送信でのライト点灯をテスト Termux環境から次のコマンドを実行すると、Subjectが「#area_home」であるメールがIFTTT宛に送信されるはず。本Stepまでの諸々の設定が問題なく行えていれば、およそ十秒以内の反応速度で、自宅のライトが点灯状態に切り替わる。 ``` ~/.termux/tasker/sendmail_ifttt.sh area_home ``` ##### Step-6: Trigger,Taskerをスマホにインストールして設定 ある条件を満たすときに特定の動作をさせるためのアプリ、[Trigger](http://gettrigger.com/)と[Tasker](https://tasker.joaoapps.com/)をAndroidスマホにインストールする。 - [Trigger \- Google Play のアプリ](https://play.google.com/store/apps/details?id=com.jwsoft.nfcactionlauncher&hl=ja) - [Tasker \- Google Play のアプリ](https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm) この2つのアプリは、あるきっかけでタスクを動作させる点は同じだが、Taskerでは変数や条件分岐を用いて細かいプログラミングを行うこともできる。私の場合は、Taskerを各種タスクの保管庫のような扱いにして、そのタスクをTriggerなど他のアプリから実行するような使い分けをしている。 ###### Taskerにsendmail_ifttt.shを呼び出すタスクを設定 Taskerに、上記のテストと同様の、Termuxにて```~/.termux/tasker/sendmail_ifttt.sh area_home```を実行するタスクを作成する (コマンド実行の引数が「area_home」になる)。タスクの名前をここでは仮に「sendmail_ifttt (area_home)」としておく。 作成方法の概要は、次のページのUsageを参照のこと。 - [Termux:Task \- Termux Wiki](https://wiki.termux.com/wiki/Termux:Task) ###### Triggerに“帰宅”のトリガー条件を設定 Triggerにて、自身の帰宅時の状況に該当する、例えば「月~金の18:00~22:00の間に、スマホが自宅を中心とする数百メートル圏内に入ったら」というような、位置情報 (Geofence) とお好みの曜日・時間帯等をAND条件で組み合わせたタスクを作成し、そのアクションとして、上記で作成したTaskerのタスク「sendmail_ifttt (area_home)」が実行されるように設定する。 ##### Step-7: 本番環境でテスト 実際にスマホを持って自宅圏内へ入ってみて、ライトを点灯させることができるかを試してみる。本番環境でのみうまく行かない場合は、“帰宅”のトリガー条件の見直しが必要になると思われる。 #### ここだけの話 文字ばかりの説明で長かったですが、本記事がみなさまの生活の役に立つようであれば、嬉しいです。 さて、上記のStep-6のTriggerにて、トリガー条件を「平日夕方に**勤務先を離れたら**」と設定することも、もちろん可能です。しかし律儀にこうすると、帰宅途中の気ままな寄り道がやりにくくなりそうなので私は採用しておりません。あしからずご了承ください! --- ### 水車大工・竹中大工道具館 - 2019-03-31 URL: https://remoteroom.jp/diary/2019-03-31/ たしかツイッターで情報を見つけていた企画展『[水車大工 -水力エネルギーをデザインする-](https://www.dougukan.jp/special_exhibition/watermill)』を、新神戸にある[竹中大工道具館 (Takenaka Carpentry Tool Museum)](https://www.dougukan.jp/) まで家族で見に行った。この企画展は2019/05/12までの開催です。 自然エネルギーで稼働する風車や水車、といった類の機構が好きな私の趣味に、家族を付き合わせる半ば強引な形のお出かけであったが、初めて行った竹中大工道具館のわび・さび貫く空間設計も展示もすばらしく、結果的に皆が大満足した。 手仕事の道具や木材が好きな方に特にお薦めします。昔々は板をこうして作っていたのか!という大工の技の進化に驚いたり、実際に手で掴める継手があって、立体パズル級の複雑な組み方に感心しきったり。もしタイミングが合えば、[木工のワークショップ](https://www.dougukan.jp/event/)にも参加できるようです。 #### 企画展の様子 #### 常設展の様子 --- ### 【読んだ本】 自壊する帝国 - 2019-03-28 URL: https://remoteroom.jp/medialog/2019-03-28_book-b014j5tq60/ 組織神学を大学生・院生時代の研究テーマにしていた著者が、ふとしたきっかけで外務省に入り、崩壊していくソ連 (ソビエト社会主義共和国連邦) での日本国外交官としての様々な体験を記述した書。 外交に携わる人々が、どのように他者を探って地道に関係性をつくり情報活動を行っていくかの、裏表を知ることができる。いわゆるインテリジェンス活動の実際が興味深いし、おもしろかった。 そのインテリジェンス活動の関連で、私にもっとも新鮮だった本書での知見は、国家や政府の情勢の先行きを確度高く予測するためには、どうやら各組織体が寄り添っている「宗教」を理解しておくと非常に強力だ、ということ。そして著者は、「内在的論理」という特徴的な言葉を幾度も登場させているが、これと宗教とを非常に密接に捉えていると私は考えた。 私は宗教に対し、ぶっちゃけいってほぼ無理解であったが、人間の内在的論理だと言われるとがぜん面白みを感じるものになる。小さくてもいいので、宗教を解釈できるプリズムを持ちたいなとも思った。 --- ### Hugoエラー「cannot perform operation: mount ...: Permission denied」の解決法 - 2019-03-27 URL: https://remoteroom.jp/diary/2019-03-27/ #### Hugo実行→見慣れないエラー いつもはTermux環境だが、久しぶりにLinux環境でサイト更新作業やるぞと、サイトをプレビューすべく次のコマンドで静的サイトジェネレータの[Hugo](https://gohugo.io/)を動かしてみたら、見慣れないエラーが発生して出鼻をくじかれる。 ```bash $ env HUGO_ENV='DEV' hugo server --watch --buildDrafts=true --buildFuture=true --cacheDir=/tmp/hugo_cache/ cannot perform operation: mount --rbind /mnt /tmp/snap.rootfs_V1My5h//mnt: Permission denied ``` ##### 環境情報 エラー発生時の各種環境については次のとおり。 ```bash $ snap version snap 2.37.4+18.04.1 snapd 2.37.4+18.04.1 series 16 linuxmint 19 kernel 4.15.0-46-generic $ cat /etc/lsb-release DISTRIB_ID=LinuxMint DISTRIB_RELEASE=19 DISTRIB_CODENAME=tara DISTRIB_DESCRIPTION="Linux Mint 19 Tara" $ which hugo /snap/bin/hugo $ hugo version Hugo Static Site Generator v0.54.0 linux/amd64 BuildDate: 2019-02-01T13:33:06Z ``` #### エラーの解決法 Hugoはsnapでインストールしてあり、エラーメッセージに「/tmp/snap.rootfs_V1My5h」とあるから、snapに何か起因するエラーなのかなと考えながら、下記のサイトで案内されている解決策```snap refresh --candidate core```を実行してみた。その結果、snapのバージョンが更新された状態に。 - [Snapd 2\.37 breaks existing snap installation \- snapd \- snapcraft\.io](https://forum.snapcraft.io/t/snapd-2-37-breaks-existing-snap-installation/9717) ```bash $ snap refresh --candidate core 2019-03-27T23:04:09+09:00 INFO Waiting for restart... core (candidate) 16-2.38 from Canonical✓ refreshed $ snap version snap 2.38 snapd 2.38 series 16 linuxmint 19 kernel 4.15.0-46-generic ``` ##### Hugo実行→OK そしてこの「snap 2.38」の状態だと、Hugoがエラーなく動作した。ほっと一安心である。 ```bash $ env HUGO_ENV='DEV' hugo server --watch --buildDrafts=true --buildFuture=true --cacheDir=/tmp/hugo_cache/ (中略) Running in Fast Render Mode. For full rebuilds on change: hugo server --disableFastRender Web Server is available at http://localhost:1313/ (bind address 127.0.0.1) Press Ctrl+C to stop ``` #### 最近の一枚 --- ### DockerからDNSキャッシュサーバUnboundを使う - 2019-03-22 URL: https://remoteroom.jp/diary/2019-03-22/ #### コンテナからのDNSアクセスはどこへ向かう? Dockerコンテナを多数、Ubuntu 18.04のサーバ1台の中で動かしていて、それぞれのコンテナから特定の外部Web APIを秒単位で利用しているようなケースにて。 全体のパフォーマンスを確認するなかで、各コンテナのDNSアクセスはネットワークのどこへ向かっているのか、気になってきた。 ##### デフォルトだと 8.8.8.8, 8.8.4.4 を参照 Docker 18.06.1-ceの環境で、ホスト側の```/var/log/syslog```を次のように確認してみる。すると、Dockerコンテナをそのまま```docker run```したならば、それらのDNSサーバとしてデフォルトで、自動的に「8.8.8.8」「8.8.4.4」が指定されることがわかった。なるほど。 ``` $ cat /var/log/syslog | grep dockerd (省略) level=info msg="No non-localhost DNS nameservers are left in resolv.conf. Using default external servers: [nameserver 8.8.8.8 nameserver 8.8.4.4]" ``` 次のように各Dockerコンテナの```/etc/resolv.conf```でも、DNS設定を確認できる。 ``` $ docker exec IMAGE名 cat /etc/resolv.conf nameserver 8.8.8.8 nameserver 8.8.4.4 options edns0 ``` #### コンテナ近くにDNSキャッシュサーバを立てる Google Public DNS (8.8.8.8, 8.8.4.4) へは、今回のDockerコンテナからネットワーク的な距離が多少はあるはず。DockerコンテナからそのようなDNSサーバへのDNS参照を減らすためには、「DockerホストにDNSキャッシュサーバを立てて、それをDockerコンテナから参照させると良いのかな?」と思いつく。(ちなみにこの時点では、Ubuntuのデフォルトで動いているsystemd-resolvedというものの存在を私は知らなかった) Ubuntuでは、UnboundというDNSキャッシュサーバが扱いやすそうなので (参考: [unboundとは \| OSSでのシステム構築・デージーネット](https://www.designet.co.jp/faq/term/?id=dW5ib3VuZA))、これを次のようにaptコマンドでインストールした。 ``` $ sudo apt install unbound ``` ##### UnboundのDockerコンテナ向け設定 Dockerホスト側でのDNSに関する機構はそれぞれ分離しておきたいので、具体的には次の意図を込めて、 - UnboundはDockerコンテナへのみサービスする - Ubuntuのデフォルトで動いているsystemd-resolvedには変更を加えない Unboundの設定ファイルunbound.confを次のように書いてみた。他のキャッシュなどに関する設定はデフォルトでいいや、と割り切っている。 ``` $ cat /etc/unbound/unbound.conf server: verbosity: 1 num-threads: 2 # Dockerホストが2vCPUなので #interface: 127.0.0.1 interface: 172.17.0.1 # Dockerホストのdocker0のIPアドレス access-control: 0.0.0.0/0 refuse access-control: 172.16.0.0/12 allow do-ip6: no forward-zone: name: "." forward-addr: AAA.BBB.CCC.DDD # 設置環境での推奨DNS1 forward-addr: EEE.FFF.GGG.HHH # 設置環境での推奨DNS2 forward-addr: 8.8.8.8 # Google Public DNS forward-addr: 8.8.4.4 # Google Public DNS ``` ##### Unboundの動作確認 Unboundの動作確認として、次のように、1) UnboundサービスをIPアドレス「172.17.0.1」で起動させておき、2) 外部Web APIを利用するDockerコンテナを「\-\-dns 172.17.0.1」指定付きで動かしてから、3) Unboundがキャッシュしている内容を表示させて確認してみる。 ``` $ sudo systemctl start unbound.service $ docker run --dns 172.17.0.1 IMAGE名 $ sudo watch unbound-control dump_cache ``` dump_cacheの出力結果に、Dockerコンテナが利用する外部Web APIのアクセス先となるホスト名が現れていれば、「Unboundが当該ホスト名をキャッシュしている。ということは、コンテナのプロセスがUnboundを介して当該ホスト名をDNS参照したのだろう」と推定できる。 つまり、今回の狙い通り、DockerコンテナにDNSキャッシュサーバUnboundを参照させることができているはずだ。 #### UnboundとDockerの起動順に注意 UnboundとDockerの起動順には注意が必要である。次のようなケースがあるため、Docker (dockerd) → Unbound → Dockerコンテナ の順に起動が行われるよう、制御する必要が出てくる。>自分への宿題 - 上記のようにunbound.confで「interface: 172.17.0.1」という設定を行っている場合。Dockerホストでdockerdが起動していないときには、IPアドレス「172.17.0.1」も存在しないので、Unboundを起動させても起動に失敗する。 - UnboundがサービスしていないときにDockerコンテナが起動してDNS参照を試みた場合。実験はしていないが、「\-\-dns 172.17.0.1」指定である以上、DockerコンテナのDNS参照は失敗するんじゃなかろうか。 #### 最近の一枚 --- ### ESXi-Customizer-PSを用いたVMware ESXi 6.7インストールの現状 - 2019-03-21 URL: https://remoteroom.jp/diary/2019-03-21/ [Mini PCを使って2016年11月に構築した]()VMware ESXiホストは、ストレージがHDDであるため、動きが少し緩慢であった。SSDへの換装を目論んでいたところ、このたび480GBのものを約六千円で購入できたので、ESXiホストのHDD→SSD換装をやってみることに。 内蔵ストレージの容量としては1TB→480GBの縮小なので、そのままdd的なコピーとはいかず、[ESXiのデータストアの仮想マシンイメージは外部媒体にいったん退避](https://hypervisualization.net/2017/07/vmware-vsphere-hypervisor-65esxi-65usb-hdd-datastore.html)させた。そしてSSDへVMware ESXiをインストールし直したのだが、このインストールが一筋縄ではいかなかった。 数時間かかった私の作業が誰かの時短に役立つように、顛末をメモしておきます。ちなみに購入したSSDはこちら↓。 #### 0) 概要 - ESXiホストとするPC: [Vorke V1](http://www.vorke.com/project/vorke-v1-2/) (CPU/MEM: Celeron J3160, 8GB) - 前回インストール時の記事: [癖を攻略してMini PCへESXiインストール]() [2016/11/30] ||前回 (2016/11)|今回 (2019/03)| |---|---|---| |VMware ESXi Ver.|6.0 Update 2|6.7 Update 1| |内蔵ストレージ|1TB SSHD; [TOSHIBA MQ02ABD100H](http://toshiba.semicon-storage.com/jp/company/news/news-topics/2015/01/04_storage-20150106-1.html)|480GB SSD; [CFD CSSD-S6B480CG3VX](https://www.cfd.co.jp/product/ssd/cssd-s6b480cg3vx/)| #### 1) ESXiカスタムイメージの作成 ESXiのカスタムイメージを、定番ツールである[ESXi-Customizer-PS](https://www.v-front.de/p/esxi-customizer-ps.html)を用いて作成する。ESXi-Customizer-PSの実行には、WindowsのPowerShell環境が必要だ。 ##### ESXi-Customizer-PSでの追加パッケージを確認 ESXiをインストールするVorke V1は、NICがRealtekのカニさんチップなので、ESXi-Customizer-PSの-loadオプションで指定する追加パッケージとして「net55-r8168」が必要になる。前回のインストール時に追加した他のパッケージ「cpu-microcode」「sata-xahci」は、下記のように執筆時点では不要となっていた。 |-loadオプション|前回 (2016/11) 6.0u2|今回 (2019/03) 6.7u1| |---|---|---| |net55-r8168|■必要|■必要| |cpu-microcode|■必要|□不要 ([ESXi 6.0向け](https://vibsdepot.v-front.de/wiki/index.php/List_of_currently_available_ESXi_packages#Other))| |sata-xahci|■必要|□不要 ([ESXi 6.5から不要](https://www.v-front.de/2016/11/esxi-65-release-notes-for-free-license.html))| ##### VMware PowerCLIのインストール ###### PowerCLI 最新版 (11.2系) ではうまくいかず ESXi-Customizer-PSのRequirements (必要なもの) に挙がっている「[VMware PowerCLI](https://communities.vmware.com/community/vmtn/automationtools/powercli)」は、執筆時点のPowerCLI公式情報では次のように、PowerShell上のInstall-Moduleコマンドを用いてインストールせよと案内されている。 ``` PS> Install-Module -Name VMware.PowerCLI ``` しかし、このようにしてVMware PowerCLIの最新版 (11.2系; おそらく11.2.0.12483638だった) をインストールした状態では、ESXi-Customizer-PSの起動が次のように失敗する。「VMware.ImageBuilder.Impl.IfServer」をキーワードにウェブ検索してみたものの、失敗の原因や簡単な解決策はよくわからず。 ``` PS> .\ESXi-Customizer-PS-v2.6.0.ps1 -vft -load net55-r8168 (中略) An unexpected error occured: 'VMware.ImageBuilder.Impl.IfServer' のタイプ初期化子が例外をスローしました。 ``` ###### PowerCLI 6.3 R1を導入 そこで [NUC8でESXiを動かすまでの道のり - Qiita](https://qiita.com/air-gh/items/bac1dd333ca429416867#powercli%E5%8B%95%E3%81%8B%E3%81%9A) を参考にする。問題を誘発していそうなVMware PowerCLIのPowerShellインストール版を避けて、一般的なインストーラーを用いる版である[VMware PowerCLI 6.3 R1](https://code.vmware.com/web/tool/6.3%20R1/vmware-powercli)をインストールすることにした。 なお、Install-ModuleコマンドでインストールしてしまったPowerCLIの最新版は、PowerCLI 6.3 R1をインストールする前に、VMware関連の他のパッケージ含め完全削除したほうがよいと思われる。(私の場合はExplorerでPowerShellのパッケージ保存場所を探して、そこにある「VMware.*」フォルダをすべて削除したが、これが正しい方法かは不明) PowerCLI 6.3 R1をインストーラーで導入したあとは、ESXi-Customizer-PSの起動時に「'VMware.ImageBuilder.Impl.IfServer' のタイプ初期化子が例外をスローしました (The type initializer for 'VMware.ImageBuilder.Impl.IfServer' threw an exception.)」が発生せず、先へ進むことができる。 ##### ESXi-Customizer-PSでイメージ作成 次のように、PowerShellのスクリプト実行ポリシーを一時的に変更しておき、ESXi-Customizer-PSを、追加パッケージ指定などの必要なオプションを付けて実行する。 ``` PS> Set-ExecutionPolicy RemoteSigned -Scope Process # スクリプト実行ポリシーを一時的に変更 PS> .\ESXi-Customizer-PS-v2.6.0.ps1 -vft -load net55-r8168 ``` すると、次のような画面出力とともに、ESXiカスタムイメージである「ESXi-6.7.0-20190104001-standard-customized.iso」が保存された。 ``` This is ESXi-Customizer-PS Version 2.6.0 (visit https://ESXi-Customizer-PS.v-front.de for more information!) (Call with -help for instructions) Logging to C:\Users\ABC\AppData\Local\Temp\ESXi-Customizer-PS-2308.log ... Running with PowerShell version 5.1 and VMware PowerCLI version 6.3.0.0 Connecting the VMware ESXi Online depot ... [OK] Connecting the V-Front Online depot ... [OK] Getting Imageprofiles, please wait ... [OK] Using Imageprofile ESXi-6.7.0-20190104001-standard ... (dated 01/16/2019 10:43:42, AcceptanceLevel: PartnerSupported, Updates ESXi 6.7 Image Profile-ESXi-6.7.0-20190104001-standard) Load additional VIBs from Online depots ... Add VIB net55-r8168 8.045a-napi [New AcceptanceLevel: CommunitySupported] [OK, added] Exporting the Imageprofile to 'C:\Users\ABC\Desktop\ESXi-6.7.0-20190104001-standard-customized.iso'. Please be patient ... All done. ``` #### 2) ESXiインストール用のUSBメモリ作成 ESXiカスタムイメージ「ESXi-6.7.0-20190104001-standard-customized.iso」を、USBメモリに焼いて、ESXiインストールのためのブートメディアを作成する。ブートメディアの作成には、Rufusというツールを使用。次のページにRufusの使い方の詳しい説明があるので、参考にした。 - [Intel NUCへのESXiインストール \- 上を向いて歩こう!](http://komo-jp.hatenablog.com/entry/2018/06/19/125032) #### 3) ESXiのインストール ##### ks.cfgを用意する [Intel NUC\(NUC5CPYH\)にVMware ESXiを入れる \- Qiita](https://qiita.com/dalance/items/f3aa446aeef49220e437) を参考に、ブートメディアに追加するKickstart構成ファイルks.cfgを作成する。ks.cfgの内容を抜粋すると次の通り。 ``` vmaccepteula rootpw mypassword install --firstdisk=local --overwritevmfs network --bootproto=dhcp --device=vmnic0 reboot %post --interpreter=python --ignorefailure=true import time stampFile = open('/finished.stamp', mode='w') stampFile.write( time.asctime() ) ``` ##### ブート時に行うこと・パスワードの条件 上記ks.cfgをルートディレクトリに保存したブートメディアでPCを起動して、ESXiインストーラー起動中に「Shift+O」を押すと画面の最下部に```runweasel```で始まる入力行が現れる。その後ろに、次のように「ks=」以降の文字列を追加入力してエンターキーを押せば、インストールが進行していくはず。 ``` runweasel ks=usb:/ks.cfg ignoreHeadless=TRUE ``` ちなみに手抜きして、rootpwをそのまんま「mypassword」にしておくと、次の画面のようにエラーが発生する。 VMwareのドキュメント [ESXi のパスワードとアカウントのロックアウト](https://docs.vmware.com/jp/VMware-vSphere/6.5/com.vmware.vsphere.security.doc/GUID-DC96FFDB-F5F2-43EC-8C73-05ACDAE6BE43.html) によれば、設定可能なパスワードの条件として次の定義があるのでご注意。 > - パスワードを作成する際、デフォルトでは、小文字、大文字、数字、および特殊文字(アンダースコアやダッシュなど)の 4 種類の文字を混在させる必要があります。 > - デフォルトでは、パスワードの長さは 8 文字以上 40 文字未満です。 > - パスワードには、辞書ファイル内の単語または単語の一部を含めることはできません。 ##### インストール完了・管理画面へ ks.cfg内のrootpwを、パスワードの要件を満たす適切なものに変更し、ESXiのインストールにもう一度挑戦すると、今回の環境ではおよそ5分でインストールが完了してPCに再起動がかかった。 その後しばらくしてから、ESXiホストとなったPCにDHCPで割り当てられるIPアドレスへ、ウェブブラウザでhttpsアクセス (https://aaa.bbb.ccc.ddd/) すると、ESXiの青基調の管理画面を開くことができる。 --- ### 古いThinkPadでWindows XPが起動せず、SATA関係のBIOS再設定が必要だった - 2019-03-17 URL: https://remoteroom.jp/diary/2019-03-17/ #### 確定申告作業で 「確定申告で参照したい昔のデータが、古いThinkPadに入っている」ため、相方が何年かぶりに、SSDに換装済みのThinkPad X61を引っ張り出し、ACアダプターを接続して起動を試みた。OSはWindows XPである。しかしながらXPが起動せずに、懐かしのブルースクリーンを拝むことになった。 この問題の原因を調査して解決した際の内容を記録しておきます。 #### Windows XPが起動しなかった原因 1. ThinkPad X61のボタン型電池の寿命が切れていて、BIOS設定が保持されておらず今回起動時にBIOS設定がデフォルトに戻った 2. 本機のWindows XP環境は、BIOS設定がデフォルトだと起動に失敗する (おそらくは、AHCIドライバを本機のOSにインストールしていないため) #### Windows XPを起動するために ##### 暫定的な解決策 本機は今後もほとんど使用しないはずなので、とりあえず起動するための暫定的な解決策は次の通り。 1. 電源ON後、ThinkPadのロゴが現れている間にF1キーを押してBIOS画面に入る 2. [Config] → [Serial ATA (SATA)] を選択し、「SATA Controller Mode Option」を、[AHCI] 選択状態から [Compatibility] を選択している状態へ切り替えてEnterキーで確定 3. \[F10\] (Save and Exit) を押して、「Setup Confirmation - Save configuration changes and exit now?」にて [Yes] を選択する 4. コンピュータが自動的に再起動される 5. その後、Windows XPの起動が無事完了! 6. 残念ながら本機の場合は、ACアダプターを外すとBIOS設定を忘れてしまうので、次に使う時も再びBIOS設定が必要である ##### 根本的な解決策 Windows XPのOS・ドライバ環境に変更を加えない前提での、根本的な解決策は、次の通りとなる。 1. ThinkPad X61のBIOS設定を保持するための、マザーボード上のボタン型電池を新品に交換する 2. 上記の「暫定的な解決策」に記載のBIOS設定を行う --- ### #GeminiPDA キーボード打鍵感のばらつきを軽減するシート加工 - 2019-03-15 URL: https://remoteroom.jp/diary/2019-03-15/ #### キー感触のばらつき、気になる Gemini PDAは、[QWERTY好き](#qwertyあり)としては手に入れる他なかった、秀逸なデザインの携帯端末だ。2018年5月頃に手元に届いてから、OSは純正Androidのまま、本体は液晶画面にフィルムを貼った程度のノーマル状態で使ってきた。しかし肝心なキーボードの、押し具合がキーごとにばらついている感触が気になってきて、この違和感は積極的に使おうとする気持ちを削いでしまう。 このまま使用頻度が下がるようでは、もったいない。巷で見かけた改善方法として、キーの隙間から[シリコンスプレーを噴いてみたり](https://daily-gadget.net/2019/01/08/post-1001/)したものの、自分の場合は期待したほど変化がなく。次の作戦として、より物理的に手を入れることにした。 それは、キーの下に敷かれているゴム製のシートをハサミで加工する作戦。私のGemini PDAの状態においては、キー入力時の抵抗感を軽減する効果は一応あったと思うので、ひとつの参考事例として以下に写真付きで紹介しますが、万人のGemini PDAで効果があるかどうかは不明です。 - 携帯端末: [Planet Computers Gemini PDA](https://store.planetcom.co.uk/collections/gemini-pda/products/gemini-pda-1) (私のはIndiegogoでの出資で得たもの。2ndロットと思われる) - 他に用意する物: ハサミ, 油性ペン #### 加工前 ↓[1] 私のGemini PDAの個々のキートップを全て剥がしてみたところ、その下のゴム製のシートがなぜか伸びている状態であった。 ↓[2] 個体差なのか、シートが大きく伸びている原因は不明。キーを挿す位置とシートの丸穴の位置を左右の端で合わせると、キーの下のシートがあちこちで浮くことになり、これだとキーごとに打鍵感が違ってくる可能性は高いとみた。 #### 加工作業: シートを平坦にするために分割 ↓[3] シートをジャストサイズに縮める方法は思いつかなかったので、シートを分割し、伸びている長さ分を切り落とせば、シートを平坦にできると考えた。どこで分割するかの位置決めを、油性ペンでシートに線を描いてシミュレーション。 ↓[4] まずは一箇所、2mmほどの幅でシートを削って分割した。**なおこのシートは、よくあるゴムボタン式リモコンの作りと同じく、シートの丸穴の縁部分の裏側が導電ゴムによる接点になっているので、丸穴部分を切断してはいけません!!** ↓[5] シートを複数に分けるとともに分割位置で少しずつ削る。シートの丸穴の位置と、本体側のキートップを挿す十字の穴の位置が、全体できれいに揃うようになった。写真の時点ではシート4分割だが、実際は5分割までやってみた。 #### 加工後 ↓[6] キートップを元の配列どおりにはめて戻せば作業は完了。 ##### どのような変化があったか 上記の非可逆なシート加工の結果、キーの打鍵感がどう変わったかというと、私のGemini PDAの場合は加工前と比べて、全面的にキーがとても軽くなった。「ぺこぺこ」という入力音も出にくいようだ。 この軽さはメリットでもあるが、シートの平坦化によりキーの支持具合も変わったようで、キーのぐらつき感も増えているかもしれない。ユーザの好みによってはこの加工、一長一短かと思われます。 明らかなデメリットとして、シートが多少は担っているかもしれないキーボードの防水性能は、シート分割により限りなくゼロになります。キーボード上部に液体をこぼしたら、一発で本体に浸水して救いようがない状態です。特に注意して使わなくては。 #### 余談: Gemini PDAに使えるケース情報 ↓百均のお店で偶然発見し、現在愛用中のGemini PDAケースはこちらです。品名は「500mlペットボトルカバー」なのですが、不思議なほどちょうど良い。 --- ### 【読んだ本】 プラスチックの恋人 - 2019-03-14 URL: https://remoteroom.jp/medialog/2019-03-14_book-b078jtp89d/ 人間の性的な相手を、人形ロボットすなわちアンドロイドが担う商業サービスが成り立っている、2040年代の日本を舞台にした物語である。そのサービスを享受する費用は高額 (おそらく月収の数十%) であるが、触覚・嗅覚・味覚的には精巧に作られた実体に直接、そして視覚・聴覚的にはARを介して接することになるアンドロイドには、性格や容姿含めて様々なタイプを設定でき、人間は完全に思いのままに、“好みのロールプレイ”の世界へ没入できるようになっている。 タイトルの状況にはまり込む一人である主人公は20歳代後半の女性。この物語で特徴的なのは、上記サービスを提供するアンドロイドが華奢な少年型・少女型である場合を描き、社会的に起こりうる波紋や騒動を想像させて、倫理性や人間性を考えさせる問いかけをしているところだと思う。 --- ### 【読んだ本】 真説・企業論 ビジネススクールが教えない経営学 - 2019-03-09 URL: https://remoteroom.jp/medialog/2019-03-09_book-b072j8bk5h/ 以前読んだ『[日本の没落]()』と同じく、中野剛志氏の著書である。私なりの解釈で述べると、米国に続き日本社会が短期主義に至っていることを証明し、この状況はイノベーションの土壌になり得ない、本質的に矛盾した方向であると示すとともに、企業活動のあり方に問題提起をしているものだ。 本書におけるイノベーションは、狭義もしくは誤訳による技術革新ではなく、本来的な意味での[イノベーション](https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%8E%E3%83%99%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3)を指している。知的に目が覚める内容であり、議論を呼ぶであろう良書だと思った。イノベーションやシリコンバレーにまつわる通説や至上主義を脇に置いたうえで、政策の実効性を検証したり、中長期的な社会現象を理解したり、といった姿勢の大切さを認識させられる。 --- ### WebARENA VPSのUbuntu初期設定で、固定のユーザ名を変更したり - 2019-03-07 URL: https://remoteroom.jp/diary/2019-03-07/ 格安なWebARENA VPSクラウドの「Ubuntu18.04」サーバ初期設定で、ハマりそうな少し特殊な部分がありますのでメモです。もしかしたら、私と同じように初期設定で戸惑う方のために。 #### 概要 [WebARENA VPSクラウド](https://web.arena.ne.jp/vps-cloud/)にて、WebARENA提供の「Ubuntu18.04」 (Ubuntu 18.04 LTS) のマシンイメージを用いてインスタンスを作成した場合、そのインスタンスにログインするためのユーザとして、デフォルトで「ubuntu」が用意されています。1) このユーザ名を好きなものに変更し、2) i-ランダム文字列であるデフォルトのサーバ名も変更する手順は次のとおりです。 #### 1) ユーザ名を好きなものに変更するには ##### 1-1) 新しいインスタンスを起動してユーザubuntuでログイン 1. WebARENA VPSクラウドのマシンイメージの画面から、「Ubuntu18.04」のイメージを選択してインスタンスを起動する。リモート (アクセス元環境) からssh通信できるよう、セキュリティグループ設定でsshポート (22/tcp) は開けておく 1. 起動したインスタンスへ、リモートからssh loginする (ssh-XXXXXXXX.pem = インスタンスの秘密鍵ファイル, AAA.BBB.CCC.DDD = インスタンスに割り当てられたグローバルIPアドレス) ``` $ ssh -i ./ssh-XXXXXXXX.pem ubuntu@AAA.BBB.CCC.DDD Password: ``` ユーザubuntuの初期パスワードは、次のページの「インスタンスへのログイン」部分に記載があります。 - コントロールパネル機能 ##### 1-2) ユーザubuntuの名前を変更する Raspbianを設定する際にもお世話になっている [\[Raspbian\]ユーザ名変更の個人的に「正しい」と思うやり方 \| 純規の暇人趣味ブログ](https://jyn.jp/raspberrypi-username-change/) を参考に、ユーザubuntuの名前を変更します。 1. 仮のユーザtmpuserを追加する ``` ### (ユーザubuntuにて) sudo useradd -m tmpuser # 参考ページでは「-M」、下記★のためにホームを作成する「-m」に変更 sudo gpasswd -a tmpuser sudo sudo passwd tmpuser sudo vim /home/tmpuser/.ssh/authorized_keys # ★リモートマシンの公開鍵を追加する exit ``` 1. ユーザubuntuの名前・ホームディレクトリ・所属グループをyourfavorite (お好みのもの) へ改名する ``` $ ssh tmpuser@AAA.BBB.CCC.DDD ### (ユーザtmpuserにて) sudo usermod -l yourfavorite ubuntu sudo usermod -d /home/yourfavorite -m yourfavorite sudo groupmod -n yourfavorite ubuntu exit ``` 1. ユーザyourfavoriteでログインしてみる ``` $ ssh -i ./ssh-XXXXXXXX.pem yourfavorite@AAA.BBB.CCC.DDD ``` 1. 仮のユーザtmpuserを削除し, /home/tmpuserを削除する ``` ### (ユーザyourfavoriteにて) sudo userdel tmpuser sudo rm -rf /home/tmpuser ``` 以上でユーザ名の変更は完了です。 #### 2) サーバ名を好きなものに変更するには 次の手順で可能です。 - [ホスト名変更 Ubuntu 18.04 LTS : ホスト名を設定する : Server World](https://www.server-world.info/query?os=Ubuntu_18.04&p=hostname) ``` sudo hostnamectl set-hostname yourhostname ``` #### 3) 余談 私の場合、この後のサーバ設定などにansible, perlのcpanmを用いるので、それらが利用できるように関連パッケージをインストールします。 ```sudo apt update && sudo apt install python gcc make cpanminus``` DropboxやGoogle Driveなどのクラウドストレージとのファイルのやり取りには、CUIのrcloneが便利です。 - [rclone \- rsync for cloud storage](https://rclone.org/) --- ### 【読んだ本】 豊田章男が愛したテストドライバー - 2019-02-22 URL: https://remoteroom.jp/medialog/2019-02-22_book-b091gcbtjq/ 日本の自動車は、第二次世界大戦後に輸出が本格化。海外での想定以上の道路環境・利用環境から洗礼を受け、工業製品&サービスとして成長が進んだ。また、レースでの勝利が販売力に影響することもあって、各日本車メーカーは、国内外の自動車レースに参加してそれぞれの威信をかけた戦いに突入、車の調律に長けたレーシングドライバーやエンジニアが育ってきた。 日本の自動車文化が上記のように若々しい頃からの複数の関係者や、そしてトヨタ現社長からの語りを多く集積して、この本は形作られている。タイトルが示す主人公たるテストドライバーは成瀬弘という方で、LEXUS LFAテスト中のドイツ・ニュルブルクリンク近くの一般道での事故で亡くなった。この2010年当時の報道をうっすらと覚えている程度が、私の本書に関する事前知識である。 読んでみて、どうだったか。成瀬弘と豊田章男をはじめ、いい車を作ろうとする人々が切磋琢磨しあう情景からの熱放射により、こちらの心が奮い立たされる話です。ふたりの一種の結晶でもあるLFAについてこれまで深くは知らなかったが、物理性能のみならずその成立過程からしても、トヨタ系列の会社の魂に値する象徴的な存在なのだな……。 本書は、淡泊にいえば巨大企業の再生物語なのかもしれないし、ひとが自動車を嗜好する“文化”を確認し改めて心の原点に文化を宿した、個人個人の物語なのかもしれない。これをどう捉えたとしても、現在進行形の話であることには変わりがない。自動運転やMaaS (Mobility as a Service) といった変化により、自動車の幅が広がってもきているこの時代には、トヨタ現社長がどういう旗を揚げて「もっといいクルマづくり」をもっと進めていくのか、トヨタという企業体がどういう新潮流を社会に示すのか、見ていける楽しみがある。 --- ### 【読んだ本】 日本の没落 - 2019-02-19 URL: https://remoteroom.jp/medialog/2019-02-19_book-b07d35xck6/ 比較的長い時間をかけて噛み砕かねばならぬ、私にとって馴染みが薄いジャンルの高濃度な新書。だがしかし知的におもしろかったものだから、2度読み通した。 ドイツの哲学者、[オスヴァルト・シュペングラー](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%82%B9%E3%83%B4%E3%82%A1%E3%83%AB%E3%83%88%E3%83%BB%E3%82%B7%E3%83%A5%E3%83%9A%E3%83%B3%E3%82%B0%E3%83%A9%E3%83%BC)の著書『西洋の没落』 (1918年に第1巻出版) には、西洋文化の本質そして没落までが描かれているという。その予言的な内容を、100年後の現代の情勢に照らしながら紐解き、検証を進めていく。 シュペングラーが影響を強く受けたという、ゲーテの思想やその作品『ファウスト』からの論理展開も多い。しかし、この辺りの事前知識を持たない私にとっても、著者の話法は平易で意図はクリアであり、頓挫する程のとっつきにくさ・難解さを感じることはなかった。現代における都市化、グローバリゼーション、少子化、金融化といった現象に対し、『西洋の没落』に基づく解釈を著者が加えてゆくところの切れ味が圧巻だ。 分量的には西洋の没落についてが多くを占め、タイトルの『日本の没落』は、今時のキャッチーさを少々狙った命名によるのかもしれないが、西洋の没落が日本へ巡ってきたのではないかという著者の主張は説得力が強く、腑に落ちるもの。本書から私が得た知的な養分としては、人の一生に、数千年に渡る視野角をもたらす源泉とは、文化を洞察すること、存在するものについて (1つの方法として現存在と覚醒存在に分離して) 批判的に考えること。これが哲学なんだな……と再認識した。 --- ### 「IDCFクラウド個人向けサービス終了」なので、catch allな自ドメインメールサーバを他VPSへ移行した手順 - 2019-02-16 URL: https://remoteroom.jp/diary/2019-02-16/ IDCFクラウドのVPSで運用していた自ドメインのメールサーバを、2019年3月31日に実施される[IDCFクラウドの個人向けサービス終了](https://www.faq.idcf.jp/app/answers/detail/a_id/944/c/12)に備えて、この度WebARENAのVPSへ引っ越ししました。引越時の手順を簡単に記録しておきます。 なお、このメールサーバは、自ドメインに届くすべてのメールを外部の別メールアドレス (GmailとOutlook.com) に転送するだけの役割です。そのため、メールのサーバへの保存 (スプール) は行わずcatch all的な転送機能を有効化しています。 #### 概要 - 移行元のサーバサービス: 2017年7月に契約した、[IDCFクラウド Light.S1](https://www.idcf.jp/cloud/spec/vm.html) (1vCPU, Mem 1GB, SSD 5GB, 300円/月) - 移行先のサーバサービス: [WebARENA VPSクラウド 新1G-SSDタイプ(KVM)](https://web.arena.ne.jp/vps-cloud/) (1vCPU, Mem 1GB, SSD 50GB, 360円/月) - メールサーバのOS・MTA: 新旧ともに、Ubuntu 18.04 LTS + postfix - 対象ドメイン: remoteroom.jp - 権威DNSサービス: Google Cloud DNS ##### 私的な余談 上記のメールサーバ用のIDCF Light.S1 (SSD 5GB) のほかに、もう1台、ウェブサーバ用にストレージ大きめのLight.S1 (SSD 15GB, 500円/月) を借りていましたが、私が個人的趣味でやっているウェブサイトに、サーバを別途1台立てておくほどのアクセスや実験需要なんて皆無。この引越を契機に、サーバ2台をWebARENAの1台に集約することにしました。サーバ代は月額300+500円から360円に軽減です。 #### メールサーバ移行手順 以下、新メールサーバでの作業です。 ##### メールサーバ切り替え前 1. postfixをインストールする (インストール途中で入力する「System mail name」を間違えた場合は、後ほど /etc/mailname を修正すればよろし) ```bash $ sudo apt install postfix $ postconf | grep "mail_version =" mail_version = 3.3.0 ``` 2. /etc/postfix/main.cfに次の設定を追加する ```bash $ sudo vim /etc/postfix/main.cf $ diff /etc/postfix/main.cf.original /etc/postfix/main.cf 30a31,37 > smtpd_tls_security_level = may > smtpd_tls_received_header = yes > smtp_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key > smtp_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem > #smtp_tls_CAfile = > smtp_use_tls = yes > 45a53,56 > > virtual_alias_domains = remoteroom.jp > virtual_alias_maps = hash:/etc/postfix/virtual_users > ``` 3. /etc/postfix/virtual_usersに自ドメインのメール転送設定を追加し、その後にvirtual_usersのデータベースを生成する ```bash $ sudo vim /etc/postfix/virtual_users $ cat /etc/postfix/virtual_users @remoteroom.jp 転送先1@gmail.com,転送先2@outlook.com $ sudo postmap /etc/postfix/virtual_users $ ls -al /etc/postfix/virtual_users.db # ファイルの存在・日時を確認 ``` 4. /etc/aliasesにローカルユーザのメール転送設定を追加し、その後にaliasesのデータベースを生成する ```bash $ sudo vim /etc/aliases $ cat /etc/aliases ### See man 5 aliases for format postmaster: root root: mah mah: 転送先1@gmail.com,転送先2@outlook.com $ sudo newaliases $ ls -al /etc/aliases.db # ファイルの存在・日時を確認 ``` 5. postfixの設定の構文チェックをしたあと、postfixを再起動する ```bash $ sudo postfix check (エラーがなければなにも表示されない) $ sudo systemctl restart postfix $ sudo systemctl status postfix # 起動状態を確認 ``` 6. 新メールサーバ上でmah@localhost (mahは存在するユーザアカウントの一例) 宛のローカルなメール送信テストを行い、設定した転送先へのメールの配送「status=sent」を```$ sudo tail -f /var/log/mail.log```で確認する ```bash $ sendmail mah@localhost From: anonymous@example.com To: mah@localhost Subject: test hello world . ``` 7. 上記の送信テストでローカルメールの配送「status=sent」が確認できたあと、DNSのMXレコードを切り替える DNSのMXレコードを切り替えるとインターネットから新メールサーバにメールが届き始めます。したがってMX切り替えの前に、インターネットから新メールサーバへのSMTP通信 (25/tcp) が行えるよう、新メールサーバ側のファイヤウォール設定等を変更しておく必要があります。 DNSの切り替えは、次のAレコードの設定を予め行っていましたので、 ||DNS名|タイプ|TTL(秒)|データ| |---|---|---|---|---| |旧|mail-idcf.remoteroom.jp.|A|86400|AAA.AAA.AAA.AAA| |新|mail-webarena.remoteroom.jp.|A|86400|BBB.BBB.BBB.BBB| 新メールサーバでのローカルメール配送が確認できたあと、MXレコードを次のように変更しました。 ||DNS名|タイプ|TTL(秒)|データ| |---|---|---|---|---| |変更前|remoteroom.jp.|MX|86400|10 mail-idcf.remoteroom.jp.| |変更後|remoteroom.jp.|MX|86400|10 mail-webarena.remoteroom.jp.| ##### メールサーバ切り替え後 1. しばらくの間、旧メールサーバと新メールサーバでのメールの配送状況を```$ sudo tail -f /var/log/mail.log```で確認する 2. 数日後、旧メールサーバへ完全にメールが配送されなくなったら、旧メールサーバ (のpostfix) を停止する #### 本日の一枚 ボンボンなチョコレート、美味しいです。 --- ### Termux (Android) にHugoとhtml-minifierをインストールする手順 - 2019-02-15 URL: https://remoteroom.jp/diary/2019-02-15/ 静的サイトジェネレータの[Hugo](https://gohugo.io/)をTermux環境へインストールする手順をご紹介。ちなみに[Termux](https://termux.com/)とは、Android上でとっても手軽にLinuxターミナルを実現してくれるアプリです。Chromebookでも愛用しています。 Hugoのインストールは、手元のAndroid何台かでやってきたのですがいつも忘れてしまうので、改めてメモっておきます。ちなみに、2019/02/15時点で確認した内容です。 #### Hugoのインストール手順 自力コンパイルもできるようですが、現時点で楽なのは、次のサイトで紹介されているパッケージインストール手順だと思います。コマンド部分を抜粋します。 - [GitHub - holehan/termux-extras: The missing termux packages feat. Hugo and sift](https://github.com/holehan/termux-extras) ### apt sourceを追加する $ pkg install curl gnupg $ mkdir -p $PREFIX/etc/apt/sources.list.d $ echo "deb https://termux.holehan.org/ termux extras" $PREFIX/etc/apt/sources.list.d/holehan.list $ curl https://termux.holehan.org/holehan.key -o holehan.key $ apt-key add holehan.key $ rm holehan.key ### Hugoなどのパッケージをインストールする $ pkg install bash-completion man hugo Hugoの動作確認をしておきましょう。 $ which hugo /data/data/com.termux/files/usr/bin/hugo $ hugo version Hugo Static Site Generator v0.54.0/extended android/arm BuildDate: unknown #### html-minifierのインストール手順 Hugoと併せて使用することがある[html-minifier](https://github.com/kangax/html-minifier)を、Termux環境へインストールする手順です。 $ pkg install nodejs $ npm install html-minifier -g html-minifierの動作確認もしておきましょう。 $ which html-minifier /data/data/com.termux/files/usr/bin/html-minifier $ html-minifier --version 3.5.21 #### 本日の一枚 --- ### 【読んだ本】 2019年版間違いだらけのクルマ選び - 2019-01-11 URL: https://remoteroom.jp/medialog/2019-01-11_book-b07lg368rj/ 私にとって年末年始恒例の読書本で、特集と数十車種分のインプレッション記事を通読することで、車社会の最新トレンドを整理する。今回は冒頭『PART1 2019年度版特集』の発する熱量が大きい。 その中の「第一特集 トヨタはクルマをどう変えるか」では、昨今話題のコネクティッドカー、MaaS (Mobility as a Service)、カーシェアリングといったテーマで、トヨタや他社も含めた世界最先端の状勢を伝えている。また、トヨタは[2020年東京オリンピックのワールドワイドパートナー](https://tokyo2020.org/jp/organising-committee/marketing/sponsors/toyota.html)であり、オリンピックの大会運営や選手村での移動に、未来を見据えたどのようなモビリティーが投入されるのか注目とのこと。 日本の地方都市の1つに住み、週末にだけ古ーい自家用車を運転するぐらいの私は、上記特集で述べられているような状勢を実生活において感じることは今はない。しかしたとえば携帯電話は、音声通話する電話だった当初から、普及率を上げながら数世代で、多種多様なサービスを享受もできる情報機器へと変貌した。 もしかすればクルマも、ある種の情報機器の様相を帯びてきたならば、その持ち前の移動力に他のサービスを掛け合わせての利用も当たり前に可能な、大きな移動ガジェットになってたりして。[MBUX](https://www.webcg.net/articles/39719)のようなユーザインターフェースは、この変貌を予感させるなあ。 --- ### 【読んだ本】 アイの物語 - 2019-01-03 URL: https://remoteroom.jp/medialog/2019-01-03_book-b00suu9lxy/ 知能として完全なロボットの文明が繁栄し、他方、人間の勢力が地球上でメジャーではなくなっている未来の物語。この物語の中では、アイビスという人型のロボットが、語り部を業としている人間の若者に語り部をする。そこでロボットから語られる複数の物語は、本書の著者の、AIやロボットと人間の関係性をさまざまに描いている他のSF小作品であるらしい。 本書を読み進めると、このような多重構造の物語に入り込みながら、「私たち人間の本性とはどのようなものか」という万年のテーマに向かい合わざるを得なくなる。感想としては、愚直な言葉で述べるしかなく、本書は想像をかき立てる素晴らしい物語だなと思った。 また、シンギュラリティの達成がほぼ確実視される一方、肉体的・知能的スペックがさほど向上するわけでもない人間の、種としての存続の有り様は今と未来では大きく違っている可能性を感じる。このような未来でも、「物語」という、人が人のあり方の理想を描き伝承する行為を、絶やさないのが人間なのではないかという著者の想いに共感する。そういえば、物語への着目は書籍『[20億人の未来銀行 ニッポンの起業家、電気のないアフリカの村で「電子マネー経済圏」を作る]()』にもあった。「ものがたり」は人間の本性に触れるための大切なキーワードなのかもしれない。 --- ### 【読んだ本】 情報戦争を生き抜く 武器としてのメディアリテラシー - 2018-12-20 URL: https://remoteroom.jp/medialog/2018-12-20_book-b07k89mwyq/ 情報世界でのさまざまな「情報」は、たとえば、地理的に遠い別の大陸で起こる事件に関してのものだから私の日常とは無関係、と見切れるものではもうない。私たちはそれを手元のスマホから知覚できて、なんにでも意見を付けて他の人へすかさず拡散できるゆえ、「情報」の影響を私たちの行動や思考は受け合っている。 この作用は、地球上に情報を行き渡らせているIT (情報技術) の賜物であるが、この技術の威力が虚偽を含み陽動を企む類の情報と合わさって発揮されるとき、私たちは、大波に漂う小舟のように翻弄される。 本書を、私は、このような情報戦争の構図を読み解くための解説書だと捉えた (著者が発行する[津田マガ](http://tsuda.ru/category/tsudamag/)の読者としては、著者がメルマガで紹介してきた朝日新聞論壇委員活動の内容をまとめあげ、本書のベースにしてあることがすぐにわかる)。 著者は、「大量の論考に目を通す中で見えてきたのは、ネットの情報を汚染させている勢力は次の4種類に分けられるという事実である」として、 1. 義憤に燃えた確信犯 2. 世論工作業者 3. ビジネス目的のネットメディア 4. 中間層・善意の拡散者 という分類を本書の冒頭で示し、論述していく。このような勢力が織りなす複雑な様相を、情報戦争のリアルを知るため (そしてわかっているとしても冷静なる再自衛と精度高い情報精査のために)、広く一読をおすすめします。 また、私個人として、特に興味が出てきたことは次の通り。ファクトチェックの運用とそこに計算機をどう利用できるかが気になる。 - 計算機による記事生成はどう発展していくだろう (ストレートニュースの生成以上に可能なことはなにか) - これまで以上に重要性が高まるであろう、ファクトチェックの組織的な運用法 - ファクトチェックをどうすれば計算機で行うことができるか --- ### シンギュラリティサロン #32「人工痛覚回路はシンギュラリティか?」に行ってきた - 2018-12-01 URL: https://remoteroom.jp/diary/2018-12-01/ シンギュラリティサロン #32「人工痛覚回路はシンギュラリティか?」に行ってきまして、超簡単に報告です。この催しには初めて参加しました。 #### 概要 - 公式URL: https://singularity-salon-32.peatix.com/ - 講演: 「人工痛覚回路はシンギュラリティか?」 - 講師: 浅田 稔 (大阪大学大学院工学研究科 教授) - 日時・場所: 2018/12/01(土) 13:30〜15:30, グランフロント大阪 ナレッジサロン7F プレゼンラウンジ - 主催: [シンギュラリティサロン](http://singularity.jp/) #### 感想 内容を自分なりに要約すると、強力な計算パワーを用いて、機械に情報の認識能力をもたせることが出来ている現状をふまえつつ、ロボットに意識をもたせる研究の第一人者が、意識に関する先行研究の紹介を交えながら、演題の「人工痛覚回路はシンギュラリティか?」へ迫っていくものである。身体的認知・痛覚があることが、人間に社会的認知をもたらしているのではという仮説が前提にあるようだ。 会場は、洗練された会員制サロンの奥にあるスペース。雰囲気は上の写真のように、距離ほどほどで良い感じにカジュアル。講演は論理的かつ早口でぐんぐん進むが、MacBookから提示されるスライドが全部で160枚程とか (動画も随所に貼られている)、そのファイルサイズが1.6GBというデータ量の講演が1.5時間で完遂できるはずはなく、実質途中で時間切れ。今回は全体の4割ぐらいで終わったのかもしれない。続きの開催が期待されるところ。 最後の質疑応答で講師はこう述べていたように思う。 - 意識を説明する理論は様々あるが、そこから設計理論に行けるかは別。設計理論にできるもの (ロボットの意識設計に使えるもの) に自分は関心がある - 人工痛覚回路を有するロボットの扱いは倫理観に照らしてどうなるかという問いには、まだ答えられないが、ロボットを用いる内容や分野によって、回路を持つロボットと持たないロボットとを違えて対応することになるのでは 知的な刺激と、人間の知性を理解する静かな興奮を得られる参加であった。自分に幼年期の子どもがいて日々の成長に驚かされているためか、ロボット研究の面からも、人間の発達とは大きな謎の集まりであることを認識した。 #### 参考文献 講演の中の参考文献の紹介で、メモできた分をリンクしておく。 - 感情とはそもそも何なのか:現代科学で読み解く感情のしくみと障害 - 意識と脳――思考はいかにコード化されるか - ロボットという思想 脳と知能の謎に挑む - 「心」はからだの外にある―「エコロジカルな私」の哲学 --- ### 【読んだ本】 戦略参謀の仕事――プロフェッショナル人材になる79のアドバイス - 2018-11-30 URL: https://remoteroom.jp/medialog/2018-11-30_book-b0797p8vw4/ 印象として、まさに戦略参謀の職に就いているか就こうとしている者への、直球なアドバイス。人間が持つ性格面での弱点を、いかに組織運用でカバーするか。参謀役としての判断や行動が要求される場面の、具体例が現れる部分では、私自身の少しばかりのマネジメント経験を思い返し、計画的内容の共有や根回しが、ぶっちゃけ下手だったなぁ……と不足点を振り返ったり。 正しい作法でのPDCAサイクル (本書では「企画→実行→検証→“改善”」と訳していることに留意) を回すことが、価値創出する組織の活動の基礎であり、このPDCAサイクルが根付かなければ長期の存続はないよという主張を読み取り、僕は納得しかない。また、自分一人なら比較的容易にできるかもしれないが、二人以上からなる社会の小さなスケールから、このPDCAを皆で回せる環境づくりを行うことが、個人としての毎日の生きがいの秘訣のような気がしてきた。ビジネス活動に限らず。 本書で引用されている偉人の言葉で、気に入ったものを抜粋しておきます。[Thomas J. Watson](https://ja.wikipedia.org/wiki/トーマス・J・ワトソン)の言葉で、「rate (確率)」と言っているところが特に好き。 > 成功の確率を増やしたいならば、失敗の確率を2倍にすることだ > > If you want to increase your success rate, double your failure rate. --- ### Ansible特集を読みたくて 〜Software Design 2018年12月号〜 - 2018-11-27 URL: https://remoteroom.jp/diary/2018-11-27/ 構成管理ツールの[Ansible](https://www.ansible.com/)をより賢く使えるように、そして管理をGUI化する[AWX](https://github.com/ansible/awx) (Ansible Tower) にも手を出してみたいと思い、冒頭特集「[超速]入門 Ansible インフラの構築・運用を“コード”で自動化」を目当てに『Software Design 2018年12月号』を購入。雑誌を購入したのは数年ぶりだ。 いま自分は、各種の定型業務を進めるための手順書 (.txt or .xlsx) や、CUI操作を省力化するbashスクリプトなどが、数年分の地層となり、継承されているオンプレミス環境のIT仕事に就いている。このような現状が定着した現場で、Ansibleをもっと多く利用する試みが、業務改善の弾み車をもう一息回すきっかけにならんかなー、と企んでいるわけだ。 いくつかのトラブルを実際に経験してきた教訓として。手動の度合いが大きいオペレーションでは、手順書から外れてミスをする確率をゼロには出来ないし、暗黙知や属人性が生まれる隙が伴う。そして最も重大だと考えているのは、よほどの余裕がない限り、人間たる創造性を発揮する方向へ担当者の意識が向かなくなること。 ……過去の苦い記憶とともに大きなことを書いた気がするが、ともあれ強く思うのは、楽できる部分は徹底的に楽したいよね!と。connpassにある[Ansible ユーザー会](https://ansible-users.connpass.com/)もウォッチしておこうっと。 - [\#ansiblejp \- Twitter検索](https://twitter.com/search?q=%23ansiblejp) --- ### 現代の情報世界の混沌さ - 2018-11-10 URL: https://remoteroom.jp/diary/2018-11-10/ 今夜の私は、遠くない繋がりにある人がネット情報に入れ込んでいる様を発見し、ひどく驚いている……。静観しておけるのか、心の第一反応に沿って何らかの行動を起こすのかどうか、わからない。orz さて、[私が以前“フリーの技術者”だった時代に関連ウェブサービスを勝手に作らせてもらった](https://ddnavi.com/interview/30560/a/)という関わりのある、[津田大介さん](http://tsuda.ru/)の新書『情報戦争を生き抜く 武器としてのメディアリテラシー』が11月13日に発売だ。先日発行のメルマガ『[津田大介の「メディアの現場」](http://tsuda.ru/category/tsudamag/)』vol.324では、「はじめに」と第1章がまるまるプレ公開されており、続きが待ち遠しいおもしろさがあった。津田さん渾身の本書は、ネットが絡まないことはない現代の情報世界の混沌に私たちが対応するための、良い地図になると思うのだ。 --- ### 【読んだ本】 Xプライズ 宇宙に挑む男たち - 2018-10-25 URL: https://remoteroom.jp/medialog/2018-10-25_book-b071v5vcr6/ 電子版だと書籍としてのボリュームを意識せずに読み始めることもでき、内容のおもしろさとの掛け合わせで、本書から長い時間逃れられなくなります。また、自分のなかの創作意欲や挑戦欲が減退していても、読後はその種火がメラメラと復活している恐れがあり、本書は要注意です。 自分達で宇宙を目指し、蒼い地球を見るために懸命な努力をする人たちの、純粋さ・不屈さが、とにかく印象に残っている。 2つ以上の学問分野を極め、複数学位の取得が当たり前のような知的な鍛錬を経てきていたり、資金などのリソースがまったく潤沢でなくても、目標に驀進し続ける精神力。本書を読んで、宇宙事業を民間で実現しようとするAnsari XPRIZEのような、夢を追う取り組みを見る僕の目が、より憧れ満ちたものに変わったことは間違いない。開拓者精神とはこうであるのかと。 本書で描かれたシーンを含むXPRIZE公式の動画 (5分31秒) が、YouTubeにあったので貼っておきます。 --- ### 【読んだ本】 アンダーグラウンド・マーケット - 2018-10-07 URL: https://remoteroom.jp/medialog/2018-10-07_book-b01igr0ta4/ 本書が描く東京の日常では、円 (表) とN円 (裏) のふたつの経済圏がモザイク模様をなしていて、経済的な裾野の側に広がる後者において、ソーシャルな信用ランクが生活階級を司る世界。この階級差による制約をできるだけ受けず生きていくためには、自身の信用ランクを高めることが必然となる。 実際にいま中国の一部の都市が、市民生活に信用ランクを導入している話をネットニュースで見聞きする。移民の比率が今後も高まっていく中、東京で“信用ランク”が浸透するとき、移動手段として自転車がメインであるような、小規模なウェブ制作の業界で暮らしている主人公らの生活はどのような様相であるか。自分は東京の地理に疎いので自転車移動の際の細やかな描写はともかく、業界としてはすこしかじったことのある話であり、ウェブやサーバに関わる描写は臨場感に富んでいておもしろかった。 都市でグローバリゼーションが突き進むことも、スマホの一操作で行える対価の支払いも、今もうあたりまえに来る。これらに加え、第二の貨幣と信用ランクの影響も絡み合う未来のひとつを描こうとするのが本書の試みであり、また、仮に明暗分からないどんな未来が現実になろうとも、人々の逞しい姿がそこにあることも想起させる。 --- ### 【読んだ本】 不死身の特攻兵 軍神はなぜ上官に反抗したか - 2018-10-02 URL: https://remoteroom.jp/medialog/2018-10-02_book-b077d19jsr/ この飛行は死ぬことが目的、と命令される極限の状況で、人はどうするか。 前半、論調は静かなのだがとても重苦しくさせられる。私の心は、特攻隊で飛んで亡くなった自分の親族本人 (四親等の距離になる) や周囲の気持ちに想像で迫ってみようとしてみたり、現代に生きている者として、社会や所属組織における主従関係にこの状況をさまざま当てはめてみたりした。そうして、「寿命の中で真剣に考え、生きるとはどういうことか」、問いかけられている気持ちになる。 後半の、日本が特攻隊を生むに至った、戦後70年を過ぎたゆえに行われる洞察のくだりは、するどく明瞭だ。『社会』と『世間』の区別から始まる、ここで論じられる考え方は、自分自身を客観視する力の糧になると思う。これはたとえば十代の私にも勧めたい、指針的な書のひとつ。 --- ### 【読んだ本】 最悪の事故が起こるまで人は何をしていたのか - 2018-09-24 URL: https://remoteroom.jp/medialog/2018-09-24_book-b075jf2hhq/ 若年層に属した頃の自分の記憶に深いスペースシャトルの2つの事故や、石油掘削基地、航空機、殺虫剤製造プラントといったさまざまなところで起こった多数の事故を、組織的・人的要因を軸に分析している。 複雑なマシンフロンティアの拡大により成立している現代では、人は過去の事故から貴重な教訓を得て、それを繰り返し活かさねばならぬ。著者のこうした思いを強く感じ取る。また、人のミスの仕方を広く知るための【失敗知識データベース】 ([1] 失敗に関する情報や調査結果が当事者等から公開され、[2] 第三者が網羅的に参照できる仕組み) の存在価値が、本書を通じて非常によくわかる。 --- ### 【読んだ本】 コンタミ 科学汚染 - 2018-09-05 URL: https://remoteroom.jp/medialog/2018-09-05_book-b08mf2lkpl/ 大学研究室のM1学生と指導教員が、疑似科学に絡むミステリーを解明するために動く。これはいわゆるワトソンとホームズの王道スタイル。また、昨今の“科学”ゴシップも取り入れられていたり、一般的な研究室の組織構造や師弟関係、論文の査読システムやディプロマミルに触れている部分があり、学術界とはどのような世界なのかを紹介する軽快な物語にもなっている。 私がなにより面白かったのは、科学の姿と人間の様を鮮やかに対比させることに本作は挑戦し、全体としては重たく、時には軽く、読者を揺さぶってくるところ。後者の一例としては、科学を分かっている者が話術として「血液型」「星占い」を用いて親近感をはぐくむ場面。これは一体どういう心理状況なのかを想像するのはなかなか楽しめる。 --- ### 【読んだ本】 緊急出版! 枝野幸男、魂の3時間大演説「安倍政権が不信任に足る7つの理由」 - 2018-09-02 URL: https://remoteroom.jp/medialog/2018-09-02_book-b07fy4p5mk/ ここ数年の日本国政府にある、重要な各種の問題点を生々しく伝えているのではないかと。どこにも忖度することがなく対照的に広い視野と使命感を持つと感じさせる、野党代表からの演説内容である。演説中にどのように野次が飛び、議長がそれを制し、話者が間合いを取って演説を進行しているかもわかる。知的な議論として、この内容に対する与党の覚悟のある説明が読みたい、と思った。修正なしに文字に残す物として。 --- ### 【読んだ本】 ビッグデータ・コネクト - 2018-08-30 URL: https://remoteroom.jp/medialog/2018-08-30_book-b00v7y7dus/ 所々にある、ソーシャルエンジニアリングを含むハッカー目線での細かな状況描写が、面白さをかき立てていた。作中の真面目な開発エンジニアが、職務に対する義務感から自らをおかしくする様に、少しばかり自己投影してしまうところもある。個人の登録情報や履歴に関する多種多様なデータを、突き合わせることで可能になるデジタルな「名寄せ」が生みかねないものは何か。それらが当人を裏切って不利益をももたらす、『バーチャルスラム』に繋がる世界を想像させた。 --- ### 【観た映画】 カメラを止めるな! - 2018-08-27 URL: https://remoteroom.jp/medialog/2018-08-27_movie-b07jl9j8sm/ 世間で話題の事象に目がない、自称ミーハーな相方に誘われ、本作に関わる前知識をあえて一切得ないようにしてから観てきた。それは正解であった (^_^)。このストーリーは一体どういう構造をしているか?と考えながら観たが、頭を結局こねこねされちゃう感覚を楽しんだのであった。 --- ### 【読んだ本】 世界のエリートはなぜ「美意識」を鍛えるのか?~経営における「アート」と「サイエンス」~ - 2018-08-20 URL: https://remoteroom.jp/medialog/2018-08-20_book-b073s1rjx2/ タイトルにある問題提起から始まり、その理由を3つに分けて説明していく。説明を読んですぐ完璧に納得させられた、というわけではなかったが、本書の最後に達するまでに著者の主張はよく理解できた。混沌に満ちたこの時代において、情報や論理的な判断がコモディティ化した次に、なにが秀でた個人や企業の力の源になるのかと言えば「美意識」、というのがそれだ。昔読んだ『[大局観 自分と闘って負けない心]()』 (羽生 善治) をやや思い出させるところもある。解説される事例のひとつに「魂動」をデザインテーマに掲げて邁進中のマツダが登場し、その部分、車好きとしても楽しめた。 --- ### 【読んだ本】 警備ビジネスで読み解く日本 - 2018-08-10 URL: https://remoteroom.jp/medialog/2018-08-10_book-b07dqg8ts7/ 著者は警備業を社会学の観点から研究している方である。なにげなく本書を読み始めて私は最初に、警備業に関する初歩的な知識に触れられた。一例を挙げると「守衛さん」と「警備員さん」の区別ができるようになった。警備業とは、警備業法に基づく警備の事業であり、そもそもこのような法律があることさえ知らなかったので、知的に新鮮な新書であった。 本書は、日本での警備ビジネスの始まりの歴史からニーズの高まりや紆余曲折を紹介。そこに、警備業の法制度と現場の諸業務の状態が時にはそぐわないことがある乖離の問題や、どのような人々が警備業に従事しており低賃金・下請け・長時間労働といった、労働問題の具体的な縮図があることを描いている。どのような社会問題でもそうだが、構成員に問題の存在・写実を知らせることが社会を前進させうる第一歩だよなあ、と、本書のルポタージュ的側面を意識しながら状況を把握。 そして、2020年に開催される東京オリンピック・パラリンピックが目下の課題として取り上げられる。関係各所での有形・無形の警備は、一体どのような様相になるのだろう。民間から14,000人といわれる警備員自体の確保、期間中の警備員の東京における生活環境の確保……。なお、サイバーテロに関して本書は範疇にしていないが、この対策もある。 --- ### 最近導入したオモチャや本 for 子ども - 2018-08-05 URL: https://remoteroom.jp/diary/2018-08-05/ 4歳と3ヶ月を過ぎたうちの子どものために、最近導入したオモチャや本を列挙してみます。これもごく日常の一コマとして。 #### 【オモチャ】賢人パズル 本屋の子どもコーナーに置いてあった、積み木パズルである。立体テトリスとも言う。実際に遊べる形だったので子どもにやらせてみると、付属の冊子の上で番号順に示されている作例をひとつひとつ作っていく行為に、その場でハマってしまって、このパズルを購入して帰らざるを得なくなった。まぁ、本屋さんの思う壺であろう。子どもが遊ぶ様子を観察していると、大人の目線ではすぐに分かる (見える) 凹凸の組み合わせに、意外に気付いてくれない感じがする。積み木を空間で回転させて組み合わせを試すことに、次第に慣れてくれますように。 #### 【本】ぐんぐんのびる! 東京スカイツリー 断面図と大パノラマ 公共図書館に出掛けた際に見つけて手に取った。折り畳み部分を開いていったときに出てくる、2mあるらしいページの長さと、東京スカイツリーの絵の書き込みの緻密さに圧倒され、自宅に備えておこうと思った本。子どもが現在やたら東京スカイツリーが好きであるため。しかしどうやら、書店のサイトやAmazonでは新品がないようなので、もう絶版なのかもしれない。東京スカイツリーの開業は2012年5月だそうで、ブームとしてはもう数年昔に過ぎたから、本の世界もそれに同期してしまうのかな……というやや淋しい事情を感じたり。 #### 【本】JTBの鉄道旅地図帳 正縮尺版 周辺の鉄道路線の駅の並びを覚えたくなったようで、しかし漢字は未だ読めないので、駅名がひらがなで記載されている書物を探した。すると、妙に子ども向けの本よりも、このムック本の方が情報が整理されていて適してそうに感じられたので購入。難を言えば、休日おでかけ時の子どものリュックには大きいサイズ。路線図は眺めるだけで大人の旅気分も高まるので、リビングでの気分転換にはバッチリ向いている。 --- ### 今年はWeb中継を観ようか 〜第48回みなとこうべ海上花火大会〜 - 2018-08-04 URL: https://remoteroom.jp/diary/2018-08-04/ 本日2018年8月4日(土)の夜には、神戸での花火大会が開催される。いつもなら公共交通機関を使って出かけて、ポートアイランドの公園などから夜空を眺めて約一時間の華を楽しむ。しかし今年は、この特別な猛暑の中、子どもを連れて、混雑をやりくりし場所取りやらをがんばってみる元気が沸かない。 調べてみると、花火大会のWeb中継が行われるらしい。五感に響く花火の迫力や、夏の祭りの臨場感に劣るのは承知の上で、今年はひとつの選択としてWeb中継を観ようか……と、うちは家族と話し合ったわけである。 みなさんもどうぞ、さまざまな形で夏の一夜をお楽しみください! #### 関連リンク - [第48回みなとこうべ海上花火大会 公式サイト](https://kobehanabi.jp/) - [第48回みなとこうべ海上花火大会Live配信特設ページ | イベント | ラジオ関西 JOCR 558KHz](http://jocr.jp/event/hanabi/) #### 最近の一枚 --- ### 【読んだ本】 トヨタ ル・マン 24時間レース制覇までの4551日 - 2018-08-02 URL: https://remoteroom.jp/medialog/2018-08-02_book-b07ffrwfp9/ トヨタ「レーシングハイブリッド」の挑戦の歴史を語る書である。熱い気持ちになりながら読んだ。 技術面においては、自分がこれまで詳しく知ることはなかった、多様な機構をまたぐレース走行時の回生と力行の制御技術の難しさや、超高速からの急減速時に回生するエネルギーの貯蔵術のイメージが多少抱けるようになったことが嬉しい。その量感を、一般家庭の消費電力量何日分に例えているところが新鮮だった。 本書の章は年ごとに区切られており、ほぼ年が変わる度に、たとえば燃料消費量制限を厳しくしていく、高効率化を求めるWECのレギュレーション変更が登場してくる。それは、WECでの技術の進化が自動車技術を牽引していくという意気込みあふれるものだとして、傍目からは好意的に受け取れる反面、レースに関わる人々にとっては毎度、すったもんだの大変につらい試練に違いない。それでも、自動車レースでの挑戦が優れたものを生んできたのは事実であり、これからもずっと続くはず。 私はそして、「なぜ人は一定レギュレーションのもとでの競争が好きなのか」「なぜ勝ちたいのか」という根本的な問いについて深く考えてみたいな (おそらくは生物として経てきた生存競争に関係しているのだろうな) ……と思いつつ、トヨタはまだ参戦をしていないカテゴリー、電気自動車でレースするFormula Eにも、新しい楽しみとして注目せざるを得ない。 --- ### 【読んだ本】 Black Box - 2018-07-27 URL: https://remoteroom.jp/medialog/2018-07-27_book-b076f37frg/ 赤裸々な情報の公開が好まれない風潮を否定できない日本において、真実を知ることの難しさを問題提起し、かつ、その壁の先になにがもたらされるのかを照らす、ジャーナリズムの書だと感じた。 準強姦 (2018年時点の刑法の定義でいうと準強制性交等罪) と認識されるシーンを含む前半は、次のようなことを思い、悶々としながら読み進めた。1) 事件直後の早い段階から専門家 (弁護士・警察など) へ相談すべきではないか。2) 被疑者との接触には極力、代理人を立てるべきではないか。3) メールヘッダの解析をすれば、被疑者の居所が分かる可能性があるのではないか。 しかし、著者が事件を公表するために週刊誌の取材を受ける決意をした後半、メディア記者の情報収集力が加わったこともあり、新たな黒い背景が見え隠れしてくる。被疑者に対する第三者の“忖度”があったゆえに、刑事事件としての捜査が進展しなくなったのではないか。 社会は個人から成り、個人から社会を変えていかなければ、という著者の主張と自身の行動は、本書の存在が示すとおりまったく一致している。それは岩のように重く固く、現代の強い共感を呼ぶものと思う。 --- ### 【読んだ本】 20億人の未来銀行 ニッポンの起業家、電気のないアフリカの村で「電子マネー経済圏」を作る - 2018-07-20 URL: https://remoteroom.jp/medialog/2018-07-20_book-b07dltlwf6/ 物理的である「現実 (エネルギーや食糧)」と人間的な「ものがたり (お金)」の原理原則を、後者は変えられるものとして理解する。その上で、通貨の種類や地域性によって生産活動の対価に大きな差があるという、世の不条理を解消するために、現在進行形で行動する起業家の半生記。とでも言おうか。 最初の“理解”については、著者が青年期からこれまでに何に影響を受けて考え、その理解に至っているか、自身の形成過程をけっこう詳しく述べている。民俗学や文学から会得した普遍的なものが、著者の思考に染み込んでいる様子がうかがえる。人間のしっかりした幹はこうやってできる一つの例だろう。 “行動”については、フィクションの冒険活劇に勝るような刺激と波乱に富んでもいて、いわゆるネットで取り上げられバズりやすい部分なのであるが、本書の一番の価値は、これらの行動が、先に書いた理解に伴ってのものと踏まえられる丁寧な構成と内容であること。タイトル『20億人の未来銀行』がズバリ語っているように、著者が創っていきたい物語を、いったん外化してパックしてあるのが本書なのだろう。 未来に向けた事業構想がちょこちょこ登場しており、これからの展開が心待ちにもなる。著者が影響を受けた書籍8冊の一覧と解説が付いていて、「私ならどう読むだろうか」と逆に辿ることもできそうだ。ちなみに私は、著者とは同じ中学高校に通った同級生という縁があるゆえ、人一倍強い関心を持って彼の書いた書を読み通したことは否定できない。けど、贔屓目にみなくても、確固たる信念と挑戦にあふれる本書は面白いよ。 --- ### 【読んだ本】 みんなの経営学 使える実戦教養講座 - 2018-07-12 URL: https://remoteroom.jp/medialog/2018-07-12_book-b079gq6np2/ 経営学の成り立ちに還り、変遷を辿り、なんのために経営学があるのか、という学びの原点が確認できるような本だ。読書中に読者が抱くであろう疑問や思考に沿うような、やさしい記述がされているように感じる。また、企業や組織、モチベーションの各論にもスポットをあて、どのような働き方だったら自分が価値を感じ、働きがいを得ることができるかという普遍的課題について、頭を整理することもできた。 --- ### 【読んだ本】 たゆたえども沈まず - 2018-06-14 URL: https://remoteroom.jp/medialog/2018-06-14_book-b086kqnw72/ 肉親 (兄弟) の絆・縁の因果を、図太く深い、変わらぬ流れとして描いている物語だった。その兄はフィンセント・ファン・ゴッホ。絵画に人生をたたき込む生き方や、彼を献身的に支える周囲の姿を、私は人間の、自身のさだめを全うしようと真摯にあがく、悲壮で輝きある様として捉えた。 --- ### 【読んだ本】 軌道 福知山線脱線事故 JR西日本を変えた闘い - 2018-05-25 URL: https://remoteroom.jp/medialog/2018-05-25_book-b07bjywxmf/ 2005年4月のJR福知山線脱線事故から受けた衝撃が、当時から関西に住んでいる自分として、いまは薄れていたのは正直事実。しかし分かりやすく記述された本書により、この事故の影響がどれだけ交通機関のルールを大きく変えたか、認識することが出来た。そして“誰か”が理性的に抗っていなければ、この変化は起こっていなかった。 事故後に、JR線に起こった「安全確認とやらで電車がやたら止まる」「遅延が多くなったように感じる」といった変化を思い出した。今はもう慣れたが、逆にこれらを発生させない列車運行が過去は為されていたことになるわけで、一体どういうことだったのかと血の気が引く。 --- ### 【読んだ本】 まるわかりEV - 2018-05-19 URL: https://remoteroom.jp/medialog/2018-05-19_book-4822257363/ 電気自動車に関わる業界の話題を日々、フロー型でキャッチしているとしても、こうしてストック型でまとめられている資料を読み通し、全体を俯瞰し直してみることは重要に思った。自分はビジネスと言うよりは趣味で追いかけている人間だけども。 どの自動車メーカーが抜きん出ているかは、具体的にはさっぱり読めないが、10年後には必ず、自動車の機構や関連サービスのシステムが変容していることはひしひしと感じる。ダイソンやボッシュのCEOのインタビュー記事には、普段知ることがない先見的な見方が述べられていて、興味深かった。 --- ### 【読んだ本】 働く君に伝えたい「お金」の教養 - 2018-05-06 URL: https://remoteroom.jp/medialog/2018-05-06_book-4591147940/ 自身でお金をコントロールする段階では必ず知っておかなくちゃならない教養を、時に経済のマクロな視点 (広い視点・歴史的に長い視点) に立ち返ることが大切だと諭しながら、わかりやすく語っている。本の帯にあるように、一般的には「20代」の時かそれより前の若い時代に読んでおけば、人生の舵取りに役立つ内容に思う。 40代の自分としてこれを読んだのは、先行き不透明からくる経済的不安にどう対応していくかを、見直したかったから。また、作者がダイレクトに述べているわけではないが、「国や経済の状況を正しく認識して心構えし、心を自由にできたら、やり直しは何時でもできる」という意識も強く抱いた。 --- ### 【読んだ本】 ぼくたちはこの国をこんなふうに愛することに決めた - 2018-04-13 URL: https://remoteroom.jp/medialog/2018-04-13_book-b0797tkjvc/ 当たり前の存在や現象やしきたりについて、「過去からそうだったから」以外の成り立ちの理由をしっかり考えなおすのは、実際のところ難しい。それをコピーではなく作ることに挑むとなると、根源やあり方を自ずと考えなおすことになる。 本書では、通常なら「国」と書く「くに」について、これをやってのける。登場する人物や場所は抽象的だったり空想的だけどそれ故に、重ねあわせたり、想像したりといった思考の自由が、読者には存分にある。ふとした時に巡りあう、こんなふうに平易な言葉で書かれている小説が、現代の課題の本質に肉薄する醍醐味を味わう。 --- ### 【読んだ本】 小水力発電が地域を救う―日本を明るくする広大なフロンティア - 2018-04-05 URL: https://remoteroom.jp/medialog/2018-04-05_book-b078k83m1x/ 陸地の高いところから低いところへと流れていく水の位置エネルギーを、電気に変える水力発電。その特に小規模なものを私が気になるわけは、著者が言うように、農業用水路や河川のちょっとした落差で水流が発電を行う様子が、人間的なスケールに即してわかりやすいからだと思う。 本書は、小水力発電の技術や今後の普及に関する俯瞰を行っていることに加え (水車はイタリアが進んでいるんだねえ)、実際に導入している日本の地域の実例を示して、地域に根付くべき小水力発電が、どのような姿勢を持つ組織体でなら運用がうまく行えているかを教えてくれる。ここが当事者ならではの語りであり、貴重なところだと思う。 --- ### 【読んだ本】 営業バンが高速道路をぶっ飛ばせる理由 クルマを分かる本 - 2018-03-30 URL: https://remoteroom.jp/medialog/2018-03-30_book-b01bwliuuw/ 意味深いタイトルだが、道交法の抜け穴を論じているとかではなく。 本書は車の物理学と人間の感性との関わりについて述べていた。ここでの営業バンというのは事実上トヨタ・プロボックス系で、これらには、規格いっぱいの貨物を積んで堅実にそれを運べ、車体には耐久性を持たせつつも価格は低く抑える、という命題が課されたことにより、車の造りや躾に、素直さという良い結果がもたらされていると解説。ゆえに、運転者にとって余計な仕事を増やさず、ストレスが小さいから高速道路を飛ばしていけるんだよと。 プロが行う試乗の評価はこういう風に人間本位なんだと。機械である車を、趣味としてハードウェア・スペックで見てしまいがちな自分を、戒めてリセットしてくれる内容だった。本書で言う“道具感”に着目し、屁理屈考えずに感じたままに、色々な車に乗って愉しむことにしよう。 --- ### 【読んだ本】 暗幕のゲルニカ - 2018-03-27 URL: https://remoteroom.jp/medialog/2018-03-27_book-b07gzln93h/ この読書に入る前に何らかのテレビ番組で観た、妙に印象に残ったモノクロームの絵画。あれがピカソの『[ゲルニカ](https://ja.wikipedia.org/wiki/%E3%82%B2%E3%83%AB%E3%83%8B%E3%82%AB_(%E7%B5%B5%E7%94%BB))』なのかな?と、本書を読み進めるに連れて気になってきて、確認してみると偶然だが事実そうだった。ちなみに読了したKindle本には、なんの挿絵もなく活字だけ。そして自分は絵画に関する知識を特に持たない。したがって、本書での表現は、私に活字から絵画そのものを連想させる描画に成功したとも言える。 20世紀パートでは、ピカソと彼を取り巻く人間関係とともに、第二次世界大戦に突入していくヨーロッパの情勢も描かれている。本書は「史実に基づいたノンフィクション」なわけだが、この情勢の描写が私には意外に強く響いた。すなわち、戦時中に敵軍が生活圏 (仏・パリ) に実際に入り込んでくる、侵略が、都市の文化をどう破壊するのか。また、侵略とは、人間の未来への意識をいかに削ぎ、精神をどれほど弱らせる異変であるか。 時事にまつわる連想として。このような悲劇的な経緯が土地に染みこんでいる文化圏だから、自由や民主主義が貴重であることを理解し 、それを失わないようにするための決意や制度が、なるほど、社会的に強固なのかもしれないとひとり想像したりもする。←公文書改ざんの日本での事象を鑑みて 最後に内容が明らかにされる主人公の方策も含め、本書は、たとえば「敵視」の捉え方を考えさせてくれる。そして、少なくとも素人の私にとっては、芸術作品をみるときに何を知ったらそれを観ることになるのか、ということも教えてくれたかも知れない。 --- ### 【読んだ本】 IoTとは何か 技術革新から社会革新へ - 2018-03-21 URL: https://remoteroom.jp/medialog/2018-03-21_book-b01cj50c2o/ IoTとは何か、技術的な概要を描いてさらに、社会的な方面でIoTの実現や普及にどんなことが欠かせないかを述べている。IoTを実現するには、物たちが個々を識別してどのような権限で参照や操作を行うか、その際の責任はどこに属するか等の界面の諸々を、制度設計に組み込んで運用できなければならない。 なるほどこれは、著者が説明する[ucode](http://www.uidcenter.org/ja/)を使って言うならば、ucodeで紐付けられる諸々たちが作る仮想社会の行動原理を、上位概念から定めていくようなものか。いま社会では、自動運転車が道路上へ進出していく際の制度設計が議論されているところで、この事例は本書が述べるIoTとの類似ケースであろう。自動車好きとしても当然、注目していきたい。 --- ### 【読んだ本】 シグナル&ノイズ 天才データアナリストの「予測学」 - 2018-03-10 URL: https://remoteroom.jp/medialog/2018-03-10_book-b00hwp6mxa/ 物事を予想する際には、不確実性や予想値の幅の見積もりが本来伴うし、ノイズを意図に沿わせ解釈してはならぬ、ということを強く認識させられる本。分厚くて、読み終わるのに時間がかかった。米国では、GDPなどの経済指標、政治動向も、賭けの対象になっているということに驚いた。また、地球温暖化の予想の検証や、テロの発生可能性をシビアに見積もることも試みている。予想の科学、おもしろい。 余談として。部屋に不在がちな人に対して“存在確率が低い”と、僕らはふざけて言ったりするけれども、これはある意味本質なのだ。生活や業務においても、常に打率や防御率を算出するベースボールのように、事象は確率的に発生すると捉えたうえで振る舞ったり対策を用意する方が、人間の営みとして安泰な気がした。 --- ### 3個目のノイズキャンセリング・イヤフォン、SONY WI-1000Xの所感 - 2018-02-14 URL: https://remoteroom.jp/diary/2018-02-14/ #### ノイズキャンセリング機能は欠かせない派 外で音楽など聴いて楽しむとき。パッシブな遮音だけではなくてアクティブな遮音を、すなわちノイズキャンセリング機能 (NC機能) を積極的に効かせたほうが自分にとっては良いな、という考えにいつぞやか切り替わり、1個目はたしか[audio-technica ATH-CKS90NC](https://www.audio-technica.co.jp/atj/show_model.php?modelId=32)、2個目は[BOSE QuietComfort 20](https://www.bose.co.jp/ja_jp/products/headphones/earphones/quietcomfort-20i-acoustic-noise-cancelling-headphones.html)というNC機能付きイヤフォンを愛用してきた。以前は、前者のマジな遮音タイプで耳栓代わりにもなるSHURE E5cやSE530にも投資してきたが、音量を上げすぎずできるだけ通常のレベルで聴こうとする場合、もう、電車の車中やカフェといった賑やかな店内における、いわゆる現代の騒音には結局勝てないのよね……。 とうとう先日、BOSE QuietComfort 20のコードが断線しかけて音がブツブツ途切れるようになった。そこで3個目のNC機能付きイヤフォンとして、ネックバンド型の[SONY WI-1000X](http://www.sony.jp/headphone/products/WI-1000X/)と、別メーカーのイヤーピースを調達した。このイヤフォンを選んだポイントは、1) コードが邪魔にならないBluetooth・無線接続であること、2) 試聴したら良い意味でデジタルっぽい着色の少ない音質に感じられたこと、さらに 3) NC機能をスマホアプリからコントロールできる、という今風な使い方に興味が沸いたからである。 なお、自分が現在使っているスマホは[HUAWEI honor 8](https://consumer.huawei.com/jp/phones/honor-8/)で、Bluetoothでの音声転送コーデックとしては標準的なSBCにしか対応していない。つまりLDAC転送やハイレゾ対応を謳うSONY WI-1000Xのスペックを、あまり活かせていないかもしれない。それでもWI-1000Xの音は全域キレイで、低い音域の圧というか空気感も嫌味なく聴かせてくれ、心地良いので満足だ。ネックバンド型であることの不便は意外にもなく、イヤフォンを耳から外したとき、それをそのまま首から垂らして構わないという使い勝手は、ほんと実用的である。 #### 私の状態に合わせてイヤフォンのNC機能が切り替わる ここでは、SONY WI-1000XのNC機能を専用アプリからコントロールする、特に“アプリがNC機能を自動でコントロールしている”という点が、実際使ってみて面白かったので、実使用1日目ながら簡単にレポート。 Androidの場合、スマホに「[SONY | Headphones Connect](https://play.google.com/store/apps/details?id=com.sony.songpal.mdr)」というアプリを入れてSONY WI-1000Xを使用すると、アプリの画面にて、「アダプティブサウンドコントロール」という機能がONになっていることがわかる。この機能は、イヤフォン使用者の状態をスマホのセンサーで検知して判断し、想定される場面によって最適なNC機能が働くようイヤフォンをコントロールするものだ。デフォルトでは、NC機能の状態が次のような4つの場面に合うどれかに切り替わるようになっている。 |場面|NCのレベル|ボイスフォーカス| |---|---|---| |止まっています|ノイズキャンセリング|ON| |歩いています|外音取り込み12|OFF| |走っています|外音取り込み20|OFF| |乗り物に乗っています|ノイズキャンセリング|OFF| ##### 電車から降りて歩き始めると…… 今朝の通勤時、僕は電車に乗ってポッドキャストなど聴きながらそのまま電車を降りて、駅のホームを歩き出したら、上記アプリの検知状態が「乗り物に乗っています」から「歩いています」に自動で切り替わったようで、SONY自慢の強力なノイズキャンセリングが効いた状態から、安全な歩行が出来る程度に外音がちゃんと聞こえる状態に勝手に切り替わった。この機能すげえ!と独りびっくりしたのだった。ちなみに、各状態にプリセットされている、NCの強弱程度とボイスフォーカスのON/OFFの組み合わせは、好きなようにカスタム設定できるようである。さらなる希望として。もしも、Headphones ConnectのNC機能を外部アプリ (例: [Tasker](https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm)) からも制御できるようになったら、音楽再生時にはNCをがっつり効かせる、ポッドキャストを流し聞きしているときは外音を比較的多めに混ぜる、なんていう切り替えも自動化できて楽しめるかもしれない。 今回の体験は、身近な物の使い勝手が、スマホに搭載された各種のセンサーとデータの蓄積を組み合わせることで、かゆいところに手が届く様に変わるのかも……、という未来の片鱗を感じさせるもの。この感覚を、何気なく買い替えたイヤフォンから得られるとは思わなかった。 #### 追記 (aptXの音はたしかにロスが少なそう) [2018-02-22] カーナビ用に使っているタブレット、[ASUS ZenPad 3 8.0](https://www.asus.com/jp/Tablets/ASUS-ZenPad-3-8-0-Z581KL/)が、Bluetooth音声転送コーデックとしてaptXに対応していることに気付いた。そこでこれとSONY WI-1000Xを繋いで聴いてみたところ、たしかにSBCよりも、「音源により正確」っぽい音をWI-1000Xが出すことを把握できた (音源と言ってもSpotifyのストリーミングだが)。なるほど、これは既知の音楽も聞こえ方が違っちゃう。次のスマホはハイレゾ&aptXなどの対応機種が欲しくなる。 --- ### 【読んだ本】 恋愛を数学する - 2018-01-18 URL: https://remoteroom.jp/medialog/2018-01-18_book-b06vwvwwf9/ 世の中のさまざまな特性を数学が表現していることは、一応知っている。だが「恋愛」に関する本書で紹介されている関数は新鮮で、おもしろかった。関数の数式が出てくるわけではないので、厳密に理解したわけではなくて概念を掴んだ感じであるが。 たとえば、最高の相方と出会うタイミングは、出会うために活動する期間のどのあたりが確率的に最も高い、なんて、普通は計算しないで人は動く。しかし、モデルを仮定しての確率論では確かに求められて、実際の統計的な値に近かったりするわけだ。うーんおもしろい。 --- ### 【読んだ本】 楽園のカンヴァス - 2018-01-15 URL: https://remoteroom.jp/medialog/2018-01-15_book-b00w1fh0f0/ アンリ・ルソーの絵画を言葉で視るかのような、こちらの感情がどうしてか高められる文章で語られていく。登場人物の情熱と知的な興奮に引っ張られてどんどん読み進めてしまうのでした。見事に伏線を読み違えるのもまた愉し。 物語に音楽を伴っていた『マチネの終わりに』と印象が似ていると僕は思った。というのは、共に永遠 (とわ) を想像させ、人間に伴う寿命が数十年であることを忘れさせるから。 --- ### 【読んだ本】 本日は、お日柄もよく - 2018-01-03 URL: https://remoteroom.jp/medialog/2018-01-03_book-b01jgcetng/ 主人公はふとしたことでスピーチの力に惚れ、スピーチライターという仕事を自らの専門にしようと奮起していく。夢があって、スピーチの業界に少し詳しくなれてかつ楽しめる、映画になりそうなサクセスストーリーだった。 書き言葉とは違って、抑揚がある肉声で語られて耳で聞く、スピーチの力を再認識した。 ただし、正しい再認識のためには良く聴いて、スピーチを素直に直球で受け取るだけではなく、受け取る者の印象を冷静に分析するようなメタ視点が必要になるとわかる (たとえば自分はなぜこのスピーチに感動しているかを洞察する視点)。また、スピーカーが、相対的に【何かを述べていない】として、その何かを述べていないことがどういう戦略なのかを考えなければならない。とくに、大人数をある意味扇動しようとする局面のスピーチにおいては。 本作の著者 (原田マハ) とは、波長が合いそうに思った。さっそく次の読み物として『楽園のカンヴァス』を仕入れている。 --- ### 【読んだ本】 2018年版間違いだらけのクルマ選び - 2017-12-27 URL: https://remoteroom.jp/medialog/2017-12-27_book-b078h67n7d/ 本書でのEVシフトの論調は、一般的によく耳にする懐疑的な視点のものだが、それは世界とは、ずれていると思う。EVシフトの根源的な理由を僕はこう考えたい。もしも、自分のいる地域で自然エネルギーを利用した電力供給が進んでいたらば、その電力を使って走る車に乗りたいなぁと思うのが、エコロジーを志向する者の次の思想になるのでは、と。 いわば、EVシフトは、電力源が構造的に変化している時代を察した人間にとっては自然な流れではないか。そしてその逆として、自然エネルギーの利用が進んでいない状況下 (たとえば日本) ではその流れを理解しがたいんじゃないかと、仮説を立ててみている今日この頃です。 電力会社を電力源などの要素で既に選択可能な北欧のような社会では、同様に車を、燃費・電費の比較だけではなくて、車の燃料が自然エネルギー由来かどうかで選択していても不思議ではない。キーワードに反応するだけではない真の価値判断がなされつつある、という前提に立てば、EVシフトは、車版の「自然エネルギーシフト」だと言い換えるほうが実状を捉えているだろうなあ……。 毎年の趣味の総括として、年末にこのシリーズを読了するのが僕の楽しみだ。今回の2018年版からは、車にいわば視覚と判断能力を持たせる、予防安全技術・運転支援技術を搭載する車種のレンジが着実に拡がっている傾向や、アジリティと乗り心地はそもそも二項対立ではないことがますます当たり前になっている雰囲気を感じとることが出来た。きっと一年先にも、新型車を定点観測する意味で本書の新刊を開いていることでしょう。 --- ### 【読んだ本】 みつやくんのマーク X - 2017-12-25 URL: https://remoteroom.jp/medialog/2017-12-25_book-4408411272/ 幼少期の自分はこの本を知らないのだが、“心に強く残ってる”という評判を大きなお友達から聞いて、車の話だろうし気になりだした。平仮名を読むようになってきた3歳の息子にあげるつもりで。しかし書店などでは売っておらず、中古のものをメルカリで仕入れたら、70ページを超えている、長編と言ってもいい絵本が届いた。 読んでみて、40歳代の大人としても感じるところがあったのでここに感想を書いている。 本作での『マークX』 (乗り物) のような、まだ現実化していない何かを想像するとき。それが売れるようにとか、話題性を持たせるとか、画になるようにとか、いわば第三者の視点を考慮している局面が大人にはある。本作の中で、みつやくんは、そうは考えていなくて、独りだ。あらゆる場所で乗れたらいいなぁという自らの思いで乗り物を設計し、各環境の実地テストへ繰り出していくのだ。 内なる原動力の具現化を自分が忘れていることに気付く。そして、想像することが未来を創る力であることを、本作は描いているのかな。柔らかなタッチの、夢ある挿絵と共に。 --- ### 【読んだ本】 経営参謀 - 2017-12-20 URL: https://remoteroom.jp/medialog/2017-12-20_book-b00lf20e4e/ 『戦略参謀』の続編。アパレル業界におけるコモディティ企業の経営企画部で苦労しつつも大きな成果を上げた主人公が、転職後に今度はファッション企業に入り込み、典型的な経営課題と戦うストーリー。またまた面白くて、一気に読み終えたのであった。 前作の『[戦略参謀]()』を読んでから手に取ったほうが、“コモディティ”と“ファッション”を対比させていることで際立っている、商品の旬の意味や在庫のデメリット加減、経営的な観点の違いをより理解できそうだ。そしてこのような、状況を場合分けしてパターンで捉えよう・意識せよとする手法は、いわゆる一般化であり、他の新しい局面に対しても、道具として応用が効くはずだ。 本書では、アパレル業界に少し詳しければわかりそうな、実名によく似せている企業をポジショニングマップに具体的な落とし込むシーンもあったりと、臨場感が尽きない。さらに、社長の後継者を育てる会社自身の攻めの取り組みが経営課題を高速なPDCAで解決しようとする活動に繋がる、という、特に後半強く放たれているメッセージは、私の知る限りこの逆も然りという意味で、説得力がありすぎる。説得力がありすぎてたまらない……。 --- ### 【読んだ本】 戦略参謀 - 2017-12-15 URL: https://remoteroom.jp/medialog/2017-12-15_book-b00g2shxig/ 文学表現的には淡白な形で進行していくのは、状況も憎悪もリアルすぎる社内の人間模様。佳境に入るとぐいぐい引き込まれてしまう迫力に満ちていた。 文中では『成功した創業者』を、わざと二重の鉤括弧で囲ったキーワードにしていて、これはおそらくは、会社が順調に伸びていく前に創業者が初期にいかに懸命に行動と修正を高速に回していたかを、ひとつの象徴として扱い、そこに意識を立ち返らせるためだ。 また、会社の成長とは本来、付加価値を生み続けるための学習行動や文化づくりの継続だ、ということを、本書は物語の設定でうまく示していた。社長職が二代目に渡された局面でわずかにずれた経営層の思惑が、組織縦割りの歪を拡げて、改善のためにと各々打つ手が顧客に響かず全体最適にフォーカスせず、そして収益が赤字に転じそうになる、という流れは、本来を置いてきぼりにした故の鉄板ストーリー。これは読者にとって、時間軸を含めて広い“森”を見るための地図にできるもの。 本書がタイトルに掲げている「戦略参謀」が、本書ではもちろん最大の要になっていた。たとえば、創業から組織が大きくなり何か課題が持ち上がっている会社では、社長周りのこの機能が不全である可能性がある、ということに気づかせてくれる。真に腑に落ちる物語。 --- ### 【読んだ本】 人はなぜ不倫をするのか - 2017-12-12 URL: https://remoteroom.jp/medialog/2017-12-12_book-b00w4nb0pu/ 行いそのものは別として、“不倫”という言葉が日本で広まったのは、比較的最近らしい。1980年代のテレビドラマがきっかけだそうな。本書は、行動遺伝学・動物行動学・昆虫学・ジェンダー研究・宗教学・性科学・心理学・脳のそれぞれの専門家から、不倫について著者が話を聴く形式を取っている。 地球上の生物は、遺伝子を多様にしながら後世に残して自らの種族を維持する、種の本能で生きている。その一種の動物である人間は、多くは各社会に一夫一婦制なり一夫多妻制なり、相手を固定化する結婚という制度を取り入れてきている。なお、“不倫”はもちろん、結婚という制度があってこそ存在する概念や状態である。 「そのような人間とは、いったいなんなのだ?」という問いを、上記の様なさまざまな専門家の知見を借りながら、今一度考えることが出来たことがとても面白かった。とくに私は、自然科学的なところの文脈は予想の範囲だったが、宗教学関係のところは普段あまり触れない分野なので読み応えがあった。その意味で、目で見える世界が変わる本であり、仮に私にそんな機会が求められた場合の話であるが、他人の色恋に抑制的な意見をすることに、慎重にさせられる本である。 --- ### 【読んだ本】 カーデザインは未来を描く - 2017-12-08 URL: https://remoteroom.jp/medialog/2017-12-08_book-b076d7lgb4/ まずありがたかったのは、馬車から発展した自動車が誕生して100年以上経過しているこの近年の中での、カーデザインの移り変わりを、その時々の世相と重ねて解説しているところ。アメ車に生えていた垂直尾翼など、各時代のカーデザインの意匠に改めて気付かされるものがあった。 デザインの表層をなぞるだけではなく、デザイナーが何を企ててそう造ったかという意味までプロが捉えての解説なので、未来にも応用できる、“デザインの見方”が押さえられているというわけだ。そして、世代を超えている血筋というか、カーデザインにおける思想の継承を見抜いての解説があるので、街を往来するクルマをよく観てしまう自分の目が肥えたような気にもさせられ、すごく楽しく読んでしまった。 カーデザインは、身体を拡張することが必然である乗物という機械のデザインであるが、機械的な機能に裏付けられた形状を美とする主義のいっぽうで、世間の夢や自身の欲望を捉えた形を美とする向きもある。カーデザインの美学を俯瞰している本書は、たとえばこの両方の美を理解することを実現可能にする良いものに思った。 --- ### 【読んだ本】 なぜ弱さを見せあえる組織が強いのか ― すべての人が自己変革に取り組む「発達指向型組織」をつくる - 2017-11-24 URL: https://remoteroom.jp/medialog/2017-11-24_book-b0747k7b1j/ 邦題のタイトルだけでなんとなく内容を汲み取った気でいると、危険だ。「自己変革に取り組もう」の本ではもちろん無くて、「発達指向型組織をつくる」ところに主旨がある。原題は『An Everyone Culture』だ。とても読み応えがあった。 IT業界のある分野の、“経験技術のスペックシート”のみでヒトを配属しがちな商流の片隅に生息している身 (たとえば自分) にとって、著者らの調査成果として描かれている発達指向型な組織像は、現時点だとまったく異世界に位置する。 一方、そういえば自分の出身学部と研究科は「人間の発達」をテーマに1990年代前半に設立され、《生涯にわたって人間は発達するもの》とする捉え方を、社会科学のみならず自然科学でも各研究の基礎に置いていたのだった。この捉え方を思い出せば、DDO (発達指向型組織) が強い組織たる所以は、人間とはどんなヒトなのかを見つめた末の帰着としても導けるだろう。 “人間とは発達したいヒト”なのであって、組織の中でその営みを進めるには (みな発達途上なのだから) 個人が弱さも見せる必然があり、そうなると、守られてかつフラットに意見して気づき合う環境も必要になる。そして本書でいう強い組織は、個人の発達に長年つきあい相互作用して出来上がっていく、積極的な発達を続ける組織を指すのだろうと思う。 --- ### ITIL Foundationの試験を受けてきました - 2017-11-15 URL: https://remoteroom.jp/diary/2017-11-15/ ITIL® Foundation (syllabus 2011) という、ITサービスマネジメントに関する資格があります。この資格試験に向けて多少勉強して、運良く合格を得られたので、記録しておきます。ちなみにITILについてはWikipediaに説明を譲ります。→[Information Technology Infrastructure Library \- Wikipedia](https://ja.wikipedia.org/wiki/Information_Technology_Infrastructure_Library) #### 使用した教材 ##### 書籍・電子書籍 - \(a\) 『新人ガール ITIL使って業務プロセス改善します!』 - \(b\) 『新米主任 ITIL使ってチーム改善します!』 - \(c\) 『ITILの基礎 -ITILファンデーション(シラバス2011)試験対応』 学習履歴を時系列で記すと、2017年9月上旬から[\(a\)を通読]()→[\(b\)を通読]()→\(a\)を流し読み→\(b\)を流し読み→[\(c\)を時間がなくて試験直前にほぼ飛ばし読み]()、となる。\(a\)とその続編の\(b\)については、ITILの学習ということを忘れて、主人公が奮闘するストーリーを、組織としての改善活動が描画されている様を意識しながら楽しんだら、結果的にITILのエッセンスを記憶できた感触がある。 実は私、参考書である\(c\)を最初に2017年1月に購入したのだが、数ページ開いて、中身が、もう、ぜーんぜん頭に入ってこないので、まずは\(a\)と\(b\)を読んで、ITILとはなんぞやの概要を掴みつつ頭を柔らかくしてみる作戦をとったのであった。 ##### Webサイト - [ITIL V3 Foundation模擬試験 \| 無料de試験](http://tokyo.cloudapp.net/shiken/ItilV3Exam/) ITIL Foundationの試験問題って一体どのようなものなのか、ググってみると筆頭に見つかる代表的なサイトであるらしい。当初気ままに、1,2度、ランダムに出題される40問に解答してみて、自分の出来無さを痛感することになった。というわけで、私にとっては、学習の仕上げの反復練習的にこのサイトを用いたというよりは、ITIL試験にこれまでの自分の知識が通用しない、壁の高さを、最初に思い知らされたところ。 #### 試験について 次のサイトで受験予約を行い、神戸・三宮の試験会場で平日に受験。受験料は[26,000円(税抜)](https://www1.prometric-jp.com/exam_list/exam_list.asp?client_top_no=EX&client_no=EX)と、確実に1度で終わらせたい、お財布に響く額である。 - [EXIN認定試験/ITIL® ファンデーション試験 \| プロメトリック](http://it.prometric-jp.com/testlist/exin/) 受験予約完了時にダウンロードできる「確認書」と、「本人確認書類2点」の持参を忘れないように。 ##### 試験中の思考 ITIL Foundationの日本語試験では、日本語の用い方が無骨で、「おいおい、何を言っているんだ??」という印象さえ受けがちかもしれない。そんな一問一問に細かく迷っていても、頭が疲労するだけなので、深入りしちゃう前に軽く飛ばして、まずは40問に全部目を通した方が良いと思った (おそらく20分ぐらいで一通り見終わる)。 出題はパソコンの画面を使って行われ、四択で答えていく形式。そして、たとえば答えに迷った問題にマークを付けておき、後にマーク付きの問題を重点的に振り返ることができる機能がある。この機能を用いて、40問を解答した後にじっくりと、自分でマークを付けた問題を考えていくと、落ち着いて記憶を整理しながら最大限に正解数を稼げるような気がする。 ##### 試験の結果 試験後には受付で、印刷したての『ITIL Foundation Examination Score Report』という用紙を渡された。それに、得点と合否判定、および試験のセクション別の成績が記載されている。今回の得点は85%で、合格の判定 (合格点は65%)。また「117_6 Minor Processes」が一番弱いとの評価だが、詳細な分析は今まだやっていない。 --- ### 【読んだ本】 ITILの基礎 -ITILファンデーション(シラバス2011)試験対応- - 2017-11-15 URL: https://remoteroom.jp/medialog/2017-11-15_book-4839948607/ ITIL Foundationの試験対策に、書籍 (実物) として購入していた。ITIL参考書としての定番2冊のうちのひとつで、これは“白本”、もう1冊は“黄色本”であるらしい。 やや重量があるが、通勤途中に電車内で立って読んだり、喫茶店に籠もって読んだりして (しかしたいがい眠くなる)、試験当日の時間直前にぎりぎり読み終わる始末だった。節ごとに解説されているページのイメージが脳裏に残っていたから、試験での解答に結びついた感はある。ITILの試験自体に図は登場しないが、本書の図は、各サービスなどの関係性を把握できるようにうまく読解していた方が良さそうだ。 --- ### Crowd BankへSeleniumでアクセスし、投資額増減グラフをMackerelに描く - 2017-11-02 URL: https://remoteroom.jp/diary/2017-11-02/ #### グラフ化は家計のため [2017/11/01の記事]()にて紹介しました、自作の、「プリカ等のポイント数を[Mackerel](https://mackerel.io/ja/)でグラフ化するためのPerlスクリプト point2mackerel.pl」を、今回は[日本クラウド証券 (Crowd Bank, Crowd Securities Japan)](https://crowdbank.jp/)に対応させました。具体的には、Crowd Bankへ投資している総資金の額を抽出できるようにしました。 あまりにもニッチで、特異な仕掛けに一層なってきたとも思うが、もし参考にしたい方・利用したい方がいましたら、次のGitHubページを参照してもらえますと幸いです。 - [point2mackerel.pl - プリペイドカードなどの残高・ポイント数をMackerelに投稿するためのPerlスクリプト https://github.com/mah-jp/point2mackerel](https://github.com/mah-jp/point2mackerel) #### 現時点での対応カードおよびサイト このpoint2mackerel.plが対応しているカードおよびサイトは、現在、次の通りです。 |MODE文字列|カード名・サイト名|備考| |----|----|----| |doutor|[ドトールバリューカード (Doutor Value Card)](http://doutor.jp/)|| |tullys|[タリーズカード (Tully's Card)](https://www.tullys.co.jp/cpn/tullyscard/)|所有カードが複数枚ある場合の動作は未確認| |rakuten|[楽天ポイントカード (Rakuten Point Card)](https://pointcard.rakuten.co.jp/)|「総保有ポイント」のみ対応| |saison|[セゾン投信 (Saison Asset Management)](https://www.saison-am.co.jp/)|ファンドの「評価額合計」のみ対応| |crowdbank|[日本クラウド証券 (Crowd Bank, Crowd Securities Japan)](https://crowdbank.jp/)|投資状況の「総資金」のみ対応| #### 次の一手 ウェブサイトへのアクセスにSeleniumを用いるようになってから、少ないコーディング量で多様なサイトに対応できるようになり、拡張がとても面白い。 一方、各アカウントのパスワードをINIファイルに直書きしている作りに不安も感じるので、どうしたらこれを回避できるか、思案のしどころです。 --- ### Selenium使って、ファンド評価額の変動グラフをMackerelに描く - 2017-11-01 URL: https://remoteroom.jp/diary/2017-11-01/ #### グラフ化は趣味です [2017/10/19の記事]()にて紹介しました、自作の、「プリカ等のポイント数をMackerelでグラフ化するためのPerlスクリプト (現時点でDoutor, Tully's, Rakutenに対応) point2mackerel.pl」を、唐突ながら、今回は[セゾン投信](https://www.saison-am.co.jp/)のファンドの~~評価損益合計~~評価額合計に対応させました。 なぜセゾン投信なのかというと、私的なプチ資産管理上の理由で、日々変動するファンド評価額のグラフを、サーバ管理・監視ツールでありながら応用が利く[Mackerel](https://mackerel.io/ja/)で、自動的に描きたいなあと思ったから。今回のポイントとしては、[セゾン投信のログインページ](https://trade.saison-am.co.jp/webbroker3/0H/pc/WEB3AccountLogin.jsp)ではJavaScriptの絡みを解析するのが難しかったので、headlessでウェブブラウザをそのまま駆動する[Selenium](http://www.seleniumhq.org/)を初めて使ってみたところです。 こんな仕掛けを、もし利用したい方がいましたら、次のGitHubページを参照してもらえますと幸いです。 - [point2mackerel.pl - プリペイドカードなどの残高・ポイント数をMackerelに投稿するためのPerlスクリプト https://github.com/mah-jp/point2mackerel](https://github.com/mah-jp/point2mackerel) #### 現時点での対応カードおよびサイト このpoint2mackerel.plが対応しているカードおよびサイトは、現在、次の通りです。 |MODE文字列|カード名・サイト名|備考| |----|----|----| |doutor|ドトールバリューカード (Doutor Value Card)|http://doutor.jp/| |tullys|タリーズカード (Tully's Card)|https://www.tullys.co.jp/cpn/tullyscard/ ※所有カードが複数枚ある場合の動作は未確認| |rakuten|楽天ポイントカード (Rakuten Point Card)|https://pointcard.rakuten.co.jp/ ※「総保有ポイント」のみ対応| |saison|セゾン投信 (Saison Asset Management)|https://www.saison-am.co.jp/ ※ファンドの「~~評価損益合計~~評価額合計」のみ対応| またどこか、モニターしたい数値が載っているサイトを思いついたら、point2mackerel.plで抽出できるように対応すると思います。 --- ### 【読んだ本】 セキュリティ 7つの習慣・20の事例 - 2017-10-24 URL: https://remoteroom.jp/medialog/2017-10-24_book-b0767552y2/ 技術的な専門家ではない人が対象のこの書籍では、へんなイラストの味も効いて、情報セキュリティの要を網羅することができる。 具体的には、パソコンやスマホ、ネットサービスを使っている生活や業務の中で、ある行動をする・しないによって、どのような危険な事が起こりうるかを考えさせる事例に富んでいる。たとえば年に一度、全社員へ情報セキュリティポリシー講習を行っているような会社は、こういう参考書を基本に使えばちょうど良さそうだ。 --- ### プリカ等のポイント数をMackerelでグラフ化するためのPerlスクリプト (現時点でDoutor, Tully's, Rakutenに対応) - 2017-10-19 URL: https://remoteroom.jp/diary/2017-10-19/ #### ドトール専用のものは退役 昨日[2017/10/18の記事]()で紹介した、ドトールバリューカードのポイント数を、サーバ管理・監視ツールの[Mackerel](https://mackerel.io/ja/)に投稿するために作った自作Perlスクリプト「[dvc2mackerel.pl](https://github.com/mah-jp/dvc2mackerel)」、いきなりですが更新終了とし、退役させます。 #### どうせなら各種カード対応型を作る なぜかというと、今日仕事の後にタリーズでまったりお茶していた際、1) タリーズカードにも対応させたくなり、2) それならば他の様々なカードにも対応できるよう、プログラムのコアは共通化して処理系を拡張しやすい形で作り直すべき!と閃いたためです。 今回産まれた、各種カード対応型のPerlスクリプトの名前は「[point2mackerel.pl](https://github.com/mah-jp/point2mackerel)」。GitHubページ https://github.com/mah-jp/point2mackerel で公開しはじめましたので、利用したい方はGitHubページを参照してもらえますと幸いです。 - [point2mackerel.pl - プリペイドカードなどの残高・ポイント数をMackerelに投稿するためのPerlスクリプト https://github.com/mah-jp/point2mackerel](https://github.com/mah-jp/point2mackerel) #### 現時点での対応カードと使用方法 このpoint2mackerel.plが対応しているカードは、現時点では次の通りです。 |MODE文字列|カード名|備考| |----|----|----| |doutor|ドトールバリューカード (Doutor Value Card)|http://doutor.jp/| |tullys|タリーズカード (Tully's Card)|https://www.tullys.co.jp/cpn/tullyscard/ ※所有カードが複数枚ある場合の動作は未確認| |rakuten|楽天ポイントカード (Rakuten Point Card)|https://pointcard.rakuten.co.jp/ ※総保有ポイントのみ対応| ##### point2mackerel.plの使用方法 1. ``git clone https://github.com/mah-jp/point2mackerel`` でファイルを取得します。 1. point2mackerel.ini を編集し、必要な分のカードのアカウント情報を記入します。(未記入のカードがあっても下記のMODEで指定しなければ問題ありません) 1. テストとして ``point2mackerel.pl MODE`` を実行し、指定したカードのポイント数が標準出力できていることを確認します。 ``` $ ./point2mackerel.pl doutor 1869 ``` 1. 引数に「-j」を指定すると標準出力がJSON文字列の形式に切り替わります。 ``` $ ./point2mackerel.pl -j doutor [ {"name": "Point.Doutor", "time": 1508429746, "value": 1869} ] ``` 1. そこで、たとえば次のようなcronを設定すると、毎時00分と30分に、Mackerelにポイントのデータが投稿されるようになります。 ``` 0,30 * * * * curl https://api.mackerelio.com/api/v0/services/+++++YOUR-SERVICE-NAME+++++/tsdb -H 'X-Api-Key: +++++YOUR-API-KEY+++++' -H 'Content-Type: application/json' -X POST -d "$(/path/to/point2mackerel.pl -i /path/to/point2mackerel.ini -j +++++MODE+++++)" ``` 各種プリペイドカード公式サイトでのログイン遷移の挙動や、HTMLソースをうまく読み取ることができれば、意外に簡単に対応カードを増やせそう。次は何カードを追加しよう? (何カードだったらウケるだろう……) と、発展ネタを考えられるのは楽しいですね。 --- ### Doutorバリューカードのポイント残数をMackerelで可視化してみる - 2017-10-18 URL: https://remoteroom.jp/diary/2017-10-18/ > 【2017/10/20】本ページで紹介しているdvc2mackerel.plの後継を作りました。→ https://github.com/mah-jp/point2mackerel #### ドトールのポイント可視化を思いつく 平日はほぼ毎朝の頻度でよく通う、[ドトールコーヒーショップ](https://www.doutor.co.jp/dcs/)。ここのプリペイドカード「[ドトールバリューカード (Doutor Value Card)](http://doutor.jp/)」を利用しはじめてから、せわしい店頭で現金を扱う必要が無くなり便利になりました。 しかしプリペイドカードって、いくらチャージしてあるか、見えないし覚えてられない。 ふとある朝、「実生活で使うカードの残高等のデータを、サーバ管理・監視ツールとして利用している[Mackerel](https://mackerel.io/ja/)にPOSTできれば、時系列グラフが描けるし、閾値で監視が出来るし、なんか面白いかも?」と思いついた。まあ、職業病というか、意味の薄いライフログな趣味かもしれない。 そして、ドトールバリューカードに関する次のスクリプトを作成、GitHubに置いたのでどうぞ自由にご利用ください。 - dvc2mackerel.pl - ドトールバリューカード (Doutor Value Card) の残高・ポイント数をMackerelに投稿するPerlスクリプト https://github.com/mah-jp/dvc2mackerel このスクリプト単体には、Mackerel POST用のJSONを標準出力する機能があります。 $ ./dvc2mackerel.pl -j [ {"name": "Doutor.Card.Value", "time": 1508343927, "value": 2300}, {"name": "Doutor.Card.Point", "time": 1508343927, "value": 313}, {"name": "Doutor.Card.Total", "time": 1508343927, "value": 2613} ] データを投稿する実際のPOSTについては、dvc2mackerel.plをcurlと組み合わせている、次のcronの例をご覧ください。 #### 値を自動取得してグラフを描く ドトールバリューカードの残高・ポイント数を、一定時間ごとにドトールのサイトから自動取得してMackerelへ記録するには、[dvc2mackerel.pl](https://github.com/mah-jp/dvc2mackerel)を、MackerelのAPI Keyを含めて次のようにcron実行すると、実現できます。 # crontab 0,30 * * * * curl https://api.mackerelio.com/api/v0/services/+++++YOUR-SERVICE-NAME+++++/tsdb -H 'X-Api-Key: +++++YOUR-API-KEY+++++' -H 'Content-Type: application/json' -X POST -d "$(/path/to/dvc2mackerel.pl -i /path/to/dvc2mackerel.ini -j)" いったんMackerelにデータが入ればグラフは自動的に描かれていきます。グラフ設定としては、単位を [integer] に、「Total」のグラフの種類を [塗りつぶし型] に設定変更することで、見やすくなると思います。 --- ### GPD Pocket) 右Alt→全角/半角 その他 - 2017-10-15 URL: https://remoteroom.jp/diary/2017-10-15/ 車の運転中や休憩時間に欠かせない新鮮な音楽。それを仕入れるための定額配信サービスを、[Google Play Music](https://play.google.com/store/music)から[Spotify](https://www.spotify.com/)へ切り替えてみた。 Spotifyはプレイリストの好みが自分と合う気がするし、アプリの出来が良くて操作しやすい。また、複数端末の連携も行えるようで、楽曲の再生と、歌詞の表示と、楽曲の選択を、別々の端末で行いつつ同期させるなんてこともできるようだ。こんな込み入った局面はめったにないだろうが、やってみたら可能だったと言うことで。 |項目|内容| |----|----| |機種|[GPD Pocket](http://www.gpd.hk/pocket.asp) Ubuntu版 (第3ロット)| |BIOS|純正20170807| |OS|https://apt.nexus511.net/ のXubuntu 16.04.3| |uname -s -r -v|Linux 4.14.0-11-generic #gpd SMP Thu Oct 12 09:34:06 CEST 2017| #### 環境構築メモ4: [右Alt] キーに [全角/半角] の働きをさせる GPD Pocket + Xubuntu GUIの日本語変換使用時、[右Alt] キーを [全角/半角] として使うためには、xmodmapを変更すればOKだ。ファイル ~/.Xmodmap として、次の内容を追加して保存し、再ログインを実施する。 keycode 108 = Zenkaku_Hankaku Kanji #### P.S. hugoが動くことを確認 [2017/09/05の記事](#気付けばhugoが動かない)に、GPD Pocket + Linux Mint 18.2という当時の環境において、snapでインストールしたhugoが動かないと書いた。 現環境で改めて確認してみると、hugo、というかsnapアプリケーションは問題なく動くようだ。2017/09/05からディストリビューションもカーネルも変更しているので、一体何が原因で動かなかったかもう検証不可能であるが、とりあえず改善していて良かった。 $ snap --version snap 2.28.1 snapd 2.28.1 series 16 ubuntu 16.04 kernel 4.14.0-11-generic $ snap list Name Version Rev Developer Notes core 16-2.28.1 3017 canonical core hugo 0.29 725 hugo-authors - --- ### X線写真で見る右手 針金抜けました編 - 2017-10-13 URL: https://remoteroom.jp/diary/2017-10-13/ #### 2017/10/13の右手ニュース [2017/09/13の記事]()に書いた、右手小指の骨折に関して嬉しい進展がありました。[9月20日]()の手術で骨折部分に通した針金を、本日抜いてもらうことが出来た! 術後経過の下記のX線写真で確認できる、手首から指先方向に入っている針金を、「ちょっと痛いですよ〜」と言いながら医師が1本ずつ3回、えいっと体外へ引っ張り抜く際の感覚は、“骨が擦れている”ことがまさにわかる類だった。このときの、手の甲の中に響く鈍い痛みはもろ苦手……。 右手のリハビリをこれから一層がんばろう。今は、たかが5kgのハンドグリップを握りつぶせるとは言えないほどまで、右の握力が下がってしまっているし、こわばって柔軟性も衰えている。車の運転の支障にならないレベルまで、しっかり早く回復しないと。 #### 2017/10/02の右手 (X-Ray) 手術から12日経過した時のX線写真です。この頃、手を握るような形でのリハビリを、そろそろ始めましょうという指示があった。 #### 2017/09/20の右手 (X-Ray) 針金を通した手術の直後のX線写真です。 --- ### Google Cloud VisionにOCRしてもらってテキスト検索可能なPDFを作る方法 (How to make a searchable PDF) - 2017-10-12 URL: https://remoteroom.jp/diary/2017-10-12/ 紙資料をスキャンして生成されるいわゆる画像的なPDFファイルを、どうしても電子的に検索したくなり、「検索可能PDF」の今時の作り方に挑戦してみた。おおよそ思い通りに出来たので、ブログ記事にしておきます。 ここでいう検索可能PDFとは、元データを光学式文字認識 (OCR) した結果のテキストを、元データとは異なるレイヤーに重ねている、テキストの検索【Ctrl+F】が効くPDFのこと。OCRのエンジンとしては、世界最高レベルの正確さが期待できるであろう、雲の上の「[Google Cloud Vision API](https://cloud.google.com/vision/?hl=ja)」を使うことにした。 OCRの他にも強力な機能を備えてそうな、Google Cloud Vision APIの簡単な紹介として、2015年12月公開の動画と、中の人による関連記事を貼っておく。 - Cloud Vision APIの凄さを伝えるべくRasPi botとビデオを作った話 - Qiita https://qiita.com/kazunori279/items/768c7fdf96cdf45a9d16 #### 最初に下準備 |項目|内容| |----|----| |実験環境|Xubuntu 16.04 (Ubuntu 16.04)| 今回のアイデアは、次の記事を非常に参考にしています。m(_ _)m - Google Cloud VisionのOCR結果を用いた検索可能pdfの作成 - Qiita https://qiita.com/dinosauria123/items/0feb719eb935fea62dd9 また、OCRで抽出したテキストの内容や配置情報を保持する、「hOCR」というフォーマットの存在を初めて知りました。 - hOCR https://en.wikipedia.org/wiki/HOCR ##### gcv2hocrのインストール 参考ページの著者でもあるdinosauria123さん作の、gcv2hocr https://github.com/dinosauria123/gcv2hocr を次のようにインストールする。なお、同梱されているPython版「gcv2hocr.py」も元来は利用可能なようだが、中身の更新がおそらくC版に追いついていない気がしたので、今回はPython版ではなくC版をmakeして使っている。 $ git clone https://github.com/dinosauria123/gcv2hocr $ cd gcv2hocr $ make $ sudo make install ##### hocr-pdfのインストール https://github.com/tmbdev/hocr-tools を参考にhocr-toolsをインストールする。このツールセットのうちのhocr-pdfを後で使用する。 $ sudo apt install python-pip # pipをまだインストールしていない場合 $ sudo pip install hocr-tools ##### pdf4search.shの作成 1. 下記のような約50行のbashスクリプトを自作した。これを pdf4search.sh として保存し、```chmod +x pdf4search.sh```で実行権限を付与する。 2. https://github.com/dinosauria123/gcv2hocr にある gcvocr.sh もあわせて保存し、同じく```chmod +x gcvocr.sh```する。 この pdf4search.sh に関しては、中身がいろいろと雑だしダサいしすみません。~~後日時間があればGitHubにアップロードします。~~→ https://github.com/mah-jp/pdf4search にアップロードしました。スクリプト内に書き込んでおく必要がある、自身のAPI Keyの取得方法については、ここでは説明を省略。次のページなどを参照してください。 - 第0回 Google Cloud Platformをはじめよう! アカウント登録~画像認識APIを試してみよう|Tech Book Zone Manatee https://book.mynavi.jp/manatee/detail/id=65673 ###!/bin/bash ### pdf4search.sh (ver.20171018) ### Usage: pdf4search.sh FILENAME.pdf ### References: ### [1] https://qiita.com/dinosauria123/items/0feb719eb935fea62dd9 ### [2] https://github.com/dinosauria123/gcv2hocr ### [3] https://github.com/tmbdev/hocr-tools ### user's variables GCP_APIKEY=*****Your-Google-Cloud-Platform-API-Key***** COMMAND_GCVOCR=/path/to/gcvocr.sh # [2] COMMAND_GCV2HOCR=/usr/local/bin/gcv2hocr # [2] ### variables FILE_PDF="$1" TMP_FILENAME=${FILE_PDF##*/} FILE_PDF_FILENAME=${TMP_FILENAME%.*} TMP_DIR=/tmp/pdf4search_${FILE_PDF_FILENAME} TMP_DPI=300 ### pdf -> png mkdir -p "${TMP_DIR}" pdftoppm -r ${TMP_DPI} -png "${FILE_PDF}" "${TMP_DIR}/page" ### png -> Google Cloud Vision -> hocr+jpg for FILE_PNG in $( find ${TMP_DIR} -type f -name '*.png' | sort ); do TMP_FILENAME=${FILE_PNG##*/} FILE_PNG_FILENAME=${TMP_FILENAME%.*} FILE_HOCR=${TMP_DIR}/${FILE_PNG_FILENAME}.hocr FILE_JSON=${FILE_PNG}.json echo "gcvocr.sh: ${FILE_PNG} > ${FILE_JSON}" ${COMMAND_GCVOCR} "${FILE_PNG}" ${GCP_APIKEY} echo "gcv2hocr: ${FILE_JSON} ${FILE_HOCR}" ${COMMAND_GCV2HOCR} "${FILE_JSON}" "${FILE_HOCR}" convert "${FILE_PNG}" "${TMP_DIR}/${FILE_PNG_FILENAME}.jpg" done ### hocr+jpg -> pdf echo "Generating: ${FILE_PDF_FILENAME}-ocr.pdf" hocr-pdf "${TMP_DIR}/" > "${TMP_DIR}/${FILE_PDF_FILENAME}.pdf" # [3] gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -sOutputFile="${FILE_PDF_FILENAME}-ocr.pdf" "${TMP_DIR}/${FILE_PDF_FILENAME}.pdf" ###cp -p "${TMP_DIR}/${FILE_PDF_FILENAME}.pdf" "${FILE_PDF_FILENAME}-ocr.pdf" ### cleanup rm preout0.txt preout1.txt preout2.txt rm -r "${TMP_DIR}" #### 検索可能PDFの作成と確認 ##### (念の為) Google Cloud Vision APIの利用料について Google Cloud Vision APIを「テキスト検出 (TEXT_DETECTION)」で利用する場合、利用料は「最初の1,000ユニット/月」は「無料」となっている。この規模を超える利用を行う可能性がある場合は、Google本家の料金表をご確認ください。 - 料金 | Google Cloud Vision API ドキュメント https://cloud.google.com/vision/docs/pricing?hl=ja ##### pdf4search.shの実行 活字やそれに近い整った文字が画像として載っているPDFファイル sample.pdf を用意し、pdf4search.shを次のように実行すると、Google Cloud Visionが抽出したテキストデータが重なっているPDFが、同じ場所に新規保存される。 $ pdf4search.sh ./sample.pdf # sample-ocr.pdfが保存される ##### PDFの中のテキストを確認 次の pdftotext, pdfgrep というようなコマンドを用いて、新規保存された検索可能PDFの中のテキストを確認できる。また、任意のPDF Viewerで全選択【Ctrl+A】してみて、テキストが選択可能かどうか確かめるのもよい。 $ pdftotext sample-ocr.pdf - # 第2引数は「-」, 中身のテキストが標準出力される $ pdfgrep HOGE sample-ocr.pdf # 中身のテキストを対象にgrepが効く しかし今のところ、原因不明の問題が一つある。 - 今回作ったPDFファイル sample-ocr.pdf をMac OS X (10.12.6; Sierra) の「プレビュー」で開いたとき、テキストが正しく拾えない? (半角スペースの列になっている?) #### 作ってみた感想 - Google Cloud VisionによるOCRは、普段見るフォントはかなり認識するようだし、文字列が多少傾いていても平気みたいだし、さすがに凄い - ただし、文字間のマージンを感度高めに表現するのか、テキスト認識後に単語が途中で分かれていることがよくある。逆にテキスト中のスペースをうまく取り除く処理をhOCRに対して施してもいいかも? - 検索可能PDFをより効率的に作成・利用するためには、まず、パソコンやサーバの特定フォルダ内のPDFファイルを自動で順次OCRしていく仕掛けがあればよさそうだ (そのためのpdf4search.shのラッパーは作成済み。これも公開するかな) #### P.S. オープンソースなTesseract OCRも試した 実は当初、オープンソースなOCRソフトで、Tesseract OCR https://github.com/tesseract-ocr/tesseract というものがあると知り、次のコマンドでインストールして、 $ sudo apt install tesseract-ocr tesseract-ocr-jpn https://github.com/ssh0/dotfiles/blob/master/bin/pdfocr にある使い方で、PDFの日本語テキストを認識させようとした。 しかしながら、デフォルトの状態では認識率がそこまで良くないようで、学習で辞書を鍛えていく手もあるとは思うがそこに手間をかけたくないので、本記事本編でのGoogle Cloud Visionを使う方針に切り替えたのであった。 --- ### ワトソン君の活躍 - 2017-10-11 URL: https://remoteroom.jp/diary/2017-10-11/ #### AI Business Forumの所感 今日の午後は、[IBM Watson](https://www.ibm.com/watson/jp-ja/)の適用事例を紹介している『[AI Business Forum](https://ibmsb.smktg.jp/public/seminar/view/1)』に出向いてきた。会場は帝国ホテル大阪。3つの講演に参加し、たとえば裏でWatsonが動いている事例として、チャットボット的な[JALのマカナちゃん](https://www.jal.co.jp/inter/makana/)や[LOHACOのマナミさん](https://lohaco.jp/support/)を知り、cognitiveソリューションビジネスの進み具合に驚いたのであった。 自分がいま本 (後述) で学んでいるレベルからWatsonに至るまでには、学術的にいったいどれだけの道程があるんだろうなぁ……とある意味諦めが伴う感動の気持ちと、経験上の観点から基礎が分かったほうが応用が利くんだと思い込んで、基礎的な勉強をこのまま地道に続けたい気持ちの自分がいる (だいたい私は森羅万象をとにかく物理の刀で切ってみるのが好きなのだ)。 また、Watsonを利用した各種サービスの公式カタログで、サービス内容や値段を確認し、個人的に予想したこととして。これらの初期費用・月額費用 (多くはNNN万円・NN万円) が、あと一桁小さくできると、小規模な事務所や店舗などでもWatsonの利用に費用的な躊躇がなくなり、生活圏レベルにも及ぶ強力な変革が起こりそうに感じた。 #### パーセプトロンを学習中 読み解き中の『ゼロから作るDeep Learning』については、「2章 パーセプトロン」を終えたところ。この章では情報処理技術者試験にも出てきそうな論理回路が取り上げられていて、「XORは、NANDとORとANDを繋いで実現できる」ことを、初めて手を動かしてPythonをいじって理解した。 Pythonの文法や作法を学ぶ面においても、たとえば十数行しかないサンプルプログラムの中で、わざわざ下記のコードが書かれている意味を、脇道にそれつつ調べて理解したりして、面白くなっている。 if __name__ == '__main__': --- ### Pythonとディープラーニングをかじるぞ - 2017-10-09 URL: https://remoteroom.jp/diary/2017-10-09/ 保育園の運動会が昼に終わり、家族がディープに昼寝している間にこそこそと……。数ヶ月前に書店で購入したが積んでいた、『ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装』を、やっとこさ開いて自習を開始。 #### Pythonのバージョンは3系 帯には「作って学ぶ。手で覚える。」と銘打ってある。本書はPythonを使ってディープラーニングを学んでいく趣旨で、指定されているPythonのバージョンは3系だ。学ぶ環境作りのため、とりあえず常用PCの二つ (Xubuntu, OS X) に、Ubuntuやhomebrewのパッケージを用いてPython 3をインストールしようと思ったが、既存のPython 2系と混ざるのが少し恐い。結局は本書に記載の通りに楽をして、[Anaconda](https://www.anaconda.com/download/)というディストリビューションを用いてPython 3.6.2をインストールした。 #### プロンプト「>>> 」 次に、Githubに掲載されている本書のサンプルソースを手元にcloneし、手を動かしながら1章「Python入門」を終えたところ。そもそも、自分はPythonを書いたことがなくほぼ未知の言語で、プロンプトの段階から試行して触れていくことがとても新鮮だ。「一行で終わらない命令には行末にコロンを付けるのだな」とか気付かされるこの感じ、Perlや、F-BASIC V3.0習得の頃を思い出します。 --- ### GPD Pocket) 軽いと思うXubuntuに載せ替えた - 2017-10-04 URL: https://remoteroom.jp/diary/2017-10-04/ |項目|内容| |----|----| |機種|[GPD Pocket](http://www.gpd.hk/pocket.asp) Ubuntu版 (第3ロット)| |BIOS|純正20170807| |OS|https://apt.nexus511.net/ のXubuntu 16.04.3| |uname -s -r -v|Linux 4.13.0-2-generic #gpd SMP Sat Sep 9 14:41:02 CEST 2017| #### Xubuntuとそのインストール [Linux Mint](https://linuxmint.com/)や[Ubuntu-MATE](https://ubuntu-mate.org/)にはほどほど飽きていて、別のディストリビューションを試してみようと考えた。シンプルなのが好みなので[Xubuntu](https://xubuntu.org/)を選択し、USBメモリからブートして感触を確認すると、キビキビして軽いことを実感。GPD Pocketや、より非力なIntel Compute StickのOSは、このXubuntuに変えようと思う! GPD PocketへのXubuntuのインストールには、今回は https://apt.nexus511.net/ で配布されているGPD Pocket用のISOイメージを用いた。何も問題なくインストールできる。 #### 環境構築メモ1: Dropboxアイコンの正常表示方法 ##### 2017/10/04版 →効き目が無い?ので2017/10/15へ ~~XubuntuのGUI環境に[Dropbox](https://www.dropbox.com/)をインストールすると、常駐アイコンが正常表示されずに×印アイコンが表示されることがある。これを直すためには、Dropboxの起動をdbus-launch経由に変える、次の手を打てばよいらしい。~~ 1. ~~Whisker Menu (Windowsのスタートメニュー相当) を起動する~~ 2. ~~[設定] → [セッションと起動] → [自動起動アプリケーション] タブを開く~~ 3. ~~Dropbobが自動で作ったと思われる、名前「Dropbox」なアプリケーションは [削除] しておく~~ 4. ~~新規のアプリケーションとして、名前「Dropbox (任意)」、コマンド「``dbus-launch dropbox start``」を設定する~~ - ~~参考URL: XubuntuでDropboxのインジケータアイコンが表示されない時の対処法 | ちょっと知りたいIT活用の備忘録 https://jands-innovation.com/memorandum/linux-memorandum/xubuntu/5351/~~ ##### 2017/10/15版 XubuntuのGUI環境に[Dropbox](https://www.dropbox.com/)をインストールすると、常駐アイコンが正常表示されずに×印アイコンが表示されることがある。これを直すために次のようにした。上記の2017/10/04版の方法は、何者かが、Dropboxオリジナルの自動起動を復活させてしまう気がしたので再考。 1. 次のファイルをエディターで開く: ``$ editor ~/.config/autostart/dropbox.desktop`` 2. オリジナルのExec行をコメントアウトする: 「#Exec=dropbox start -i」 3. Exec行として次のものを追加する: 「Exec=env DBUS_SESSION_BUS_ADDRESS="" dropbox start -」 4. 他から書き換えられないように権限を -w する: ``$ chmod -w ~/.config/autostart/dropbox.desktop`` - 参考URL: Configuring Dropbox for Xubuntu 14.04/16.04 (Ensuring that the Panel Indicator Icon Loads Properly) - Into Your Hands LLC http://www.intoyourhandsllc.com/blog/132-configuring-dropbox-for-xubuntu-14-04-16-04-ensuring-that-the-panel-indicator-icon-loads-properly.html #### 環境構築メモ2: caps2ctrlの設定方法 Xubuntuにて、GUIログイン後からいわゆるcaps2ctrl、つまりCAPSキーをCTRLキーとして使うためには、次のように設定すればよい。 1. Whisker Menu (Windowsのスタートメニュー相当) を起動する 2. [設定] → [セッションと起動] → [自動起動アプリケーション] タブを開く 3. 新規のアプリケーションとして、名前「caps2ctrl (任意)」、コマンド「``setxkbmap -option ctrl:nocaps``」を設定する 4. たとえばXubuntuを再起動して、caps2ctrlがログイン後に効いているか確認する #### 環境構築メモ3: blueman-servicesのエラー回避方法 Xubuntuを日本語環境でセットアップした後に、標準ディレクトリ名を英語表記に変更することは、シェル上での名前補完など考えるとほとんど必須だ。その変更コマンドは次の通り。 $ LANG=C xdg-user-dirs-gtk-update この後に、Bluetooth関係のblueman-servicesが“「ダウンロード」ディレクトリがありません”的な、次のエラーを出してくることがある。 この場合には次のコマンドで、blueman-servicesの設定を書き換えるとエラーは解決する。(``hogehoge``部分は本当のユーザ名に変更すること) $ gsettings set org.blueman.transfer shared-path '/home/hogehoge/Downloads/' - 参考URL: UbuntuでBluemanがダウンロードディレクトリがないと言ってくる : mwSoft blog http://blog.mwsoft.jp/article/175788130.html --- ### 楽しみと窃盗未遂 - 2017-09-30 URL: https://remoteroom.jp/diary/2017-09-30/ 休日に見かける趣味車。 #### 野外映画会を楽しみ 六甲道南公園で「[たそがれの六甲道ファミリー劇場](http://www.city.kobe.lg.jp/ward/kuyakusho/nada/oshirase/moyoshi/29tasogare.html)」が行われるという情報をキャッチ。子どもはまだ、テレビ以外で映画を観たことはないし、とにかく楽しそうだと思って18時過ぎに出向いた。ちょうど日の入り過ぎた頃。上映作品は『[ペット](http://pet-movie.jp/)』で、最初は垣根を意識していた各動物たちが、その種類や住環境での境遇差を超えて力を合わせ、みんなが仲良くなるというストーリー。 屋台でポップコーンを仕入れ、大人も十分楽しんでしまった。客席 (芝生広場) の傾斜がない野外映画会なので、プロジェクターとスクリーンの間の長い距離を、頭を低くしていない人が通ってしまうと、スクリーンに人影が投影されてしまう場景が、沢山の人がこの場を共有してひとつの映画を観ていることの証しだし、なんだか懐かしい。 #### 旧車の被害を悲しむ 帰宅して、電話に着信が入っていた実家の方に連絡を取ると、びっくりさせられた。家族が怪我したというような重篤な知らせではなかったが。 親父の車が、朝、運転席側ドアをこじ開けられてイグニッションキー付近が破壊された、つまり盗難されかけた状態になっていたらしい。場所は、九州の田舎の団地駐車場で、車種はSKYLINE R34型の25GT-tである (2000年前後の古い車なので盗難防止装置なんて無し)。ちなみに同じ夜に、同じ駐車場の“スバルのスポーツタイプ”も同様の手口でやられていたそうで、いわゆる日本のスポーツ系車を狙った犯行だろうか。しかし不幸中の幸いというか、もし真に手慣れている者の犯行なら、車は駐車場から無くなっていたかもしれぬ。 親父にとって生涯たしか3台目のこのスカイラインは、数ヶ月前は停車中にぶつけられ、入手困難度が増してきた部品を取り寄せて修理したばかりでもある。電話の声がすごく落ち込んでいて、なんとも言えないな……。 --- ### 【読んだ本】 仕事で使える!Google クラウド会議術 会議スタイル・イノベーションガイド - 2017-09-30 URL: https://remoteroom.jp/medialog/2017-09-30_book-b00ythnjq2/ 初めに会議全般の定義を行い、次に分類を行い、様々な方向からコストを計算する方法を導き……といった風に論理的に構成された章立て。会議を見直し、意義のある物にするにはどうすれば良いかを説いている、期待以上に良い本でした。 この流れの引き立て役のようにGoogle Apps (当時の名称。現在では[G Suite](https://gsuite.google.com/)が該当する統合サービス) が、会議そのものと前後のコラボレーションにフル活用できるITインフラとして紹介されている。画面キャプチャなどは登場しないが、キャプチャを入れると本家のサービス内容や画面の変化に追随できないし、活用アイデアを提示している本書のスタンスを鑑みると納得である。 --- ### 勢いでGoogle Cloud DNSを試してみた - 2017-09-27 URL: https://remoteroom.jp/diary/2017-09-27/ そば屋さんでの昼食時、僕の右手の包帯を気にした店員さんが、なにも言わないのにフォークを添えてくれました。左手でも箸は使えるんだがお心遣いに感謝。(^_^) #### 可用性高くて楽なDNSが欲しい 職場のオフタイムに、諸々の事情を考慮したらば、「DNSサーバを自分らで運用していくの、考え直してもいいな」という話題で盛り上がった。DNSのSaaSを調べてみると [Google Cloud DNS](https://cloud.google.com/dns/) が良さそうで、ゾーン数やリクエスト数を想定して見積もると費用は月数千円程度で済みそうに思える。 帰宅後、少し古い2015年の記事だが、[管理者のためのクラウドサービス入門:クラウド系DNSサービス「Google Cloud DNS」の損得勘定 (1/2) - @IT](http://www.atmarkit.co.jp/ait/articles/1510/15/news038.html) を見つけて読んで、メリット多そうなこのGoogle Cloud DNSを早々に試してみたい気持ちが最高潮に。自分個人のドメインのDNSサービスをGoogle Cloud DNSへ切り替える作業を始めてしまった……。 ##### 比較対象A) Google Cloud DNSに乗せてみたドメイン: remoteroom.jp Google Cloud DNSに乗せてみたドメインは、remoteroom.jp。Google Cloud DNSの画面で次のようにゾーンの設定を行い、 次のように、権威DNSが指すネームサーバをGoogle指定のもの4つへ切り替えた。 そしてしばらく待った後、次のように、[DNS Speed Test to Check DNS Hosting Speed | UltraTools](https://www.ultratools.com/tools/dnsHostingSpeedResult)にてDNSの速度を測定すると、このUltraToolsサービスに応答するネームサーバ4台 ``NS-CLOUD-B?.GOOGLEDOMAINS.COM`` のなかに、9msと、えらく速いものが有ることがわかる。かつ、ネームサーバは地域的に分散していそうだ。 ##### 比較対象B) さくらインターネットのDNSのままのドメイン: genepub.com 比較のため、まだGoogle Cloud DNSに乗せずに、今までのさくらインターネットのDNSのままのドメインは、[genepub.com](https://genepub.com/)。(←自作のEPUB変換サービスを立てています。未だEPUB2ですが) 比較対象のremoteroom.jpと同様に、UltraToolsにてDNSの速度を測定すると、このUltraToolsサービスに応答するネームサーバ2台 ``NS?.DNS.NE.JP`` はおおよそ同じ応答速度、そしてUltraToolsサービスからは遠いようだ。 #### GCD初利用の感想 [Google Cloud DNS](https://cloud.google.com/dns/)、思った以上に簡単に設定できたし効果もイイ感じ。今後の管理・設定変更でも楽できそうだ。課金の程度は、一ヶ月ほど観測しないと実際は分からないが、今回の2ドメインで3ドル/月ぐらいまでに収まれば許容範囲に思う。 --- ### 「ヘイトスピーチ」の日本語訳 - 2017-09-26 URL: https://remoteroom.jp/diary/2017-09-26/ 昼休み時に多用するいつものカフェの、店内は満席だったが、オープンカフェの期間中で外の歩道上にも席が設けられており、こりゃ幸いじゃ〜とそこに座った。 購読しているメルマガの、[【フェイクニュース徹底討論】津田大介の「メディアの現場」vol. 271](http://yakan-hiko.com/BN6797)を読んでいるところ。冒頭記事の、『メディア/イベントプレイバック ──フェイクニュースを暴け! 小田嶋隆×安田浩一×西岡研介×津田大介』で一つ気付かされたのは、比較的新しいカタカナ言葉である「ヘイトスピーチ」を、よくその対訳とされている「憎悪表現」として大まかに捉えている認識では、水掛け論にも繋がり、問題なんだということ。 単に辞書的な意味での「憎悪」を用いた《私はあなたが憎い》というような憎悪の表現と、本来の「ヘイトスピーチ」とは、発言者の認識にある属性や背景を区別すべきであって、本来の「ヘイトスピーチ」には、[Wikipedia - ヘイトスピーチ](https://ja.wikipedia.org/wiki/%E3%83%98%E3%82%A4%E3%83%88%E3%82%B9%E3%83%94%E3%83%BC%E3%83%81) (2017/09/26) にこう書かれているように、基づいている各種の事柄や目的が存在しているわけだ。 > ヘイトスピーチ(英: hate speech、憎悪表現)とは人種、出身国、民族、宗教、性的指向、性別、障害など自分から主体的に変えることが困難な事柄に基づいて個人または集団を攻撃、脅迫、侮辱する発言や言動のことである。 となると、「ヘイトスピーチ」は、主流な「憎悪表現」と訳するよりも、たとえば、上記Wikipediaページに例示されている「差別扇動表現」と訳するほうが、ヘイトスピーチの定義を日本語として正確になぞっていて本質を捉えていそうだ。 そのうち社会全体的に、ヘイトスピーチと言論の自由の関係を、今以上に厳しく議論して考えなければならない局面が来るかもしれない。そんな時は定義の共通認識や言葉遣いも知識として大切だ、なんてことを考える。 --- ### 新鮮な気持ち - 2017-09-25 URL: https://remoteroom.jp/diary/2017-09-25/ きれい、と思った風景を一枚パチリ。ここのthumbnail用に、毎日「これだ!」という写真を一枚撮ることを、習慣化するのはいいかもと思う。外界を見る目を鋭敏にするために。そして理想的には、撮った段階から日記のネタを考え始めるようになるかも。 今日は入院と休日を挟んで9日ぶりの会社出勤で、きっとかなりの仕事が溜まっているだろうと内心、恐る恐るな気持ちだったが、チームの総合力によりそれほどの問題はなかった。右手でのマウスの操作が困難なので、もう一個接続して左手用も用意して、諸々とにかく、動的平衡を楽しみながら仕事していければ良いな、と思うところ。 #### 今日試したLinuxアプリ: tmate いわゆる黒い画面の「Instant terminal sharing」が出来るというtmateを、OS XとLinux Mintの両方に入れてテスト。たしかに謳い文句どおりに、二つの端末が、一つのターミナル画面を共有している (双方からキー入力できて結果も同時に双方に返ってくる) 状態の動作を確認できた。これはなんだか革新的なアプリの予感もするのだが、はてはてどう使おう? ←考えるのが楽しいのかもしれない - tmate: https://tmate.io/ #### 今日見つけた端末: Mode1 RETRO 折りたたみ式携帯電話の形をした、AndroidなSIMフリー端末。スペックをケチった物ではなさそうだし、価格も約2万円と妥当な印象。自分の今のPHS端末も停波がそのうち来るだろうから、こういう電話もリサーチしておかねばな、と自らに言い聞かせる。 - Mode1 RETRO MD-02P: http://mode1.jp/md02p Amazon.co.jpでの予約注文の受付、始まっている。 ##### P.S. Instagram, tags 「Mode1 RETRO」の情報を検索してたら、広告モデルさんのインスタを見つけた。Instagramでのハッシュタグ?は、Twitterよりもすごいいっぱい付けるもんなんだなと。そしてどのタグもちゃんと大量にヒットし、汎用性高いんだ……と、そんなところにも感心。 --- ### 秋の神戸港散策 - 2017-09-24 URL: https://remoteroom.jp/diary/2017-09-24/ #### 地元をみなおす 神戸港散策のチケットセット (ぶっちゃけ[ココ](https://happypack-kobe.jp/info/2017/20170404wakuwaku.html)のHコースでもらったもの) を使って、神戸港遊覧船で港内を巡り、十ウン年ぶりかもしれない、神戸ポートタワーに登ってきました。 通常なら自家用車を運転して行ってしまう距離へ、電車で出掛けてしかも観光をするという行為は、既知でない所を訪れるような心地良い錯覚があり新鮮でした。夕陽が見られる時間、そして初秋の肌感覚がちょうどよかったし。その新鮮な気持ちの流れで写真も意識して撮ったので、掲載してみます。 なお、現在包帯を巻いている右手の都合により、カメラはコンデジの[RICOH GR](http://www.ricoh-imaging.co.jp/japan/campaign/20131022/)は持っていけなくて、あえてスマホでどれだけ撮れるだろうかを模索。使用機種は[HUAWEI honor 8 (FRD-L02)](http://consumer.huawei.com/jp/phones/honor-8/) で、標準のカメラアプリ+無加工縛りとしました。 #### 神戸港遊覧船: クルージングカフェファンタジー (Cruising Cafe Fantasy) - URL: http://www.kobe-seabus.com/ #### ランドマーク: 神戸ポートタワー (Kobe Port Tower) - URL: http://www.kobe-port-tower.com/ --- ### 入院Day-4) 退院の目処 / GPD Pocketの道具感 - 2017-09-22 URL: https://remoteroom.jp/diary/2017-09-22/ #### 退院の目処 術後の経過は、悪くないと思う。縫い口はキリキリと痛むし、右手で使える指を用いての、ペットボトルの蓋を開けたり、何かをつまんで引っ張るといった作業は、手の中の金属が突っ張る感じがして今は怖くて無理。なのであるが、痛み止めが追加で欲しくなるほどの状況ではない。 そこで退院の希望を申し出て、担当医からOKが出た。経過は通院で診てもらうことにして、明日 (土) のうちに病院を出る予定になった。生活環境での問題は、右手が使えないことによる公私両面での、予想がつかないけどいろいろ遭遇するであろう障害と、包帯ぐるぐる巻で太くなった手首が、これからの季節向けの自分の服に通るかどうか怪しいこと。まぁ、ぐぐったりして、対策を考えよう。 #### GPD Pocketの道具感 |項目|内容| |----|----| |機種|[GPD Pocket](http://www.gpd.hk/pocket.asp) Ubuntu版 (第3ロット)| |BIOS|純正20170807| |OS|https://apt.nexus511.net/ のLinux Mint 18.2 Sonya| |uname -s -r -v|Linux 4.13.0-2-generic #gpd SMP Sat Sep 9 14:41:02 CEST 2017| 今回の入院では、メイン機のMacBook Air (11インチ) ではなくて、7インチ画面の[GPD Pocket](http://pc.watch.impress.co.jp/docs/column/hothot/1079088.html) (Ubuntu版にLinux Mintを導入中) を連れてきたのであった。感じたメリットは次のとおりで、メールの読み書きやmarkdownテキストを打つぐらいの類の作業なら、十分足りますね。 - 事前の読み通り、片手が使えない状況において、フリースペースであるデイルームなどへ持っていくのに小型軽量な点が大助かり - 完全に片手でキーを打つ場合には、むしろ小さいキーボードのほうが指の行き来が少なくスムースに打てることが、実践的に良く分かった そういえば十数年以上昔、足首を外果骨折したときの一ヶ月ほどの入院では、Windows CEな[Jornada 680](http://pc.watch.impress.co.jp/docs/article/990524/hp.htm)を病室に持ち込んで日記を更新していたな。あれも良い道具だった。 --- ### 入院Day-2,3) 右手の手術とその後を簡単に記録 - 2017-09-21 URL: https://remoteroom.jp/diary/2017-09-21/ #### 入院Day-2 オペ室はやはり薄い若葉色の壁で、天井の辺に沿って白色光の強い照明があり、真ん中の2セットの無影灯がこっちを向いている。洋楽のラップのような、小刻みなビートの音楽が流されている。身体の鎖骨あたりと足の指にセンサーが取り付けられ、僕の心拍を示す電子音がピッピっと鳴る。音の高さは何を表しているのだろう? 不意に、「心拍は普段からこんなに遅いのですか?」と聞かれ、そうかもしれないと答えながら、『[サイコパス]()』で読んだ、サイコパスと心拍数の関係を思い出す。本人は、緊張しているつもり。 医師二人は“透視”の機械を用いながら相談しあい、脇の下の神経に何かが打たれ、感覚が極度に鈍くなって右手が本体の意識から離れる。ちなみに視界は、上半身にかけられた青色の紙のようなものに遮られている。左側の見えるところに看護師さんがいて、時折、僕の具合を尋ねてくれる。 「ドリル」やら「ハンマー」という単語にビビりつつ、今更とにかく耐えるしかなく、太さ1.2mmの針金を手首の外側から小指へ三本通したという、一時間半ほどの手術は終了した。 #### 入院Day-3 昨夜寝るときは麻酔がまだ残っていて、ほとんど動かせなかった右手の指が、今朝は動かせることを確認。回診の際には手首の包帯が取られて、その下の、針金が出ている縫い口を見ることができた。これは……、物が当たると死ぬ。極めて痛そうすぎる。(x_x) 病院着が暑く感じられていたが、午後にはTシャツ姿に戻ることができ、抗生物質の点滴も終了して左手はフリーになった。右手は通常、三角巾に通している状態。リハビリはまだ無し。 --- ### 入院Day-1) システムに慣れる - 2017-09-19 URL: https://remoteroom.jp/diary/2017-09-19/ レントゲン写真を[2017/09/13の記事]()に載せました、右手小指の骨折の治療のため、HAT神戸にある神戸赤十字病院に本日から入院開始。これからしばし、一般的な形式の四人部屋での、人生何度目かの、スケジュールの定まった集団生活が始まる。 ところでこの入院の期間。当初病院から聞いていたというか事前に予想していたのは2泊3日だったが、本日手渡された入院計画では、一週間強とな! (それも書類によっては8日間だったり9日間だったり) ……お、おう、なんということだ。会社の業務的な諸々も、持ち込んだ荷物も、その他すべての段取りが狂ってしまった。 しかしもう、入院計画は動き出した。19時を過ぎたころからは、寝静まる前兆の静けさが、病棟のフロアには広がり始めている。明日は手術。私のベッドも窓のブラインドを下げて、何を読むかじっくり吟味して、おとなしく読書などしとこう。 --- ### 【読んだ本】 小さな運送・物流会社のための 荷主から信頼される! 「プロドライバー」の教科書 - 2017-09-17 URL: https://remoteroom.jp/medialog/2017-09-17_book-4495529110/ 左綴じの、左ページに文章、右ページにイラスト混じりの解説が載っている。死角を少なくする右折の仕方、休憩時間の正しいとり方、カッとなった時に心がけるべき対応、数トンの荷の重心位置を考慮した荷積みの仕方などなど、実に様々な知識がコンパクトに、その2ページごとに収められている。運送業界を知らない自分にも、これは実用性の高そうな本だとわかる。 普遍的で、特定の技術に非依存な、知識は大変に強い。教科書の名にまさに値する。 たとえば、ITシステムの運用保守の分野でも、エッセンスを詰めたこんな教科書を用いるべきだろうな。「ラック内配線時の心掛け」「異変があったらログを調べよう」「パスワード発行時には類似形の文字の使用はあらかじめ除けよう」とか。……あれ、こういう“本”を案外目にしたことがないままやってきた気がする。 --- ### 【読んだ本】 新米主任 ITIL使ってチーム改善します! - 2017-09-15 URL: https://remoteroom.jp/medialog/2017-09-15_book-b071nhsjs6/ ITILの書籍を読んで、つり革持ちながら目をうるうるさせてしまうなんて意外でした。そんな、心温まる成功を疑似体験できる物語。 前作『[新人ガール ITIL使って業務プロセス改善します!]()』の続編で、化粧品メーカーの購買部から通信販売部に転部した主人公が、チームの主任として《改善》に喘ぐ。 「数字を追いかける」改善の意味を、上位の概念で、全体最適化の観点で捉える必要性を教えてくれる部分がある。これをいま自分が関わっている職務と照らしあわせて考えると、本来は、顧客との引力関係を低価格以外の何で創るか?という問題の追求に、《改善》の方向性を向かわせるべきに思う。 さて、こんな話をするための共通言語をチームで持ち続けるにはどうすればよいか。それがITILの実践だよ、というオチなわけですが。 --- ### X線写真で見る右手 骨折編 - 2017-09-13 URL: https://remoteroom.jp/diary/2017-09-13/ #### 2017/09/12の右手 (X-Ray) 右手を先日、不用意なことで痛めて、調べてみたら小指の骨が折れておりました。診断名は「右小指中手骨骨折」。病院で撮ったX線写真を記録としてここに置いておきます。 小指のポッキリ部分が、側面のアングルから確認できます。(ぞっとする) #### 2009/01/15の両手 (Black and White) そういえば昔に、自分の手を壁に当てて、白黒で撮っていた写真がありました。骨の形との比較にちょうどいいかも……と思ったので、ついでに貼っておきます。 この2枚の写真、Flickrでのビュー数がこれまで10,000前後と、意外に多い。Flickr的に人気があるのか、単にこれまで8年以上という公開時間の長さによるものか。 --- ### 【読んだ本】 高熱隧道 - 2017-09-10 URL: https://remoteroom.jp/medialog/2017-09-10_book-b00d3wj3c8/ ときどき読みたくなる吉村昭の、一作品。黒部第三発電所 (昭和11年8月着工) の水路などに用いる隧道の工事が、自然環境に抗う、どのように凄まじいものであったかを記録している。 それとともに、資材運搬中の転落死に始まり、ダイナマイトの自然発火による爆発や泡雪崩による宿舎の破壊で、おびただしい数の犠牲者が出る中、岩盤温度が160度を超えてその温度を下げるための放水が耐えられないほど熱い湯に変わっているという状況で、捨て身覚悟で掘削作業する労働者 (人夫) と指揮をし続ける技術者との、極限での想像もつかない異様な、心の疎通を止めた関係性を、一文一文に切り出している。 ひとの執念の力や、変容の様を思い知る。これに関して良いとか悪いとかは、わからない。 --- ### 【読んだ本】 新人ガール ITIL使って業務プロセス改善します! - 2017-09-08 URL: https://remoteroom.jp/medialog/2017-09-08_book-b071kwxxt5/ 仕事の関係上、ITILの手法を習得する必要を強く感じていた。書籍版を仕入れるのを躊躇していたところに、待望のkindle版で発行されていたので購入。ITILとは、物事を成し遂げるためのフレームワークの一つ、"[Information Technology Infrastructure Library](https://ja.wikipedia.org/wiki/Information_Technology_Infrastructure_Library)" の略である。本書では分かりやすい例えを用いて、このITILが問題解決とサービス向上に繋がっていく物語が描かれており、良い塩梅の読了感がある。ITILの大局観、用語のマップのようなものが頭に用意できた。 自分はこうしてやっと、家に積みっぱなしの、ITILの分厚い参考書を手に取る気持ちになったようである (汗)。京子さんがどう進化するのか、続編『新米主任 ITIL使ってチーム改善します!』も読まねば。 --- ### GPD Pocket Ubuntu版) VirtualBox OK! hugo NG? - 2017-09-05 URL: https://remoteroom.jp/diary/2017-09-05/ |項目|内容| |----|----| |機種|[GPD Pocket](http://www.gpd.hk/pocket.asp) Ubuntu版 (第3ロット)| |BIOS|純正20170807| |OS|https://apt.nexus511.net/ のLinux Mint 18.2 Sonya| |uname -s -r -v|Linux 4.13.0-1-generic #gpd SMP Sun Sep 3 21:37:10 CEST 2017| GPD Pocket Ubuntu版に、https://apt.nexus511.net/ の助けを借りてLinux Mintをインストールし、小型コンピューティングを日々あちこちで楽しんでおります。ここを読んでくれている方の、もしかしたら参考になるように、今回の投稿より、投稿時点でのGPD Pocketの環境情報を上記の様な表にして付けることにします。 #### VirtualBoxが動くようになった 今日は、上記サイト https://apt.nexus511.net/ にアップデート「Hotel Release Builds」が出ていたのを見つけ、適用しますと、kernelが「4.13.0-1-generic」に変わったようです。このkernelだと、「``# apt-get install linux-headers-generic``」を実行することも出来たので、いままで「``# /sbin/vboxconfig``」が成功せず、VirtualBoxの仮想マシンを動かすことができていなかった問題が解消されました。 #### 気付けばhugoが動かない 次に遭遇した問題は静的サイトジェネレーターの[hugo](https://gohugo.io/)、気付けばこいつが動かない。hugoはGPD Pocketの環境にsnapでインストールしており、現在は次のような状態ですが、 $ snap --version snap 2.27.5 snapd 2.27.5 series 16 linuxmint 18.2 kernel 4.13.0-1-generic $ snap list Name Version Rev Developer Notes core 16-2.26.14 2462 canonical core hugo 0.26 475 hugo-authors - このhugoを実行すると次のエラーを吐いて動かない模様です。 > cannot change profile for the next exec call: No such file or directory hugoを実行できないならば、このサイトRemoteRoomをGPD Pocket上ではビルドできないことになる。GPD Pocketを持ち運んでそれ単体でサイト更新はやりたいので、なんとか解消したいところ。 --- ### 【読んだ本】 新潮選書 零式艦上戦闘機 - 2017-09-03 URL: https://remoteroom.jp/medialog/2017-09-03_book-4106036460/ 前回の読了本『[情報なき国家の悲劇 大本営参謀の情報戦記]()』とうってかわって、戦略の逆の側のひとつ、戦闘機の側から先の大戦を描画している。ゼロ戦の性能や設計思想に関する通説を覆していることで有名な本だと聞いて、手に取ってみた。ちなみに私は、いわゆるミニタリーマニアでも何でもないので、特別な事前知識は別にない。 「何隻撃沈、何機損失」というような各戦の具体部分の記述、いわゆる戦果や著者による評定については、すべてきっちりと読んだわけではない。詳細すぎるし正直頭に入ってこないな……と感じたのであった。しかし最後の『おわりに』の章に記述された、P.347の次の一文に、この本の自分なりの意味を捉えた。 > 著者には、零戦と米軍機の勝敗を分けた最大の要因の一つが、日米両軍の「総力戦」に対する覚悟の差と、その差から派生する戦術・空中指揮に対する工夫の差であったように思われる。 これを私は、マネジメント的ニュアンスの教訓だなと捉えた模様。大戦略に基づく戦術を一貫して練る場面においては、マネージャーがリソースの運用をもっともっと正しく工夫すべきだろ、と言われている気がしたのであった。 --- ### GPD Pocket Ubuntu版) 放熱シートで熱対策やってみた - 2017-09-02 URL: https://remoteroom.jp/diary/2017-09-02/ GPD Pocketの熱対策用に、放熱シートと精密ドライバを取り寄せたことを[先日の記事]()に書きました。それらがさっそく届いたので、GPD Pocketを分解し、熱対策の改造をやってみました。簡単にまとめます。 なお、これは私の趣味としての改造ですので、そもそも物理的に純正以上のベターな放熱が出来ているか、部品類に悪影響が出ないか、という点での保障はありません。あしからず。 #### 分解して本体内部を観察、放熱シートの貼り方を考える 1. 事前にたとえば [GPD Pocketの分解と熱対策カスタム : 魔王の引き出し](http://maodasi.ldblog.jp/archives/50630727.html) を参考に、今回の改造の雰囲気を掴んでおきます。 2. 精密ドライバの「+0」を使って、GPD Pocketの裏蓋の6本のネジを外します。6本のうち、ヒンジ側中央の1本のみが、少し長いネジとなっています。 3. 放熱シートは、今回はあらかじめ、厚さ1mmのものを選択しています。本体裏蓋と内部の間に放熱シートを挟んで密着させるには、0.5mm厚では薄すぎるだろうと予想していたので。 4. この放熱シートを、GPD Pocket内部を眺めながら、どのように貼り付けるかを考えました。熱対策の方針としては次の通り。 - CPUやヒートシンク、メモリなどのICチップから発せられる熱を、できるだけ直接、本体裏蓋に逃がして放熱を助ける - バッテリーは一緒に温まってほしくない 5. なお、GPD Pocket内部の解説としては、Flickrのdork_vaderさんのアルバム「[GPD Pocket Teardown](https://www.flickr.com/photos/dork_vader/albums/72157682344549524)」にあります、次の写真を参考にしています。 #### 本体内部と裏蓋に、このように貼った 上の写真で分かるように、1mm厚の白い放熱シートを、10cm2使い切るぐらいベタベタ貼りました。具体的には下記のような作業です。これぐらい貼っても、本体内部と裏蓋が部分的に密着しつつ、なんとか元通りに裏蓋を閉めることは出来ています。 ##### 本体内部のほう - ヒンジ側にもともと付いていた、GPD純正の黒い放熱フィルム?は外した。このフィルムの裏側にピンク色の放熱シートが付いていたので、同じように約1cm角の放熱シートを作って、黒いフィルムの下のIntelチップに貼る。 - バッテリー近くに4つ並んでいるELPIDAメモリーチップの上に、橋渡しになるよう、5mm幅程度の放熱シートを作って貼る。 - CPUからファンに向かって伸びている、銅のヒートシンク&ヒートパイプを覆うように、放熱シートをペタペタ貼る。このとき、上記のIntelチップとELPIDAチップの発する熱も伝導するように、それらチップに貼った放熱シートにも重ねます。 ##### 裏蓋のほう - 裏蓋を閉めたときに、本体側のCPU部分と密着するような位置に、数cm角の放熱シートを貼る。 - 同じく裏蓋を閉めたときに、本体側のバッテリーの右側部分 (CPUから遠い方) と密着するような位置に、数cm角の放熱シートを貼る。 #### 熱対策の効果について 今回は勢いで改造して、改造前に定量的な測定をしていなかったので、ぶっちゃけ主観的な感想になります。 - 負荷をかけるためにYouTubeのHD動画をフル画面で再生するような場合、改造前はCPU温度が60℃を超えて、しかもフリーズするようなこともあったが、改造後は、なかなか60℃に達しなくて、粘り強くなったような気がする。このとき、ファンはおそらくMediumスピードで回っている。 - 本体の裏側右側や上部右側は、高負荷時に熱くなりやすくなっているような。これはもちろん、狙い通りではある。 --- ### GPD Pocket Ubuntu版) gpd-ubuntu-packagesの使用感, 熱対策 - 2017-08-31 URL: https://remoteroom.jp/diary/2017-08-31/ #### nexus511/gpd-ubuntu-packagesの使用感 前回の記事で紹介した、GPD Pocket用のパッチが当たったLinuxをビルドしているプロジェクト https://github.com/nexus511/gpd-ubuntu-packages https://apt.nexus511.net/ の、Linux Mint版「Mint Cinnamon 18.2」を自分のGPD Pocketにインストールし、使い始めて約三日経ちました。 現状では次のような、悪くない感触です。(^_^) - ``sudo apt update && sudo apt upgrade`` を実行することで、このプロジェクトでパッチを当てているプログラムも一緒にアップデートされるようで素晴らしい - 今のところは、回避不能でやっかいな問題は発生していない - 液晶画面の蓋を閉じてのサスペンド状態の時に、「充電中→充電解除」するか「充電していない状態→充電開始」してしまうと、蓋が閉じていながらも、画面が点いてサスペンドが解除されてしまう気がするので、このような操作の時だけは注意しています。いずれの場合も、「蓋を開いてから→充電状態を変更して→蓋を閉じる」と回避が可能。 - VirtualBoxで仮想マシンを動かそうとするときに、「Kernel driver not installed (rc=-1908)」というエラーが出る。kernelのsourceがinstallされてれば解決するんかな?という当たりをつけているが、まだ深くは探究していない。 OSレベルがおおよそ落ち着いてきたので、その上のレイヤーのソフトウェアで、新たな模索をやり始めています。 - オフィスソフトとして、定番でよく使っている[LibreOffice](http://www.libreoffice.org/)の他に、[WPS Office](https://www.wps.com/)を試してみたり。 - 次にはなにか、(やってきたPerl以外の) プログラミング言語を勉強できる環境を整えようかな。 #### GPD Pocketの熱対策案 GPD Pocketの分解+熱対策に用いる物として、次の2点を発注しました。購入動機は、1) GPD PocketのCPU温度をモニターしていると、ブラウザを起動したときなど頻繁に50〜60℃に達している。2) しかしながら、これに伴って筐体の裏側がめちゃくちゃ熱くなる、という様子でもない。3) ならば、CPUの熱を今以上に~~アルミ製~~マグネシウム合金の筐体に伝導させることができれば、放熱効率がもっと上がるのでは? というものです。物が届いたら改造レポートします。 --- ### GPD Pocket Ubuntu版) ansible-gpdpocketがプロジェクト終了の模様、代替は…… - 2017-08-29 URL: https://remoteroom.jp/diary/2017-08-29/ #### GPD Pocketを取り巻くLinuxプロジェクト 私の手元にGPD Pocket Ubuntu版が届いた当初から、利用させてもらっていたGitHub上のプロジェクト cawilliamson/ansible-gpdpocket にて、数時間前、終了のアナウンスが出たようです。いままでありがとうございました! >cawilliamsonさん - https://github.com/cawilliamson/ansible-gpdpocket/ 代替のプロジェクトとして nexus511/gpd-ubuntu-packages が挙げられています。各ディストリビューションのISO配布も行われている様子。これからはこちらを追いかけていこうと思っています。 - https://github.com/nexus511/gpd-ubuntu-packages - https://apt.nexus511.net/ --- ### 【読んだ本】 情報なき国家の悲劇 大本営参謀の情報戦記 - 2017-08-28 URL: https://remoteroom.jp/medialog/2017-08-28_book-b012ch352s/ 情報職人の個人的体験記録、とあるが実際はとんでもなかった。情報戦という切り口から第二次世界大戦を垣間見ることが出来る、貴重で驚きの多い、実践的な記録であった。諜報活動について述べられており、それはいわば戦略・戦術のhackingのようなものだと思う。 一例を挙げる。無線通信の内容は暗号化により解せないとしても、軍用機の無線のコールサインの統計により、部隊と所属機数を割り出すことができると。8月6日、そうして蓄積されたデータと、無線の発信の様子を分析して、ある“特別任務”を帯びているB-29編隊が日本に向かっていることを嗅ぎ取る。しかし、日本に根付いていた非数値的な戦略に問題があったり、そして総合的な諜報力が及ばずに、“特別任務”が、原子爆弾の投下であるとまでは導き出せない。 教わったのは、戦略には諜報が必要であること、戦略のミスを戦術では取り返せないこと、という普遍の法則。そしてこの認識のもとに失敗例から学び、事実と解釈、情報と諜報を区別しておく必要性は、平時の生活の中でも要るなぁと実感させられた。 --- ### GPD Pocket Ubuntu版) 「I just fixed suspend on lid close in Mint 18.2.」情報を実験する - 2017-08-27 URL: https://remoteroom.jp/diary/2017-08-27/ #### 液晶画面の蓋を閉じているサスペンド中に、起きちゃう問題 - [ansible-gpdpocket](https://github.com/cawilliamson/ansible-gpdpocket/)の公式issueに「Suspend waking up early #34」が上がっており、その中の2日前の書き込み https://github.com/cawilliamson/ansible-gpdpocket/issues/34#issuecomment-324911771 が、下記情報を示していました。 - I just fixed suspend on lid close in Mint 18.2. : GPDPocket https://www.reddit.com/r/GPDPocket/comments/6vw9h9/i_just_fixed_suspend_on_lid_close_in_mint_182/ - これをLinux Mintの「電源管理」設定画面の話に言い換えると、「Perform lid-closed action even with external monitors attached」 (外部モニターを接続したときも蓋を閉じている状態と見なす) を [ON] にすると、サスペンドが中断する問題は直ったよ、という情報かな。 #### さっそく実験 - 私のGPD Pocket (Linux Mint 18.2, BIOS: 20170807版) でもさっそく実験。いちおう、オリジナルの情報通りに dconf-editor を用いて設定変更しました。 #### 実験結果1 - GPD Pocketは液晶画面の蓋 (lid) がかっちり閉まるので、蓋を閉めているときに液晶画面が点いているかどうか判別しづらい。しかし、キーボード上の電源ボタンの白LEDが次のような挙動をするので、電源ボタン辺りを横から暗闇の中で睨むと、蓋を閉めていても、本体の状況がぎりぎり分かる。 |状況|白LED| |---|---| |OS稼働中|消灯 [OFF]| |サスペンド中・画面消灯中 (推測)|点灯 [ON]| - 液晶画面の蓋を閉じて、数分間放置している限りでは、サスペンドが中断して起きてしまう、という状況はなさそうに思える。 - いまのところはここまで。厳密には /var/log/syslog やら眺めてみて精査が必要です。 #### 実験結果2 - まずは数十分間のサスペンドを試してみた際には、10分ごとに起き上がっている挙動がログに現れていたので、ちょうど同じ [10分] の設定であった「サスペンドするまでの時間」を怪しい挙動の元かもと考え、あらかじめ [なし] に設定した。 - その後、2017/08/27の14:38に蓋を閉じてサスペンドさせて、15:19に蓋を開けたら、この間に /var/log/syslog には何も出力されず。 - 同日の17:50〜20:26、同じく、20:37〜22:30のサスペンドも、ログの上では中断なく乗り切った模様。「液晶画面の蓋を閉じているサスペンド中に、起きちゃう問題」は、とりあえず解決したのかもしれないが、どうだろうか。なにかわかったらまた続報します。 --- ### GPD Pocket Ubuntu版) ansible-gpdpocketとCPUファン回転制御 - 2017-08-26 URL: https://remoteroom.jp/diary/2017-08-26/ #### UbuntuのUnityはやはり不慣れでLinux Mintへ入れ替え - 昨夜遅くからチャレンジして、https://github.com/cawilliamson/ansible-gpdpocket/ を使って、使い慣れた[Linux Mint](https://www.linuxmint.com/) 18.2のカスタム版ISOを作り、GPD Pocketへのインストールに成功しました! #### 次の課題は耳障りなCPUファンの音、回転を抑えよう - しかし、画面をONにした状態でDropboxの初回の同期とかさせていると、冷房の効いているはずの部屋の中でも、ファンがほぼ回りっぱなしでなかなか止まりません。 - この~~アルミ~~マグネシウム合金筐体の小型端末、CPUファン自体というか、ファンに起因する音の質が高周波混じりで、かなり耳障りです。この音が漏れてくるのは、おそらく 1) 右側面の排出口、2) 底面の吸込口、3) 液晶画面のヒンジ (蝶番) 部分のスリット、でしょうか。 - GPD Pocketを開腹してCPUファン付近の静音処理でも試みるか?とも考えたが、まずはOSレベルでやっているはずの、CPUファンの回転制御の閾値を変えてみようと思い立ち、ansible-gpdpocketのソースを見てみると、おおっと、 https://github.com/cawilliamson/ansible-gpdpocket/blob/master/roles/power/files/gpd-fan.conf がおそらく該当部分だ。 ``` ### Time between temperature checks (in seconds) TIME=10 ### Maximum temperature before turbo boost is disabled TURBO=60 ### Temperature to set fans to minimum speed MIN=40 ### Temperature to set fans to medium speed MED=50 ### Temperature to set fans to maximum speed MAX=60 ``` - このファイルは、自分のLinux Mint環境では /etc/gpd/fan.conf に置いてある。各温度をたとえば下記のように、デフォルトより最大7℃ (※) 高くなるように値を編集し、 ``` TIME=10 TURBO=60 MIN=47 MED=55 MAX=63 ``` - 「`$ sudo service gpd-fan restart`」を実行してみると、CPUファン回転制御の挙動が変わった! 素晴らしい。これで我がGPD Pocket (Linux Mint版) が、やっと、人並みの静かな端末に変身しました。 #### ※CPU温度のタスクバー表示 - 上記の「最大7℃」というのは私の利用状況で判断した調整値です。各自の環境・利用状況によって適切な値は変わりますね。このような閾値調整を行っている時はCPU温度を見張っておきたいので、CPU温度をタスクバーに表示させる方法については、次のページが参考になります。 * How to Monitor CPU Temperature on Linux Mint Cinnamon http://linuxsoftware.moncerbae.com/2016/02/cpu-temperature-indicator-on-linux.html --- ### GPD Pocket Ubuntu版) 外出デビュー - 2017-08-25 URL: https://remoteroom.jp/diary/2017-08-25/ #### 外出デビュー - 映画館で映画を観てその後のレビュー書きに、喫茶店でGPD Pocketを使ってみた。外出中での初の本格使用だ。 - しかし私のタイピングは、そもそも通常のフルキーボードの上で、いま改めて調べてみて自分で驚愕したのだが、左右の薬指を使っていないぞ!! おそらくは小学生の時に得たパソコンでタイピングを独学習得した故の、変態タイピング。それを30年以上続けているわけか……。 - そんな私にとっては、GPD Pocketのキーボードでのタイピングは、結果的に人差し指を多用する打法を駆使するので大きな問題は無い。フットプリントも、喫茶店の小さな机でも困らないぐらい小さいし、ちょことしたブログ書きにちょうど良いね。 #### Ubuntu、やっぱり独自buildするか - 先日から https://github.com/stockmind/gpd-pocket-ubuntu-respin の出来合いISO (gpdpocket-20170819-ubuntu-17.04-desktop-amd64.iso) を使っているが、「irqなんちゃら」というプロセスが高負荷で張り付いたり、Ubuntuの起動に失敗することがあったり、一度だけだが、タッチパネルで操作する上下左右と画面の向きとが合わなくなったり、何かおかしい。 - GPD PocketのBIOSは、これまで初期状態の20170628版だったから、20170805版に上げた。上げた後の状況変化は長く使っていないので不明。 - まぁ、そもそも出来合いのISOを使っていると、GPD Pocket界の進化について行けないだろうから、専用Linuxを独自buildするための環境を作ることにした。 - そこで https://github.com/cawilliamson/ansible-gpdpocket/ を見ながら、MacBook Air上のVirtualBoxに環境を準備しているところ。 --- ### 【観た映画】 ベイビー・ドライバー - 2017-08-25 URL: https://remoteroom.jp/medialog/2017-08-25_movie-b07c53hcm2/ 映像と音を絡ませまくったら、どのような感情が想起されるのか。技術用語はわかりませんが、おそらくは様々なテクを繰り出していて、そのミックス具合が功を奏している映画です。私が観賞したのは金曜日の午後。意外に、熟年の方々が多く着席していました。 冒頭の赤WRXの“舞い”は文句なしにかっこいいし、劇中のドライバー仕事としても満点なのでしょう。もちろん主人公は犯罪に加担しているので、ドツボのトラブルにハマっていきます。こういう映画を観ると、気持ちが若くなります。(^_^) - [映画『ベイビー・ドライバー』オフィシャルサイト|ソニー・ピクチャーズ](http://www.babydriver.jp/) サウンドトラックも良さそうな予感です。 --- ### GPD Pocket Ubuntu版) 2日目 - 2017-08-23 URL: https://remoteroom.jp/diary/2017-08-23/ - 昨日チャレンジした https://github.com/stockmind/gpd-pocket-ubuntu-respin の出来合いISO https://mega.nz/#F!8WpQRZrD!0XHgajeG-QVZTp1Jbjndgw (gpdpocket-20170819-ubuntu-17.04-desktop-amd64.iso) はどこか本調子ではない気がして。そこでもしかして、「[Post-installのUpdate script](https://github.com/stockmind/gpd-pocket-ubuntu-respin#post-install)」がまだ適用されていないものかな?と気付き、現時点の環境に適用しておいた - 液晶画面の保護フィルムについては、てかてかの光沢タイプは自分には我慢ならなかった。画面の反射を見ないために目の焦点距離を変える必要があると、集中できないのだ。そこで自分の他のPCと同じく非光沢タイプに張り替えました - 自分のほかのLinux環境では、Linux MintかUbuntu-MATEを使っているので、UnityのGUIがちょっと慣れていなくて辛いです…… - ~~アルミ製~~マグネシウム合金である液晶画面の蓋の縁が、蓋を大きく開いたときに机に直接できるだけ当たらないよう、家にあったクッションゴムで工夫するなど。これはGPD Pocketの定番ハックなのかもしれない。 --- ### GPD Pocket Ubuntu版) 戯れ1日目 - 2017-08-22 URL: https://remoteroom.jp/diary/2017-08-22/ #### やっと届いた GPD Pocket Ubuntu! - 入手物: GPD Pocket Ubuntu Version http://www.gpd.hk/pocket.asp - 無事到着: 2017/08/22 #### 初めにやったこと - ガラス製の液晶保護フィルムを貼ったがちょっと斜めになってしまった! - 標準Ubuntuをupdate, upgradeした - BIOSでメモリのクロックを1067MHz→Autoへ変更してみた #### しかしながら…… - 標準Ubuntuは稼働時にファンがかなり回りっぱなしで、fancontrolやlm-sensorsで制御できないようなので、別のUbuntuに乗り換える気分になった - https://github.com/stockmind/gpd-pocket-ubuntu-respin にチャレンジしてみる - 出来合いのISO https://mega.nz/#F!8WpQRZrD!0XHgajeG-QVZTp1Jbjndgw を用いて、USBメモリからのブートで環境をお試し - すると、ファンの回転数が自動で変化し、制御している様子なので、このUbuntuに乗り換えることに決めた --- ### RemoteRoomを再開します - 2017-08-19 URL: https://remoteroom.jp/diary/2017-08-19/ このたび、何度目かの作り直しを行った本サイト『RemoteRoom』にて、コンテンツの更新をのんびり再開していきたいと思います。今後もどうかご笑覧くださいませ。 - 主なネタ: 日記や読み物の感想 - CMS: hugo (Static Site Generator) - サーバ環境: IDCF Cloud, Nginx, HTTP/2対応 余談として。持ち運び端末である[GPD Pocket](http://www.gpd.hk/pocket.asp) (Ubuntu版) が手元に数日中に到着すると思いますので、これも日頃の執筆道具の一つにします。非常に楽しみなガジェットです。 --- ### 【読んだ本】 東芝 原子力敗戦 - 2017-08-18 URL: https://remoteroom.jp/medialog/2017-08-18_book-b0732w1g68/ 損失を粉飾して何千億円まで積み上げてしまったら、会社のバランスシートをどうやって戻せるのだろう。東芝の内部資料をもとに経緯を追い、私がこれまで詳しくは知らなかった、具体的な人名を挙げながら原子力を推進してきた国策を読みほどき、最後は、焦点を東京電力にも合わせている。 全体的な感想として、組織が異分子を許容し得ないがために、ベースのビジョンを頑なに、時に応じて改めることなく、戦艦主義と特攻に突き進んだ旧日本軍の物語を読むようであった。先日やっと[東芝の決算発表](http://www.bbc.com/japanese/40886648)がなされた今、大変タイムリーで、今後の関連ニュースに関心を持たせるドキュメンタリーだと思う。 --- ### 【読んだ本】 スタートアップ・バブル 愚かな投資家と幼稚な起業家 - 2017-08-15 URL: https://remoteroom.jp/medialog/2017-08-15_book-b072mgx964/ AdTechな業界の若い企業へ転職体験した著者の、渾身のルポルタージュ。ライター経験が豊富な50歳代というこの著者が、ITバブルを内側からどう捉え、そしてどう揉まれたかがよくわかる。 本書を読んでいる最中に、私の友達の誰かが「いいね」を押しているためか、インバウンドマーケティングを提唱する当企業の“HubSpot”の広告が、私のFacebookに表示されるようになり、どんな商いをしているところかを自ずと知ることにもなった。 世の一部の経営者が、公式には決して言わないけれども、視野が広くない社員を安く使うために取っている今時の施策が、露骨に描かれて痛烈で、我にも返って我が身を考える。また、IPOを乗り越えることを目指したいわば株式公開バブルの内幕も、傍目からは、どろどろな状況がひどくおもしろいのだった。 しっかしですね、会社は、組織的な骨格が社員に誠実でないと、人が逃げて保たないのだなぁと、あたりまえのことを改めて実感もさせられる。 この本の例でひどいなと思ったのは、私人としての、TwitterやFacebookでのコメントが、多面的にではなく一通りにだけ解釈されて、社員同士の公の場での言い争いに発展するってこと。導火線が短いといいますか。私人としてなら、基本はコメントを見なければ良いのにと思うのだが。 --- ### 【読んだ本】 サイコパス - 2017-08-08 URL: https://remoteroom.jp/medialog/2017-08-08_book-b01mrifldk/ 冷酷すぎるところ論理的すぎるところは自覚していて、自分は全くサイコパスではない、とはあまり否定できない。この新書が教えてくれるように、統計的に一定の割合でサイコパス要素のある人が社会に存在するとなると、どういう風につきあっていくのが良いだろうか。また、ある組織範囲をマネジメントする立場にあるときは、人の適材適所を僕ははたして実現できるか、……なんて想像に思考を巡らせた。文体は学術的なトーンを基調に、脳科学者のスタンスから、遠慮無しにズバズバとした記述がなされている。 --- ### 【読んだ本】 四畳半神話大系 - 2017-08-01 URL: https://remoteroom.jp/medialog/2017-08-01_book-b0093ge7o2/ この著者の本は初めて読んだと思う。京都の碁盤の目に、すなわち街の様子に詳しいと、あの辺でのドタバタなのだなと分かりそうな、怠惰に一生懸命な学生生活を描く小説である。 頭の何章かは、こりゃどうしたものか、読み続けようかどうしようか正直悩ましい流れもあったが、仕掛けられた伏線に私が乗れてなかった模様。青春の、かけがえのなさかな。最後は読了のしっかり感が伴うまとめ方で終わった。 --- ### 【読んだ本】 「ポスト真実」の時代――「信じたいウソ」が「事実」に勝る世界をどう生き抜くか - 2017-07-25 URL: https://remoteroom.jp/medialog/2017-07-25_book-b073gfm3sq/ フランスとアメリカの次に、日本全体を大きく覆いつつある「ポスト真実」な情報戦に備えるための書、だと感じた。いま私たちはどのような傘の下の世界にいるのか。 手に入る情報の取捨選択の幅が、21世紀は爆発的に拡がっていて、信じたい情報を好きな量だけ摘まめる。しかしながら、ヒトが真実を判断するに至るまでの可能な体験は、それにバランスできていない。この量と質のアンバランスを実存の人類は根本的には解消できない。ならば、それを賢く自覚してなんとかするしかない。 --- ### 【読んだ本】 会社のITはエンジニアに任せるな! - 2017-07-07 URL: https://remoteroom.jp/medialog/2017-07-07_book-b0192jtw44/ 「IT」と形容する仕組みには様々な“深さ”があって、しかし日頃、特に仕事の中でそれをうまく言い表せておらずやきもきしていた私は、この書籍の導入部から登場する「プラント型IT」「ツール型IT」という言い分け方に、本当に膝を打つ思いがした。 今の時代において、ITの利活用で目立つ強い組織は、プラント型ITを必ず備えているといっても過言ではない。それがもたらす精度・スピード・緻密さで、業務内容やビジネスが設計されていて、他の手段では代替不可なレベル。 逆の、ツール型ITで回せているような組織は、ITに関しては、それありきのビジネスとは、実はなっていないのだろう。ITを狭義の技術とだけ捉えることによって、組織は旧態依然のまま留まっている (そして衰退する)。 前者のような組織とすることが前提ならば、会社ITを経営部門・業務部門・IT部門でどう扱うとよいのか?を述べているのが本書である。強くお薦め。 --- ### 【読んだ本】 あたらしい書斎 - 2017-06-28 URL: https://remoteroom.jp/medialog/2017-06-28_book-b009x8gyuk/ - 物理的な「こもる」空間とデジタルな道具を組み合わせる書斎の提案 - 自分のいわば遂行?推敲?環境を見直すのに良い塩梅の読み応え - ウェブと繋がっている様を「開かれた書斎」と例えるところはすんなり面白く思った - 2012年の版なので、デジタルに関する記述には古い部分がある --- ### 【読んだ本】 社会学者がニューヨークの地下経済に潜入してみた - 2017-06-23 URL: https://remoteroom.jp/medialog/2017-06-23_book-b071cx2mnt/ グローバル化の姿を、曖昧にしか捉えていなかった私は、この本から不意にその現実の形を教えられることになる。改めて述べると、グローバル化とは、既存の境界を越えて様々な現象が起こることだ。その境界は国境や国籍によるものとは限らない。都市の中の、人種や文化圏に基づくコミュニティや、各種の業界も、この意味の“グローバル化”の影響を受ける。 著者は社会学者。どういうふうにして当事者から信頼を得ていくのだろう、ドラッグやセックス経済に繋がっている人々の、……なんと書いたらよいか、社会的な関係性や本人の動機や心理を、実際に会って、とことん共に行動して寄り添うことで追いかけている。最終的には、春売りを統括するビジネスを主たる研究対象とすることに、活路を見いだしたように感じた。 日誌のような記述部分は文体をわざとそうしているのか、読みにくい部分があるけど、時折、社会学の言葉でニューヨークの現象を解説している学術的なフレーズが登場する。そんなふうに転移する本書の内容は、ものすごく面白くて、知的に興奮してしまうのだ。 そして、ヒトはなぜ、“自分を変えようとする”本性を持って行動する動物なのか?という探究を、著者が自分自身にも問いかけながら行っている様は、ヒトがいる限り続くテーマであるし、凛とした気持ちにさせられる。 --- ### 【読んだ本】 関東大震災 - 2017-06-14 URL: https://remoteroom.jp/medialog/2017-06-14_book-b009dedtti/ 1923年9月1日に発生した関東大震災についての書物を、おそらくこれまでちゃんと読んだことはなかった。大震災に影響を受けた当時の人々と、社会情勢を知ることのできる渾身の記録に思う。 逃げ集まった人々が火災の海に飲まれ、水に逃げれば人が重なることで溺死という、状況描写には絶望しか覚えない。物資不足で困窮きわまるし、公衆衛生の大問題 (何万もの遺体の処理、避難者の糞尿や生活塵の処理) も発生するが、復旧のためには解決しなくてはならない。流言によって人々は錯乱し自警団や軍は常軌を逸して、“排除すべき者”をつくりだし、殺戮してしまう。 このような極限のしかし事実を、自分の頭に思い描いて覚え、それに立ち向かう困難や覚悟や、人の人たる性分と力を感じるための記録に思う。 --- ### 【読んだ本】 データを紡いで社会につなぐ デジタルアーカイブのつくり方 - 2017-06-06 URL: https://remoteroom.jp/medialog/2017-06-06_book-b00gmyjke0/ Google EarthやGoogle Mapsにメタデータを重ねる作品を生み出している、情報アーキテクトの著書。作品の一つである『ナガサキ・アーカイブ』 http://n.mapping.jp/ の公開は2010年だったようだ。当時の自分もさっそくウェブブラウザを開いて観て、長与町 (長崎市の北に位置する、私が約8年住んでいた町) の上にも、爆心地から距離はあるのだが原爆の記録は乗せられているだろうか?と実際に仮想空間で探したことを思い出した。 事実の記録を残すデジタル技術や可視化する手段は、多様にそして自由に選べるように拡がってきた一方、本当の意味で“残す”には、人が人を動かす力が必要なのだ、と、著者が繰り返し述べている言葉は、まさに然りだと思う。つまり、デジタルの“地層”のようなものを誰かが遺さなければ、ミームは伝承されない。 --- ### 【読んだ本】 嫌われる勇気 - 2017-05-31 URL: https://remoteroom.jp/medialog/2017-05-31_book-b00h7racy8/ アドラー心理学を、哲人と、心情的に自分を重ねることが出来る悩める青年が対談していく形で説明してくれる。この心理学を何も知らなくても分かりやすい入り方だし、最後には、自身のOSに当たるライフスタイルを変えるぜ!というきっかけが得られる内容で、お薦めです。 余談になるが、ごく最近に読んだ、『バリアバリュー―障害を価値に変える―』 (垣内 俊哉)、『マチネの終わりに』 (平野 啓一郎)、『人を動かす 文庫版』 (デール・カーネギー)、『エグザイルス・ギャング』 (ロバート・ハリス) といった本や小説に、アドラー心理学に繋がる教えがはっきり含まれていたという巡り合わせには、我ながら驚くしかない……。 --- ### 【読んだ本】 スバルをデザインするということ - 2017-05-25 URL: https://remoteroom.jp/medialog/2017-05-25_book-b01ncjikqf/ 商号を先日「富士重工業株式会社」から変更したスバルの、2008年からデザイン部長を務めていた方が著者である。スバルの乗用車はOEMを除くと10車種もない。そのうちたとえば最近モデルチェンジしたインプレッサやXVは、僕の好きな、凸の逆の凹もある、GEARっぽい雰囲気が強く感じられ、以前のヌメッとした頃からの変化が面白く、かつ社内ではどんな意識変革があったのだろう?と興味があったのだ。その変革の概要が、エクステリアデザインを基点に語られている。まぁまぁの読み応え。広報的には、デザイン責任者の声を伝えるこういう本を出すのもブランド構築の一環になるね。 P.S. 元の紙面が大きい書籍の固定レイアウトはKindle Paperwhiteでは読みづらく、10インチタブレットを持ち出して読むぐらいが丁度いいです。 --- ### 【読んだ本】 エグザイルス・ギャング - 2017-05-23 URL: https://remoteroom.jp/medialog/2017-05-23_book-b00u7aplgq/ 自分を裸にして生きてるか?と自身に問い続けているかのような著者の、身に起こった瞬間瞬間を鮮明に封じ込めた半生記。まるで重たいパンチのごとく響きます。サバイバーぶりや、簡単に言うと“複雑”そうな、オープン・リレーションシップな関係が描かれていて、想像を飛び越えてくれたり。殻を作っている僕は、死ぬまでこのままの生半可な状態で行くのかい?? --- ### 【読んだ本】 人を動かす 文庫版 - 2017-05-16 URL: https://remoteroom.jp/medialog/2017-05-16_book-b01asx39ns/ 時を超える名作とは、なるほどこういう書物を言うね、と良く分かった。人を動かすために相手の心理に及ぼすべき作用について、著者の経験と知見に基づいて、九つの原則に分けて説明が進む。説明している各場面の様子が明瞭で状況を思い浮かべやすいところは、まるで四コマ漫画みたいだ。 1930年代に最初の版が書かれたそうで、時代柄、人と人とのやりとりの手段は、直接会うか、手紙を書くか、電話するか、出版・新聞・ラジオを用いるか、しかない。だがしかし、本著が述べる「人を動かす原則」は普遍的であり、たとえインターネットが加わっても変わっていないし、千年先にも変わらないんだろうから、人間っておもしろいです。 --- ### 【読んだ本】 不自由な心 - 2017-05-03 URL: https://remoteroom.jp/medialog/2017-05-03_book-b00donbydc/ 五編の小説が収められている。どの物語の主人公も男で、理屈は持っているんだけども、愛に関して自分にも関係者にも不器用すぎる。 それが思い当たるところ多くて刺さる。これはまた噛みしめるように読み返すと思う。 --- ### 【読んだ本】 AI経営で会社は甦る - 2017-04-27 URL: https://remoteroom.jp/medialog/2017-04-27_book-b06xpxh13y/ 「AI」というバズワードがタイトルに含まれてはいるが、AIだけに限らず、IT関係の要素やグローバルプレイヤーが牽引する今日のビジネス環境の変化を展望し、ビジネスパーソンはどう生きていくべきか指南している本。論理を追いかける上では、この著者 (冨山和彦) の会社経営に関する書籍を、先に読んでおいたほうがより分かりやすいと思う。 中抜きが減ることによる産業構造の変化から、今後比重が増していくのは L(ocal) の世界だと説明されている。あとは、C(asual) の世界から S(erious) の世界への変化。このふたつは社会情勢から体感もしているし、将来をどうしようかと考える自分の嗜好的にも符合する変化なのであった。また、今後こうありたいという自分は、この書籍で分類されている組織体のタイプ、技術の特性・得意不得意を理解した上で、良い組み合わせを作ってのものづくり・ことづくりが出来る人間かなあ、とイメージもした。 --- ### 【読んだ本】 ワーク・ルールズ!―君の生き方とリーダーシップを変える - 2017-04-24 URL: https://remoteroom.jp/medialog/2017-04-24_book-b010uv1qtw/ Googleのピープル・オペレーションズについて、社員何万人の規模のなか、《人事に関わる施策を実験してデータを取り、効果の程度を判断してから運用、そしてちゃんと振り返りも行う》仕組みが構築されているという。 言わずもがな、ITの実装と同じ、テスト重視の意識で動いているということ。社内ルールもRFCのように回している勢いではないかここは……。 まとめられているWORK RULESは、シンプルな上位概念の集合。このルールはもちろん「何よりも社員のため」という最上位の掟を忘れていない。だからこそ、Googleはダイナミックな、しかし骨格は最大の強度で組み上げてある、パワーに満ちた共同体運営が出来るのだろう。 --- ### 【読んだ本】 ゲームの今 ゲーム業界を見通す18のキーワード - 2017-04-06 URL: https://remoteroom.jp/medialog/2017-04-06_book-b012vrqx9g/ なんで読み始めたんだ俺は?と自問する量の本であった。しかし、今時のゲームを全然やってない自分にもとても面白かった。特に、『人狼』もこのジャンルに含まれているというテーブルゲームの解説、ゲーム実況文化やサウンド生成の技術解説。 --- ### 【読んだ本】 小さな会社でぼくは育つ しごとのわ - 2017-03-21 URL: https://remoteroom.jp/medialog/2017-03-21_book-b01mrd4g8r/ 某社のある意味、推奨図書となっていたので読み込んでみた。平日の朝から読み始めて夜に終わるボリューム。 組織の中で仕事をする上での、《心構えの積集合》、全体網羅本としてこれを吸収するのがよいと思う。組織のリーダーとして、全体経営としての視点に言及している要素はそう強くないので、「なぜそうするのがよいとされているのか」を追究したい向きには、別途、たとえば『無印良品は、仕組みが9割 仕事はシンプルにやりなさい』というような書籍を薦めたい。 --- ### 【読んだ本】 バリアバリュー―障害を価値に変える― - 2017-03-17 URL: https://remoteroom.jp/medialog/2017-03-17_book-b01l1dyu0a/ ユニバーサルデザインの理念に昔からなぜか惹かれている私。人の可能性をより高めるものに全く抗えない性分らしい。最近は「ユニバーサル・マナー」という考え方があることを知り、これを広めている会社の創業者の半生記ということで、本書を読了した。没入し、平日の朝から読み始めてその夜に終わるスピードだった。 「バリア」を「バリュー」に変えて対等な立場で提供する、という価値観! 理路整然とした語りから得られるこの素晴らしい衝撃はずっと忘れないでいたい。 --- ### 【読んだ本】 「決め方」の経済学―――「みんなの意見のまとめ方」を科学する - 2017-03-16 URL: https://remoteroom.jp/medialog/2017-03-16_book-4478064873/ 同じ著者の『多数決を疑う――社会的選択理論とは何か』は岩波新書のフォーマットだったが、こちらはA5程度の余裕あるサイズ。章題がデカ字でデザインされていたり、図が大きかったり、本文の重要な部分にマーカー風の装飾が付けてあって、それによってか新書よりも取っつきやすく読めた感覚があった。 「決め方」の各方法には様々な特性、そして学ぶべき難点もあるということを、日本の今の小学生でいうと道徳のようなカリキュラムでやったりするのかなあ。やったほうが未来が変わりそう、と思う。 --- ### 【読んだ本】 マチネの終わりに - 2017-03-11 URL: https://remoteroom.jp/medialog/2017-03-11_book-b01dw23c52/ 中盤から転調。さまざまな赦され方と、ヒトの普遍さを思った。 --- ### 【読んだ本】 本当に住んで幸せな街~全国「官能都市」ランキング~ - 2017-03-08 URL: https://remoteroom.jp/medialog/2017-03-08_book-b01n90u9bo/ 「この辺、わくわくする」という感覚的な指標でもって、出歩くエリアを印象づけたりすることがあるが、そのような、身体的・他者との関係性を見据えて日本全国の都市・地域の未来の設計を行ってはどうか、という提案をしている。 なんか、わかるね……。1次元の数直線上なら優れたポイントをいくつも得られるよう造られた近代都市があったとしても、たとえば寺社の存在が見られないところは、自分の心象的には、“施設の集合体”状態を脱しておらず、不連続さや妖しさが欲しいと思ってしまうから。 官能という言葉をほかの事にも当てはめて、様々にものを見るようにしてみようと思う。 --- ### 【読んだ本】 白い航跡(下) - 2017-03-05 URL: https://remoteroom.jp/medialog/2017-03-05_book-b00hcb89oe/ イギリス医学v.s.ドイツ医学。日本海軍v.s.日本陸軍。実証v.s.固執。 二項対立の形で書き並べてみたが、これではとても表現できていないな……。倒幕の時代から入る、この歴史小説の奥行き、ドラマチックさ。 ひとつの病の原因特定への道を啓くまで、どれほどの素質を持っている飛び出た個人がまず存在することが必要で、多くの協力者や体制がさらに必要であるか (この前読んだ『世界で最もクリエイティブな国デンマークに学ぶ 発想力の鍛え方』と繋がる知見かも)。 しかし、著しい数の犠牲者が出ても内部から変わっていけない社会組織もある、という、《正しく疑う》ことが出来ないゆえの悲惨さ。 時代やスケールを問わずとても多くみられるパターンじゃないかこれは。と、心に沁みる。 --- ### 【読んだ本】 白い航跡(上) - 2017-03-01 URL: https://remoteroom.jp/medialog/2017-03-01_book-b00hcb89i0/ (下巻に続く) --- ### 【読んだ本】 人生が変わる2枚目の名刺 - 2017-02-22 URL: https://remoteroom.jp/medialog/2017-02-22_book-b00b15p5mg/ キャリアを冗長化するため、片方から片方へ応用を利かせるため、あわよくば収入を厚くするために、平日は一つの会社で仕事という自分の状況を変えられないだろうか、そんな危機感は募っている。好き勝手な“ものづくり”も最近は停止している状態だし、精神の通気口としては読書がひとつだけというような感じか。 このような状況で、この本が提案する「2枚目の名刺」を、実が伴っていなくてもまずえいやと作ってしまうのは、出来ることだし、自己暗示としても正に良いと思う。肩書きは、『車観察家』や、願望を込めて『小出力発電研究家』とでもするか。他方、見方を変えて、近くの人の第二の肩書きを考えるのも愉しいことだし、その人の生き方を客観的に助けることにもなる気がした。 --- ### 登録手続きのその後 #情報処理安全確保支援士 - 2017-02-22 URL: https://remoteroom.jp/diary/2017-02-22/ 前回は、情報処理安全確保支援士 (RISS) に登録手続きしようかどうしようか独り悩んでいる心境を、書いておりました。「情報処理安全確保支援士」という資格が何たるかは[前回の記事]()を参照していただくとして。この手続きは必要な書類も多くてやや煩雑だったわけですが、結局のところ私は、“その先に何があるかはやってみなくちゃ分からない!”的な精神で、登録手続きを行いました。 先日、IPA (独立行政法人 情報処理推進機構) がプレス発表した内容によると、[「情報処理安全確保支援士(登録セキスペ)」の初回登録申請者数は4,175名](https://www.ipa.go.jp/about/press/20170215.html)だった模様です。これが果たしてどの程度の規模の人数なのか……。たとえば、従来の類似資格にあたる情報セキュリティスペシャリスト (SC) と比較してみますと、1年に2回実施されるSC試験の1回分の合格者が3千人程度であることが、[統計資料](http://www.jitec.ipa.go.jp/1_07toukei/_index_toukei.html)から分かります。ということは、SC試験1回分の合格者よりもやや多い人数が、情報処理安全確保支援士に登録申請したことになるでしょうか。 うーん、定量的な感覚をざっくり探ってはみたものの、IT業界への影響度などを含め、やっぱりまだイメージ沸きませんね。登録者が社会にある程度の数で行き渡るまでは、関連制度においてRISSの配置義務を伴うような大幅な変更はされないかも、と予想します。RISS・登録セキスペ関係で何か面白いネタありましたら、またここに投稿することにします。←シリーズ化するのか? #### 後日談 2017年4月に、IPAサイト内の下記URLで自分の登録を確認できました。 - [情報処理安全確保支援士検索サービス](https://riss.ipa.go.jp/) > [登録番号 003999](https://riss.ipa.go.jp/r?r=003999) --- ### 【読んだ本】 漂流街 - 2017-02-17 URL: https://remoteroom.jp/medialog/2017-02-17_book-b00t2jmzje/ 超が付く赤黒い泥沼世界の、疾走感に痺れる。それがもうほんと、あまりにも泥沼なので、これを通勤電車の行きと帰りの、皆が押し黙った灰色の車内で読み進めたりしていると、並行世界の向こう側の話で良かったわぁ、と幼稚で変な自己安堵をしたぐらいだ。 --- ### 【読んだ本】 世界で最もクリエイティブな国デンマークに学ぶ 発想力の鍛え方 - 2017-02-07 URL: https://remoteroom.jp/medialog/2017-02-07_book-b01gj2dkpy/ たぶん勢いで買っていて、デンマークに関して前知識無し、という状態でKindle読了←自分の“ぽちっとな”抑止力の無さが、繰り返されるこの問題の本質。 あまり知らないブランドや人名が多く登場したので、ふんわりとした中身の把握に留まっていて己に不満があるが、少なくとも、発想術やミーティング手法など道具を手にして使いこなせればクリエイティビティを発揮できる!と主張した内容ではない。クリエイティビティが、現実にある様々な枠のぎりぎりの、境界の場で創られていることを確かに認識したうえで、デンマークでの事例を取り上げ、組織やリーダーシップ、教育を、骨太に組み立てていくことがそのような場を“風土”に出来ているのではないか、という主張である。 なるほど……。また、クリエイティビティと教育に関しては、ちょうど自分にも重く降りかかっている課題だと認識。第一子を4月から入園させる予定がある保育園の運営方針がどのようなものか、今まで無頓着であったことを反省、これをきっかけに確認してみる私であった……。 --- ### 【読んだ本】 ベストカー水野和敏SPECIAL - 2017-01-29 URL: https://remoteroom.jp/medialog/2017-01-29_book-4063891038/ 新書と同じかそれ以上のボリュームがあったような気がする。自分は自動車をどのようにして評価しているか、という水野和敏氏のメートル原器をしっかり示してあり、専門家の持つセンサーや為す批評はこのぐらいの異次元レベルにあると良く分かる。台湾のラクスジェン (Luxgen) での車輌開発の様子も独占取材で取り上げてあり、2018〜2019年に一体どんな新車が登場するか非常に楽しみ!! 企業論や仕事論的な部分では、先日読み終えた『ビジョナリー・カンパニー2』と同じ意味の事を述べてるぞ、と感じる部分も多かった。いわば、見えてる人には見えているんだなと実感。 #### 参考リンク - [【読んだ本】 ビジョナリー・カンパニー2 飛躍の法則 \[2017-01-24\]]() --- ### 登録検討中です #情報処理安全確保支援士 - 2017-01-27 URL: https://remoteroom.jp/diary/2017-01-27/ “国家資格「情報処理安全確保支援士」の登録資格を有する者が登録申請を行う手続き”について、手続き準備の経験談——正確には現在進行形です——などを記してみようと思います。 #### 未知なる資格 なんじゃこりゃ??というレベルで舌をかみそうな「[情報処理安全確保支援士; RISS](http://www.ipa.go.jp/siensi/)」、ご存じの方はあまりおられないかもと思います。これは、2016年10月21日から制度開始された、経済産業省が所管する、サイバーセキュリティ分野において日本初の国家資格となっていまして、本家サイト から概要を抜粋しますと次の通りです。 > サイバー攻撃の急激な増加により、企業などにおけるサイバーセキュリティ対策の重要性が高まる一方、サイバーセキュリティ対策を担う実践的な能力を有する人材は不足しています。そこで、サイバーセキュリティに関する実践的な知識・技能を有する専門人材の育成と確保を目指して、国家資格「情報処理安全確保支援士」制度が創設されました。 > > 「情報処理安全確保支援士(以下、登録セキスペ)」はサイバーセキュリティに関する専門的な知識・技能を活用して企業や組織における安全な情報システムの企画・設計・開発・運用を支援し、サイバーセキュリティ対策の調査・分析・評価やその結果に基づく指導・助言を行います。 ちなみにこれは登録制・更新制の資格で、登録して「情報処理安全確保支援士」を名乗るためにはIPA (独立行政法人 情報処理推進機構) 宛の申請を行うことが必須です。なかなか大掛かりですよね……。登録セキスペへの登録資格を有するのは、まずは (1) 2017年度春期から実施予定の試験の合格者。次に、制度開始から2年間の経過措置として (2) 「情報セキュリティスペシャリスト試験」又は「テクニカルエンジニア(情報セキュリティ)試験」合格者も登録資格を有する、と定義されています。 そこで (2) の前者に該当する私は、将来的に一体どんなメリットがある資格なのか、新しいもの好きでもあり、この登録セキスペへの登録申請をやってみようかと準備を始めた次第です。 #### 登録申請の準備をしてみると 「情報処理安全確保支援士」登録申請の第1回目締切は、2017年1月31日 (当日消印有効) です。それに向けての実際の準備物はどんなものなのか、列挙してみますと次の通りとなりました。[登録申請チェックリスト (PDF)](http://www.ipa.go.jp/files/000055030.pdf) が公式な一覧になります。 1. 登録申請書: 記入して作成して押印 1. 登録免許税: 収入印紙9,000円分を郵便局などで購入 1. 登録手数料 (10,700円) の払込受付を証明する書類: 私の場合はインターネットバンキングの振込完了画面をプリントアウトしたもの 1. 誓約書: 記入して作成して押印 1. ★登記されていないことの証明書: 東京法務局に郵送で依頼して取り寄せました 1. ★市区町村の交付する身分証明書または身元証明書: 私の場合は本籍地の役所に郵送で依頼して取り寄せました 1. 支援士試験等の合格証書のコピー: 私の場合は情報セキュリティスペシャリスト試験 (SC) の合格証書のコピー 1. ★戸籍の謄本若しくは抄本又は住民票の写し: 私の場合は本籍地の役所に郵送で依頼して戸籍謄本を取り寄せました 1. 登録事項等公開届出書: 記入して作成して押印 1. 登録申請チェックリスト: 記入して同封 なんと、これだけの数の物を準備しなければなりません。特に★印の書類は、然るべき所から取り寄せなどが必要で準備に時間を要することもありえます。締切がたとえばあと数日と迫っている状態から準備しても、間に合うかわかりませんで注意が必要です。 以上の書類を仕上げて、「独立行政法人情報処理推進機構 IT人材育成本部 HRDイニシアティブセンター 情報処理安全確保支援士グループ 登録係」宛に簡易書留で送付し終えれば、やっとこさ、登録申請の完了まで待つだけのこととなります。 まだ少しだけ迷いもありますが、仮に私がこのまま登録申請を行い終えたらば。2017年4月1日頃に、[IPAのウェブサイト](http://www.ipa.go.jp/)にどのような形で「情報処理安全確保支援士」の情報が公開されるのか自分は楽しみな一方、日本国内において、この資格の活用のためにどのような制度設計が成されていくのか、業界・関連企業内での扱いはどうなるか、もしかして色々噂されているデメリットも顕在化するのか、けっこうな額の更新費用も必要な資格制度そのものが不発に終わっちゃうのか、も、興味を持ちつつ、最新のサイバーセキュリティ情報に日頃できるだけ触れながら、状勢を実体験してみようと思います。 --- ### 【読んだ本】 ビジョナリー・カンパニー2 飛躍の法則 - 2017-01-24 URL: https://remoteroom.jp/medialog/2017-01-24_book-b00mvm2his/ 良い企業が偉大な企業に発展したなら (Good to Great)、それは他と何が違ったからなのか。膨大で緻密な調査を行い、まさに調査結果然として偉大な企業に共通する性質を淡々と述べているのだが、これが、大変に迫力あるのだ。仮説や先入観が入り込む余地も残されていないから。個人的にこれはキャリア面の教科書の一冊と思ったし、他方で今の仕事のことも考える。「今年度」「来年度」の短期的スパンでは、この本の言う“弾み車”が回転しているとしてもまったく目立たないだろうし、とにかくじりじりと事を動かし続けるしかないのだろうねぇ……と頭の片隅で覚悟を決めたりする、一課長なのであった。 --- ### 【読んだ本】 バカになれ! カリスマ・エンジニア「ゼロからの発想術」 - 2017-01-22 URL: https://remoteroom.jp/medialog/2017-01-22_book-416390123x/ 図書館の書棚から、著者名でふと選んだ本。別の『プロジェクトGT-R 常識はずれの仕事術』は読んだことがあって (っていうか読んだ後に珍しく買ってもいる)、それとの比較で言うと、この『バカになれ!』は、プロジェクトという形よりは仕事のキャリアや生き方に呼びかけているような、厚みを乗せた内容であった。多くの人が自然と自分をゼロリセットしてきたであろう恋愛という局面を、一途にバカになっている具体例として挙げているところに、ふむふむそうだ、と頷かされる。さて、明日からリブートして、howはまぁ置いといて、whyとwhatを突き詰めて考えることをしなくちゃな。 #### 参考リンク --- ### 【読んだ本】 明日に疲れを持ち越さない プロフェッショナルの仕事術 ビジネスライフ - 2017-01-12 URL: https://remoteroom.jp/medialog/2017-01-12_book-b01jrcy188/ 速読気味に数十分で読み進めて、エッセンスをかじった。いつ、どういう思いでこの電子書籍を買ったんだっけな。効率のためにはメリハリをはっきり付けることが大切と再認識。 --- ### 【読んだ本】 2017年版間違いだらけのクルマ選び - 2017-01-11 URL: https://remoteroom.jp/medialog/2017-01-11_book-b01n0sqmam/ これを読まないと年が明けない症候群な私。自動運転レベル3に至ってきた自動車の進化、他方で、原点回帰の向きにもスポットが当てられており、ピックアップされている、ゴルフII GTIも転がしてみたいなあと思わされる単純な私…… (MTを猛練習しなきゃなりませんが)。よく言われる本書の著者交代に伴う、文体や主張の変化については、僕は違和感なくなった。現著者の雰囲気に馴染めたかな。 なお、今回初めてKindleで読んだが、テキスト流し込みのため、このシリーズ特有の、車の姿の写真が全面を占める固定的な一ページが、本文の間合いと合わなくなるのであった。電子書籍のflowの利点を維持しながら、『間違いだらけ』の紙面レイアウトも次世代に進化してほしいなぁ。 --- ### 【読んだ本】 すべては「裸になる」から始まって - 2017-01-08 URL: https://remoteroom.jp/medialog/2017-01-08_book-b01mu400nm/ すでに数十年生きて、自分に自らの価値観が形成されているとして。その価値観を、ちょっと洗濯に出すことができる本。著者の半生の記録のようなもので、率直な言葉で語られる心情を、すんなり咀嚼できる不思議さがあるのであった。 --- ### 【読んだ本】 VRビジネスの衝撃 「仮想世界」が巨大マネーを生む - 2017-01-06 URL: https://remoteroom.jp/medialog/2017-01-06_book-b01fbykc0c/ CES 2017の最新ニュースが続々入ってきているこの時期に、VRについての書籍を初めて読んだ私は、自分の出遅れ感を物凄く感じた。VRは、「百見は一体験にしかず」ということのようだ。スマホが数年で流行りきったように、VRも数年で日常に入り込んでくる確信が持てる。「テレビはARメガネに表示されるアプリとして、一ドルで販売されるものでしょう」という言葉には、今後の映像世界との関わりにおける変容の強烈さを感じさせられる。 --- ### 【読んだ本】 人生を面白くする 本物の教養 - 2017-01-02 URL: https://remoteroom.jp/medialog/2017-01-02_book-b016m3g06g/ 年末年始の休暇中に読んだゆえか、ちょうどすんなり入ってきた。教養とはなんであるかを問う。「知ることが面白い」の次に、「自分なりに考えることが面白い」となる何らかの世界を、人生の中での時間比率を考えながら、培わなきゃいかんねえ。……って書いてて気付いたが、これは人生スケールでの自分への投資とも強く結びつく行為・心掛けだ。 --- ### 【読んだ本】 ありふれた愛じゃない - 2016-12-22 URL: https://remoteroom.jp/medialog/2016-12-22_book-b01lvuzini/ このところ心理的な旅行をしたくなっていてチョイスした。僕にとっては感覚的で時間をかけずに行動や判断するような場面、いわゆる恋や愛の、内心を細かく記述してあるところ、深く読み入ってしまうのであった。相手の心を読み切ろうとは思わないのだけれども、心は細かい動きをするものであるという事実は、人間に付いてまわる。再認識した。 --- ### 【読んだ本】 デジタル化を勝ち抜く新たなIT組織のつくり方 - 2016-12-14 URL: https://remoteroom.jp/medialog/2016-12-14_book-b01ahrlcos/ 現状を認識し、危機から抜け出す方策を共に考え抜くために、たとえば職場の仲間にもお薦めしたい。 内容が後半、今後あるべきガバナンスを論じるようになるにつれ、自分からはとても遠い世界の話であるという感触が、焦りが、強くなっていく。 それは悔しいぐらいに。つまり、現状を改革するためには、私が居る環境からは、強烈に長い道のりがあるということである。 --- ### 癖を攻略してMini PCへESXiインストール - 2016-11-30 URL: https://remoteroom.jp/diary/2016-11-30/ 購買欲そそられてついポチッと買ってしまった、安めのMini PC (Vorke V1) に、個人的に仮想環境に慣れるためVMware ESXiをインストールしてみたので、その記録を簡単にご紹介です。この機種へのESXiインストールには一癖ありました。同様な悩みを持つ方にとって、参考情報となれば幸いです。 #### Vorke V1というMini PCについて - 機種: Vorke V1 - CPU/MEM/SSD: Celeron J3160 quad core (Braswell世代), 4GB, 64GB - 価格: 海外サイトからの送料あわせて約170ドル - 分解写真: - 私なりのカスタマイズ: メモリは8GBに増量, 底部の空SATAインタフェースに1TB SSHDを追加して2ドライブ化 #### Vorke V1へのESXiインストール手順 1. インストールするESXi: VMware ESXi 6.0 Update 2 1. Vorke V1にプレインストールされているWindows環境を使ってBIOSを最新にした後、Secure Bootを切ります。ちなみにNICのMAC ADDRESSをこの段階で調べておくと後で楽です (★)。 - VMware ESXiをインストールするとプレインストールのWindows環境は消去されます。Windows環境を復旧するには で入手できる「firmware」一式を適用すればOKです。 1. ESXi-Customizer-PS を使ってESXiカスタムインストール用のISOイメージを作成します。今回はパラメータとして「**-load sata-xahci,net55-r8168,cpu-microcode**」を追加しました。 - 参考) vSphere ESXi 6でRealtek NICを動かす(ESXi-Custmizer-PS編) - 雑木林 - 参考) List of currently available ESXi packages - V-Front VIBSDepot Wiki 1. 作成できたESXiのISOイメージを、UNetbootinなど使用してUSBメモリに焼きます。 1. Vorke V1を上記USBメモリで起動します! しかし途中で「Relocating Modules and starting up the kernel」が表示された後、インストールが止まっているような状況に遭遇します……。なぜか画面が変わらない。 1. そこでどうするか。下記参考ページの方法でESXiの自動インストールを試みます。参考ページと同じようにks.cfgを作成し、手順4の「runweasel ks=usb:/ks.cfg」を入力するまで頑張ってみてください。 - 参考) Intel NUC(NUC5CPYH)にVMware ESXiを入れる - Qiita 1. Vorke V1には簡素化のためかHDDアクセスランプが存在しませんので、外観からはインストールの進捗が分かりません。辛抱強く待ってみましょう。 1. 私の環境では、「runweasel ks=usb:/ks.cfg」を入力して約5分後にVorke V1が勝手に再起動しました。この再起動はインストールプロセスの過程なので良い兆候で、インストールが成功した証になります! しかしESXiのインストールが、狙っていた本体SSDではなく、追加SSHDのほうにされていることに気付く。これはもうあきらめる。 - 失敗談) 上記のks.cfgの中身を用いつつ、Vorke V1に追加SSHDを接続せずに本体SSDのみの状態にして、ESXiインストールを進めると、なぜか、USBメモリ自体にESXiをインストールするような挙動をしていたような。この問題の回避方法は結局わからず。 1. 今回のバージョンのESXiにはWeb UIがありますので、http://【DHCPでVorke V1に割り当てられるIPアドレス】/ にアクセスして、ESXiの稼働を確認してみましょう。(上記★でMAC ADDRESSをあらかじめ調べておけば、別PCでのarpコマンドなどでIPアドレスを突き止められます) 1. Vorke V1の本体SSDを、ESXiのローカルスワップ・ホストキャッシュとして使うようにWeb UIで設定できます。 #### 感想 数台のマシンを乗せられる仮想環境が、机上に置ける小さな安いハードで実現できるって、エコだし、いいですね。様々なISOをダウンロードし、常時稼働サーバを試しに作っては遊んでいます。 --- ### 【読んだ本】 限界費用ゼロ社会 <モノのインターネット>と共有型経済の台頭 - 2016-11-19 URL: https://remoteroom.jp/medialog/2016-11-19_book-b0178fvsws/ 僕の好きな小説に、池澤夏樹の『すばらしい新世界』がある。風力発電のエンジニアが登場する、今の言葉で言うコモンズを匂わせるストーリーに未来を感じていた。 今回の『限界費用ゼロ社会』は、もう小説ではなくて、人間社会を取り巻く現在進行形にある怒濤の変遷を描いている。物は所有するよりもシェアしてアクセスするほうがしっくりする。ヒトは共感をSNSで自然と広めている。エネルギー・インターネットが次に来て、社会の力学を水平型に変える。 僕は自分の価値観をアップグレードして、「社会関係資本」に基因するものに変えていけるのか。これから数十年の労働環境はどうなっていくのか。地球環境の持続可能性は、はたして高めていけるのか。ミクロでもマクロでも不安は尽きないけれど、人間各々がとる本能的な舵取りが、大局的には知的なものになるように、なんらかの助けになるよう生きたいと思う。 --- ### 【読んだ本】 コンテナ物語 - 2016-10-03 URL: https://remoteroom.jp/medialog/2016-10-03_book-b00f36mg8u/ 今晩ちょうど帰りの三ノ宮駅のホームにいたとき、大蛇のように長い貨物列車が、赤茶色のコンテナを載せて通過していった。このコンテナが、どのように世界の経済を変えたかという物語。 物流行き渡っている今、コンテナに載せない貨物の運び方が、逆に想像しづらいわけだが、戦後、1960-70年ぐらいまではそうだったそうな。 最も面白かったところが『第六章 労働組合』、というのが自分でも意外。機械化と雇用の保障を巡って、いかにして経営側と労働側が交渉してきたか、示唆に富んでいて、考えさせられた。シンギュラリティを向かえつつある現代のこの先と、議論の形は同じなのかもしれない。 --- ### 【読んだ本】 マインド・コントロール 増補改訂版 - 2016-09-16 URL: https://remoteroom.jp/medialog/2016-09-16_book-b01elbez2m/ 「マインド・コントロール」を狭く捉えていたことがよくわかった。人間を理解する、他人と自分の潜在的な部分を理解しようとする時に、強くお薦めするできる本のひとつだ。人間の回路がいかに壊されやすいか……。 自分の過去にあった心理的な事件 (誤解や衝突) も、お互いの心境がどのように動いてほぼ必然としてそれが起こったのだな、ということを理解し、振り返ったりもした。社会的な生き物である人間にとって、ICTが進んだ現代は、他から多種多様な接続が大量に試行され続ける、史上最も大変な時代なのだろう。そんなあらゆる接続の通信内容を、相手の意図とともにできるだけ客観視し、判断し、取捨選択をして、生きていけるようにしないといけないのかな……。 --- ### 【読んだ本】 陸王 - 2016-09-04 URL: https://remoteroom.jp/medialog/2016-09-04_book-b07srxg16j/ 最初のほうの早い読ませ方は、赤川次郎の小説を思い出させた (←自分の何十年以上前の記憶だろう?)。エンタテインメントとして、間違いなくおもしろかった。会社の経営物語としても、ひとつ読めるのかもしれない。ある局面ではどういう策を考えておくべきか、二者の想いをすり合わせる妙案は無いか、登場人物を介して触れることができるので。 --- ### 【読んだ本】 無印良品は、仕組みが9割 仕事はシンプルにやりなさい - 2016-08-30 URL: https://remoteroom.jp/medialog/2016-08-30_book-b00evpzyni/ 具体的なアイデアが多く書かれていて想像しやすい。これは、ものにしたい。「初心忘れるべからず」だし、客観視した振り返りの継続が必要だ。会社には例えば、『見積書の作り方』マニュアルを備えようと考えた。 --- ### 【読んだ本】 GDP4%の日本農業は自動車産業を超える - 2016-08-23 URL: https://remoteroom.jp/medialog/2016-08-23_book-4062729202/ 日本農業を経営の観点で見たとき、問題はどんなところにあり、今どのような成長の青写真が描けるか。通説通りに危機なのか、効率を上げられる商機なのか。農業の話として数字のイメージを持ちながらそのままストレートに読んでも良いし、汎用的に“見方を変えてみよう”という意識を取り戻せる、面白い本。 --- ### 【読んだ本】 マネーロンダリング - 2016-08-03 URL: https://remoteroom.jp/medialog/2016-08-03_book-b00anjb3ou/ 通勤帰りの道を歩きながらKindleを開くほど、この小説の先を急いで読んだ。国境をまたぐ様々な財テクを覚えられた、わけではないが、これまで自分が知らなかった世界を覗けた充足感はある。文体も好きかも。 --- ### 【読んだ本】 PDCAプロフェッショナル―トヨタの現場×マッキンゼーの企画=最強の実践力 - 2016-07-25 URL: https://remoteroom.jp/medialog/2016-07-25_book-b01b2gqmzm/ PDCAを回すとよく言うが、それを本気で回し続けるための最初の意識作り・環境作りが難しい、とよく分かる。そしてPの手前の現状分析は不可欠。失敗事例の傾向に自分も思い当たるところが多く、冷や汗をかくような気持ちになる。なお、サブタイトルに登場する2企業の実践内容が深く分析されていく、という印象は受けなかった。そこは他の書籍をあたった方が良いかもしれん。 --- ### 【読んだ本】 日本会議の研究 - 2016-07-07 URL: https://remoteroom.jp/medialog/2016-07-07_book-b01gpn2hla/ しょうじき、自分の関心がほぼなかった日本の政治の世界。そこに今、50年越しの思想的運動が結晶して重なろうとしているというのだ。それって何だ?何事か?と本書を選んだ。「日本会議」が気になるなら是非。 --- ### 【読んだ本】 HARD THINGS 答えがない難問と困難にきみはどう立ち向かうか - 2016-06-28 URL: https://remoteroom.jp/medialog/2016-06-28_book-b00w535lou/ 創業者CEOの苦悩を知りたければ、とても参考になるようだ。様々なレビューによると。この一手がどう出るか、確率なんてわかりゃしない局面でもCEOは意思決定しなきゃならず、とにかく本質を外さず勇気を備えろという書である。 --- ### 【読んだ本】 愛のようだ - 2016-06-06 URL: https://remoteroom.jp/medialog/2016-06-06_book-4898154247/ 車に乗って得る刺激、同乗者とのやりとり、再生される想い出、沸き上がってくる気持ち。それらの細やかな、久しぶりの小説らしい記述を目でなぞり、浸った。通勤帰りに吊革を握って読んで最後にはやはり泣きそうになる。 そしてドライブしたくなった。昔学んだStocastic Resonanceという物理現象じゃないけれども、ドライブというノイズに身体を委ね、その環境で増幅される自分の声をひとつ決定として、次に試したくなる。ドライブしたい気持ちってそんなところじゃないかと、駄文をこう、書いてみる。 --- ### 【読んだ本】 バルミューダ 奇跡のデザイン経営 - 2016-05-19 URL: https://remoteroom.jp/medialog/2016-05-19_book-b00w6p92ag/ 仕事の中で「デザイン経営」という言葉に遭遇し、その意味の感覚を得るために読んだ。異質に見える物が本質的な認識や体験を人にもたらしている事例がわかる。まったくもう、どうやっても知的に興奮してしまう話だ。 --- ### 【読んだ本】 ネット時代の地方自治 - 2016-05-12 URL: https://remoteroom.jp/medialog/2016-05-12_book-4062185407/ 現神戸市長の著書。市民を定義し、都市を定義していくといった流れで、論理構成がきれいだった。タイトルからの直感では、ネット活用論が大胆に展開されそうな予想をしたが、決してそうではない。これは例えば100年後も通用する地方自治の基本の書のような気がする。 --- ### 【読んだ本】 あなたの1日は27時間になる。 - 2016-04-22 URL: https://remoteroom.jp/medialog/2016-04-22_book-b019dfsti2/ タイトルを叶えるための方法が、気持ち簡単にできそうなステップごとに紹介されている。一つでも実行を続けられたら、書籍代のもとは余裕で取れてしまうと思う。 とりあえず私は、職場での「ものを探す時間」を短縮したい。 --- ### 【読んだ本】 多数決を疑う――社会的選択理論とは何か - 2016-04-15 URL: https://remoteroom.jp/medialog/2016-04-15_book-4004315417/ 社会的選択理論、という言葉を初めて知った。 社会でどれかを選択するという行為において、自分の体にも染み付いている現実の制度がまだまだ未成熟であることを思い知らされる。これはインパクト強い良書だ。 --- ### 【読んだ本】 老人と宇宙(そら) - 2016-04-03 URL: https://remoteroom.jp/medialog/2016-04-03_book-4150116008/ 忙しくなってきた時期の反作用なのか、SF読みたくなって、Twitterでタイトルが流れていたこの本を前知識なく図書館で借り、主に通勤中に読んだ。没入させられるSFらしさが最高だ。 --- ### 【読んだ本】 「ついていきたい」と思われるリーダーになる51の考え方 - 2016-03-18 URL: https://remoteroom.jp/medialog/2016-03-18_book-b00ae6wua8/ 自分が迎えた局面にとても合った指南本であった。責任を抱えてかつ「To be good」で、理念の実現をめざしていくしかないよと語っている。また読み返そうと思う。 --- ### 【読んだ本】 会社の枠を越えたウェブサイト復旧支援 ~東日本大震災時にAWSユーザーグループのメンバーはどう行動したか~ (記憶の継承) - 2016-03-11 URL: https://remoteroom.jp/medialog/2016-03-11_book-b01c5boqg0/ サーバシステムの地域分散。とりあえずDNSは場所を切り離しておかねば、いざという時に対応できない。 --- ### 【読んだ本】 決定版 これがガバナンス経営だ!―ストーリーで学ぶ企業統治のリアル - 2016-03-04 URL: https://remoteroom.jp/medialog/2016-03-04_book-b0192rh46o/ 取締役会、監査役などが、コーポレートガバナンスの面で会社に不可欠な機能であることを学習。もちろん、全体がその気になって取り組む気風が大切。 --- ### 【読んだ本】 ストーリーとしての競争戦略 ―優れた戦略の条件 - 2016-02-14 URL: https://remoteroom.jp/medialog/2016-02-14_book-4492532706/ 優れた戦略にはうまく「転じる」ストーリーがあると教えてくれる。「転」は他者がそこだけ真似できるものではなく、実はストーリーを走らせる世界観みたいなものであるべきなんだ、と僕は捉えた。 --- ### 【読んだ本】 まだGHQの洗脳に縛られている日本人 - 2016-01-19 URL: https://remoteroom.jp/medialog/2016-01-19_book-b00zbqcuyc/ 自分が記憶している“歴史”の、アップデートが必要な時もあるようだ。新しいファクトとその見方を知っておこう。 --- ### 【読んだ本】 Googleの72時間 東日本大震災と情報、インターネット - 2016-01-13 URL: https://remoteroom.jp/medialog/2016-01-13_book-b00bhqmxbu/ 圧倒的なGoogleの物的リソースは、多様性を持つ人たちが使命感と意欲で駆動している。ということがよく分かった。過去の仕事でお会いしたことのある方の名前が頻繁に出ていて、驚きもした。 また、本書を通読することで、災害時のITボランティアの概要も掴めるかもしれない。 --- ### 【読んだ本】 「稼げる男」と「稼げない男」の習慣 - 2016-01-02 URL: https://remoteroom.jp/medialog/2016-01-02_book-4756917534/ タイトルは煽りっぽいですが、2時間ぐらいで読めてエッセンスを把握できる本。事にあたる際に、その本質や未来像を掴むために徹底的に俯瞰して客観視もできるよう、自分を繰り返し律するのにちょうどよかった。 --- ### 【読んだ本】 保育園義務教育化 - 2015-12-29 URL: https://remoteroom.jp/medialog/2015-12-29_book-b010puov1i/ 日本社会での子どもの扱いに関して、『保育園義務教育化』という一見極論から問題提起する書。参考文献として挙げられているものも、比較的新しいものが多い。メジャー層の年齢が上がる仕方なさと、次世代の社会を整えていくことを両立しなくてはいけない。うまくやっている先進国のように、これからの日本にもベビーブームが来ればいいねと僕も思う。 --- ### 【読んだ本】 ルワンダ中央銀行総裁日記 [増補版] - 2015-11-30 URL: https://remoteroom.jp/medialog/2015-11-30_book-b00lmb2ole/ 時は1965年。独立後のアフリカの一国を、幸せに発展させていくためにはどうすればいいか。中長期的な考え方と実践例の両方が詰まっているような良書。 --- ### 【読んだ本】 自治体にオープンソースソフトウェアを導入しよう -基幹システム編- - 2015-11-04 URL: https://remoteroom.jp/medialog/2015-11-04_book-4839929645/ 2008年出版なので事例がちょっと古い。今後の仕事に備えた、感覚的なおさらい。 --- ### 【読んだ本】 人工知能は人間を超えるか - 2015-10-25 URL: https://remoteroom.jp/medialog/2015-10-25_book-b00uaak07s/ 「特徴表現学習」が可能となり、にわかに注目を浴びる人工知能について長期展望を含め解説。おもしろい。情報がネットワークで流動性を得たように、知能は人工知能によって遍在化するという。人間組織の構造は各自の経験知に基づいて、経験者をキーに形成されてきたが、人工知能によりそれも変わっていくはずで、未来の“あたりまえ”は今と全然ちがうのかもしれない。 --- ### 【読んだ本】 V字回復の経営―2年で会社を変えられますか - 2015-10-24 URL: https://remoteroom.jp/medialog/2015-10-24_book-4532193427/ 前の職場の上司にも教えられたのだが、なにはともあれ第一に、管理会計を徹底していないと何も見えていないのに等しい。これは今のポジションでどうやったらいいのかな。 --- ### 【読んだ本】 世界で最もイノベーティブな組織の作り方 - 2015-10-17 URL: https://remoteroom.jp/medialog/2015-10-17_book-4334037682/ 著者によると「キュレーションに過ぎません」というこの内容だが、とても有用に思えた。自分が経験した・している課題と、紹介されている具体的な事例や研究成果を比較して考えてみるとよさそう。さて、私の "where" ってなんだろう。 --- ### 【読んだ本】 経営パワーの危機―会社再建の企業変革ドラマ - 2015-10-10 URL: https://remoteroom.jp/medialog/2015-10-10_book-4532191653/ 経営って絶壁を歩くようなものなのだろう。それを疑似体験できるおもしろいストーリーであった。 --- ### 【読んだ本】 東日本大震災の実体験に基づく 災害初動期指揮心得 - 2015-09-28 URL: https://remoteroom.jp/medialog/2015-09-28_book-b00s8uxg9g/ 読んでいて幾度涙が出てきそうになったか。災害時には応用力が問われる。「備えていたことしか、役には立たなかった。備えていていただけでは、十分ではなかった。」 --- ### 2015/09/10 (Thu) - 2015-09-09 URL: https://remoteroom.jp/diary/2015-09-10/ 9月12日(土)開催の『JISTAオープンフォーラム2015 in 関西』の分科会にて、わたしプチトークを行うことになりました。LAN内ファイル共有を便利にする「ownCloud」を、ざっくり紹介します。 - [日本ITストラテジスト協会 – ニュース – JISTAオープンフォーラム2015 in 関西 開催のお知らせ](https://www.jista.org/modules/news/article.php?storyid=70) --- ### 【読んだ本】 キンドルで本を売る。―キンドル・ダイレクト・パブリッシングを通じた個人出版のアドバイス - 2015-09-08 URL: https://remoteroom.jp/medialog/2015-09-08_book-b00aeeox2i/ 物を書いて、自分で編集者・出版社をやることについて。KDPでの個人出版を改めておさらい。 --- ### 2015/08/31 (Mon) - 2015-08-31 URL: https://remoteroom.jp/diary/2015-08-31/ 子ども (2014年4月生まれ) が今日の夕方から歩き始めたことを、ここに記す。 昨日まであった、両足で立ってはいるが、親が手を差し伸べていない時に片足を前に出すことへの躊躇を、彼は克服した模様だ。ヨタヨタしているがキャハキャハ嬉しそうに歩く。とうとうこの段階が来たか……と身構えるとともに、どーんと育ってくださいよ!と私はブログに書いてしまう気持ちだ。 --- ### 【読んだ本】 一流の人はなぜそこまで、習慣にこだわるのか? 一流のこだわりシリーズ - 2015-08-31 URL: https://remoteroom.jp/medialog/2015-08-31_book-b010cnboue/ 先人のpathの一つが示されている。どうありたいのでどこまでやりますか?>自分 --- ### 【読んだ本】 星を継ぐもの - 2015-08-25 URL: https://remoteroom.jp/medialog/2015-08-25_book-b00pgnzfd8/ サイエンスフィクションらしいSF。『星を継ぐもの』って邦題いい。こういう物語を読むと夜空を見上げる気持ちが変わるんだよな……。 --- ### 【読んだ本】 たった1日でチームを大変革する会議 - 2015-08-10 URL: https://remoteroom.jp/medialog/2015-08-10_book-b008r54kpq/ 気持ちの充電をするため読んだ。今に疲弊しないように。 Why? (なぜか) よりもHow? (どうやったらやれるか) ですすめる。メンバーが目標を正しく認識するための会議の運び方、100%責任の意味。 --- ### 2015/08/06 (Thu) - 2015-08-06 URL: https://remoteroom.jp/diary/2015-08-06/ DropboxのCLI版を自宅サーバ (OS: Ubuntu Server) で動かしている。このサーバにcifsでマウント中のNAS (Transporter Syncに接続中の1TB HDD) を、~/Dropbox以下にsymlinkしてDropboxの同期の対象に追加しようとする件。 うちの場合、以前の挑戦では同期がなぜか走らず失敗していたのだが、ウェブで調べてみても上記の様なsymlinkは別に問題がある方法でもないので、色々考え直し……。Ubuntu側の「fs.inotify.max\_user\_watches」とやらをデフォルト状態から100000に増やして再挑戦すると同期が動き出したようだ! ちなみに、symlinkしたストレージにはたっぷりと、19000以上のフォルダが含まれている。 - [リンクされている別のコンピュータで同期されないファイルがある場合 (Dropbox ヘルプセンター)][1] さて、十数年撮りためている写真等々、650GBほどのデータをいまからDropboxにアップロードするわけだが、はたして完了に何日かかるのか。 P.S. Transporter Syncってのはこれ↓。興味深いものなので並行輸入物を買ったが、自分以外に使っている人を知りません。そういえばPogoplug mobileも使ってたな。orz [1]: https://www.dropbox.com/help/145 --- ### 【読んだ本】 Google vs トヨタ 「自動運転車」は始まりにすぎない - 2015-08-06 URL: https://remoteroom.jp/medialog/2015-08-06_book-b00qlr0zmo/ 「自動運転車」は、現状からするとひとつの到達点だが、確かに始まりにすぎない。それが良く分かった。 都市デザイン、都市間デザイン、そしてイノベーションについて切り込んでいこうとする書。米国での投資がどの分野に行われているかを分析して、未来を予想する部分など特に面白い。 --- ### 【読んだ本】 イスラーム国の衝撃 - 2015-07-24 URL: https://remoteroom.jp/medialog/2015-07-24_book-b00sins1hu/ 「イスラーム国」を現象と見なし、歴史をふまえての現状を冷静に解説し、今後の展望を述べている。 うっすらと理解したのみだがおもしろかった。 --- ### 【読んだ本】 これからの「正義」の話をしよう ──いまを生き延びるための哲学 - 2015-06-21 URL: https://remoteroom.jp/medialog/2015-06-21_book-b009t625ju/ Kindleで長い時間をかけて読むとページ数の概念が無くなってしまうのでおそらくだが、分量が多く、総じて頭の地図を広げてくれる。 様々な難題を取り上げていてすんごいザックリ言うと、よく論じられるような“A案とその対案のB案”の他に、それらとは視野を違えたC案が存在し、本質としてはそこからの真剣な議論が必要ではないか、ということに気付かされる内容だ。 --- ### 【読んだ本】 グロースハッカー 第2版 - 2015-06-19 URL: https://remoteroom.jp/medialog/2015-06-19_book-4822250784/ 仕事や個人活動で今後自分が進みたいと願っている方向に必要な、マインドセットをまとめた本であった。事例も分かりやすい。 --- ### 2015/05/21 (Thu) - 2015-05-21 URL: https://remoteroom.jp/diary/2015-05-21/ 子どもが掴まり立ちをし始めている。ここ何週間かで急成長しており、彼の行動範囲を安全な状態にキープするのは嬉しいことながら大変だ。一方、私の、現職場での立つべき位置もはっきりしてきた。予想通りの位置であり、しかしまだまだ力が足りないところであるのも意識している。 予約購入していた[Intel Compute Stick][1]のWindowsモデル BOXSTCK1A32WFCR (メモリ2GB, ストレージ32GB) は5月12日に宅配されてきた。そのまま、Windowsは起動せずにストレージのイメージをバックアップした後、Linux Mintをインストール、現在は普段使い用の環境構築をおおよそ終えたところ。 実はLinux Mintの初期状態では、Intel Compute Stickに内蔵の無線LAN/Bluetoothを使えるようにはまだ出来ないらしい。どういうドライバーを組み込めば良いのか、情報収集中。 このIntel Compute Stickに纏わる模索の記録は、まだ珍しいかもしれないから、このブログで写真入りの記事にでも仕立て上げられたらと思っているものの、むむむ……。 P.S. ↑Twitterのログを貼るだけで、なかなか記録っぽくなるもんだな。 [1]: http://www.intel.co.jp/content/www/jp/ja/compute-stick/intel-compute-stick.html --- ### 2015/04/15 (Wed) - 2015-04-15 URL: https://remoteroom.jp/diary/2015-04-15/ うちの子 (1歳) は、天気予報のテレビ画面が大好きのようでたいがい凝視している。画面上に並ぶ、晴れ【☀】・曇り【☁】・雨【☂】のアイコンを、パターンとして認識しやすいのだろうし、琴線に何か引っかかるのかもしれない。 そして今日気付いたのは、「おてんき」「てんき」という単語を彼に言うと、テレビが点いていなくても、顔をテレビに向けるようであること。ほぼ初めて覚えた単語が「てんき」なのは、まったくの想定外だ。 --- ### 2015/04/07 (Tue) - 2015-04-07 URL: https://remoteroom.jp/diary/2015-04-07/ 新職場での勤務、5日目。これから担当する案件などを把握してこなせるのか、不安も感じている今日この頃である。しかし、勤務時間中に用意されているフィットネスタイムで人生初のバーベルベンチプレスをしてみると、何とかなるだろさ、という活力もみなぎってきたような。 退社して辿り着く六甲道駅では、神戸市会議員選挙に出馬した、大学時代の同期が演説中。互いに近寄って大きな身振りで握手、結果が出て「旨い酒が飲めればイイな」と言葉を交わす。そして、言葉通りでほんまそうやなぁと思いながら陽気加減に帰宅すると、子どもの1歳の誕生日を祝って、相方が渾身のイチゴケーキを作っていた。お祭り騒ぎのように母子とケーキの写真を50枚ほど撮り、子どもを押さえながらその伸びた髪を初散髪もして、心底疲れたが、明日もまた楽しければと願う候。 --- ### 2015/03/08 (Sun) - 2015-03-08 URL: https://remoteroom.jp/diary/2015-03-08/ トヨタ・プログレ (2000) のページを公開開始。この車に関して新しく物を購入したり、燃費を算出したときに、次のページを更新していきます。 * [TOYOTA Progrès (2000)][1] 今日はワイパーのゴムを自力で初交換し、拭き跡がほとんど残らなくなった様子に満足したのであった。 [1]: http://remoteroom.mydns.jp/blog_mah/aboutme/toyota-progres.html "TOYOTA Progrès (2000)" --- ### 【読んだ本】 スマホに満足してますか? ユーザインタフェースの心理学 - 2015-03-05 URL: https://remoteroom.jp/medialog/2015-03-05_book-433403845x/ とても平易に書かれていて、かつ参考情報が豊富。 ITの“当たり前”を疑って刷新していこうという気になります。 --- ### 【読んだ本】 考える一族―カシオ四兄弟・先端技術の航跡 - 2015-02-24 URL: https://remoteroom.jp/medialog/2015-02-24_book-400603069x/ 計算器に賭けたCASIO四兄弟の物語。探究心。感想として、いきなり自分の子育ての話になるが、物の原理を教えるのはうまくやらんといけんな……、とびびりながらも気合いが入る。 --- ### 【読んだ本】 大局観 自分と闘って負けない心 - 2015-02-19 URL: https://remoteroom.jp/medialog/2015-02-19_book-4047102768/ 激戦を抜けてきて今後も続けてゆくプロ棋士の、人生の大局観といいましょうか。なぜか僕は読んで落ち着いた。 --- ### 【読んだ本】 SF映画で学ぶインタフェースデザイン アイデアと想像力を鍛え上げるための141のレッスン - 2015-02-06 URL: https://remoteroom.jp/medialog/2015-02-06_book-462108836x/ 沢山のSF映画に登場するインターフェースを、愛情と厳しさをもって分類。映画的な事情も解説しながら、それらがより現実的であるにはどうあるべきだろうかと考えている書。 楽しみました。(^_^) --- ### 2015/01/22 (Thu) - 2015-01-22 URL: https://remoteroom.jp/diary/2015-01-22/ 昨日の休暇によって充電されたクリアな頭。それでもって、ちゃかちゃかと仕事を進めたように思ったがさてどうか。昼休みから読み始めた『SF映画で学ぶインタフェースデザイン』という本が、面白そうすぎて困る。物語としてのSFよりも、映画としてのSFに魅了される場合があるのは、映像の形に可視化され、つまり具現化された風にみえる未来的なものに、惹かれるからかなあ。 昨日から導入した子ども用のベビーサークル、[ミュージカルキッズランド DXショコラ+トイパネル][1]の愛称を晩食後の家族会議で決定、「ショコラ・ヘキサゴン」となった。なんか秘密基地みたいでかっこええやないか……。この中での遊びが長時間持続してくれることを願っております。 ちなみに、家族内で愛称を付けている物がもう一つある。それは下記のベビーカーで、こちらは比較的単純に、「トゥルーレッド号」と呼んでいる。しかしこれに乗せると最近はよく泣いてしまうようで辛い。抱っこ紐のほうに軍配が上がっている。 [1]: http://shop.akachan.jp/shopping/g/g383019500 --- ### 2015/01/15 (Thu) - 2015-01-15 URL: https://remoteroom.jp/diary/2015-01-15/ ポスター掲示を主にするブログを作らなくてはいけなくて、WordPressを使い、他にどんなプラグインを入れれば良いか、そしてネットワーク構成はどうしようか、など考えていた。皮膚科によって帰宅。 --- ### 2015/01/12 (Mon) - 2015-01-12 URL: https://remoteroom.jp/diary/2015-01-12/ 法定12ヶ月点検と、ちょっとした不具合を直してもらいに、神戸トヨペットへ。AREA86コーナーも探索。置いてある86実車がどれもノーマルじゃない。どんだけ着座位置が低いんだ。 --- ### 2015/01/11 (Sun) - 2015-01-11 URL: https://remoteroom.jp/diary/2015-01-11/ この春に出産予定の知人カップルが我が家を訪問。うちの子で、赤子体験のイメージを抱く助けになるかな。 --- ### 2015/01/09 (Fri) - 2015-01-10 URL: https://remoteroom.jp/diary/2015-01-09/ 勤め帰りの買い物中、羽生結弦クリアファイルを求めている相方から、クリアファイル確保の命が私に下った。LOTTE製品の購入キャンペーンで入手できるらしい。お安いご用だ!と思って、六甲道付近のダイエーやファミマを覗いたが、全く余っていない。羽生人気を甘くみていたようで、とりあえず徒労のまま帰宅。 宅配で届いていたOBD2のBluetoothアダプタを、さっそく車に接続。Android側でOBD2 Info fanを起動して、ELM327のバージョンを確認すると、やった、旧バージョンのVer.1.5だ (最新のVer.2.1だと逆に対応プロトコルが減らされているらしいという不思議)。そしてプロトコルの自動選択はやめて「TOYOTA K-LINE」に固定しておけば、プログレ (2000年型) から、燃費などの値はちゃんと取れる。 羽生結弦クリアファイルの確保を名目に、ひとりでドライブに出かけて燃費を計ってみたが、何か値がおかしいときがあり、結果的に平均燃費30km/lとか表示された。GPS信号が掴めてなかったりするのか。 ちなみにクリアファイルは、事前にここならあるだろうと踏んでいた、新在家南のトラック街道沿いのファミマに3種類残っていたので無事に2つ確保。 --- ### 2015/01/07 (Wed) - 2015-01-07 URL: https://remoteroom.jp/diary/2015-01-07/ 厚着して職場。スタッフそれぞれが独自の記事を連ねている某ブログは、更新が不定期であるところがいわばネック。訪問者離れを阻止すべく、更新情報をメールでお知らせする仕掛けが欲しくなった。 feed2mail.plの制作を開始。この類は今までに何度か作ったはずで、車輪の再発明には違いないが、その時々の最新のCPANモジュールを試す良い機会だと思い込むことにしている。 家では七草粥。子どもにもその七草粥を、塩分抜きで。大人と同じ料理を初めて食した一つの成長記念日。 --- ### 2015/01/06 (Tue) - 2015-01-06 URL: https://remoteroom.jp/diary/2015-01-06/ PrincetonのBluetooth→FMトランスミッター、[PCK-FMBT2ABK][1]が宅配されていたので、夜に駐車場まで行ってさっそく動作テストした。 プログレには、運転席・助手席の間のアームレストの中にもシガーソケットが1口備わっているのだが、走りながら必要に応じて発信周波数の変更操作をするためには、FMトランスミッターは普通のセンターコンソールの位置のソケットに直刺するほうがベターと判断。ちなみに車側のFMアンテナは、リアガラスにプリントされているタイプ。 PCK-FMBT2ABKとNexus 5とのペアリングは難なく成功し、次にちょうど良い発信周波数を見定める。88.1MHzはリアルなFM放送局とかぶるのだが、他の選択肢である88.3MHzと88.8MHzではほぼ雑音無く、カーステレオのほうからBluetooth-FMという無線経由でNexus 5の音を聴けた。接続の線が1本減るというのはなんとスッキリすることか! 別機種との比較として。レンタカーなどで音楽を聴くために数年前手に入れた一号機 (SONY DCC-FMT50UD) よりは、電波の受信がしやすくて、うまく聴けそうな雰囲気を感じる。Amazon.co.jpのレビューによると、なるほど、DCC-FMT50UDは散々だったのですな……。 [1]: http://www.princeton.co.jp/product/pckfmbt2.html "PCK-FMBT2ABK" --- ### 2015/01/05 (Mon) - 2015-01-06 URL: https://remoteroom.jp/diary/2015-01-05/ 職場内部の広報室ブログへ、年末年始の休み中に気になったキーワード「IR (Institutional Research)」を探った結果として、“IRとは何か”を簡単にまとめるエントリーを書いていたら、簡単には片付かなくなり、予想以上に手間取ってしまった。予約投稿を設定っと。 ちなみに次の資料がコンパクトにまとまっているように思え、ざっくりの理解にちょうど良かった。 * [米国のIRの現在地から日本における実践上の課題を考える][1] (PDF) [1]: http://www.shinken-ad.co.jp/between/backnumber/pdf/2013_10_tokushu09.pdf --- ### 2015/01/04 (Sun) - 2015-01-04 URL: https://remoteroom.jp/diary/2015-01-04/ ニトリでクッション類を、ラ・ムーで食料品を仕入れる、近所の大型店舗巡り。ラ・ムーに併設のパクパクは18時で店を閉めるようで、6個100円たこ焼きを楽しみにしているのだが今日は間に合わず。山盛りししゃもの晩食の後には、NHKスペシャルの『[NEXT WORLD 私たちの未来][1]』第2回を鑑賞。2045年には人間の平均寿命は100歳に達すると予想し、長寿を実現しそうな強力な技術を色々とレポートしていた。構成員の年齢分布がそこまで拡がっていると社会の様相が大きく変わりそうだが、そんな未来に自分は何を商いにしているだろう。まぁそれは、いきなりかけ離れた状況にはならず、今少しずつ選んでいく方向性の蓄積に違いないだろうが。 先日書いた[プログレの燃費騒動?]()については、実際いわゆる可視化をしてみんとわからんという結論に達し、ハードウェアとしてBluetooth仕様のOBD2スキャンツールを購入し、Androidのアプリで瞬間燃費・平均燃費をモニターしてみることにした。 [1]: http://www.nhk.or.jp/nextworld/ "NEXT WORLD 私たちの未来" --- ### 2015/01/03 (Sat) - 2015-01-03 URL: https://remoteroom.jp/diary/2015-01-03/ 当ブログのOGPやTwitter Cardの設定に昨夜は手間取り、完全起床は16時でしたすみません。夕暮れを過ぎ、抱っこ紐で子どもをかかえて、六甲八幡神社へ初詣と買い物。“肉!”という僕のリクエストに合ったうまいもん料理してもらって、美味しくいただいた。子どもを寝かせたあとの、コタツで珈琲の静寂。考え事が進む。 目下の課題は、今年度で終わる仕事の次の生活手段をどうするか、だ。転職活動等の行動が伴っていないが、この心配は頭の一部を常に占めている。[誰も考えなかったことを敢えて行うこと – Think Different 2015 –][1]というエントリーを読んで、人生を可変にするその一歩を、難しく感じてしまっている自分をまさに自覚する。 [1]: http://takahito.hatenablog.com/entry/2015/01/03/180448 --- ### 2015/01/02 (Fri) - 2015-01-02 URL: https://remoteroom.jp/diary/2015-01-02/ ときおり寒波。家族三人で車に乗って、相方の実家へ向かうイベントを実施。子どもを相方の実家に連れて行くのが初めてであり、かつ、少し長めの1時間ほど、車に乗せてドライブするという試みも初めてで、運転手としてはやや緊張した。コタツを囲み、カニ鍋をおいしくいただいて21時過ぎに無事帰宅。 このドライブ前に、車 (トヨタ・プログレ NC250) に給油をして満タン法での燃費を初めて算出できたんだが、ここ約一ヶ月分がなんと「5.3km/l」。えぇぇ、せめて8km/lぐらいを目指していたのに! 車体重量が大きい、そして回生機構などのエコ装備はなんも付いていないこの車では、減速時に運動エネルギーをただ熱エネルギーに変えてわんさか捨てているだけ、ということを痛感する値である。どうしようもないんだが辛いなあ。 --- ### Hello world! #2015 - 2015-01-01 URL: https://remoteroom.jp/diary/2015-01-01/ 2015年になりました。本年もどうぞよろしくお願いいたします。 年が改まったことを契機に、個人ウェブサイト「RemoteRoom」を再出発させたいと思います。技術的にはWordPressを利用してサイトを再構成し、内容的には、いくつかある趣味を反映させてぼちぼち拡充を図っていきます。 なお、WordPressでのサイト構築ネタとして。このサイトでは、安全重視といいますか自分の好みに基づき、WordPressシステムの直接公開は行っていません。WordPressのコンテンツを自宅サーバで静的なHTMLファイルなどに変換してから (いわゆる「サイトの静的化」を行ってから)、remoteroom.jpというウェブサーバに転送して公開をしています。ゆえに動的なコメント機能などは使用できないのでご了承ください。この、WordPressサイトの静的化の手法についても、ひとつの記事にして後日公開できればと考えています。 --- ### 【読んだ本】 2015年版間違いだらけのクルマ選び - 2014-12-23 URL: https://remoteroom.jp/medialog/2014-12-23_book-4794221002/ これを読み尽くすのは年末の恒例行事。(断言) 今どきネット媒体だと、緻密な計測データや動画(音も含む)でもって、気になるクルマの挙動を見てみたり、擬似的に感じたりすることが出来る。それでも書物を手に取るのはなぜかと考えると、いっときの没入感を欲するからかな。 --- ### 【読んだ本】 データの見えざる手: ウエアラブルセンサが明かす人間・組織・社会の法則 - 2014-11-25 URL: https://remoteroom.jp/medialog/2014-11-25_book-4794220685/ 次の科学を知った気がする。自分のハピネスとはなにか。この、名札型のウエアラブルセンサーを身に付けてデータを取ってみたい。 #### 参考リンク - [【読んだ本】 予測不能の時代: データが明かす新たな生き方、企業、そして幸せ \[2022-02-06\]]() --- ### 【読んだ本】 「ななつ星」物語: めぐり逢う旅と「豪華列車」誕生の秘話 - 2014-10-20 URL: https://remoteroom.jp/medialog/2014-10-20_book-4093883548/ 執念を究極突き詰めた列車、そして集大成のプロジェクト。「ななつ星 in 九州」が、郷土の誇りになる理由が大変よくわかった。 読了後に公式動画を観ると説得力がより強まります。 --- ### 【読んだ本】 世界の現場で僕たちが学んだ「仕事の基本」 - 2014-10-13 URL: https://remoteroom.jp/medialog/2014-10-13_book-4484142171/ 各コラムが4ページに収まっている、濃縮度の高い示唆の集まり。 様々な力を、どう養っているか、または後で気付けば養っていたか。 読み返しても良いと思う、ええ本です。 --- ### 【観た映画】 逃走車 - 2013-08-11 URL: https://remoteroom.jp/medialog/2013-08-11_movie-b00cadbf6s/ 最後まで続く、車載カメラ的アングル。 やや強引なもっていきかたであるから、主人公に入り込んで観ることが楽しむ秘訣だ。 ---