はじめに
-
Elixirを楽しんでいますか
- 今日は、Hacobune(はこぶね) β版にてLivebookをイゴかしてみます
- 現在、Hacobune(はこぶね)は、オープンβ版にて無料で利用できるとのことでつかってみました
- デプロイ方法は次の3種類とのことです
- ①パブリックのDockerイメージを使用
- ②プライベートのDockerイメージを使用
- ③GitHubレポジトリをHacobuneに接続して使用(Dockerfileが必須)
- 今回は、①パブリックのDockerイメージを使用でやってみます
できたもの 


-
https://livebook.c1.hacobuneapp.com/
- パスワードには
securesecret
を入力してください
- パスワードには
-
Livebookとは、Elixirを実行できるノートブックです
- 上記をご自由に触ってみてください
Hacobune(はこぶね)を知ったきっかけ
- チャレキャラという九州の学生のための育成型アプリコンテストの2021/8/21(土)イベントに先生役で参加しました
- イベント終了後、@zembutsu さんによるDockerコンテナ開発入門というセミナーがありました
- 私は学生ではありませんが、参加してもよいとのことでしたので、Dockerについて基礎から学ばせていただきました
- ありがとうございました!
Hacobune(β版)ドキュメント に従って設定を進めます
- アプリケーションの設定は以下のような感じです
- アプリケーション名は、小文字から始める必要があるようです
- ポートは、
8080
にします - 環境変数
LIVEBOOK_PASSWORD
は、公式の通りに設定をしました - 環境変数
LIVEBOOK_PORT
を設定しておかないと以下のエラーがでました- コンソールの「アプリケーションログ」から確認しました
ERROR!!! [Livebook] expected LIVEBOOK_PORT to be an integer, got: "tcp://10.233.58.201:8080"
- リソースはスタンダード(CPU 1 core、メモリ 2GB)を選びました
Run
- Visit: https://livebook.c1.hacobuneapp.com/
- パスワードには
securesecret
を入力してください
- パスワードには
イゴかし方
Explore
- いろいろ探検してください!
-
Elixir and Livebook
がわかりやすいかとおもいます - プログラムが書いてあるところにカーソルをあわせると、
Evaluate
というボタンがでてきますので、迷わず押してみてください - Elixirのプログラムが実行されて結果が表示されます
- Elixirを楽しんでください!!!
New notebook
- 今度は自分でElixirのプログラムを書いてみましょう
- 右上にNew notebookという青のボタンがあります
- 適当にポチポチおしていくとElixirのプログラムが書けます
Qiita API
- Elixirタグのついた最新記事を20件取得して、そのタイトルの一覧を表示してくれます
Mix.install([
{:httpoison, "~> 1.8"},
{:jason, "~> 1.2"}
])
"https://qiita.com/api/v2/items?query=tag:Elixir"
|> HTTPoison.get!()
|> Map.get(:body)
|> Jason.decode!()
|> Enum.map(& &1["title"])
グラフ表示
- メモリ使用量をグラフに書いてみます
- 3つのパートにわけて、Elixirのプログラムを書いてみましょう
Mix.install([
{:kino, "~> 0.3.0"},
{:vega_lite, "~> 0.1.0"}
])
alias VegaLite, as: Vl
memory = [
total: :red,
processes: :yellow,
atom: :green,
binary: :pink,
code: :orange,
ets: :blue
]
layers =
for {layer, color} <- memory do
Vl.new()
|> Vl.mark(:line)
|> Vl.encode_field(:x, "iteration", type: :quantitative)
|> Vl.encode_field(:y, Atom.to_string(layer), type: :quantitative, title: "Memory usage (MB)")
|> Vl.encode(:color, value: color, datum: Atom.to_string(layer))
end
widget = Vl.new(width: 500, height: 200)
|> Vl.layers(layers)
|> Kino.VegaLite.new()
Kino.VegaLite.periodically(widget, 200, 0, fn i ->
point =
:erlang.memory()
|> Enum.map(fn {type, bytes} -> {type, bytes / 1_000_000} end)
|> Map.new()
|> Map.put(:iteration, i)
Kino.VegaLite.push(widget, point, window: 1000)
{:cont, i + 1}
end)
for i <- 1..1_000_000 do
:"atom#{i}"
end
-
Evaluate
するとこんなグラフが表示されます
Wrapping Up 



-
Hacobune(はこぶね)を使うことで簡単に、Livebookをイゴかすことができました
- ありがとうございます!
- 次はデータベースと組み合わせたPhoenixアプリケーションをデプロイしてみたいとおもいます
- おもいっています
- あくまでもおもっています
- β版の間にぜひイゴかしておきたいとおもっています
- 書きました!
- Enjoy Elixir