企画の知恵に勝るコストダウンはない。
Advent Calendar 2022 38日目1の記事です。
I'm looking forward to 12/25,2022
私のAdvent Calendar 2022 一覧。
この記事は冒頭に出したNervesアプリの例と後半のElixirアプリの例では事情が異なるので、中途半端な内容になってしまっています。
後日、内容を見直して更新します🙏🙏🙏🙏🙏
はじめに
Elixirを楽しんでいますか
WiFiルータを買い替えました。
Nervesに設定したSSIDとパスフレーズが書き換わらなくてアタフタしたので書きとめておきます。
NervesでWiFiを使うには
ここに設定例が書いてあります。
config :vintage_net,
regulatory_domain: "US",
config: [
{"usb0", %{type: VintageNetDirect}},
{"eth0",
%{
type: VintageNetEthernet,
ipv4: %{method: :dhcp}
}},
{"wlan0",
%{
type: VintageNetWiFi,
vintage_net_wifi: %{
networks: [
%{
key_mgmt: :wpa_psk,
ssid: System.get_env("NERVES_WIFI_SSID"),
psk: System.get_env("NERVES_WIFI_PASSPHRASE")
}
]
},
ipv4: %{method: :dhcp}
}}
]
こんな感じで設定をしています。
mix firmware
で以前ビルドしたことのあるNervesプロジェクトです。
新しいWiFiルータの値に書き換えよう

.zshenv
に環境変数NERVES_WIFI_SSID
とNERVES_WIFI_PASSPHRASE
を設定しています。
新しく買ったWiFiルータの値に設定しなおして、ターミナルを再起動して、source ~/.zshenv
とやって、echo $NERVES_WIFI_SSID
で、「うん、正しいね」と確認して、念には念をでecho $NERVES_WIFI_PASSPHRASE
で正しいことも確認してあと
$ mix firmware
$ mix burn
と、バーンでmicroSDカードに焼きましたよ。
これで一丁上がり!!!
$\huge{とはなりません。}$
結論から言うと、前回mix firmware
したときに参照した古いWiFiルータの値がそのまま使われます。
これ、私は以前からよくありがちで、そのたびにいつも悩んでいました。
忘れるのは記事にしないから記憶に定着しないのです。
解決策? 回避策?
すごくダサいやり方です。
config/target.exs
をコンパイルエラーを起こすようにします。
具体的には、環境変数を参照している箇所の2箇所の閉じカッコを消すことをしました。
そしてコンパイルエラーをわざと起こして、ご丁寧に一個づつ修正をしました。
果たして
$\huge{新しいWiFiルータにつながるようになりました。}$
一応、これで解決しました。
mix clean && mix compile
でどうでしょう
上記でめでたしめでたしでもいいのですが、
$\huge{ダサいので}$
どげんかしたいとおもいます。
ここからはふつうのElixirでやってみます。
$ mix new hoge
defmodule Hoge do
@value System.get_env("AWESOME_VALUE")
def value, do: @value
end
というソースコードを用意しておいて、おもむろに
$ export AWESOME_VALUE="awesome"
$ iex -S mix
iex> Hoge.value
"awesome"
です。
Ctl+Cを2回でもおして一度止めて、今度は値をhiroshi
に変えてやってみます。
$ export AWESOME_VALUE="hiroshi"
$ iex -S mix
果たして、
iex> Hoge.value
"awesome"
です。
hiroshi
に変わっていません。
そこで
$ mix clean
$ mix compile
$ iex -S mix
とやりますと、
iex> Hoge.value
$\huge{"hiroshi"}$
です。
めだたく、hiroshi
に変わりました。
Wrapping up 



Enjoy Elixir
$\huge{Enjoy\ Elixir🚀}$
今回は、環境変数の値を変えたつもりだけどElixirのアプリケーションには反映されないなあ〜 ということを私はやりがちでして、その都度、アレレ? となっていますので記事に残しておくことにしました。
該当箇所でコンパイルエラーを起こすか、mix clean && mix compile
すればよいでしょう。
以上です。
付録
以下、付録です。
Elixirの誕生日は、2012年5月24日です。
そのため、今年の2022年5月24日は10周年を迎えます。
iex> Date.diff(~D[2022-05-24], ~D[2022-02-07])
106
そうそう!
2月24日発売予定のWEB+DB PRESSで、ElixirとPhoenixの特集がでますよ〜
Elixir、Phoenixをはじめられたばかりの方も、腕におぼえがある方も、どんなものなのかなあと様子見をきめこんでいる方も、
つまりは
$\huge{全人類のみなみなさま!!!}$
お手にとって、お楽しみください!!!
We, @tamanugi @torifukukaiou @the_haigo @mokichi_s12m including me, wrote featured articles for WEB+DB PRESS Vol.127 about Elixir and Phoenix! It's being published on 24, Feb.https://t.co/UPNiVU1zG9
— 栗林健太郎 (@kentaro) February 4, 2022
Elixir
最後の最後に、Elixirについて紹介します。
- |>でスイスイ、プログラミングしていくことができる素敵なプログラミング言語です
- さっそくプログラムの例を示します
-
Qiita APIを使わせていただいて、
Elixir
タグがついた最新の記事を20件取得しています - ここでは雰囲気をつかんでいただければ大丈夫です
Mix.install [{:req, "~> 0.2.1"}]
"https://qiita.com/api/v2/items?query=tag:Elixir"
|> URI.encode()
|> Req.get!(finch_options: [pool_timeout: 50000, receive_timeout: 50000])
|> Map.get(:body)
|> Enum.map(& Map.take(&1, ["title", "url"]))
Webアプリケーションを楽しむなら
IoTを楽しむなら
AIを楽しむなら
もっとElixirのことを知りたい方へオススメの書籍
- プログラミングElixir(第2版) -- オーム社
- Elixir実践ガイド -- インプレス
- アルケミスト − 夢を旅した少年 -- KADOKAWA
コミュニティ
-
elixir.jp Slack workspaceに参加してみてください
- マヂ、やさしい人ばっかりのコミュニティ
- あなたの困ったをきっと解決してくれるでしょう
-
NervesJP Slack workspaceでは、NervesやIoTが好きな愉快なfolksたちがあなたの訪れを歓迎します
- たくさんのコミュニティがあります
(EDI/fukuoka.ex/kokura.ex & LiveView JP の @piacerex さん作)
Elixirコミュニティに初めて接する方は下記がオススメです
Elixirコミュニティ の歩き方 -国内オンライン編-
https://speakerdeck.com/elijo/elixirkomiyunitei-falsebu-kifang-guo-nei-onrainbian
(piyopiyo.ex & エリジョ の nakoさん(@kn339264) 作、素敵な資料)
Elixirのイベント情報
@koga1020 さんが作成されたイベントカレンダーがあります。
https://elixir-jp-calendar.fly.dev/
気になるイベントにはぜひ参加してみましょう!!!
上記サイトの解説記事はこちらです。
I organize autoracex.
And I take part in NervesJP, fukuoka.ex, EDI, tokyo.ex, Pelemay.
I hope someday you'll join us.
We Are The Alchemists, my friends!