hotch-potch, Note to self

いろいろ作業記録

ElixirでGUI・Scenic チュートリアルチャレンジ

1.はじめに

20年6月に「ElixirConf EU Virtual」が開催されました。

私は参加していなかったのですが、オンライン参加していたNervesJP勢のみなさんが興味を持っていた話題の一つがこちら。

ElixirでGUIアプリを実装するライブラリです。

丁度わたしも、GUIを使ったアプリを作りかけていたのですが、このライブラリの存在を知らなかったので、最近使い始めたPythonKivyを、ElixirからgRPC経由で操作しようかと考えていたところでした。

とりあえず、モノは試しと言うところで、チュートリアルにチャレンジしました。

実験環境

ハードウェア Raspberry Pi
OS Raspbian Buster
Elixir Version 1.10.3
$ uname -a
Linux raspi4 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux

2.下準備

必要なライブラリをインストールします。

(1)OpenGLの開発ライブラリ

$ sudo apt install libglfw3 libglfw3-dev libglew-dev

このインストールを忘れると、iexでコンパイルしている際に下記のエラーメッセージが出ます。

・・・
Package glfw3 was not found in the pkg-config search path.
Perhaps you should add the directory containing `glfw3.pc'
to the PKG_CONFIG_PATH environment variable
No package 'glfw3' found
Package glfw3 was not found in the pkg-config search path.
Perhaps you should add the directory containing `glfw3.pc'
to the PKG_CONFIG_PATH environment variable
No package 'glfw3' found
c_src/main.c:14:10: fatal error: GLFW/glfw3.h: No such file or directory
 #include <GLFW/glfw3.h>
          ^~~~~~~~~~~~~~
・・・

(2) Scenic Archive

次に、Scenic Archiveをmixでインストールします。

$ mix archive.install hex scenic_new

以上で事前準備完了です。

3.チュートリアルチャレンジ

Getting Startedの説明に従って進めます。

Getting Started — Scenic v0.10.2

(1)"Build the Basic App"

一番基本となるサンプルです。 ウィンドウと、ウィンドウが拾ったキーボードやマウスのイベントを、コンソールで確認できます。

$ mix scenic.new my_app01
$ cd my_app0
$ mix do deps.get, scenic.run

([Ctrl-\]で終了)

実行画面

RDP経由でXにログインして、動かしました。

f:id:hotch-potch:20200620212548p:plain

右側がscenicアプリのウィンドウ、左側がコンソールでこちらには、キーボードやマウスのイベントが流れているのが確認できます。

(2)"Build the Example App"

先ほどのサンプルは文字だけでしたが、(C#.NETで言うところの)グラフィカルなコントロールを見る事ができます。

$ mix scenic.new.example my_app02
$ cd my_app02
$ mix do deps.get, scenic.run

([Ctrl-\]で終了)

実行画面

ウィンドウ左上の「Scene」のコンボボックスで、表示内容を切り替えできます。

①Scene: Sensor

f:id:hotch-potch:20200620212942p:plain
Scene: Sensor

②Scene: Primitives

f:id:hotch-potch:20200620213104p:plain
Scene: Primitives

③Scene: Components

f:id:hotch-potch:20200620213140p:plain
Scene: Components

④Scene: Transforms

f:id:hotch-potch:20200620213238p:plain
Scene: Transforms

操作してみた印象

RDP経由だと動作が重い印象ですが、RaspberryPiに直結のHDMIディスプレイで操作するとさくさく動きます。

※リモートログイン状態でRaspberryPiに直結のHDMIディスプレイに表示させるとき

Xの表示先を環境変数で指定しておきます。

$  export DISPLAY=:0.0

この設定を忘れると、下記のような「dirty close」エラーが出て停止します。

$ mix do deps.get, scenic.run
Resolving Hex dependencies...
Dependency resolution completed:
Unchanged:
  elixir_make 0.6.0
  font_metrics 0.3.1
  msgpax 2.2.4
  scenic 0.10.2
  scenic_driver_glfw 0.10.1
All dependencies are up to date
Compiling 2 files (.ex)
Generated scenic_prac app

18:09:36.724 [error] dirty close

4.参考資料