🪄 ホットスポット安定化の魔法 ― 第五の魔法 ― /D を見逃さない魔法

/D を見逃さない魔法 ― 真名を正しく読み取る

魔法シリーズ第五の魔法。今回は短く、しかし実運用ではちゃんと困る地味な呪いの話です。コールサイン ― 言わば交信相手の「真名」 ― を拾う正規表現が、サフィックス付きを読み落としていました。

かかっていた呪い

dvswitch_bot.py がログからコールサインを抜き出して応答に使うのですが、JI2TAB/D のようなサフィックス付きの真名だけ、なぜか反応しない。素の JI2TAB なら難なく拾える。

アマチュア無線では /D(地区移動)、/P(ポータブル)、/M(モービル)といったサフィックスは日常的に使われます。これを読み落とすのは実用上けっこう痛い呪いです。

呪いを追う

正規表現を覗くと、英数字は対象にしていても /(スラッシュ)が文字クラスに入っていなかっただけでした。だから真名の本体は一致しても、/D の手前でマッチが切れる、あるいはパターン全体が外れる。

# 旧き呪文:英数字しか見ていない
pattern = re.compile(r"[A-Z0-9]{1,3}[0-9][A-Z]{1,4}")
#   → "JI2TAB" は拾えるが "JI2TAB/D" のサフィックスは範囲外

呪いの正体

サフィックスという「現場では当たり前」の真名を、呪文が想定していなかった。 自分が普段 /D を使うのに、検証用の真名が素のものばかりだったのが盲点でした。

解呪の魔法

文字クラスに / を一画加えるだけです。

# 新しき魔法:スラッシュを許容する
pattern = re.compile(r"[A-Z0-9]{1,3}[0-9][A-Z]{1,4}(?:/[A-Z0-9]+)?")
#   → "JI2TAB" も "JI2TAB/D" も読み取れる

応答音声を編む側のかな変換テーブル CHAR_TO_KANA には、もともと / が登録済みだったので、読み取りさえ通れば読み上げ側は問題なし。修正は実質一箇所で済みました。

魔導書に記す

検証用の真名には「自分が現場で実際に使う形」を入れる。 正規表現の呪いは、たいてい「想定していなかった正常な入力」で発動します。理屈の上で正しい呪文でも、現実の運用パターンを網羅していなければ取りこぼす。/D を自分で使っているのに見落としていたのは、いい戒めになりました。

次の魔法は、daemon が一瞬の呪いで静かに倒れていた話です。


📝 執筆:JJ2TAB(尾張旭 DMR デジピーター 管理人)
🏛 JJ2YYK あいちデジタルコミュニケーションハムクラブ

◀ 前へ:第四の魔法 ― 分身の魔法🪄 魔法シリーズ一覧 | 次へ:第六の魔法 ― 不死の魔法

JJ2YYK
  • JJ2YYK

2件のピンバック

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です