皆さん、こんにちは。今回のエピソードは、日本のElixirConfとのパートナーシップによるものです。この番組の友人であり、以前SmartLogicで働いているElixirの開発者でもあるPaige Finkelsteinが日本語で簡単な紹介をしてくれます。このエピソードはこのイントロダクションから英語で続くので耳を傾けてください。日本のリスナーの方は、ElixirConf JPのオーガナイザが作成した日本語テキストをご覧ください。それでは、本番の様子をお届けします。 [Music] [0:00:36:0] PF: Elixir Wizards Dojo のイベントにようこそ。この番組はElixir WizardsとElixirConf JPの特別なコラボレーションです。Paige Finkelstein ペイジ・フィンクリスティンと申します。Elixirエンジニアと,Elixir Wizards の Podcast の友達です。この番組はSmart Logic というボルチモアにあるカスタムのソフトウェアとアプリを作る会社でお送ります。今日はNerves Projectのメンバー,Frank Hunleth, Justin Schneck, Connor Rigby, そして Todd Resudekと話しています。Nerves Projectのメンバーと対談として,日本人そして世界中の方々のElixirに関する質問に答えて,回答をシェアしたいと思います。今日のエピソードは,みなさんの好きなWizards,Eric OestrichとJustus Eapenがホストをします。この後,英語と日本語のテキストでリリースします。ではお楽しみにしてください。 [0:01:55.8] JE: Paige,ありがとう。Elixir Wizards Dojo へようこそ。 Elixir Wizards Podcast と ElixirConf JP との特別コラボです。それはElixir開発者であり、この番組のお友達でもあるPaige Finkelsteinさんでした。この番組は、メリーランド州ボルチモアに拠点を置くWeb・モバイルアプリ開発の会社SmartLogicがお届けするもので、今回はElixirConf JPまたはElixirConf JPとの提携ということで、とても特別なエピソードとなっています。今日は、Nerves Projectチームのメンバー数名とお話しします。今チャットで一緒に話しているFrank Hunlethにお話を伺う予定です。Justin Schneckもまもなく参加してくれると思います。あと,Connor RigbyとTodd Resudekです。日本だけでなく世界中のElixirコミュニティから質問が寄せられていますので、今日はその質問をゲストの皆さんにお聞きします。 このエピソードは、あなたの大好きなWizards、Eric Oestrichと私、Justus Eapenがホストを務めます。この番組は収録され、近日中にElixir Wizard's podcastと,英語と日本語のテキストが公開されます。 [INTERVIEW] [0:02:56.1] JE: Dojoへようこそ、みなさん。Frank、よろしくお願いします。 [0:02:59.0] FH: ありがとう。光栄だね。 [0:02:59.8] JE: Frankにとっては、これが最初のライブストリームなの? [0:03:01.4] FH: 多分……うん。そうだね。今までのものは全て録音だったよ。 [0:03:05.8] JE: 君の最初のライブストリームへようこそ、Frank。そして、やあJustin Schneck、元気かい?今‘Justice Neck’のジョークを言おうとしたんだけど、ネタとしては少し古いかな? [0:03:14.7] JS: ねぇ、僕も喋っていいかな? [0:03:16.6] JE: もちろん! 君の声すごくよく聞こえるね。まるで耳の上にマイクがあるみたいだ。 [0:03:21.7] JS: うん。僕はマイクの上に乗ってるからね。 [0:03:23.2] JE: いや、君の出番だ。キミの背後にあるその模様が好きなんだよ。 [0:03:26.8] JS: ありがとう。壁を少しリフレッシュしたくて、ちょっとしたアートワークが必要だったんだ。こういう伝統的な色を見ていると……まぁ僕らもこうしたものは見ていて、ちょっとしたバリエーションがあったりもするけど、いいものだよね。気分が落ち着いてきて、そして気がついたら、ああ目を覚まさないとっていうこともある。うん。 [0:03:43.1] JE: この模様は刺激的かい? そうだね。ハードコアなオタク集結!(注: 原文はNerdcore assemble! Nerdというのはオタクという意味で、Nerdcoreはオタクミュージックとでもいうべきヒップホップの一ジャンル)って感じで盛り上がっているよね。その前に、日本のElixirコミュニティの皆さんからの質問に飛び込んでみよう。きょうは、みんな何を持ってきてくれたのかな。みんな元気?どこから繋いでいるの? [0:04:04.9] FH: 君から行くかい? Justin。 [0:04:05.7] JS: いいよ。今日は気分がいいね。ペンシルバニアでは少し雨が降っているけど、外のロボティック・ガーデンが休めるのでむしろ良かった。 [0:04:19.7] JE: なにそれ? ロボティック・ガーデン? [0:04:21.5] JS: ファームボット(オープンソースに基づく農業用のロボット)かな? [0:04:23.0] JE: ファームボットだよ。"ガーデン・ドローン "と言おうかとか思ってた。 雨の中では動かないのかと聞こうと思ってたんだけど、"植物に水をやるだけなら雨の中で動く必要もないだろう "と思い直したよ。Frank、君は調子はどうだい? [0:04:38.1] FH: 順調だよ。ワシントンD.C.メリーランド州の郊外から繋いでるよ。家とか近所に引きこもっていて、生活は順調だし、賃貸もそれなりにいい感じだ。 [0:04:48.1] JE: 二人はどのくらいの頻度で...途中で会ったりするの? [0:04:52.0] FH: お互いの家に車で行ったことがあるよ。僕たちはあまり遠くないんだ。でも僕らは今のところ、いつでもすぐに会う予定があったけど。 [0:05:00.0] JE: 二人とも参加してくれて嬉しいよ。Ericにも確認しないといけないね、Ericはどうしてるの? [0:05:03.4] EO: いま、余計なホワイトノイズに悩まされていて、ACをオフにしようとしてる。それがうまくいったかな。去年はTodd、そしてFrank、Justin、 Connor、Gregからシャツをもらったよ。 [0:05:16.4] JE: それはいいね、僕もひとつ欲しいよ。いくつかの質問があったけど、それには必ず答えるね。まず、この番組の背景を少しだけ説明したいと思う。みんなは「今回のこのWizardsは何? 日本のマッシュアップ版なの?」とかって聞きたがるだろうからね。僕たちは、大好きなコミュニティのメンバーの一人である山崎進さん(通称:ZACKY)に連絡を取った。彼は多くのElixirConfで発表もしていて、このDojoの親友とも呼べる人なんだ。彼は日本のWizardsコミュニティには多くの僕らの仲間がいると言ってたよ。去年、Justinが日本に行って彼らと交流したからだと思うけど、日本のコミュニティはNervesに特に熱心だと思う。彼らは僕らにパートナーシップを申し出てくれた。彼らはElixirConf JapanとNervesのプロモーションも兼ねて、このDojoの日本語訳をしてくれるんだよ。 それは僕たちにとって、とてもエキサイティングなことだ。僕たちはDojoのこのコンセプトを思いついた。Frank HunlethとJustin Schneckがまずここにいて、後にさらに多くのゲストが来るだろう。僕らは日本のNervesのコミュニティからたくさんの質問を得た。まずはいくつかの一般的な質問から始めよう。この時点で知りたいのは……Nervesは数年前から存在しているけど、このプラットフォームはどのくらいの大きさに成長したのだろうか。これについて君はどう答える? [0:06:31.7] JS: まず、日本のElixirコミュニティとNervesへの参加の熱心さはこの質問への答えそのものになっていると思うよ。彼らはNerves Hubを使用してデバイスを構築することにとても精力的で、楽しんでいた。たくさんの活動があって、彼らはもっと探求したい、もっと人の助けになりたいと思っているし、研究をするためのツールとしてNervesを使っている。新しいコンセプトやアイデアへの探求があって、もう本当にエキサイティングなんだ。 コミュニティの成長に関しては、多くの人が自分たちが取り組んでいるプロジェクトについて話してるよ。みんな色々なことを試している。そのコミュニティの声の大きさはその興奮の度合いをそのまま表していると思う。Frankも経験してると思うけど、これはある意味、両刃の剣なんだよ。以前もこのことは常に話しているけど…。企業で審査済みのプロジェクトに携わっている人は、外部の人にはあまりそうしたことを話せない。どんなWebプロジェクトに取り組んでいるかとか、シリコンバレーのスタートアップのようにVCの仕事をしているのかとか、そういうことをやっている人たちはむしろあまり声を出さなくなるんだよ。実際の製品開発のようなユースケースを取りあげるのはとても難しいよね。 [0:07:42.6] FH: そうだね。僕がやったこのヒアリング調査は、ある種の問いかけになっているんだ - 明らかに誰かがNervesを深く組込んでいるじゃないかってこと。僕らもNerves' Slack上で定期的に誰かがやっているのを目にするよね。ただ、これもまた興味深い話で、聞く人も実際になんらかの産業活用の経験を持っていない限り、決してそこから学びを得られないんだよね。僕たちは折々に、そうしたことを聞くことになる。僕たちはNervesを使っている企業をいくつか紹介されて、彼らを広報することにOKしたことがあるんだ。サンフランシスコのBlue Clover (https://www.bcdevices.com) だと思うけど、そこでいくつかの企業を紹介した。Snydeyのように、僕らはいつもファームボットの話をしている。そうConnorもいつも言っているけど、ファームボットは本当にクールなんだ。彼らはたくさんのクールなビデオを持ってる。例えばNerveの製品を積極的に宣伝しているRose Pointって会社 (https://www.rosepoint.com) がある。 タグボートは、アメリカの主要な水路に行かない限り、実際に見ることはできないけど、でも実際そういうところがあるんだ。 農業系は、後から事例が出てくるんだよね。ほんと。 [0:08:38.9] JE: うん、みんなもっとファームボットと農業アプリケーションに挑戦してくれないかなって思うんだよ。だって、ここ数ヶ月の間にたぶんものすごく多くの人がガーデニングを始めているからね。 [0:08:50.3] JS: そうだね。ファームボットはとてもクールなデバイスで、これは他の質問にとも関連していることがあるんだ。他にも、僕らがよく聞く質問がある。 [0:08:57.1] JE: どうぞ、好きにやっちゃって。僕らは脚本とかあまり気にしないからね。知ってると思うけど。 [0:09:02.5] JS: これらのいくつかのものは、実際に絡み合っているね。Nervesを使用して、どのように設計のある種の側面を実装するか、実例を示すことができる限りは。ファームボットは、モーションコントロールを行う必要がある状況の例で、さらに厳しいリアルタイム制約が必要になります。Nervesの場合、焦点を当てているのは主に組込みLinuxです。そして、そのシステムの中で、よりソフトリアルタイムを重視する傾向がある場合、特にVMを使用している場合ね、後で示すように少し違った議論ができます。いずれにせよ、あらかじめもらった質問に答えるためには、これらの環境をブレンドできるようにする必要があります。制御やモーターなどのハードリアルタイム機能を実行し、デッドラインを守る必要があります。 [0:09:44.4] JE: 了解、僕みたいな素人に、ソフトリアルタイムとハードリアルタイムの違いは何か、定義できますか? [0:09:49.2] JS: もちろん、現代のコンピュータ、汎用コンピュータは知っているよね? 私たちには、汎用に使えるCPUがあり、その上に構築された、マルチタスクで一度に複数のことを実行できるOSがあります。これらの場合、OSは複雑なスケジューラを搭載していて、誰がどのイベントを実行する時間があるか、全ての作業をスケジュールします。どのプロセスもプロセッサ時間をちょっとずつわりあてていくので、全てのプロセスが公平にプロセッサを共有することができます。しかし、そのような場合には、もちろん、デッドラインに間に合うことを保証できません。 したがって、特定の時間までに処理を終わらせる必要がある、非常に優先度の高いプロセスがあるとしても、他の全てのプロセスと同じ土俵で処理時間の確保を争っていると難しいです。Frankは、僕がうまくこの話をさばけていないと思っているみたいだね(笑) [0:10:32.6] FH: 手伝うよ。それは、デッドラインを逃した時の空気が、どれだけ厳しいものになるかを話すと良いと思います。いくつかのタスクをしようとしている場合にデッドラインを逃してしまうと、何か製品が完全に壊れるようなことが起こりませんか? その場合は、ハードリアルタイムです。そう、よりハードなリアルタイムです。もし1000時間に対して1時間とか、1000万回に1回といったような具合でデッドラインに間に合わないような場合は、大丈夫、製品は壊れることがないでしょう。そういう場合は、ソフトリアルタイムです。 [0:10:58.7] JE: ファームボットのような例で具体的に説明してくれませんか? 例えば、ファームボットがハードリアルタイム障害によってデバイスを完全に破壊してしまうような例です。たぶんですが、いつ停止すべきかわからなかったか何かで、軌道から外れてしまうような、そんな感じですか? [0:11:13.5] JS: そうね、この場合、モーターに一定量、移動するように伝えるには、モーターに電力パルスを送る必要があります。これによって、指示したタイミングと、その後一定量移動することを保証できます。このような制御を可能にする種類のアクション、この例のモーターの例では望んだような精度が得られるようなアクションには、ハードリアルタイムで動作する部品が必要です。また、ファームボットは、Raspberry PiやArduinoのようなオープンソースもしくは公的に入手可能な製品を寄せ集めて作るから、というのも理由の1つです。 この理解しやすいメーカーの視点から、そのレンズを通して、メーカー自身の得意領域で勝負できるように、どのように部品を組み立てるかを整理できます。そのため、この場合、Arduinoはそれらのこと、移動制御の多くを処理できます。他にArduinoが行うことは、Aruduinoでは複雑すぎるようなことを扱えるより大きなメインプロセッサに、インタフェースを介してAPIを公開する処理だけをします。これは、ネットワークI/O、インターネットに安全に繋がってクラウドサーバーなどと通信するような機能です。 この場合、製品の組込みLinuux側の上でNervesを走らせることが、そのような領域では優れています。というのは、Arduinoプロセッサがその仕事をしていることを、監視して確認することもできるからです。OTPが監督・監視することができる1つのプロセスであると考えるように、NervesはあたかもArduinoプロセッサをローカルドメインの一部として、最大の利点を引き出すことができます。これが、Nervesの優れているところです。これはゲートウェイのようです。Nervesに対してアップリンクするようなものです。 これが、私のいう、それが一種、他の質問にも答えるような理由ですね。つまり、どうやって、ハードリアルタイムなことをするのか、という問いです。私たちの共通の答えは、Nervesの裏に隠れた機能として、ハードリアルタイムの部品を管理するようなことです。Nervesデバイスに優れた機能を実行させる、つまり、ゲートウェイデバイスが、マイクロコントローラの固有の機能のようなローカルのプロセッサを、もし望めばインターネットに接続できるようにする、エッジデバイスになります。また管理することもできます。ArduinoのファームウェアをRaspberry Piのファームウェアの内部に組込むこともできます。それが、ArduinoとRaspberry Piを見守る1つのフレームワークを使って、ArduinoとRaspberry Piの両方を管理できる方法です。 それは意味があった? 喋りすぎた? そのような目をしているね。まるで、私たちはどうやってここまで来たのか、みたいな。 [0:13:22.6] JE: Frank,どうぞ。Frankに少し話を聞いてみたいです。 つまり、ハードウェアやそのような何かを作成したいと思うようなプロジェクトの多くは、部分的なハードリアルタイムの部品のように見えます。その部分が非常にうまく機能すること、そして、マイクロコントローラ上のハードリアルタイムなものを構築することに関する多くの知識と理論と経験があることを知っておくことは、嬉しいことです。 私たちは、その方向性、プロジェクトまたはデバイスを見て、ハードリアルタイムの部分を取り除く方向性で進めました。まずArduinoのような既知の技術を使用してマイクロコントローラでプログラムする。Arduinoから、Nervesを実行するより大きなマイクロプロセッサへの通信チャネルをセットアップする。そして、ネットワーキング、ビジネスロジック、やらなければならないことを全て実行する、だけどそれらがデッドラインをめちゃくちゃにするかもしれないことは、そんなに一生懸命に考えたくない。ならば、全てNervesに置く。そうして、Justinがいったように、監督するようなインフラとして、OTPのような素晴らしいものがある。あるいは、マイクロコントローラを監督するようにOTPを拡張することもできる。問題が発生したり応答しなくなったりした時にはOTPで再起動する。 [0:14:19.9] JE: ええ、僕はマイクロコントローラを監督しているかを尋ねるつもりでした。Raspberry Piはマイクロコントローラを動かす、そしてGPIOピンを切り替えるような、それはどうやって動くのですか? [0:14:32.0] FH: 通常、それにはリセット信号線があります。それを行うには、複数の方法がありますが、リセット信号線を切り替えるだけで再起動します。一度オフにしてから再びオンにするという概念全体が広まっています。どこにでも。 [0:14:46.1] JE: いったん話を戻して、具体的なアプリケーションについて、すこし話を掘り下げてみたいと思います。 おそらく皆さんとても興味を持っていることだと思うのですが、ファームボットはオープンソースですが、ファームボットの構築に君たちは協力したのでしょうか? もし協力したとしたらどの程度でしょうか? [0:15:01.6] FH: とても有用で、Nerves関連の技術がたくさん詰まっているので、遠回しには手伝った気がしています。 [0:15:07.4] JE: ファームボットそのものの開発に協力したわけではないのですね? [0:15:10.6] FH: いや、Justin、あなたはファームボットに貢献したんじゃないですか? [0:15:15.1] JS: ええ、私はできる限り貢献したり、手助けするために尽力しましたが、それは彼らがすでにNervesを使用できるようにすることを決定し、選択した後です。 パッケージングされているシステムが複雑だったこともあって、Connorは早い段階からNervesを支持していました。 [0:15:30.9] JE: 今、GitHubを見ています。Raspberry Piで動作するOSがありますね。これは、Nervesを実行しているものだと思います。それから、Typescriptで書かれたWebアプリを持っています。ユーザ向けのコントロールパネルはElixirではなく、Node.jsで構築されているようですね。こんな認識であってますか? [0:15:53.6] JS: サーバー言語は、さまざまなテクノロジーのマッシュアップから成りたっています。高スループットモードまたはTQを処理できるElixirが含まれている可能性がありますが、スタックに関する限りは、多くのElixirがデバイス側で駆動します。これは、IRTプラットフォーム(Interactive Response Technology Platform: インタラクティブ応答技術プラットフォーム)では一般的なことです。常にWebコンポーネントでありながら、デバイス側におけるNervesとElixirの優れた部分は、「『Webサイトが何であるか』を決定するものではない」ことです。それは他のものでも動作することができます。 [0:16:20.1] EO: Nervesを採用したプロジェクトで話せるものってある?オープンソースのプロジェクトだったり、個人のプロジェクトで。 [0:16:27.1] JS: もちろん。でもFrankに先に話してもらおうかな。そのお題で僕が話し始めるとしばらく熱中しそうだし。 [0:16:32.3] FH: オープンソースプロジェクト。僕のはハロウィンの飾りでマイクをオンにするようなやつだよ。覚えてるかどうかわからないけど、恐竜や変わった骸骨を使うのが流行ったんだよね。で、それらは人が来たら叫ぶんだけど。こどもと僕でそれらを制御して訪問してきた子をおどかしたら面白いって思ったんだ。 [0:16:54.8] EO: えっと、すでに動作するのを買って、つないだ感じ? [0:16:58.4] FH: 買った中身の電子基板を取り出して、Raspberry Piとそれに似たようなものを詰め込んだ感じ。 [0:17:04.9] JS: 僕がFrankのプロジェクトで一番好きなやつだ。 [0:17:08.9] EO: 既存のものを使って "自分たちでやろう "ってのがいいね。 [0:17:15.5] FH: メカの部分とモーターとかが僕にとって難しかったな。ソフトの部分は幾分簡単なんだけど。 [0:17:24.8] EO: こどもは君のことをTony Stark(アイアンマン)みたいに思ってくれたかな? [0:17:26.4] FH: あ〜、ないね。こども達は10代で。そう思ってくれる時期は過ぎたよね。 [0:17:34.2] JE: 最近友達の一人が僕に言ったけど、「買った製品をそのまま使うんじゃなくて倍のお金を使って自分のバージョンを作るのってエンジニアだけだよね」って。リバースエンジニアリングしたり、分解して今話したようことをしたりで。 [0:17:50.1] FH: うーわ、言われちゃったなー(笑) [0:17:54.2] JE: ハロウィンのこどもを怖がらすアプリの話だったね。Justinはなんか話したいやつないの? [0:18:01.1] FH: Justinのプロジェクトも話してよ。 [0:18:02.7] JE: Justinが作るのはどれもキーノートスピーチ(ElixirConf等の基調講演)にするやつだから、デモみたいなもんだよ。 [0:18:08.3] JS: そうだね。どの講演で使っても面白そうなのを作ろうとしてるよ。ほとんどがカンファレンス駆動開発。Nervesで何かしたり、拡張したりするのはいつも、作りたいものやプロジェクト、試したいことを探そうって感じでやってて。前にやったことがあることかもしれなくてもね。実装して、仕上げて、動かして、機能させて、そしてその一連を講演できるのは楽しいよ。 けど、プロジェクトのどれかか。一つは家の外にファームボットがあるし、あとはオフィスにNervesで制御している深層水水耕栽培システムを2つ持ってるよ [0:18:37.0] JE: — え、待って、ゆっくり、深層水がなんだって? [0:18:41.6] JS: オフィスに深層水カルチャー水耕システムが2つある。 [0:18:44.7] JE: うん、一つずつ分かるようにして。深層水水耕栽培って何? [0:18:47.0] JS: 基本的には5ガロン(約19リットル)の容器に根っこが下に向かって育ってて、定期的に交換する養液が入ってる。 [0:18:54.9] JE: 何を育ててるの? [0:18:55.8] JS: 中華料理にハマってるから四川唐辛子を育ててる。今手に入らないんだよね。 [0:19:08.0] JE: うーわ、キテるねー笑。 [0:19:10.2] FH: 外に発芽させられた2つがあって。もう2つ家の中にあるんだ。Lance Halversonのおかげで100個の種からひとつだけ発芽させられた珍しいのもある。Lanceが四川料理を見せたりするから、僕は沼にハマったんだ。もし興味があったらFuchsia Dunlopの四川料理の本を買うといいよ。素晴らしいレシピがいっぱい載ってるから。 [0:19:35.5] JE: 四川は行ったことあるな。火鍋だっけ?それそこのだよね? [0:19:38.9] JS: 中国の味って感じ、麻辣の味、口の中がしびれる、あの麻酔、何だっけ、歯医者の麻酔のNovocain、そうNovocainみたいな感じ [0:19:52.0] JE: あるいはメンソールみたいな感じ? [0:19:52.8] JS: だね。それは面白いプロジェクトで、照明とタイマーとかを全部を制御してる。プロ向けには、製造工場の産業用PLCのゲートウェイとしてNervesを出荷してる。あと、スマートエナジー部門向けでエネルギーグリッドとスマートシティ用部品に電力供給できるプロジェクトを仕上げたところだね。 他にもいくつかのプロジェクトに取り組んでて、消費者向け電子機器をリリースする予定だけど、その機器はNervesが載ってるよ。 [0:20:24.4] JE: 言えるのは? [0:20:26.1] JS: こども向けの目覚まし時計かな。それはちょうど自分のこども用にも必要だったからとても楽しいよ。さっきのジョークじゃないけど、こどもに一つ買う代わりに倍のお金や時間を使うけど、いいエクササイズだ。 あと、医療マーケット向けの追加製品のための仕事もしてるよ。 [0:20:54.3] JE: これはちょっと面白い質問だね。”Nervesの潜在的な用途は何か?”、答えは何にでもなりそう。 [0:21:01.8] FH: いっぱいあるよ。僕らの視点でもうちょっと絞り込まなかったっけ。この質問は別の質問に変わって、、 [0:21:09.3] EO: 強みと弱み? [0:21:11.4] FH: まあ、組込みの領域はとても大きいし、誰が喋るかにもよるしね、ってのは、触ったら分かるけど基本的にはほとんどのものが対象になるよ。でも、僕らが注目しているのは、よりスマートなネットワークに接続するゲートウェイのようなネットワークやデバイスだよ。小さなセンサーに小さなマイコンをのせてて、どこにでもつけられて家に通知するのがとても人気があるんだけど。 それらにはたくさんのロジックが載ってるわけじゃない。それはNervesのターゲットじゃないね。逆に、組込みのプロジェクトはとても複雑に、難しくなってて、車とか携帯とか、あー、携帯は組込みだったけど今はわからないね。今はパソコンみたいなものだから。 [0:22:11.4] JE: もうちょっとそれらについて話せる?制約とか強さとかだと思うけど、アプリケーションを考えたときに強い領域ってどこなの? [0:22:19.1] JS: 移行しようとしている時のことを考えてみるのだけど、何かのデバイスを想定してない?そうしたらどんなテクノロジーをそこに載せるか探してるよね。場合によっては簡単で、たくさんのネットワークがからんでいて、Elixirを知っている技術者がいて、その言語の良さを感じてたら、Nervesを真剣に検討し始めるよ。マッチするところがたくさんあるから。 プロジェクトがとても小さなバッテリーに依存してる場合、たとえば、設計の大部分が電源管理であるような場合は、NervesやErlangが走らないプロセッサーを検討するだろうね。 [0:22:57.0] JE: 本当に小さなデバイスな気がするね。 [0:22:58.9] JS: とってもたくさんのものがあるね。あー、Nervesの対象フィールドを小さくしたくないな、Nervesの特性に合うデバイスはとても多いと感じてるよ。 [0:23:06.4] JE: たとえば、ウェアラブルデバイスとか、 [0:23:09.5] FH: — グレーな部分だね。Apple Watchは非常に多くの計算能力を持ってるけど、ほとんど何も持っていない他のウェアラブルデバイスもある。何をしたいのかによって、これをオススメするのは簡単じゃないね。すべてを個別に見ていく必要があるし、プロジェクトのように、実際にエンジニアリングにどれだけ予算をかけられるかとか、コントロールできないこともあるだろうし。Appleは非常識なことをしているから、あなたの事情とは合わないだろうし [0:23:39.7] JE: ロケットにはいつ載せられそう? [0:23:44.1] JS: 小さな会社だったり、少ない開発予算しか無かったり、なんにせよ、Appleがこの小さな時計に非常識な量の計算能力を収めているような現実を直視する必要があるね。それはあなたがいるドメインではないかもしれないし、実際には、より小さなプロセッサに強制され、機能が少なくなるかもしれないよね。 [0:24:03.8] JS: それではその話をしようか。プロセッサの性能が低く機能が少ない場合、このケースでは2つのことが頭に浮かぶよね。1つ目は、低い性能と少ない機能の設計のプロセッサだと、広域ネットワークに接続するために他の何かを経由する必要があるということ。Nerves が動いてる大量のバラバラのプロセッサがあったりするのはそういうとき。 [0:24:20.9] FH: うん、それが実用的な上手いやり方だよ。よく Nerves とゲートウェイになるデバイスを使うよ。やることは、生活で使うような道具を管理人がみんなに貸し出せるようにした気の利いた家族用のアパートみたいなものさ。 ドアロック、水センサ、サーモスタットとか、あらゆる種類のそれもすごく低消費電力デバイスがあるんだ。エッジデバイスとNervesデバイスを無線で接続して、ゲートウェイがクラウドに接続したりその場で処理したりもするんだ。 [0:24:56.8] JS: そう、それが最初の道筋で、それで考えてみると、言語と複雑性とビジネスロジックみたいののある種の相関関係が見えてくるんだ。ステージが進むにつれて求められるビジネスロジックの複雑さを考慮すると、問題へのアプローチに使用したい高レベル言語への視点が必要になるんだ。というのも、本当に貧弱なデバイスでやってるとちょっとばかり難しくなったり時間がかかったりするからね。 より強力な重機を必要とするようなそんなレベルでは、よりまともで可能性を持ってるかもしれない強力な何かに手が届くと良いよね。それが Erlang や Elixir や Nerves を使うという、高級言語系テクノロジーによる優位性を活用すべきだということなんだ。 [0:25:43.0] FH: そうだな、時間ってのが重要ってことを言っておきたいな。今日可能なことと明日可能なことは違う、つまり、今あるこれらの小さなデバイスの処理能力は絶えず上がってるということ。 [0:25:55.9] JE: Apple Watchの質問に戻りたいんだけど、誰かApple WatchをジェイルブレイクするなりしてBEAMを走らせたことはあるかい? ジェイルブレイクする必要あるかな。アプリか何かがあればBEAMを動かせそうに思うけど。何か知ってる? [0:26:08.0] FH: しらないよ。 [0:26:08.9] JE: 誰か知らない? [0:26:09.6] EO. 知る限りではいないね。もし誰かがやったとしたら、それは次回のゲストで。Connorは可能性あるな。 [0:26:18.4] FH: そりゃあいい。Connor に聞いてみてよ。何かのプラットフォームにNervesを手当たりしだいに移植するなら、彼こそが適任者さ。 リスナーからの質問のリストにある、関係する話題に飛ぶんだけど、STM32 とかのサポートについて。どのボードにNervesを移植できますかってな感じでいつも出る質問なんだ。SC32 や STM32 はマイクロコントローラボードで、十分なメモリや処理速度を持ってない。使い方によっては十分なんだろうけど Linux なんかは動かない。そんでもって Nerves のよりどころはいわば「動かしたいなら、LinuxカーネルをブートしてBEAMが走るだけの十分なメモリがある」ぐらいのハードウェアなんだ。 なので、こういうプロセッサは我々が相手にしているものではないんだ。といっても、どのコミュニティも無関心ということを意味しているわけでもないんだ。Atom-VM というプロジェクトがあって、BEAMそのものは動かないんだけど、小さなErlangプログラムを走らせられるような別の仮想マシンを持ってる。あとは、アプリを移植するのと別の新しいボードに移植したりするのをどうするか。 Justin がちょっと話していたと思うけど、いっつも手元のオープンソースの移植版の一つをコピー&ペーストして、そこから始めて作っていくんだ。公式のNervesシステムは最新の状態に維持するようにしているから、そこそこの量の利用があって良いテンプレートを形作るんだ。もし特別なボードに興味があるなら、そこら中に非公式の注目されてない移植があるよ。 IMS6からあらゆる種類の組込みボード、そしてXAD6みたいなそんなに組込みとも言い難いようなボードまであるよ。Lichee Pi ってメチャ小さなホントに小さなARMプロセッサのボードまで。誰だっけ Justin だったっけな。そう、Justin がそんなのを送ってきた。脱線するけど、ときどきハードウェアを送ってくれる人がいてね、Lichee Pi もその一つ。いいんだ、こういうことをしてくれる人には感謝しているよ。自分だけじゃできなくてもオープンにして何かすることが出来るってことなんだ。 [0:28:31.2] EO. 私書箱でも用意する? [0:28:33.9] FH: やめてくれよ。 [0:28:33.8] JS: とか言ってるけど、Frankはハードウェアがどんどん送られてくるのが大好きなんだ。 [0:28:38.5] FH: そんなことないよ。 [0:28:40.3] JE: こりゃ大変なことになるぞ。 [0:28:44.7] JS: そこは隔離してしまって、ハードウェアを構築するのに時間を使ってよ。 [0:28:50.8] FH: 君が Lichee Pi を送りつけて、Conner がなんか思いついて移植したんだよな。明らかに、移植を完全にさせようとオレの注意を引こうとしてたように見えたな。 [0:29:04.7] JE: Frank、みんな君が大好きなんだ。だからみんなプレゼントを送ってるんだ。番組が始まる前に話していたんだけど、Frank の後ろにあるポスターは Amos が君に贈ったものだよ。みんなが君が大好きなのと同じように。Frankほどファンレターが来る人はいないだろうね。 [0:29:17.0] FH: 分かったよ。 [0:29:18.8] JS: ファンレターはハードウェアでお願いします。ハードウェアを送ってください。 [0:29:25.4] FH: わかったよ、それで楽しむことにするさ、うん。 [0:29:28.2] JE: この番組では個人的なPRと「視聴者に聞く」のコーナーがあるんだよ。 さ、頑張って次に行こう。Frankが台本通りにちゃんとやってて、僕よりマシな仕事ぶりだ。ここにちょっとばかり気になるBluetooth Low Energy に関する質問が来てるんだ。条件反射みたいなもので BLE は常にチャレンジの対象なんでね。Nerves での BLE の導入について話してもらえるかな。 [0:29:52.0] JS: Very ではエンジニアの一人のDan の提案で、わたしがそこで働くより前に、早い段階から動きがあったんだ。 [0:29:59.9] EO: たくさんいる Daniel の一人だね。 [0:30:00.6] JS: そう、今は Dan の数が少なくなったんで… Spock ってあだ名も要らない… [0:30:09.4] EO: Dan が減っている… [0:30:11.1] JS: そう、Dan が減っている… で、話して良いと思うんだけど以前 Interstate Batteries 社向けのプロジェクトがあって、Bluetooth を出荷してたんだ。最低限の Bluetooth のネットワーク機能が必要で、エンジニアがシステムを作るときに柔軟にやれるように Bluetooth のスペックをよりポータブルにするようなところから始めたんだ。もっと機能を拡充することも出来たんだろうけど、でもコンサルタントとして契約上で考えると、業務が終了して顧客が満足してるなら Spock はそこを離れて別の業務に移らないといけない。 最近は公開できるような作業に軸足を移すようにしたんだ。そうすれば他のみんなが前に進むのを助けられるだろうからね。少なくともみんなが何らかの情報を得てそして何かを始められるようにしておくんだ。 でも、それはしんどくてね。だって、かならずのぞみもしない含みを持ってしまうんだ。何かを公開したっていうのに対して、何かをオープンソースだということとは確実に違うんだ。 何かをオープンソースで作ったというと「やった、これは未来永劫、コミュニティの誰かがメンテし続けてくれて、自分のプロジェクトに何度も繰り返し採用できて、持ってきたり使ったりすることができるんだ。そして問題があれば誰かを捕まえて報告することができる」ってみんなが解釈するんじゃないかな。 でも、全部を管理し続けられないからこれは辛い話だ。で、この話のポイントは、BLEみたいなものを管理するとなるとスペックはとても大きい、でもコンポーネントに分解できるのなら、そんなに恐ろしいことではないということだ。分かってるだろうけどソフトウェアに関する他の何でもそうであるように、しかるべき場所から始めたところにある道標に従うなら、必要なことを実装するのに重い腰をあげて前進することを助けることができるよね。 結局のところこういうことを進めるには、みんなが余裕がないっていう代わりに本当に必要と思うことが必要なんだ。本当に必要と思えば、プロジェクトを前進させるために貢献することは決して難しいことではない。要はプロジェクトに関わることが必要ってこと。 [0:32:04.6] EO: 前にみた Michael Reese の BLE とゴルフカートを使った何かのプロジェクトで、Bluetooh の仕様が1300ページもあって酷いもんだって、ツイッターで呟いてたのを覚えてるよ。 [0:32:21.0] FH: うん、もっと多いんじゃないかと思うけどね。あれは巨大なんもんだよ。重要な部分は随分と少ないんだけどね。初見だと Bluetooth には圧倒されるだろうね。で、いくつかのピースがあるのに気づくよ。そこがBLEをやるときには他の部分よりずっと重要でね、その辺りに関して何ヶ月か前にちょっとばかり怒涛のコーディングをやったよ。少なくともどこがHaraldとしてみられているか調べようとしてね。 どうしてかっていうと、大量の質問をもらってるけど、Justin も私も、私達の会社も使ってないので。君の会社で Bluetooth 使って、Harald をつけた商品を出荷してると。で、Harald ではそのユースケースでちゃんと動きますと。でも、Harald に来るほとんどの人が探しているユースケースは全く無いんだ。彼らは、電話に接続するような何かが欲しいんだ。そんな程度だと思うよ。 [0:33:09.8] JE: 怒涛のコーディング? [0:33:12.2] FH: そうさ。 [0:33:13.1] JS: よくあるコーディングさ、知らないのない? [0:33:16.9] EO: コーディングの基本だな。 [0:33:18.8] JE: オレの知ってる唯一のコーディングスタイルさ。はは、冗談だよ。 [0:33:22.9] FH: 資料を用意していたかわからないし、100%正確かどうか完全には確信がないけど、ちょっとだけ誰かをスタートさせるってのは十分に出来ると思う。そして、もしあなたがこのBluetooth問題にちょっとの時間を使ってくれるとか、例えば僕の gist か何かにちょっとコメントを残すとかするとか、そんなことでみんなを励ますことが出来たらと思うよ。Elixir Slack と Nerves Bluetooth チャンネルで、Nerves と Bluetooth に過去に興味のあったコミュニティを見つけることができるさ。 [0:33:47.5] JE: 番組のページでリンクを見つけることができる。 [0:33:50.9] FH: うん、そこのチャンネルで作られたGistのリンクもある。そのGistを利用することで、ファームウェアイメージをダウンロードして、Raspberry Pi Zeroに突っ込んで、それをPCにつないで、そうして自分のPCで全部の開発をできるようになる。何からなにまでNervesのファームウェアを作る必要はないよ。Raspberry Pi Zero W の Bluetooth チップに直接つなげることができる。そして何かをやったら、コメントを残してくれることを望んでいるよ。 分かってるのさ、そのうち誰かが「ビジネスミーティングがある」とか「趣味でなんかやってる」とか「ゴールまでやりきりたい何かがある」って言い出すのを。現在あるコブを乗り越えて、いつかそこに到達するのを望んでるんだ。そうなると思うよ。 [0:34:34.1] JS: Bluetooth でなにかをやることに興味がある場合は、僕のチャンネルに参加することで互いを知って、コミュニティを活性化できると思う。ここでNerves keyboardの人々に関して少し触れておきたいと思います。Frank はよく知ってるだろうけど、いくつかの技術が必要なユースケースに対して情熱を持ってる人々のグループで、スタックの一部を発達させてるんだ。 彼らはグループに貢献することで、グループとして協力しながらそれぞれのプロジェクトに取り組むことができました。それが Bluetooth にも必要なことではないかと思うね。Frank、キーボードについて話してくれないかな。 [0:35:06.5] FH: 彼らのキーボードはスゴイよ。いうなればハードウェアの設定の話なんだけど。今、小包が届けられる最中で、月曜日には家に到着するようで、それが彼らのキーボードなんだ。すごく楽しみにしているんだ。 [0:35:19.8] JS: カタカタやるキーボードを、誰かが Nerves キーボードとして構築していると。Nervesを使ってね。 [0:35:24.3] FH: そうなんだ。面白いのは彼らは堅実にやってたのだけどちょっと時間がかかったところがあって、「NervesデバイスをどのようにPCに接続して、キーボードとして見えるようにするか」だったんだ。それは Linux 的な問題なんだけど。こういうちょっとしたことや Nerves のいろいろなことについてサポートしてるんだ。我々がいつもやってることじゃないんだけどね。作業として組み入れないとならないぐらいに結構複雑なことの一つで、彼らはそれをやったし、それを見てるのは本当に素晴らしかったね。 [0:35:50.6] JE: こういうのは我々にも出来るんだろうか。 [0:35:52.6] FH: そうだね、色々と出ているよ。僕は Slack 上の Elixir の Nerves-keyboard チャンネルで知ってるけど、Webページも GitHub も持ってたと思う。すぐにはわからないようなら調べるよ。彼らはフレンドリーなグループなんだ。会ったのはシアトルの Elixir 会合だったかな。 [0:36:11.6] EO: ElixirConf EU そして T-Repo でも色々と見つかるので、ちょうど今、出てきているところなんだろう。 [0:36:20.2] FH: いいね、これ終わったあと、リンクがみんなに共有されるようにするよ [0:36:24.8] JE: それじゃあ、もう少し質問を取り上げたいと思う。僕らが興味深く感じたのは、Nerves上のファイルシステムの機能を拡張するにはどうすればいいのでしょうか?という質問だね。 [0:36:35.3] FH: ああ、そうだね。これに関しては・・・やや図りかねるところがあるかな。ファイルシステムの拡張にはいくつかの方向性がある。この質問は、何か意図があってのことな気がするけど、それが何なのかはよくわからないな。だから、いくつか話すよ。Justin、これでいいよね。(JS:もちろん。)Nervesでは、デバイス上で動くすべてのファイルシステムを扱うとができるよね。fwupと呼ばれる、どこがどのパーティションかを示す設定用のプログラムがある。 Raspberry Piの場合、使用するmicro-SDカードがfwupの設定によって分割されるという感じだね。micro-SDカードには所定の設定があるんだ。もし君が製品を作ってて、eMMCのようなものを使っているとしたら、設定を幾分変更したいかも知れないね。マスターブートレコードとGPTパーティションの2つの選択肢があるけど、公式にサポートしているもののほとんどがマスターブートレコードで、だからパーティションは4つだ。 これを拡張するには…4つのパーティションには、拡張する余地はほとんどない。例えば、何か別の記憶媒体があれば、そこにもう1つパーティションを追加して、その上に別のファイルシステムをフォーマットすることができるかも知れないね。ちょっと話が飛んだかも知れないけど、今話してるパーティションセットは、プロセッサに必要なブート用パーティションのようなもので、変更することはできない。お次のパーティションファイルはrootファイルシステムで、LinuxやErlangアプリケーション、リリース、その他全てのものがここに入ってる。これはすべて読込み専用。 AP パーティションスワップは、そのデバイスでより多くプログラムを実行するために利用する読み取り専用のパーティションスワップで、これは皆馴染みがあるかもね。そして、最後のパーティションはアプリケーションデータパーティションだね。そう、ここはどうにでも使える。アプリケーションが書きたいものは何でも書き込めるし、データベースもそこに置いておくことができる。何でもいいよ。思うに、おそらく、この質問の関心は、このパーティションだろう。 今はプラットフォームのほとんどはext4なんだ。典型的なLinuxのファイルシステムだね。最初のブートは、デフォルト設定でドライブのサイズに合わせて拡張され、再フォーマットされる。何らかの理由でそれが拡張されないか、それを小さく設定しておいて、後で拡張するのは、一種のトリックだね。それは言わばあなた自身のラップトップ上のハードドライブのパーティションのサイズを変更するようなものだ。 これはあまり奨励していないことだけど、みんながやっていて、結局はLinux PC上で君がやっているような感じになる。これはその一部だけど、Justinと私が話していたときに、尋ねられそうなことがもう一つあったね。rootファイルシステムは読取り専用。これは、ある種困ったことだよね?1つのファイルをちょっと変更したいだけなのに、なんで全く新しいファームウェアをダウンロードしなければならないの? 本番環境でそうするべき理由はたくさんあるよね?本番環境ではrootファイルシステムのビット数が決まっているので...でも、それはちょっと置いとこう。私はただデバッグしているだけなんだよ。ちょっとファイルを変更したいだけなんだけど、どうすればいいの?できないといったよね?でもNerves初期の頃にはオーバーレイファイルシステムと呼ばれる機能があったんだ。ログを出したりちょっと変更したい場合に便利で、開発用にこの機能を戻そうかとも思ってるぐらいだよ。 オーバーレイファイルシステムは、ベースとなる読込み専用のファイルシステムと参照された時用のオーバレイが存在するという考え方だ。ファイルを取り出す処理がLinuxで呼び出された時は常に書込み可能なファイルを参照するんだ、メモリ上とか、再起動で消されるやつでいいんだけど。これはかなり使える。なんでこれを取り除いたかは議論する価値があるかもね。最初にこれを導入したとき、オーバーレイファイルシステムは少し欠陥があることがわかったんだ。これはDockerの前の時代のお話。 要はDockerで、私の印象だとDockerはオーバーレイファイルシステムで起こりうるあらゆるバグを洗い出してくれたんじゃないかな。だから、もう一度試してみる価値はあると思う。私はそれをいい感じだと思ったし、今はかなりうまく動いている。だから、これに関しては誰かがもうひと押しすればいけるんじゃないかな。ちょっと設定をいじったり、ちょっと遊んでみて上手くいくか確認してみたり、それで得られる結果を共有したりという感じでさ。 [0:40:31.0] JS: 今言及された事実に注目してみる価値はあるよね。開発目的にそれを戻すのは良さそうだ。実際のところ、余計な手間で苦労したり、Nerversの開発がうまく進まなかったりするよね。Nervesで作った製品は本番環境では優れてるよ。まさにイミュータブルといった感じだね。 それは本当に強み。いや本当に。それは簡単な話で、動作するのに必要なものだけをパッケージングしてるんだ。これはいい事だよね。だって、必要のないもの全てから解放してくれるんだ。Raspbianみたいな全てが備わってるデスクトップシステムでパッケージしたことがあるかも知れない。でも、Raspbianはデバッグやテストにメリットがあって、Raspbian上では作業のやり直しが簡単に済んだりする。それはRaspberry Pi用のDebianみたいなものだね。 Raspberry Pi 上のデスクトップ Linux のようなものだよね?というのはDebian や Raspbian のような場合には、ベルとかホイッスルとかライトが全部点灯して、実行中に、遊んでみたりとかができるようになるわけ。でも、これは出荷するにはあまり良い本番環境ではないよね?何て言うか、上手くやり過ごせるなにか…これを口実にして、他の質問にも答えようか。 開発環境を強化するために使用できるものもある。いくつか方法があるけど、例えば、ホスト上で可能な限りのことを済ませちゃうのなんて、開発環境のパフォーマンスを向上させるためには良い手だね。ビジネスロジックの多くは、それを切り離すことができれば…Elixirで良い感じのcontractを作成して、ハードウェア固有のビットをすべて切り離すことができる。 例えば、センサーとやり取りする必要があるとしよう。それで、センサーデータを処理したり、センサーデータを他の何かに通信したりするために書いているビジネスロジックのテストを模倣するインターフェースを作れたりしたらどうだい。クラウドにデータを送信できるかどうかを確認するために、毎回デバイスをプッシュする必要がないので、開発のスピードは本当に加速できるんじゃないか。 そして、そのように、我々は、ロジックをOTPアプリケーションの内部にカプセル化したり、必ずしもモジュールである必要はないんだけど、構造化しようと試みられるのがますます有益であることがわかった。それと、Nervesの出力先は、製品としてすごくいいよね。これはそのままであって欲しいと思うでしょ、ビジネスロジックとハードウェアフロントを確実につないでくれるレイヤーみたいな感じだね。 その後は、環境をデコレートし、他の外部OTPアプリケーションに残りの要件を押し出し、それらを依存関係として含めることで、より小さなコンポーネントとして統合してテストできるようにする、というポンチョスタイルのアプローチをお薦めするよ。それで、アプリケーションそのものは、このような特定のハードウェアに統合されたビットの全てと一緒に含めても、負荷になることはないね。 [0:43:15.4] FH: いやぁ、プロジェクトが時間とともにどう変わっていったか知るのは面白いね。というのも、最初の頃、僕らは皆暗闇の中にいたみたいだった。Erlangディストリビューションを調査して、ホットアップデートを調べ上げて、それをひっくり返してみたり、Erlangディストリビューションの隅々まで...そんなことを繰り返してたよね。それで、少しずつ経験を積んでいくうちに、個別にテスト可能なロジックを引き出すことがより効果的だとわかってきたんだ。そして、メインのNervesプロジェクトをどちらかと言うと接着剤のように使ってる。 そうやって提供することになったんだけど、マジでもう一つのアプローチは秀逸だと思ってて、そこについてはあまり気にしてなかったので注意したい。でも、面白いのはこの数年、どれだけ僕らがPonchoスタイルのセットアップと最小のコードに集中してたかだよね。 [0:43:59.9] JE: もうそろそろ時間切れになりそうだよ。あと2つ質問がありました。エリック、次の話題に移りませんか。Nervesの未来と次になにがくるのかについて少し聞きたいです。 [0:44:08.5] EO: そうだね。NervesとNerves Hubを使ったデプロイについての質問があります。Wi-Fi設定されたtarget.exsがあってファームウェアをビルドしています。Wi-Fi設定が異なるそれぞれのデバイスにはどのようにデプロイをしますか? [0:44:27.9] FH:うん、ぼくが答えましょう。問題はどのようにデプロイをするかということです。あなたはいくつかの特定の設定を持っていて、最終的にはどこにインストールされるかに依存します。あなたが新しいプロジェクトにNervesを使っているなら、ファームウェアのためのビルドは知っているでしょうし、私がどうやって自宅のWi-Fiアクセスポイントにデバイスを追加するかを知っているでしょう。それは簡単で、クイックセットアップです。しかし、それはあなたが任意の数のデバイスをデプロイすることができるものではありません。 Vintage Net Wizardと呼ばれるプロジェクトがあります。つまり、Wi-Fi設定がされていないプロジェクトで始めるというアイデアです。あなたは(ユーザーが)何を設定するか知らないでしょう。Vintage Net WizardはAPモードでWi-Fiモジュールを構成する方法を知っているプロジェクトです。それは、携帯電話やパソコンでログインしたら、Wi-Fiアクセスポイントを示してくれるような小さなウェブサーバーを持っています。 そして一つのセットを選ぶと設定を更新してくれます。そんなことができるんですね。最終的にそれを使いたくない場合は、設定をセットし、次回ブートでもvintage netを継続させるような一行程度のコーディングを想像することができると思います。ともかくWizardや他のメカニズムを使ってVintage Netの設定行を実行させる必要があります。もしかしたら、あなたのデバイスにはちょっとしたUIがあるかもしれません。私は知りませんが、そこがコーディングすべき箇所です。 私が製造しているデバイスには、製造工程があり、ここで材料を供給することができます。また、現場での準備作業もあります。このような段階がある場合、私たちは専用のPCを使って、誰でもデバイスを接続できるような小さなソフトウェアを実行しています。それを検出して、認証情報やセットに必要なものなどを知ることができます。 どこに設置するか分かっていて、その場所に特定のWi-Fiアクセスポイントがあれば、そこで事前に設定しておくことができます。Justin、何か補足したいことあるかい? [0:46:21.5] JS: はい、 Wi-Fiネットワークへの接続はプロジェクトの実装の詳細であるとおもっています。そのため、私は外部ドメインからでも設定できるという事実をデフォルトにしていますが、どこで設定するかが曖昧なので、それをサポートできるようにするための最善の答えは、Vintage Net Wizardなのです。 しかし、それ以外は、どこでその情報を取得するかは、アプリケーションのビジネス詳細次第です。例えば、企業のアカウントがデプロイしてWi-Fi IDを知っていたり、地理的に分散していてWi-Fi IDを知っていたりするとします。そのため、どこであれ、あなたが持っている拡張サーバーであれ、実行時にその情報をやりとりすることができます。 [0:46:59.5] JE: もう一つの質問をしたいです。また、君たち自身のプロジェクトやあなたの会社、望むなら何でも構わないので宣伝するためにこの時間を使用してください。僕達は、Nervesの将来やNervesHubが見た目をよくするのかについて知りたいです。 [0:47:13.5] FH: NervesHubは見た目をよくしているよ、Justinは僕が意味していることわかるよね。 [0:47:19.2] JS: ネタバレ、画面があります。宣伝として、僕は今年の初めからVeryで働き始めました。Veryはあらゆるタイプの異なるドメインのIoT製品の構築と製造に取り組んでおり、データサイエンスから組込みエンジニアリングまで幅広い実績があります。僕たちはハードウェアの設計を行っていますが、機械的な製造も行うことができます。だから我々は、IoTのすべての領域をカバーすることができますし、私達はウェブ体験の観点からNervesHubのユーザビリティにとても興味を持っています。 だから、多くの時間とエネルギーをかけ、それを最高のものにするよう専念することにしました。私は新しい画面のいくつかを見ましたが、それらは豪華です。nerves-project.orgのサイトで分かるように、Veryの助けを借りて、私達は最近ようやく少しだけ見た目をよくすることを行っています。私達はまた、Nervesのこの段階でのプロモーションに役立つようトライしている。多くの採用につながるし、未来がどのようなものであるかという最後の質問に答えます。 しばらく前にNerves 1.0をリリースしてからの現在のロードマップは、ランタイムコンポーネントの多くに専念し始めました。FrankとSmartRentのメンバーが、つまり君(フランク)がすぐこのあと話をするけど。システムに堅牢性を追加し、より強固にするために、多くのスタックに磨きをかけてきました。できる限り採用を促進していきたいです。これは、ウェブの観点から、Nervesを実装することに興味を持っている人々に自分たちをより身近に感じてもらえるようにすることが含まれています。 そのため、新しいWeb領域を、IoTで何ができるかという情報を要約できる新しい場所を、作れるようにさまざまなマーケティング部門からの支援を受けています。そして、できるだけ多くの場所にインストールできるようにします。そうすれば、私たちは実例から学び続けることができます。私も採用例から学び続けることができることで、何を追加することでより良いものにしていけるかを学ぶことができます。そして、私たちの会社からは、その間、焦点を当てていることや経験していることへの作業を行ってきました。そして、それらをオープンソース化し、コミュニティと協力してその成果をそこに出せるようにします。 [0:49:33.3] JE: 素晴らしい, Frank、最後の言葉をください。 [0:49:34.6] FH: うわー。ということで、いくつか話題を持っていました。時間が足りないですね。しかし、私はNervesHubで起こっていることについてとても重要なことを指摘したいです。NervesHubは、オープンソースから始まっています - まあ、それはオープンソースのままであろうとしています。そして、私はスポンサーのいるオープンソースコミュニティプロジェクトからより商業化されたプロジェクトになることで長期サポートができると言っているのではありません。これは、NervesHubのファームウェアアップデートをサポートする意味のあるリソースを持っていることが本当に重要です。 Veryは現時点でNervesHubを長期的に維持させ続けるリードをとっています。私達がメンテナンスすることは大変なため、これはプロジェクトとして非常に重要です。確かにNervesは、ますます多くのユーザー獲得し始めています。そして、我々は、いくつかのアップタイム保証のようなものを供給することができるようにしたいです - 現状でもNervesHubは驚くほど安定しています。そして、それはJustinと私の時間の多くを使っていませんが、それでも、私たちをいつも頼りにできるものではありません。 もちろん、維持費がかかります。だから私たちのグループNervesには支援者がいて、本当にありがたいことです。人々は私たちを支援してくれており、これは素晴らしいことです。この支援金は、私達がNervesHubを継続するためにAWSの利用料にあてていて、これは右から左へ流れていくでしょう — オープンコレクティブのお金は、少しの[inaudible]のものに向かってより多くのことをしようとしているが、これは私達のやりたいことなのですよね。私達は、これらのことを長期的に実行可能なものにしたいです。 だから、他のことを私は推測しています。NervesHubの無料アクセスを心配している誰もが、趣味、個人的な使用のために離れて行くということは起こっていません。だから、あまりにもJustinと私が非常に重要なのです。だから、それはいつも私たちのコミュニティのためのリソースになるだろう。より長期的な視点で見ていくことになると思います。そうだな 、私の作品を手に入れています。 [0:51:18.8] JE: 遠慮せずにその他のことも宣伝していいよ。 [0:51:21.5] FH: 私はSmartRentを宣伝します。SmartRentはこのプロジェクトの素晴らしいサポーターです。感謝してもしきれませんよね。SmartRentの資金提供は、私の時間や他の人たちのために使われています。会社全体では、オープンソース化にも協力してくれています。とても簡単だったんだよね。ビジネススライドはあまり見ないでしょう。どの会社からもオープンソースとは思えないようなものがたくさんあります。 しかし、彼らはNervesで働いている人々と非常に柔軟性があり、Elixirはオープンソースドメインにそれらを取得するためのプロジェクトを行うためにRipleyを支払いました。ネットワークコンポーネントに磨きがかかっていることを見て取れるとおもいます。例えばVintage netの強固な接続です。私達のZ-waveクライアントライブラリは、かなりフル機能で、デフォルトのZ-wave使うよりが簡単だと思います。 これは完全にオープンソースで、当社のアプリケーションロジックではありませんが、スマートホームを実現するためのオープンソースのものがたくさんあります。それは私たちから出てきたものです、そして私たちは人材採用をしています。悲しいことに私の小さなグループではありませんが、もしあなたが職を探しているのであれば、私のウェブサイトをチェックしてください。 [0:52:32.4] JS: 私も同じことを言うべきですね。Veryも人材採用をしていますよ、ええ。 [0:52:35.9] JE: SmartRent と Vary、両方とも素晴らしい組織です。そしてElixirエコシステムへの大きなコントリビュータです。ぜひチェックしてください。Frank Hunleth と Justin Schneck、Dojoにきてくれた2人に改めて感謝します。 [0:52:48.4] FH: 誘ってくれてありがとうございます。 [0:52:49.1] JS: ありがとう、Justus。お元気で。 [END OF INTERVIEW] [0:52:50.9] JE: 今年の初夏にライブで録音した特別な Elixir Wizards Dojo のパート1は以上です。本日のゲストのFrank HunlethとJustin Schneckに感謝したいと思います。もちろん,ElixirConf JPの友達たちにも。彼らは私たちがこのスペシャルシリーズを一緒にやることを勧めてくれました。そしてFrankとJustinへの質問を送ってくれた日本と世界中のNervesコミュニティのメンバーたちにも。私たちのイントロとアウトロを翻訳し,日本語でそれらを日本のリスナーに届けてくれたPaige Finklesteinにも特別な感謝を! もう一度紹介しますが,私,Justus Eapen と共同ホストの Eric Oestrichです。Elixir WizardsはSmartLogicのPodcastです。ここSmartLogicでは,ウェブアプリケーションを構築する新しいプロジェクトに取り組み,Elixir, Rails, React, React Native にも取り組み,Kubernetesを用いたインフラプロジェクトにも取り組んでいます。もし私たちがお手伝いできるプロジェクトがある場合には,ぜひご連絡ください。みなさんがご使用のPodcastプレイヤーの「購読」ボタンを押すことを忘れずに。iTunes Podcast StoreとStitcherにレビューをぜひ書いてください。 Instagram, Twitter, Facebook もやっています。これら全てに登録してください。私は @Justuseapen, Eric は @Ericoestrich のIDで個人的に繋がることもできます。来週の Elixir Wizards も再び聞いてください。Connor Rigby と Todd Resudeck による Elixir Wizards Dojo on Nerves のパート2です。