Nerves 大好きな私が2023年にやったこと

おはこんばんにちは、 2023年12月が終わろうとしています。いかがお過ごしでしょうか！
[NervesJP](https://nerves-jp.connpass.com/) のポジローです。

[#NervesJP のアドベントカレンダー](https://qiita.com/advent-calendar/2023/nervesjp)を作った際にトリを埋めたことは後悔していません。

今年の振り返りになって思い出しながら書くので結構楽しいです。

---

Nervesアドベントカレンダーでは、これまで

- 「[Nerves大好きな僕が2021年にしたこと](https://qiita.com/pojiro/items/30b6ef01c32882fc7c19)」
- 「[Nerves 大好きな僕が2022年にやったこと](https://qiita.com/pojiro/items/fee4b0bd45eb655613da)」

という記事を書いてきています。自分の中の振り返りになるので、今年も同じように書こうと思います。

> あいかわらず Nerves 大好きであることは変わっていないので、毎年このタイトルで更新できればいいなと思っています。

は変わっていません。2023年も、大好きな Nerves に以下の活動をしてきました。

- 活用する
- コントリビュートする
- 布教（Nervesいいぜ！と紹介）する

まず、時系列で振り返って、そのあとで、個別ダイジェストを見ていけたらなと思います！

---

**※以下、メンションはさん付けを省略しています:pray:**

# 時系列できごと

以下のことをしてきました。

- 01月
  - @zacky1972 の提案から [Build a Weather Station with Elixir and Nerves](https://pragprog.com/titles/passweather/build-a-weather-station-with-elixir-and-nerves/) の [NervesJP 輪読会](https://nerves-jp.connpass.com/event/272174/)を開始！（5月末までかけて読み切りました）
- 02月
  - @kuroda@github の元で [Tailwind CSS のお仕事を開始](https://twitter.com/pojiro3/status/1641673025723703296)
- 03月
  - [SWEST](https://swest.toppers.jp/) の Web サイトの Phoenix 化を開始（SWEST の実行委員をしています）
    - デザインは維持ですが、 SWEST のサイトは Phoenix 化されました！
- 04月
  - [PocketLANcher Box の Tailwind CSS 対応](https://twitter.com/pojiro3/status/1648161204265947142)
- 05月
  - https://github.com/NFIBrokerage/slipstream の[バイナリ対応](https://github.com/NFIBrokerage/slipstream/pull/56)
  - https://github.com/nerves-time/nerves_time_rtc_nxp の [NXP.PCF8563 対応](https://github.com/nerves-time/nerves_time_rtc_nxp/pull/4)
- 06月
  - Elixir 本のレビュー
  - Rclex x ラズパイマウスを着想
- 07月
  - https://github.com/pojiro/custom_rpi4_for_edgebox_rpi_200 のリリース
    - Seeed 製の [Edgebox RPI 200](https://jp.seeedstudio.com/EdgeBox-RPi-200-CM4102008-p-5487.html) で動作するよう nerves_system_rpi4 をカスタマイズしています。 
- 08月
  - [NervesJP #42 「Nerves と Linux の関係紹介」回](https://nerves-jp.connpass.com/event/291879/) を実施
  - （Rclex x ラズパイマウス）[動く Nerves を初披露@SWEST](https://twitter.com/TakeshiOhkawa/status/1697164360827974137)
- 09月
  - https://github.com/nerves-networking/vintage_net_bridge に[貢献](https://github.com/nerves-networking/vintage_net_bridge/pull/99)
- 10月
  - https://github.com/nerves-networking/vintage_net_bridge に[貢献](https://github.com/nerves-networking/vintage_net_bridge/pull/108)
  - [SORACOM UG Explorer 2023](https://soracom-ug.jp/soracom-ug-explorer-2023/) で [「おいでよ！ Nerves JP！」](https://speakerdeck.com/pojiro/oideyo-nerves-jp) LT を実施
- 11月
  - [MIRACLE LINUX Users Meetup!!](https://miraclelinux.connpass.com/) で [「Raspberry Pi で試す 組み込みLinux⼊⾨ Nerves の場合」](https://speakerdeck.com/pojiro/raspberry-pi-deshi-su-zu-miip-milinux-nerves-nochang-he) LT を実施
  - @zacky1972 よりNerves 移植のお仕事を受注
- 12月
  - [第16回FA設備技術勉強会](https://fa-study.connpass.com/event/295362/) で [「Raspberry Pi Mouse を Nerves で動かしてみた」](https://speakerdeck.com/pojiro/raspberry-pi-mouse-wo-nerves-dedong-kasitemita) LT を実施
  - [NervesJP #42 「Nerves と Linux の関係紹介」回](https://nerves-jp.connpass.com/event/291879/)の資料の英語版を @mnishiguchi と作成し、 https://nerves-project.org/articles/ に掲載

この時系列をふりかえりつつ、書いていきます。

# 活用する

昨年に引き続き

- Nerves のカスタム・移植
- Nerves 対応
- Nerves を使った製品の運用

をしました。Nerves を継続してさわり続けているので Nerves プラス Linux に対する理解は深まっていっています。 yey!!

## Nerves のカスタム・移植

### カスタム

安価で技適の通った SBC で Nerves として使えるようになったら便利そうだと思ったのが Seeed 社の EdgeBox RPI 200 です。 5/22 に勉強を始めています。

https://twitter.com/pojiro3/status/1660504065867141121

これは CM4（rpi4のコンピュートモジュール）を使った基板で、 CM4 が載る基板のデバイスをサポートするよう nerves_system_rpi4 をカスタムできれば使えると見込みました。

LTE モジュールを使えるようにするのに時間がかかりましたがカスタムできて、 [custom_rpi4_for_edgebox_rpi_200](https://github.com/pojiro/custom_rpi4_for_edgebox_rpi_200) として公開しています。

https://github.com/pojiro/custom_rpi4_for_edgebox_rpi_200

※使い方はリンク先の Wiki に記載しています。

I/O（DIx2, DOx2, シリアル）、 LTE モジュール、 ATECC608A（NervesHub に接続する際に認証で使うチップ） の動作確認ができています。
※PocketLANcher の常設型に使えると考え、移植も概ね実施済みです。

### 移植

@zacky1972 からお仕事として Zybo Z7 への Nerves の移植を受けました！
Arm cortex-a9 と ZYNQ のヘテロ（っていうのかな？）ボードで、今までの移植実績の中では個人的には一番遊べそうなボードだと思います。
※ **比較的安価で、入手性が良く** 、FPGA による自由度があり、IOが豊富、音が出せるなど
※ 音の信号変換をさせると面白いかなとおもっています（私には知識がありませんが

dtbo に関係する作業がもう少し残っていますが、

https://github.com/zeam-vm/nerves_system_zybo_z7_10

dtbo 以外の部分は作業が終わっており、 artifact もリリースしているので積読ボードがありましたら実行を確かめていただけると思います。

さくっと確認できるデモプロジェクトも用意しています。

https://github.com/pojiro/zybo_z7_10_demo

## Nerves 対応

2022 年は @takasehideki が F3RP70 Nerves で Rclex を使った ROS 2 on Nerves を実現しました 

https://twitter.com/takasehideki/status/1604043248020131841

これにより ROS 2 が Nerves 上で動作することが示されたので、動かせるハードウェアがあれば動く Nerves ができると思ったのが、 6月末でした。それを実現しお披露目したのが 8/31 の SWEST です。

https://twitter.com/TakeshiOhkawa/status/1697164360827974137

この動く Nerves については、[「Rclex で動く Nerves を作った！」](https://qiita.com/pojiro/items/06ab2ce8f2c4d318e92e) という記事を書いているので、そちらも読んでいただけたら嬉しいです。

## Nerves を使った製品の運用

去年、下記のように書いたのですが、これは 2022 年からのままです:thinking_face:

> 2021年にリリースした Pocket LANcher はビジネスとしては好調とはいいがたいです。
> 
> https://www.pocket-lancher.com/
> 
> しかしながら、 「Pocket LANcher の開発で培った技術」が 2022 年の Elixir/Nerves の仕事につながり、そしてその仕事の中でとても活かすことができました。
> 
> また、Pocket LANcher 向けにカスタムしているNerves, Nerves Hub のバージョン追従作業も継続して行うことができており、運用を通して多くのことが学べています。
> 
> 展示・営業ができていないという課題を感じているので 2023 年はどのように取り組んでいくか考え実践していく必要があります。
> 
> これからもお客様に安定したサービスとして継続利用いただけるよう運用してまいります🦾

PocketLANcher で培った技術は他に反映されていますし、非常に実りが多いです。技術面は引き続き取り組んで行けば良いのですが、課題は営業面です。素直に自身をとらえると、売るためのアクションを起こしていないですし、どこか及び腰になっています。及び腰になる要因を洗い出して、ひとつひとつクリアしていく必要があります。課題です:thinking_face:

# コントリビュートする

2023 年は数こそ多くないのですが、ちょっとコントリビュートできたかも！と思っています。

## 時間

### PR

#### Slipstream のバイナリ対応 

Slipstream は Phoenix の Websocket クライアントで、[NervesHubLink](https://github.com/nerves-hub/nerves_hub_link) で使われています。

https://github.com/NFIBrokerage/slipstream

Websocket を通すデータはシリアライズされるのですが、通常 JSON です。 Phoenix（サーバ） はバイナリを受け取れるよう作られているのですが、 Slipstream(クライアント)はその機能を持っていませんでした。PocketLANcher で必要になったので、その機能の PR を作成しました。マージされています。

https://github.com/NFIBrokerage/slipstream/pull/56

Websocket クライアントを探している場合、 Slipstream は一つの候補になるかもしれません:bulb:

#### NervesTime.RTC.NXP の PCF8563 対応

NervesTime.RTC.NXP は、 [Nerves で RTC を使う](https://qiita.com/pojiro/items/f4e56d263189c2058270) で紹介した NervesTime.RealTimeClock ビヘイビア の NXP のチップ向けの 実装をまとめるライブラリです。

そのライブラリに PCF8563 用の対応をしました。

https://github.com/nerves-time/nerves_time_rtc_nxp/pull/4

#### vintage_net_bridge へ PR 二つ

PocketLANcher では ブリッジ を使っていますが、 `brctl` コマンドを使ってネットワークインタフェースを構成するプログラムを自身で書いていました。このプログラムのリファクタリング課程で見つけたのが [vintage_net_bridge](https://github.com/nerves-networking/vintage_net_bridge) です。

使う際に必要となった修正を PR として二つ作りました。

https://github.com/nerves-networking/vintage_net_bridge/pull/99

https://github.com/nerves-networking/vintage_net_bridge/pull/108

この PR で Nerves プロジェクトのメンバーに vintage_net_bridge のメンテナをやらない？と誘っていただきメンテナの一人になりました。 最新の v0.10.3 は私がリリースしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/369713/a6979224-4855-419b-89cf-d981d8c954c7.png)
※結構、嬉しい出来事でした！

### コミュニティ活動

NervesJP の活動は年の後半尻すぼみになってしまいましたが、[Build a Weather Station with Elixir and Nerves](https://pragprog.com/titles/passweather/build-a-weather-station-with-elixir-and-nerves/) を読む会は実施してよかったです。

というのは、この会は動画をとっていたのですが、会終了後も「本を買ったので動画が見たい」というご連絡や、「本を買うので、授業でつかっていいか」というご連絡をいただけたことです。実施回だけに閉じていない点が嬉しいです。

2024 年は NervesJP どうしていこうか？という課題感はあるのですが、割と楽観的にいます。自身も含め NervesJP コミュニティメンバが楽しくやっていけるのが一番です。

あと、 [NervesJP #42 「Nerves と Linux の関係紹介」回](https://nerves-jp.connpass.com/event/291879/) で作成したスライドの英語版を @mnishiguchi と作りました。 Nerves プロジェクトメンバにもレビューしてもらって、 https://nerves-project.org/articles/ に掲載してもらいました。自分でいうのはおかしいですが、良い内容のスライドだと思うので、貢献できたかも！と思っています。

## お金

2022 年同様、 [Open Collective の Nerves Project](https://opencollective.com/nerves-project) の Backer を継続しています。

「目指せ Sponsor」は未達で、月50ドルを維持です。

https://opencollective.com/nerves-project

引き続き **「目指せ Sponsor」** ！！🦾 をやっていきます。

## Nerves いいぜ！を紹介する

外部向けの発表が少なくて、 11月・12月の LT 2本でした。
発信する側は同じ内容だと「これでいいのかな？」と思ったりするのですが、聞く側は毎回同じ方ではないので継続して発信していくのは大事だと思っています。2024 年も試行錯誤しつつ楽しくやっていくつもりです。

# 2023 年の Nerves 大賞 といえば！

去年 「2022 年の Nerves 大賞 といえば！」を書いたので、 2023 年の私的 「Nerves 大賞」 は何だろう？:thinking_face:と考えてみました。

今年は！ @myasu の Nerves 商業誌の発刊じゃないでしょうか:bulb:

<img src="https://nextpublishing.jp/wp-content/uploads/2023/11/N01905.jpg" width="400">

※画像リンク元は https://nextpublishing.jp/book/17353.html

https://nextpublishing.jp/book/17353.html

Elixir の日本語の本も少ない中で Nerves に焦点を絞った本が出るのはスゴイ！と思いました。
@myasu さんのアウトプットとそれを見つけてくれた出版社さんのおかげで発刊されたことは素晴らしい🎉🎉🎉

# 2024 年に向けて

## 取り組み

2023 年も幸いにも[職業錬金術師](https://qiita.com/pojiro/items/e4a724934feae93180b0)としてコードを書き続けることができました。お仕事をいただけたことに感謝しています。:pray:

2023 年は内省しつつ次につながる種を考えられた気がします。
※といいつつ、目の前はまだまだ開けていない感じはします。

2024 年は引き続き以下の課題と向き合いつつ、自分に出せる価値は何かを考えて頑張っていく所存です🦾

* 営業（発表、展示）
* コミュニティ活動
* プログラミング
    * 表現力の向上
    * 高負荷（通信・処理）に耐える実装
    * モデリング
    * 運用
* デザイン


## 貢献の輪の中で

今年は二度、 fa_ex というクローズドローカルな勉強会に参加しました。参加者は NervesJP のコアメンバーが多いです。彼らとの議論の中で思ったのが（私が勝手に思っているだけで彼らと議論した内容ではない）、 Nerves に対する持続可能な取り組みです。


私は Nerves が素晴らしい技術だと認識しています。なので、 Nerves を使った開発、展示、運用、貢献に持続的に取り組みたいです。そのために、何が必要かも分かっています。


一度輪っかになったものは中々止まらないという話をどこかでした気がしますが、 **「貢献の輪の中と外を繋ぐ輪を作る必要がある」** と思うようになりました。とりとめがなく、あえて伝わるように書いていないですが、私はそう思ったぞ！とここに宣言しておきます。

2024 年も Nerves やっていくぞー🦾🦾🦾

## 最後に宣伝 [Open Source Conference 2024 Osaka](https://event.ospn.jp/osc2024-osaka/) 

[NervesJP](https://nerves-jp.connpass.com/) で [Open Source Conference 2024 Osaka](https://event.ospn.jp/osc2024-osaka/)  に出展します。

https://event.ospn.jp/osc2024-osaka/

日程:2024年1月27日 10:00～18:00（展示は16:00まで）
会場:大阪産業創造館 3F,4F（OSC受付：3F）

**この記事で紹介した動く Nerves の実機展示もしますし、「関数型言語Elixirで組み込みLinux開発ができるNervesの紹介」というタイトルで45分のセミナーもします。**

興味あるよ！という方は、ぜひ足を伸ばしていただけたら嬉しいです！
当日は、@pojiro, @takasehideki, @myasu が会場にいるはずです。ぜひ情報交換しましょう〜！

![NCJP_Logo3_V2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/369713/30394d87-a981-8530-9762-a971ed5520a3.png)