人生シーケンスブレイク

シーケンスブレイク(Sequence breaking、シークエンスブレイクとも)とは、テレビゲームにおいて開発が想定している攻略ルートを逸脱し、ショートカットする行為のことである。

Ubuntuで通知などのポップアップもダークテーマにする

外観はダークテーマ(Yaru-dark)なのに、通知やポップアップはデフォルトテーマのままだったのをそろそろ直すかと思って一念発起した。

f:id:ShineSpark:20210826060420p:plain f:id:ShineSpark:20210826060017p:plain f:id:ShineSpark:20210826055958p:plain

この状態。

環境

下準備

Gnomeの外観設定を編集するために、 gnome-tweak-tool と、gnome-shell-extensionsをインストールする。

$ sudo apt install gnome-tweak-tool
$ sudo apt install gnome-shell-extensions

設定

Tweaksを起動する。

# 起動
gnome-tweaks

初期状態では、Appearance > Shell が変更不可能になっている。

f:id:ShineSpark:20210826061547p:plain

Extensions > User themes の項を探して有効にする。

f:id:ShineSpark:20210826061759p:plain

Tweaksを再起動すると Appearance > Shell が変更可能になっているので、 Yaru-dark に設定変更する。

f:id:ShineSpark:20210826061923p:plain

すると、通知などのポップアップもダークテーマが適用される。

統一感が出て良くなった。

f:id:ShineSpark:20210826062054p:plain

参考

Ubuntuでコマンド終了時に通知を出す

事の発端

シェルで実行に長時間掛かる処理などを実行した時に、カンタンに実行終了を通知で把握できるようにしたかった。

notify-send を利用して手軽にと思い、 下記のような関数によるコマンド実行なども試してみたが、

zenn.dev

関数内でコマンド実行された場合にはコマンド内のエイリアスが展開されず意図通りに実行できなかったり、Y/n などのプロンプト入力を求められた際には失敗など、今まで何気なく叩いていたコマンドに付けるだけで実現できるようなものではなく、最終的に断念した。

xargsやパイプなどでの実現も試みたが、xargsでも(できないこともないが)エイリアスを利用するのが難しく、もっと手軽な方法がないかと試行錯誤してみた。

コマンド終了時に通知を出す方法

下記のような関数を.zshrcに書いて、

function n() {
  if [ $? -eq 0 ]; then
    notify-send -u normal "Finished."
  else
    notify-send -u critical "Error occurred."
  fi
}
$ <長い処理時間のコマンド>;n

でOK.

試しに sleep 10;n した結果がこちら。

f:id:ShineSpark:20210826063607p:plain

f:id:ShineSpark:20210826063632p:plain

前の処理が失敗したら通知内容が(最低限だが)失敗したことが分かる。

f:id:ShineSpark:20210826063808p:plain

この方法であれば、 通常のコマンド記述後に ;n とタイプするだけでよく、プロンプトが表示されたとしても問題がない。

今までのターミナル生活にほぼ変わらない形で組み込める。

最終的には実行したコマンドや標準出力結果も通知上に出したいのだが、当初の目的はこれで達成できるため、当面はこれで運用する。

Vimで無駄に改行が入ったテキストの連結を繰り返し行いたい

やりたいこと

ログをコピペした時に無駄に余計な改行が入っちゃった時の改行を連結させて、いい感じに整形したい。

4J とかで連結する作業をもっと楽にしたい。

As-Is

[Error]
2021-08-23 11:10:17
localhost
awesome error message.
[Info]
2021-08-23 11:10:17
localhost
awesome info message.

To-Be

[Error] 2021-08-23 11:10:17 localhost awesome error message.
[Info] 2021-08-23 11:10:17 localhost awesome info message.

マクロを使った解法

4J で 4行を連結させて、 j で次行にカーソル移動を複数回繰り返せば実現できる。

Vimのマクロ機能の利用の仕方

Vimのマクロ機能の使い方はこんな感じ。

qa: aレジスタに記録開始

q: 記録終了

@a: aレジスタに記録したマクロの実行

a以外の違うレジスタ {0-9a-zA-Z"} に記録したい時には、 q1 などとしてもよい。

実践

こんな感じで登録して実行したらできた。

f:id:ShineSpark:20210823140040p:plain

[Error] 2021-08-23 11:10:17 localhost awesome error message.
[Info] 2021-08-23 11:10:17 localhost awesome info message.

レコーディングダイエット効率化のために、体重計をWithings Body+に乗り換えた

この度レコーディングダイエットを効率化するために、元々使っていたオムロンカラダスキャンからBody+に乗り換えた。

当時カラダスキャンを選んだキッカケ

ちょうどレコーディングダイエットを始めようとした時に、体重計/体組成計を買い換えようと一度調べた。

この時は、自分だけではなく妻も体重計を使うので妻にとって謎のメーカーのWithingsやfitbitの体重計ではなく、国内メーカーのものを選ぶことにした。

国内メーカーはタニタオムロンの2強だったのだが、iPhoneのヘルスケアアプリとの連携を考えて各社の体重計アプリを実際にインストールし、UIや連携可能なデータを調べてみた。

ヘルスプラネット  健康管理アプリ

ヘルスプラネット 健康管理アプリ

  • TANITA HEALTH LINK, INC.
  • ヘルスケア/フィットネス
  • 無料
apps.apple.com
OMRON connect

OMRON connect

  • OMRON HEALTHCARE Co., Ltd.
  • ヘルスケア/フィットネス
  • 無料
apps.apple.com

この時に試してみた感想は、

  • タニタのアプリ

    • とにかくレビューが悪い
    • 連携できるデータが体重と体脂肪率のみ
      • ヘルスケアアプリで統合的に確認できるデータが少ない
      • 将来的に乗り換えた時にデータを失う
  • オムロンのアプリ

    • タニタに比べレビューが良い
    • 連携できるデータはタニタと大して変わらない

のような感想だった。

個人的にはハードウェアとしての体重計には各社ともにそれ程大差無いだろうと捉えていて、それよりはスマホ上でぽちぽちレコーディングダイエットの摂取カロリーや、トラッキングでの消費カロリーなどとの比較をしたくて、アプリの出来が良さそうなオムロンカラダスキャンを購入することにした。

カラダスキャンを辞めたキッカケ

ということで、カラダスキャンを買って1年程利用していたのだが、こんな不満が出てきた。

アプリと連携するのが面倒

体重を測った後に、スマホと連携するにはBluetooth接続で同期する必要があるのだが、Android / iOSともにどうも連携が上手く行かないことが多い。Pixel5にiPhone12でOSは最新。

バックグラウンドでの同期が上手く行かないことが多いので、結局手動で同期するのだが、都度体重計のBluetoothボタンを押して同期する必要がでたり、そもそもペアリング出来ているはずなのに、手動同期を試みてもできない時も多く、初期化して再度ペアリングし直したりすることが多かった。

だんだん面倒になってきた。

やっぱりアプリが使いづらい

アプリを使っていると時々こんな画面が出てくる。

f:id:ShineSpark:20210819065008p:plain

スキップもできないので更新せざるを得ないのだが、ユーザーとしては体重を見たくてアプリをタップするわけなので、不定期にこんな画面を出されてもストレスしかない。勝手にバックグラウンドでやってくれないかな。

ということで連携頻度が落ちてくるのだが、アプリ上の最新の計測データから期間が空いてくると段々データの色が薄くなってくる。

f:id:ShineSpark:20210819065001p:plain

本来はこの位の濃さ

f:id:ShineSpark:20210819065739p:plain

早く新しく体重を測りましょうとのことだが、アプリ連携がしづらいがために同期頻度が落ちてきた結果なので、このUXは見辛くイライラするだけだった。

ということでBody+に乗り換えた

Bluetooth同期が面倒だということが分かったので、Bluetooth同期不要な体重計に乗り換えることにした。

元々 Withings のスマートウォッチを利用していたこともあり、アプリのUIやヘルスケアアプリとの連携の良さは知っていたのでBody+に乗り換えることにした。

こちらは、体重計が直接Wi-Fiに接続して記録を送信するタイプなので、家庭内に無線LAN環境があればいちいちスマホアプリを立ち上げて同期したり、今までのように手動同期する必要がない。

また、このタイミングで活動量などをトラッキングしているスマートウォッチを最新のWithingsのものにしたので、活動量などのデータ連携で困ることもないのでこちらにした。

Withingsのアプリの使いやすさ

2013年から実は使っていて、ノキアに買収された直後にUIも大幅変更があったりといろいろあったが、安定して使いやすい。

Withings Health Mate

Withings Health Mate

  • Withings
  • ヘルスケア/フィットネス
  • 無料
apps.apple.com

連携できるデータ項目数も多い。めちゃくちゃある。

f:id:ShineSpark:20210819071114p:plainf:id:ShineSpark:20210819071125p:plain

参考までにオムロンのアプリの連携可能なデータの項目。3種類しかない。

f:id:ShineSpark:20210819071120p:plain

アプリも見やすいし使いやすい。最高。 f:id:ShineSpark:20210819070750p:plain f:id:ShineSpark:20210819070747p:plain

オムロンのアプリとかで正常に計測できなかった不正データを修正するのが難しかったりしたけれども、そういったこともこちらだとやりやすい。

また、もし将来的に別の製品・アプリに乗り換えたとしてもiOSのヘルスケアの方にデータがあるのでデータを失う心配がなくて安心である。

しかもWeb版もあるよ。

f:id:ShineSpark:20210819071920p:plain

Withings Healthmate

f:id:ShineSpark:20210819104026p:plain

乗り換えて数ヶ月経った感想

ということで、既にWithingsのBody+に乗り換えて4ヶ月位経ったけれど非常に満足している。

データ連携を考えるのであれば、ぜひオススメ!

UbuntuでもCtrl+hでbackspaceにする(その3)

過去に

のように試行錯誤したがChromeのアドレスバー上などで作用しなかったので最終的にxkeysnailで実現した。

github.com

実現方法

README.md通りにインストールしていく。

$ sudo apt install python3-pip
$ sudo pip3 install xkeysnail

sudo権限が必要。

設定ファイルとして、 config.py を任意の場所に作成する。

xkeysnail/config.py at master · mooz/xkeysnail · GitHub を参考にすればよい。 まずは適用されることを確認したかったので、一旦シンプルな内容にした。

# -*- coding: utf-8 -*-

from xkeysnail.transform import *

# define timeout for multipurpose_modmap
define_timeout(1)

define_keymap(None, {
    # Ctrl+h to backspace
    K("C-h"): (K("backspace")),
})

起動

$ sudo xkeysnail config.py

とすれば起動するらしいのだが、 Xlib.error.DisplayConnectionError というエラーが出て起動に失敗した。

python - How to fix error Xlib.error.DisplayConnectionError: Can't connect to display ":0": b'No protocol specified\n' - Stack Overflow によると、 xhost + を叩けばよいらしい。

$ xhost +
$ sudo xkeysnail config.py

██╗  ██╗██╗  ██╗███████╗██╗   ██╗
╚██╗██╔╝██║ ██╔╝██╔════╝╚██╗ ██╔╝
 ╚███╔╝ █████╔╝ █████╗   ╚████╔╝
 ██╔██╗ ██╔═██╗ ██╔══╝    ╚██╔╝
██╔╝ ██╗██║  ██╗███████╗   ██║
╚═╝  ╚═╝╚═╝  ╚═╝╚══════╝   ╚═╝
  ███████╗███╗   ██╗ █████╗ ██╗██╗
  ██╔════╝████╗  ██║██╔══██╗██║██║
  ███████╗██╔██╗ ██║███████║██║██║
  ╚════██║██║╚██╗██║██╔══██║██║██║
  ███████║██║ ╚████║██║  ██║██║███████╗
  ╚══════╝╚═╝  ╚═══╝╚═╝  ╚═╝╚═╝╚══════╝
                             v0.4.0

No keyboard devices specified via (--devices) option.
xkeysnail picks up keyboard-ish devices from the list below:

------------------------------------------------------------------------------------------------------
Device               Name                                Phys
------------------------------------------------------------------------------------------------------
/dev/input/event0    Power Button                        PNP0C0C/button/input0
/dev/input/event1    Power Button                        LNXPWRBN/button/input0
/dev/input/event2    MSI MYSTIC LIGHT                    usb-0000:2a:00.3-5/input0
/dev/input/event3    ZSA Moonlander Mark I               usb-0000:2f:00.3-1/input0
...


Okay, now enable remapping on the following device(s):

できた。

自動起動

$HOMEに.xprofileを作成し、こんな感じに書いた。

if [ -x /usr/local/bin/xkeysnail ]; then
  xhost +
  sudo /usr/local/bin/xkeysnail /home/shinespark/git/dotfiles/ubuntu/xkeysnail/config.py &
fi

再起動したら、至る所でCtrl+hでbackspaceできるようになったことを確認。最高。

自動起動(systemd)

Suspend状態から復帰した時などに効かなくなっていたので、安定性も鑑みてsystemd化した。

/etc/systemd/system/xkeysnails.service に以下のファイルを配置。

[Unit]
Description=Service for xkeysnail

[Service]
Environment=DISPLAY=:0
ExecStart=/usr/local/bin/xkeysnail /home/shinespark/git/dotfiles/ubuntu/xkeysnail/config.py
StandardOutput=null
Restart=always
Type=simple
RestartSec=10

[Install]
WantedBy=graphical.target

.xprofile は下記のように書き換え

if [ -x /usr/local/bin/xkeysnail ]; then
  xhost +SI:localuser:root
fi

サービスを読み込み & 自動起動を有効にする。

sudo systemctl daemon-reload
sudo systemctl enable xkeysnail

後は再起動後に active になっていればOK.

$ sudo systemctl status xkeysnail
● xkeysnail.service - Service for xkeysnail
     Loaded: loaded (/etc/systemd/system/xkeysnail.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-12-17 16:24:22 JST; 5min ago
   Main PID: 9060 (xkeysnail)
      Tasks: 1 (limit: 77014)
     Memory: 14.6M
     CGroup: /system.slice/xkeysnail.service
             └─9060 /usr/bin/python3 /usr/local/bin/xkeysnail /home/shinespark/git/dotfiles/ubuntu/xkeysnail/config.py

12月 17 16:24:22 Linux-Mint systemd[1]: Started Service for xkeysnail.

参考

東京23区に住んでいる場合の、電気・ガス・水道トラブルの時の連絡先

ちょっと前にガス・水道トラブルの連絡先についてTogetterで話題になっていた。

togetter.com

自分の居住地域での対応について調べてみると、トラブルの内容によっては問い合わせ先が異なったり、Webページを確認した方が確実なこともあるのでブログに纏めてみることにした。

居住地・契約形態

  • 東京23区在住
  • 電気: 東京ガス、ずっとも電気1
  • ガス: 東京ガス、一般契約
  • 水道: 東京都水道局

電気

基本は以下のURLの内容に従うでOK。

home.tokyo-gas.co.jp

「ずっとも電気」を利用していれば無料で利用可能。

一次対応の出張費・60分以内の原因調査費が無料。 24時間受付のWebまたは電話で申し込める。

補足

ずっとも電気の後続プランである「基本プラン」は上記サポートの対象外。

その際には、下記のURLの内容に従う。 home.tokyo-gas.co.jp

停電の内容によっては、東京電力パワーグリッド株式会社に連絡するケースもあり得る。

ガス

基本は以下のURLの内容に従うでOK。

home.tokyo-gas.co.jp

Webからの24時間受付の修理申し込みや、最寄りの東京ガスライフバルの検索ができる。
緊急の場合には、東京ガスお客さまセンターや、ガス漏れ通報専用電話も記載されており、FAQも充実しているのでガス周りで困ったらここを見る。

ちなみに最寄りのサービス窓口の連絡先は、myTOKYOGASにログインした状態で「お買い物・お手続き」の画面でも確認可能。

https://members.tokyo-gas.co.jp/information/tetsuzuki.html

水道

基本は以下のURLの内容に従うでOK。

www.waterworks.metro.tokyo.lg.jp

補足

例えば漏水一つにとっても、漏水箇所によっては連絡先が異なる。

f:id:ShineSpark:20210624071654p:plain
水道設備の維持管理1
f:id:ShineSpark:20210624071752p:plain
水道設備の維持管理2
https://www.waterworks.metro.tokyo.lg.jp/kurashi/trouble/ より引用。

状況によって対応が変わるため、先程のURLのトラブル内容に応じて対応を変えるのが正解。

iPhoneの連絡帳にそれぞれのURLと緊急電話番号を登録しておいたので何かあればそちらに連絡できる状態にしておいた。 調べたらやはり水のトラブル〜なマグネットの業者に頼む必要はなさそうとのことで安心。

メッシュWi-Fi を実現するのにOrbiが良かった

年末にメッシュWi-Fiにしたくて Orbi を購入したのでその記録。

www.jp.netgear.com

自宅環境

  • マンション
  • NURO光
  • 玄関に光コンセント・ONUがあるタイプ
  • 各部屋にLANポート内蔵の情報コンセント

メッシュ化前のWi-Fi環境

何故メッシュWi-Fiにしたのか

自宅のネットワーク環境は、マンションによくあるタイプの玄関の下駄箱の中に光コンセントがあり、そこにONUとルータを設置して、各部屋の情報コンセントからLANケーブルを繋ぐ環境。

いままでは、玄関に無線ルータとしてAir Mac Extremeを1つ、リビングにもAir Mac Extremeをもう1つという環境で利用していた。特に細かい設定をせずとも同じSSIDにすることで上手くローミングできていたけれども、古い方のルータがもう10年前のもののため802.11acに対応しておらず、Appleが無線ルータの新製品を出すことももうないので買い換えることにした。

そこでAterm WX6000HPを買ったものの、今度はちょうど玄関とリビングの中間辺りのところで両方のWi-Fiを拾ってしまい切り替えが上手くいかなくなってしまった。 私のiPhoneでは比較的上手くいくものの、妻のAndroidスマホではアクセスポイントを跨ぐ度に手動でWi-Fiを再接続する必要があるとのことでストレスになっていた。

電波強度の調整も試みたが、デバイスによっては掴み続けてしまうこともあり完全解決するのが難しく、その内ルータについて調べてる内にメッシュWi-Fiにしたくなったので、この際もう一度買い直すことにした。

機種選定

機種選定にあたってはこんなことを考えた。

自作PCマザーボードが11ax対応なのでWi-Fi 6対応のルータにすることにした。

メッシュWi-Fiでは、ルータとサテライト間のネットワークを無線で接続するもの(Wi-Fiバックホール)と、有線で接続するもの(イーサネットバックホール)があるのだが、無線で接続する場合にはルータとサテライト間の接続専用の帯域を利用することになる一方で、有線ではその帯域もクライアントとの接続リソースとして割けるので、イーサネットバックホール対応のルータにすることにした。

また、ハイスペックなルータであれば不要かも知れないが、以前夫婦でリビングでスプラトゥーン2をした際にAirMac Extreme横にSwitchを置いているにも関わらず無線では通信切断があり、有線にしたら解消したことがあったので、サテライトルータにもLANポートがあるもので探すことにした。

以下は探した当時のメモ。

Aterm WG2600HP4

Wi-Fi 5にしか対応しておらず、イーサネットバックホールに対応している確証もなかった。

また検討当時、Aterm WX6000HPを利用していたのだが、メッシュWi-Fiにする場合にはメッシュWi-Fi非対応のWX6000HPも買い換える必要があるのだが、特に管理画面やアプリの使い勝手が良かったわけでもなく、Atermをリピートする強い理由もなかったので違う選択肢も考えることにした。

TP-LINK

福岡大学のNTPサーバへDoS攻撃並のアクセスをしていることがあったので選択肢から外した

Nighthawk MK62

サテライトにLANポートが1つしかついておらず、イーサネットバックホールしたらクライアントと有線で接続できる余地がなくなってしまうので見送りした。

サイズも小さく、値段的にもお手頃でよかったので有線接続に強いこだわりがなければオススメ。

Google Nest Wifi

Orbiを買った後に存在を思い出した。

イーサネットバックホールもLANポートも無いものの、Googleアシスタントが付いていてGoogle Homeアプリで管理できるのでちょっと興味が湧いた。

Orbi

最終的に Orbi AX6000 RBK852 にした。

こちらの製品は

をすべて満たしており、

価格としてはやや高めではあったが、以前から子供の見守りカメラとしてNETGEARのArloを利用していたこともあり、

信頼できそうなのでこちらの製品の購入を決めた。

単体では

設置

f:id:ShineSpark:20210109040047p:plain

Air Mac Extremeよりかなり大きい。

が、テレビ台の横に放置するのでよしとした。

f:id:ShineSpark:20201222001846p:plain

アプリはAtermのものに比べると使いやすく、AirMacユーティリティよりも多機能

f:id:ShineSpark:20201222001850p:plain

アプリ内蔵のスピードテスト結果。

f:id:ShineSpark:20201222001855p:plain

fast.comのスピードテスト結果。サテライトに接続していてもかなり速い。

f:id:ShineSpark:20201221230648j:plain

ヒートマップで確認。いいね。

手動でWi-Fiを接続し直す必要があった問題が解決し、あまりWi-Fi環境について興味のなかった妻でも喜んでいたので非常に満足している。

メッシュWi-Fiを検討している人はOrbiもぜひ検討してみては。

クライアントにLANポートが少なくてもよければこちらもオススメ。