aptX Adaptive LL 対応 Bluetooth 機器で PC ゲームに使える完全ワイヤレスなオーディオ環境構築

PC でゲームをしたり音楽を聞いたりする際に有線のイヤホンを使用していたが、 ケーブルが煩わしく感じていたのでゲームに使える完全ワイヤレスイヤホンを探すことにした。

aptX LL と aptX Adaptive

ある程度汎用的に使える Bluetooth 接続のものにしたいが、 Bluetooth のプロファイル A2DP で標準のコーデック SBC は音声の遅延が大きい。 ゲームに向いた低遅延のコーデックについて調べたところ、 aptX LL (Low Latency) と aptX Adaptive という規格があるらしい。

aptX LL は名前通り低遅延なコーデック、 aptX Adaptive はローレイテンシー (LL) モードとハイクオリティ (HQ) モードを切替可能。 aptX Adaptive の方が新しいコーデックだが、 aptX Adaptive のローレイテンシーモードよりも aptX LL の方が規格上の遅延は少ない。

よって、aptX LL 対応の機器を買おうとネット上で調べたり某家電量販店で探したが、 aptX LL 対応の機器が少なくいいものが見つからなかった。

Creative BT-W5 と EarFun Air Pro 3 を購入

結局 aptX Adaptive 対応の USB アダプタ Creative BT-W5 と 完全ワイヤレスイヤホン EarFun Air Pro 3 を購入した。

BT-W5 は発売時の記事が印象に残っていたのと、 Sound Blaster 等 PC 用サウンド系パーツの老舗メーカーという安心感から選択。

クリエイティブストアのみでの販売なので、上のリンクは旧機種の BT-W4 にしている。 BT-W5 との違いは aptX HD、24bit/96kHz への対応の有無なので低遅延が目的ならどちらでもいい。

EarFun Air Pro 3 を選んだ理由は、1万円以下の完全ワイヤレスイヤホンで評判が良かったため。

迫力サウンドと強力NCで8,990円! 信じられない超コスパTWS「EarFun Air Pro 3」 - AV Watch[Sponsored]

遅延時間の確認

遅延時間の確認には Latency Tester を使用した。 Web サイト上で音に合わせてマウスをクリックするかスペースキーを押すことで簡易的に遅延時間を確認できる。

また、確認に使用した機器は以下の通り。

アダプタ

アダプタ 対応コーデック
サンワサプライ MM-BTUD43 SBC, aptX
Creative BT-W5 SBC, aptX, aptX HD, aptX Adaptive

ヘッドホン / イヤホン

ヘッドホン / イヤホン 対応コーデック
EarFun Air Pro 3 SBC, AAC, aptX Adaptive
Sony MDR-ZX770BN SBC, AAC, aptX
FOSTEX TM2C SBC, AAC, aptX

確認結果

アダプタ ヘッドホン / イヤホン コーデック 遅延時間
Creative BT-W5 EarFun Air Pro 3 aptX Adaptive LL 100 ms
サンワサプライ MM-BTUD43 Sony MDR-ZX770BN aptX 160 ms
Creative BT-W5 Sony MDR-ZX770BN SBC 200 ms
Creative BT-W5 FOSTEX TM2C aptX 335 ms
Creative BT-W5 EarFun Air Pro 3 aptX Adaptive HQ 350 ms

当然だが Creative BT-W5 と EarFun Air Pro 3 の組み合わせが最も遅延が少ない結果となった。

実際に PSO2 を遊んでみたがアクションゲームで使用するなら特に問題なさそうだった。 音ゲーはやってないからわからない。

問題点

低遅延という点では満足な結果だったが、 それ以外の点でいくつか問題があったので書いておく。

Creative BT-W5

  • PC からはスピーカーとして認識される
  • よって Windows 標準の Bluetooth 設定画面からは機器との接続/切断ができず、 Creative 独自のアプリで操作する必要がある
  • Windows 標準の Bluetooth 接続だと機器が切断されたら自動で別のスピーカー等へ音声出力が切り替わるが、それも行われないため手動で切り替えが必要
  • 音量が大きいため Windows の音量設定を 1 ~ 5% あたりまで下げる必要があり細かい音量調整が効かない

EarFun Air Pro 3

  • 付属のイヤーピースが最大のものでも私には小さくはずれやすい
  • タッチ操作のため誤タッチにより意図しない操作が発生する場合がある

参考サイト

IFTTT の Twitter 連携が有料化したので Python と GitHub Actions で RSS をツイートする

IFTTT で動かしてた某ゲーム公式サイトの RSS をツイートするやつが Twitter 連携の有料化によって動かなくなったため、 GitHub Actions で自作の Python スクリプトを動かして代用することにした。

コードは以下のリポジトリにある。

なぜ GitHub Actions なのか?

  1. Public リポジトリなら無料で利用可能
  2. 定期的な実行が可能
  3. データの永続化に近いことが可能
  4. GitHub Actions の利用経験がなかったため学習用として

RSS 内のどこまでツイートしたかを判別するためその情報を保存しておきたいが、 IFTTT を利用する前に調べた際は 無料で利用可能でデータの永続化が可能なサービスが見つからなかった記憶がある。

今回いくつかの候補の中から GitHub Actions について調べていたところ、 Github Actionsのcacheをデータの永続化(?)に使う - MJHD を見て cache が永続化に利用できると知り GitHub Actions を利用することとした。

Github Actions の cache

公式のドキュメント: 依存関係をキャッシュしてワークフローのスピードを上げる - GitHub Docs

ファイルをキャッシュとして保存し、次回以降のワークフロー実行時に利用できる。

本来はビルドに必要なライブラリなど依存関係を保持しておき ワークフローの実行を高速化するためのものだが、 データの永続化に利用することも可能。

ただし、7日間以上アクセスされていないキャッシュは削除される。容量は最大10 GB。

キャッシュの利用方法

キャッシュを上書きすることはできないため、 保存時は常に新しいキャッシュを作成し、 読込時は最新のものを取得する必要がある。

以下のように key に新しいキーを指定することで新しいキャッシュを作成、 restore-keys に接頭辞のみ指定すると最新のものが取得できる。

- name: actions/cache用keyの生成
  run: echo "CACHE_TIMESTAMP=$(date +%s)" >> "$GITHUB_ENV"

- uses: actions/cache@v3
  id: tweeted
  with:
    path: ./tweeted
    key: tweeted-$
    restore-keys: tweeted-

古いキャッシュの削除

前述の通り放置していても古いキャッシュは7日で消えるが、 GitHub Actions の Cache 管理(2023 年 1 月の場合) を参考に、1日経ったキャッシュはワークフロー内で削除することとした。

GitHub CLI の extension (gh-actions-cache) を使用している。

- name: Cleanup cache
  run: |
    gh extension install actions/gh-actions-cache

    # キャッシュがない場合にエラーとなって停止するのを防ぐ
    set +e

    # 作成から1日以上経っているキャッシュを削除
    for KEY in $(gh actions-cache list -R "${REPO}" -B "${BRANCH}" --key $ --order asc --sort created-at | grep -P 'days? ago' | cut -f 1)
    do
        echo "Deleting ${KEY}"
        gh actions-cache delete "${KEY}" -R "${REPO}" -B "${BRANCH}" --confirm
    done
  env:
    GH_TOKEN: $
    REPO: $
    BRANCH: $

GitHub Actions での定期実行に関する注意点

以下のように schedule で10分毎に実行する設定としたが、 公式のドキュメント にも書かれている通り、負荷が高い場合は遅延したりそもそも実行されない場合がある。

on:
  schedule:
    - cron: '3-59/10 * * * *'

実際半日で72回ほど動くはずが53回しか動いていなかった。 確実に動かしたいものは避けたほうがよい。

Stable Diffusion を Windows 10 へインストールする方法と使い方、画像生成のコツ

Stable Diffusion を Windows 10 のローカル環境へインストールする方法と使い方、 1ヶ月ほど使ってみて分かった画像生成のコツをメモしておく。

実行環境

ドライバー等は最新のものを使用。 あくまでも私が実行した環境のためこのスペックを満たしている必要はない。

Stable Diffusion web UI は VRAM 4 GB 以上をサポートしているが、 GPU と VRAM の容量は画像生成速度と解像度に影響するため高性能なものが望ましい。

また、Stable Diffusion は NVIDIA 製 GPU で動かす前提となっている。 AMD や Intel 製 GPU に対応させたものもあるようだが以下の手順では使えない。

CUDA Toolkit のインストール

Stable Diffusion に限らず、NVIDIA の GPU で機械学習やディープラーニングを行うには CUDA という並列計算のライブラリが必要。

NVIDIA の公式サイト から CUDA Toolkit をダウンロードしインストールする。

Python, Git のインストール

Stable Diffusion web UI (以下 web UI と略す) を利用するのが楽なので、 これを動かすのに必要な Python, Git をインストールする。

Python のインストール

3.11 系では web UI が動作しないため必ず 3.10 系をインストールすること。

  1. Python の公式サイト から Python 3.10.x をダウンロードする。
    現在は 3.10.10 が最新のため「Stable Releases」の「Python 3.10.10 - Feb. 8, 2023」にある 「Windows installer (64-bit)」をクリックしてダウンロードすればよい。
  2. ダウンロードしたファイルをダブルクリックしてインストーラーを起動する。
  3. 「Add python.exe to PATH」にチェックを入れる。
  4. 「Install Now」をクリックしインストールする。

Git のインストール

  1. Git の公式サイト から 64-bit Git for Windows Setup をダウンロードする。
  2. ダウンロードしたファイルをダブルクリックしてインストーラーを起動する。
  3. 英語で色々聞かれるが全部「Next」をクリックして進める。
  4. 最後に「Install」すればとりあえず使える状態になる。

Stable Diffusion web UI のインストール

  1. Stable Diffusion web UI のページ から「Code > Download ZIP」でファイルをダウンロードする。
    Git を使える人は git clone してもよい。
  2. ダウンロードした ZIP ファイルを展開する。
    展開したフォルダがそのままインストール先となるため、インストールしたいフォルダに展開すればよい。
  3. 展開したフォルダにある「webui-user.bat」を右クリックしてプロパティをクリックする。
  4. プロパティ下部「セキュリティ」の右にある「許可する」にチェックを入れて OK をクリックする。
  5. 「webui-user.bat」をダブルクリックして起動する。 (管理者ではない一般ユーザーで実行してよい)
  6. 必要なファイルが自動でダウンロード・インストールされるため完了するまで待つ。
  7. インストールと起動が完了したら Running on local URL: http://127.0.0.1:7860 が表示される。
  8. ブラウザで http://127.0.0.1:7860 を開く。

web UI 起動時にエラーが発生する場合

RuntimeError: Cannot add middleware after an application has started.

web UI のバージョンによっては webui-user.bat を起動後に以下のエラーが表示される。

RuntimeError: Cannot add middleware after an application has started

この場合はコマンドプロンプトで以下を実行してから再度 webui-user.bat を起動する。

cd [web UIのインストール先パス]
venv\Scripts\activate.bat
pip install --upgrade fastapi==0.90.1

loading stable diffusion model: OutOfMemoryError や torch.cuda.OutOfMemoryError: CUDA out of memory.

VRAM が不足しているときに表示される。
webui-user.bat を起動する前にタスクマネージャーを起動しておき、 「パフォーマンス」タブで GPU の「専用 GPU メモリ使用量」が 100% になっていないか確認するとよい。

VRAM が不足している場合は --lowvram オプションを指定することで起動できる場合がある。
「webui-user.bat」をテキストエディタで開き

set COMMANDLINE_ARGS=

となっている部分を以下のように変更し保存する。

set COMMANDLINE_ARGS=--lowvram

テキストからの画像生成 (txt2img)

web UI の URL を開くと txt2img の画面となる。 txt2img は文章、単語などの言葉から画像を生成できる。

Prompt, Negative prompt

Prompt へ描かせたいもの、Negative prompt へ描かせたくないものを英語で入力し、 「Generate」をクリックすれば画像が生成される。 複数の要素を指定したい場合はカンマ (,) 区切りで入力する。

定番の「馬に乗った宇宙飛行士の写真」を生成させるなら Prompt へ以下を入力すればよい。

a photograph of an astronaut riding a horse

() または [] で言葉を囲むことで強調/抑制できる。

  • (言葉): 1.1倍強調
  • ((言葉)): 1.21倍強調 (= 1.1×1.1)
  • [言葉]: 1.1倍抑制
  • (言葉:1.5): 1.5倍強調

参考: Attention/emphasis

Generate / Interrupt / Skip

前述の通り、「Generate」をクリックすると画像の生成が開始される。

生成が始まると Interrupt / Skip ボタンに変化する。 Interrupt で生成を中断し終了する。 Skip は後述の Batch で複数枚生成している場合に、現在生成しているものをスキップできる。

生成画像の出力先

生成後に画像下のフォルダボタンをクリックすると、出力先の outputs\txt2img-images フォルダが開かれる。

Save ボタンをクリックすると log\images フォルダにコピーが保存される。

txt2img の設定項目

Width, Height

生成する画像の幅と高さ。

モデルにもよるが、デフォルトの 512 x 512 が一番うまく画像を生成できる。 これでは小さいため解像度を上げたくなるが、 解像度を上げると破綻した画像が生成されやすくなる。

Width, Height はあまり上げずに下記の Hires. fix や 「Extras」タブにある拡大機能、画像からの画像生成 (img2img) がオススメ。

16:9 の画像を生成したいなら 896 x 512 を指定するとよい。

Batch count, Batch size

Batch size が1回で生成する枚数で、Batch count が何回実行するか。 最終的に Batch size × Batch count の枚数が生成される。

Batch size を増やすと VRAM の必要量が増える。

Seed

乱数の種。 Seed の値とモデル、プロンプト等の生成条件が同じであれば毎回同じ画像が生成される。

サイコロアイコンをクリックするか -1 を指定すればランダムに、 リサイクルアイコンをクリックすると前回と同じ Seed がセットされる。

基本的には -1 を指定し画像をランダム生成するが、 プロンプトやサンプリングの影響を比較したい場合には値を固定する。

右にある Extra にチェックを入れると追加の UI が表示される。 Seed を固定し Variation strength を上げることで、 大まかな構図はそのままに一部が変わった画像を生成できる。 全体の雰囲気はいいけど一部を修正したいときに使える。

Sampling method, Sampling steps

Sampling steps を上げると精緻な絵になるが生成に時間がかかる。 上げすぎてもあまり違いがわからない。デフォルトの 20 から 50 くらいがよさそう。

Sampling method の違いはよくわからない。 「DPM++ SDE karras」を選ぶとデフォルトの「Euler a」より ステップ数が少なくてもいい絵ができる気がする。

CFG Scale

プロンプトに対してどの程度従うかを設定できるらしい。 値を大きくすればプロンプトに沿った画像が生成される反面、破綻した画像が生成されやすくなるとか。

デフォルトの 7 のままでよさそう。

参考: 画像生成AI「Stable Diffusion」でどれぐらいプロンプト・呪文の指示に従うかを決める「CFG(classifier-free guidance)」とは一体何なのか? - GIGAZINE

Restore faces, Tiling

Restore faces は人間の顔を生成した際に補正してくれる機能だが、 二次元のアニメ調イラストではキャラの目の中に人間の目が描かれて気持ち悪くなるのでオフ推奨。

Tiling はタイルのように並べても継ぎ目のないシームレスな画像を生成する。 3D のテクスチャを作成するのに使えるらしい。

Hires. fix

生成した画像を拡大して高解像度化してくれるがその分時間がかかる。 気に入ったものだけをあとから拡大したほうが効率がよいのでオフ推奨。

2023/04/10 追記:Hires. fix の Upscaler で Latent 系を選択すると細部の描き込みが追加される。 単純な拡大機能である「Extras」タブと違い、イラストが改変されるため元のイラストと印象が異なってくる。

Hires steps

おそらく Sampling steps と似たようなものだと思われるが上げてもあまり違いがわからない。 デフォルトの 0 では Sampling steps と同じ値が使用される。

Denoising strength

下げると元画像に近いがぼんやりとした画像、上げると元画像と違う画像になっていく。

デフォルトの 0.7 では大きく変わる場合があるため、元画像に似せたいなら 0.5 ~ 0.6 くらいへ下げるとよい。

モデルのダウンロードと追加

web UI の初期状態でもモデルがインストールされるが、 画風は実写的でアニメ調の二次元イラストを生成するには向いていない。 モデルと呼ばれるファイルを追加することで画風を変えることができる。

モデルのダウンロード

モデルは Hugging FaceCivitai などで探してダウンロードする。

拡張子が .ckpt または .safetensor のものをダウンロードすればよい。 両方用意されている場合は .safetensor のほうが安全性が高いためそちらをダウンロードする。

参考: AIモデルのsafetensors形式とは何者か?ckptと比較しつつ解説する | 経済的生活日誌

モデルのファイル名に付いてる pruned や fp16 って何?

画像生成に影響の少ない部分を削って軽量化したもの。 pruned や fp16 が用意されている場合はそちらをダウンロードするとよい。

TensorFlow のサイト によると「NVIDIA GPU は float32 よりも float16 で速く演算を実行でき」るらしい。 (float16 = fp16)

モデルの追加方法

  1. モデルをダウンロードする。
  2. ダウンロードしたモデルを web UI のフォルダにある models\Stable-diffusion フォルダへ入れる。
  3. web UI 画面左上にある「Stable Diffusion checkpoint」右の更新ボタンを押す。
  4. リストでモデルが選択できるようになる。

オススメの二次元イラスト系モデル

以下の2つのモデルはどちらも美しいイラストが生成できるためオススメ。

AbyssOrangeMix3 は A1 から A3 と A1B がある。 A1 がアニメ調、A2が絵画調、A1B と A3 が中間。

アニメ調 ← A1 A1B A3 A2 → 絵画調

どちらのモデルも一緒に VAE (後述) が公開されているのでそちらを利用する。

VAE

同じモデルでも VAE によって色が変わり印象が異なってくる。 AbyssOrangeMix や Anything のように VAE が一緒に公開されているモデルは そちらを利用したほうがよい。

VAE を選択できるようにする

  1. 「Settings」タブをクリック
  2. 左の一覧から「User interface」をクリック
  3. 下から4つ目くらいにある「Quicksettings list」に ,sd_vae を追加する (sd_model_checkpoint,sd_vae になる)
  4. 上部の「Apply settings」をクリック
  5. 「Reload UI」をクリック

VAE の追加方法

  1. VAE をダウンロードする。
  2. ダウンロードした VAE を web UI のフォルダにある models\VAE フォルダへ入れる。
  3. web UI 画面上部にある「SD VAE」右の更新ボタンを押す。
  4. リストで VAE が選択できるようになる。

過去に生成した画像のプロンプト等を確認 (PNG Info)

生成した画像を「PNG Info」タブにある「Source」へ ドラッグアンドドロップすることでプロンプト、モデル、Seed 等を確認できる。

また、「Send to txt2img」等のボタンを押すことで txt2img 等へコピー可能。 過去に生成したものと似た画像を簡単に生成できる。 ただし、モデルと VAE は反映されないので注意。

画像とテキストからの画像生成 (img2img)

「img2img」タブで画像とテキストを元に新たな画像を生成できる。

画像により構図やポーズをある程度制御できるため、 txt2img と比べ出力画像の解像度を高くしても破綻しにくい。 よって、txt2img では解像度低めでランダムに大量生成し、 良いものができたら img2img で高解像度化、細部の修正を行うとよい。

また、txt2img で生成された画像に足りない要素を手で描き加えたあと再生成するといった使い方もできる。 例えば、肌色で直線を描けば腕や足として認識して描き直してくれる。 英語で伝えにくい構図やポーズを描かせるのにも有用。

プロンプト等の設定は txt2img と同じ。 プロンプトなしの画像のみでも生成できるが、プロンプトを入力したほうが当然精度は高い。 txt2img で作成した画像を img2img で高解像度化するのであれば同じプロンプトを指定するとよい。

元画像の指定

元となる画像を「ここに画像をドロップ」と書いてあるところにドラッグアンドドロップするだけ。

Resize mode

Resize mode は元画像と生成画像の縦横比が違う場合の処理を指定できる。

  • Just resize
    元画像の縦横比を無視して生成画像全体に引き伸ばす。
    元画像が 512 x 512、生成画像が 1280 x 960 なら、元画像が横長の 1280 x 960 に引き伸ばされる。
  • Crop and resize
    元画像の縦横比を維持して拡大/縮小し、はみ出た部分は無視する。
    元画像が 512 x 512、生成画像が 1280 x 960 なら、元画像が 1280 x 1280 に引き伸ばされ上下が切れる。
  • Resize and fill
    元画像の縦横比を維持して拡大/縮小し、足りない部分を埋める。
    元画像が 512 x 512、生成画像が 1280 x 960 なら、元画像が 960 x 960 に引き伸ばされ左右の足りない部分は自動生成される。
  • Just resize (latent upscale)
    元画像を高解像度化したあと Just resize と同様の処理を行う。

Denoising strength

下げると元画像に近いがぼんやりとした画像、上げると元画像と違う画像になっていく。

デフォルトの 0.75 では大きく変わる場合があるため、元画像に似せたいなら 0.5 ~ 0.6 くらいへ下げるとよい。

img2img 内のタブ

  • Sketch: img2img とほとんど同じだが、画面上の元画像に対してその場で書き込んで修正が可能。
  • Inpaint: 画像の一部のみを生成する。黒く塗りつぶした部分、または塗りつぶしていない部分を描き直す。
  • Inpaint sketch: 画像の一部のみを生成する。色を塗った部分のみ、その色を反映して描き直す。
  • Inpaint upload: Inpaint と同様だがマスクを別画像で指定できる。
  • Batch: ディレクトリを指定してバッチ処理ができる。

画像からプロンプトを生成 (Interrogate CLIP, Interrogate DeepBooru)

画像を指定したあと「Interrogate CLIP」または「Interrogate DeepBooru」のボタンをクリックすると 画像からプロンプトを生成できる。

「Interrogate DeepBooru」は Danbooru のタグになる。

設定 (Settings)

「Settings」タブで設定が変更できる。 全部説明するとキリがないため個人的に便利だと思う設定を紹介。

Saving images/grids > Images filename pattern

出力するファイル名のパターン。

デフォルトの空欄状態だと同日内での連番と Seed 値になるため、 他の日付のものと同じフォルダに入れたとき順番がバラバラになる。 以下を設定し、直下にある「Add number to filename when saving」のチェックをはずすと、 ファイル名が日付と時刻となるため便利。

[datetime<%Y-%m-%d %H%M%S><+0900>]-[seed]-[model_name]

ファイル名に使用できるタグは「Images filename pattern」という文字にマウスカーソルを合わせると表示される。

[steps], [cfg], [prompt_hash], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [model_name], [prompt_words], [date], [datetime], [datetime<Format>], [datetime<Format><Time Zone>], [job_timestamp]

Saving images/grids > Always save all generated image grids と
User interface > Show grid in results for web

生成した画像を縦横に連結したグリッド画像を生成する設定。

Batch で大量の画像を生成すると、完了後に Interrupt / Skip ボタンが Generate ボタンへ戻るのに時間がかかる。 これはグリッド画像の作成が原因のため、 待ちたくない場合は上記のチェックをはずすと良い。

起動時の引数設定

「webui-user.bat」をテキストエディタで編集することで web UI 起動時の引数を設定できる。

xFormers の導入

xFormers を導入すると画像生成速度が向上しVRAMの使用量も削減される。 ただし、Seed 値を固定しても微妙に異なる画像が生成されるようになるという欠点がある。 欠点より利点が大きいため導入したほうがよい。

導入方法は簡単で、「webui-user.bat」をテキストエディタで開き

set COMMANDLINE_ARGS=

となっている部分を以下のように変更し保存する。

set COMMANDLINE_ARGS=--xformers

保存後の初回起動時に xFormers がインストールされる。

–no-half-vae の指定

VAE を変更して画像を生成しているとまれにエラーが発生し、 エラーを回避するためには --no-half-vae というオプションを利用するよう指示されることがある。 この場合も同様に「webui-user.bat」をテキストエディタで編集すればよい。

--no-half-vae だけを指定するなら

set COMMANDLINE_ARGS=--no-half-vae

xFormers と併用するなら

set COMMANDLINE_ARGS=--xformers --no-half-vae

【2022年】買ってよかったものとか

今年買ってよかったものとか

かみ田先生に雪美とペロを描いてもらった

初っ端から買ったものじゃないですが Skeb でかみ田先生にリクエスト してめちゃくちゃ可愛い雪美とペロを描いていただきました!

かみ田先生に雪美を描いてもらえたら絶対可愛いだろうと以前から思ってたので リクエストを受けていただけて夢が叶った感じです。

ブリヂストン TB1e

電動アシストのクロスバイク。 アシストがあるので 10km くらいまでなら運動不足気味の私でも楽に走れる。

8ヶ月で 600km 以上走りました。たぶん1年でこんなに自転車に乗ったのは初めて。 通勤も駅が遠いので電車に乗るより自転車で行ったほうが早くて楽になりました。

サイクルコンピューター XOSS G

TB1e に乗り始めてから購入。 速度や走行距離、時間が測れる。

某有名自転車アプリだと無課金では停車中も走行時間がカウントされるけど これなら3,000円くらいで実際の走行時間だけが測れる。 スマホアプリと連動すれば走行ルートを Google マップ上に表示したりも可能。

Xbox Elite ワイヤレス コントローラー シリーズ 2

初代エリコンと比べ背面のパドルが小さくなり誤って押すことが減った。 初代エリコンでは手前側2つは誤爆が多くて使い物にならなかったけど シリーズ2ではそれがなくなり4つ全部使えてる。

reWASD でパドルにサブパレット(キーボード)を割り当てたら PSO2 がかなり快適になった。

Dell ドッキングステーション WD15

以前使用していたバッファロー製のドッキングステーションは動作が不安定で 実質電源と HDMI 出力だけにしか使えていなかったので、 会社の PC と同じ Dell 製で相性が良いかと思ったこちらを購入。

電源、HDMI と DisplayPort による2画面出力、USBキーボードとマウスが ケーブル1本で繋がるのは便利。

ベッセル(VESSEL) ボールラチェットドライバー 2200 +2×100

ボールグリップドライバーにラチェット機構がついてて押さえながら回せる。 自転車や PC などのメンテが楽になった。

ピザ焼網

オーブンレンジがあるのにオーブン機能をまったく使ってなかったんで 試しに市販のチルドピザ(石窯工房 とか)を焼いてみたらおいしかった。

しかし皿に乗せて焼くとあまりカリッとした感じにならないんでこちらを購入。 ピザがさらにおいしく焼けるようになった。

私は10インチ用を買ったけど大きすぎたのでたぶん8インチ用でいい。

Ubuntu 22.04 で apt-key add したあと apt-update で Key is stored in legacy trusted.gpg keyring というメッセージが表示される場合の対応方法

結論から言うと、以下のコマンドで鍵を追加すれば良い。

sudo curl -fsSL https://myrepo.example/myrepo.asc -o /etc/apt/keyrings/myrepo.asc

鍵がテキスト形式の場合は拡張子を .asc、バイナリ形式の場合は .gpg にすること。

既に公開鍵を追加済みの場合は apt-key list で下8桁を確認し apt-key del XXXXXXXX で削除する。

解説

Ubuntu 22.04 で apt-key add したあと apt-update すると以下のメッセージが表示される。

Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.

鍵が古い非推奨の場所に保存されているという警告だ。 man apt-key によると

apt-key(8) will last be available in Debian 11 and Ubuntu 22.04.

apt-key は Debian 11 と Ubuntu 22.04 を最後に廃止となるので 鍵の追加方法も変える必要がある。

メッセージ通り DEPRECATION セクションを見ると次のように書かれている。

DEPRECATION

Except for using apt-key del in maintainer scripts, the use of apt-key is deprecated. This section shows how to replace existing use of apt-key.

If your existing use of apt-key add looks like this:

wget -qO- https://myrepo.example/myrepo.asc | sudo apt-key add -

Then you can directly replace this with (though note the recommendation below):

wget -qO- https://myrepo.example/myrepo.asc | sudo tee /etc/apt/trusted.gpg.d/myrepo.asc

Make sure to use the “asc” extension for ASCII armored keys and the “gpg” extension for the binary OpenPGP format (also known as “GPG key public ring”). The binary OpenPGP format works for all apt versions, while the ASCII armored format works for apt version >= 1.4.

Recommended: Instead of placing keys into the /etc/apt/trusted.gpg.d directory, you can place them anywhere on your filesystem by using the Signed-By option in your sources.list and pointing to the filename of the key. See sources.list(5) for details. Since APT 2.4, /etc/apt/keyrings is provided as the recommended location for keys not managed by packages. When using a deb822-style sources.list, and with apt version >= 2.4, the Signed-By option can also be used to include the full ASCII armored keyring directly in the sources.list without an additional file.

以下のような形式で使用している場合は

wget -qO- https://myrepo.example/myrepo.asc | sudo apt-key add -

次のように書き換えればよい。

wget -qO- https://myrepo.example/myrepo.asc | sudo tee /etc/apt/trusted.gpg.d/myrepo.asc

拡張子が .asc のファイルを置けば ASCII armored 形式 (テキスト形式)、 .gpg のファイルを置けばバイナリ形式として処理される。 Ubuntu 22.04 の場合 ASCII armored 形式からバイナリ形式への変換 (gpg --dearmor) は不要らしい。

また、パッケージで管理されていない鍵は /etc/apt/keyrings に置くことが推奨されている。 よって冒頭のコマンドとなる。