LoginSignup
4
1

More than 1 year has passed since last update.

Windows版 Livebook DesktopのTips

Last updated at Posted at 2022-08-09

0.Prologue

先般、待ちに待った Windows向け Livebook Desktopアプリがリリースされました:sparkling_heart:
Livebookとは、あれですあれ。赤丸急上昇の Elixirのための Jupyterみたいなプログラミング&ドキュメント環境です。

[インストール in just a minitue]
そのインストールは至って簡単で、下記のサイトの下記のダウンロード・ボタンをポチってインストーラーをダウンロードし、実行するだけです。Erlangランタイムを含むまるまる一式の Elixir/Livebook実行環境がインストール先フォルダーにセットアップされ、即Livebookライフをエンジョイできます:smile: そこのあなたもからアルケミストの仲間入り♫
image.png

1.Tips,Tips,Tips…

そんなお手軽でCoolなLivebook Desktopなのですが、まだ若いソフトウェアで巷に情報が少ないため、些細な「はてな(。´・ω・)?」に遭遇し試行錯誤することがあります。本稿では、小生が遭遇したそんな「はてな?」とその回避方法を2~3紹介したいと思います。

■ ワーキング・フォルダは何処なの?

Livebookのnotebook上でデータをElixirで加工していると、時々その加工済みデータをファイルに保存したくなる場合があります。ファイルの保存先を常に絶対PATHで指定すれば何ら不都合はありませんが、相対PATHで指定しようとすると……「今いるフォルダ(ワーキング・フォルダ)は何処なの?」と言う「はてな?」に遭遇します。

【回答】
ワーキング・フォルダの場所は、基本的にWindowsの標準の振る舞いに従います。Windows版 Livebook Desktopを起動する方法は二つあり、それぞれでワーキング・フォルダの場所は異なります。

一つは、WindowsエクスプローラーからLiveMarkdown("*.livemd")ファイルをクリックして関連アプリとして起動する方法で、この場合はLiveMakedownファイルが置かれているフォルダがワーキング・フォルダになります。

もう一つは、Windowsデスクトップに置かれたショートカット・アイコンをクリックする方法で、この場合はLivebook Desktopをインストールしたフォルダがワーキング・フォルダになります。尤もこの場所は、ショートカットのプロパティの「作業フォルダ」を書き換えることで好きな場所に変えることができます。

Livebook起動.jpg

さて、ここからがちょっとした落とし穴の話になります。Livebookのメイン・ページには、下図の様にフォルダ&LiveMarkdownファイルを選択して notebookをオープン出来る機能が用意されています。ところがこの操作では、ワーキング・フォルダは移動しないのです。起動時の場所がそのまま使用されます(Livebook Desktop v0.6.3)。それに気づかずにデータをファイルに保存すると…思わぬところにファイルが:sweat_smile:

と言う訳で、Livebook Desktopは Windowsエクスプローラーから LiveMarkdownファイルをクリックして起動するのが吉です:blush:

(注:アルケミストは File.cd!/1するかも知れないが:sweat_smile:)

image.png


■ NIFs拡張モジュールが利用できない? (v0.6.3 - 2022/7/30現在)

Elixirのモジュールには、pure Elixirで記述されたモジュールの他に C++言語などで記述されたNIFs(Native Implemented Functions)拡張モジュールがあります。拙作のCImgモジュールなんかもNIFs拡張モジュールです。ところが、Windows Livebook Desktop(v0.6.3)で NIFs拡張モージュールを利用しようとすると、C++が"erl_nif.h"が見つからないぞとコンパイル・エラーしてしまい止まってしまいます。

image.png

【回答】
この不具合の原因は、Livebook Descktopインストーラーが行うべきセットアップ項目から usrフォルダのセットアップが抜けてしまっているための様です。

C/C++で書かれた NIFsのビルドでは"elixir_make"と言う Mix.Taskをよく利用します。このツールは、Erlang関係のCヘッダーファイル&ライブラリの置き場所として [Livebookイントール・フォルダ]/rel/usrを期待しているのですが、そのフォルダが無いために NIFsのビルドが失敗してしまうのでした。

この不具合については、José Valimさんが issueとして取り上げてくれたので、近いうちに解決すると思います。

当面の間の応急処置は、WindowsにインストールしたElixir/Erlangのフォルダ(C:\Program Files\erl-24.0\usr)から、usrフォルダを[Livebookインストール・フォルダ/relの下にコピーすれば良さそうです。

image.png


■ どうしてVisual C++のビルドが止まってしまうの?

NIFs拡張モージュールで起こるかも知れないもう一つの「はてな?」です。たぶん日本語Windows限定だと思います。

NIFs拡張モージュールをビルドするC++コンパイラが Visual C++の場合、下図の様に :io.put_chars/2で「標準出力になにやら見知らぬ文字列(バイナリ)を出力しようとしているぞ」と怒られエラー停止してしまいます。

image.png

【回答】
上のエラーログに吐き出された"何やら見知らぬ文字列"を調べてみると、

<<46, 78, 69, 84, 32, 70, 114, 97, 109, 101, 119, 111, 114, 107, 32, 140, 252, 130, 175, 32, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32, 66, 117, 105, 108, 100, 32, 69, 110, 103, 105, 110, 101, 32, 131, 111, 129, ...>>

↓こんな文字列でした

.NET Framework 向け Microsoft (R) Build Engine バ...

ここまで判れば、昭和世代の技術者にはピンと来ます:wink:
Visual C++が出力した上の文字列はShift JIS(CP932)です。一方、Elixirが扱える文字列はUTF-8(CP65001)です。そうコード・ページの不整合が発生していたのです。

対策は、下図の様に "Mix.install"の前に

System.shell("chcp 65001")

の一行を追加すれば良さそうです。Visual C++等はコマンド・プロンプト(shell)のコード・ページに合わせてメッセージを出力するようになっています。それ故に、Livebookから起動されたコマンド・プロンプトのコード・ページをchcpで UTF-8(CP65001)に変えれば良いという理屈です。

image.png

Epilogue

Windows版 Livebook Desktopを触り始めた当初は、上の様な「はてな?」で困ってしまいましたが、その回避策が分ってからはこれといった「はてな?」に遭遇していません。とても快適にLiveboohライフを過ごせています。

尤も、上の様な「はてな?」に遭遇するのは、小生の様にElixirで画像処理やエッジAIをやりたいからとNIFs拡張モジュールを自作する方ぐらいかも知れませんね:sweat_smile:

(Fin)

4
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1