Wi-Fi 名を「一握の砂」の短歌にするやつ one-grip-ssid

Wi-Fi の名前を石川啄木「一握の砂」の短歌にするやつを作ってみた。
こんな感じで 1 時間おきにランダムな短歌が設定される。

Docker + Ruby + Mechanize で動いていてソースはこちら。

技術的な詳細など

物理ネットワーク構成

下記図の通り。
自宅の LAN 内で実現していて、
MacBook から定期的にいらなくなった古いルーターにアクセスし、
Wi-Fi 名を変更する処理を実行させている。

ルーターへの日本語 Wi-Fi 名設定

利用しているルーターBuffalo WHR-1166DHP3 という機種。
こいつは、管理画面からは日本語 Wi-Fi の設定を許可してないけど、
ブラウザの開発者ツールやプログラムから直接リクエストを送ることで、
日本語 Wi-Fi 名を設定できるという裏仕様がある。

開発者ツールの場合は、コンソールから
startConfiguration() という関数を呼べばいいんだけど、
今回は自動化したいので Ruby + Mechanize から同様のリクエストを送るようにしている。

どのように Wi-Fi 名に短歌を設定するか

技術的に Wi-FI 名 (= SSID) の文字数上限は 32 バイト。
UTF-8 で日本語は 1 文字 3 バイトなので、1 SSID につきだいたい日本語 10 文字を設定することができる。

Buffalo WHR-1166DHP3 は最大 4 つの SSID を設定可能なので、最大 40 文字の日本語を設定できることになる。
なんか短歌のせられそう。

ただ、複数の SSID に分割して短歌をのせるとき、Wi-Fi 一覧にランダムに表示されるのではダメで、
1 行目 / 2 行目 / 3 行目という順番を保持した状態で表示される必要がある。
これを実現するために、Unicode の不可視文字 (U+200B〜U+200D) を先頭に付加する作戦をとった。
この方法でじっさい iOS 15.5 / iPad OS 15.6 では並び順を制御できることが確認できた。
(残念ながら Mac OS Monetery では制御できなかった。)

この並び順の制御の代償として、不可視文字で 3 バイト使うため、
1 SSID で利用できる日本語の文字は 9 文字にへる。

石川啄木「一握の砂」 の短歌の中には 1 行 9 文字以上使うものも多いので、

  • 3 行とも 9 文字以内におさまっているものは、そのまま設定
  • どれか 1 行が 10 文字以上のものは、半分の位置で 2 行に分割して設定
    • 分割した 2 行目の先頭には全角スペースを入れる
  • 2 行以上 10 文字以上のものは、あきらめて除外

というルールにしてみた。

あと、Wi-Fi 名という性質上、老若男女さまざまな人の目にふれる可能性があるので、
「一握の砂」に割と頻繁に登場する「死」「殺」という漢字を含む短歌もこれまた除外。

この除外処理によって 559 歌が 308 歌にまで減ったが、まぁしゃあない。

そのほか TIPS

まとめ

ずっとあたためていたアイデアをとりあえず形にできたのでほっとした。
日本語 W-Fi 名、というか Unicode Wi-Fi 名たのしいので、
今回つくったのに飽きたらまた別のなにかを設定することにチャレンジしてみたい。
絵文字が設定できるのも確認したので、絵文字で遊ぶのもおもしろそうだな。