2023年新春兎年Nerves/Elixirフォネティックコード

これは [#NervesJP Advent Calendar 2022](https://qiita.com/advent-calendar/2022/nervesjp) の5日目です。昨日は [NISHIUCHI Kazuma](@nishiuchikazuma) さんの [Nerves合同ハンズオンの裏側](https://qiita.com/nishiuchikazuma/items/e92188aee93e6869ad18) でした。

みなさん、まもなくクリスマスですね。クリスマスが過ぎたらすぐに新年です。お祝いの準備をしましょう。

# フォネティックコード
ということで最初は「2023年新春兎年Nerves/Elixirかるた」の予定でした。が、かるただと一文字ごとに文をつくらないとなりません。「あ」なら「アルケミストも歩けばプルリクに思い当たる」とか。これを五十音全部に当てはめるのは大変すぎます。そこで、かるたは諦めてフォネティックコードにすることにしました。それも五十音じゃなくアルファベット26文字のです。

## ルール
フォネティックコードとは、音声通信で明瞭度が悪いときに、一文字一文字を単語にして伝えることで、単語を確実に相手に伝える手法です。`Nerves` なら `N`ovember, `E`cho, `R`omeo, `V`ictor, `E`cho, `S`ierra と単語を並べます。`きくゆた` なら `き`って、`ク`ラブ、`ゆ`みや、`た`ばこ、と伝えます。これの Nerves/Elixir 版を作りましょう。

フォネティックコードの趣旨から考えて、以下を想定しました。
- 1単語からなること。2単語から合成された単語も避ける。（2単語目が紛らわしいので）
  - これで Functional Programming とか VintageNet とかは外れます
  - ただし、すでに発音がひっついて単語として一つになってるのは許します
    - 例：GenServer
- 省略されてできた単語は避ける（アルファベットの音が並ぶだけなので）
  - GPIO とかが該当します
  - ただし、すでに単語として発音が確立されてそうなのは許します（苦肉の策）
    - 例：UART（ユアート）、YAML（ヤムル）

これらの規則を満足するという制約の元、以下（優先度順）の技術に由来のあるものを使うことにしました。


1. Nerves
1. Elixir
1. 組込み
1. コンピュータ

# Nerves/Elixir 版フォネティックコード ver. 0.9
考えてみたのが以下です。満足がいくものではないので ver. 1.0 にはしてません。


|Letter|Code|ボツ|満足度|備考|
|:----------:|:-----------:|:-:|:-:|:-|
|A|Alchemist|~~Atom~~, ~~Application~~, ~~Agent~~|◎|言わずとしれた錬金術師|
|B|BEAM|~~Buildroot~~, ~~Booting~~, ~~Branch~~|◎|Erlangの中間言語|
|C|Compile|~~Concurrent~~, ~~Config~~, ~~Comment~~|◯|もっといいのがありそう|
|D|Device|~~Distribution~~, ~~Defmodule~~, ~~Defun~~|◯|IoTってことでデバイス|
|E|Elixir|~~Enum~~, ~~Erlang~~, ~~Embedded~~|◯|候補多すぎ|
|F|Firmware|~~Functional~~|◯|迷った|
|G|GenServer|~~GPIO~~|◎|みんな大好き GenServer|
|H|Host|~~Hex~~|◯|Nervesでは Host/Target という言い方をします|
|I|Interface|~~I2C~~, ~~IoT~~, ~~IEx~~, ~~Issue~~|◯|Iではじまると別の母音も多い|
|J|José|~~Jit~~|◯|唯一の人名利用|
|K|Kernel||◎|一択|
|L|List|~~Lチカ~~, ~~Logger~~, ~~LiveBook~~, ~~Linux~~|◯|代表的なデータ型|
|M|Module|~~Map~~, ~~Mix~~, ~~Meta-programming~~|◯|Hex 採用すると Mix と紛らわしいかとこちらに|
|N|Nerves|~~Nx~~|◯|事実上の一択|
|O|Overlay|~~OTP~~, ~~Open Source~~|◎|いろんなオーバレイがあります|
|P|Poncho|~~Platform~~, ~~Phoenix~~, ~~Pub/Sub~~, ~~Process~~, ~~Pull request~~|◎|PonchoはUmbrellaのように複数のアプリケーションをひとまとめにします|
|Q|Queue||△|ほかに思いつかなかった|
|R|Registry|~~Reboot~~, ~~Ring Logger~~|◯|プロセスの登録メカニズムで Pub/Sub にも使えるよ〜|
|S|Supervisor|~~Stack~~, ~~Stream~~, ~~SPI~~|◎|フォールトトレランスの要|
|T|Target|~~Task~~, ~~Tupple~~, ~~Tool Chain~~|◯|HOSTとの対で|
|U|UART|~~Umbrella~~, ~~User~~, ~~UNIX~~|△|UARTは略語だけどすでに１単語になってるのでヨシ！|
|V|Version|~~VintageNet~~|△|VintageNetのほうがNervesっぽいんだけど残念ながら2単語ありで|
|W|Web|~~Watchdog~~|△|Watchdogのほうが組込みっぽいんだけど残念ながら2単語あり|
|X|ExDoc|~~XML~~, ~~Exception~~, ~~Xilinx~~|△|これをXと言い張るのは無理があるなぁ|
|Y|YAML|~~Yocto~~|△|ついにNerves/Elixirと関連する用語を思いつかず|
|Z|Zenoh[^zenoh]|~~ZEN~~, ~~Zynq~~, ~~Zone~~|△|これもNerves/Elixirと関連する用語を思いつかず|

U〜Z はかなり苦しく Nerves/Elixir と直接関係ないキーワードが目白押しです。何か良いのがあったら教えてください。

[^zenoh]: たまたまいま注目してるPub/Sub プラットフォームなだけで Elixir/Nerves とはまるで関係しません。

## 利用例
これを使うとこんな感じで通信することになります。


- Erlang: `E`lixir, `R`egistry, `L`ist, `A`lchemist, `N`erves, `G`enServer
- Kochi: `K`ernel, `O`verlay, `C`ompile, `H`ost, `I`nterface

明瞭度が良くなった感じはしますでしょうか。

# まとめ
新年を迎えるにあたってフォネティックコードを作ってみました。来年は兎年で、ついでにお知らせしておくと私は歳男です。


さて、明日の [#NervesJP Advent Calendar 2022](https://qiita.com/advent-calendar/2022/nervesjp) の記事は [充博 大崎](https://qiita.com/32hero) さんの [Nerves合同ハンズオンのコード解説＋うまみ](https://qiita.com/32hero/items/cecdcf9dcfc38d12db8a) です。お楽しみに！

# 参考文献

- [通話表](https://ja.wikipedia.org/wiki/通話表)
- [はじめてなElixir(0)](https://qiita.com/kikuyuta/items/3c1798d15508040ccaaf)
- [はじめてNerves(0) ElixirによるIoTフレームワークNervesがとにかく動くようになるためのリンク集](https://qiita.com/kikuyuta/items/9dee85c32004c8e827e7)
- [Zenoh](https://zenoh.io/)