Julia で GUI アプリに挑戦

蜜蜂天国のまとめに入っているところだが,足踏み状態だ.いろいろなパターンを試してみたいのだが,そのためにはもうちょっと準備が必要だ.Julia ではGUIを持った独立のアプリを作るというのが難しいので,C#への移植を考えている.C#なら何でもできるし,これまで作ってきた資産を活かすこともできる.そのためには少なくとも,BigFloatをサポートする環境を構築しなくてはならない.以前,C#にBigIntegerを導入しようとして挫折した経験があるので,二の足を踏んでしまうところだが,再チャレンジしてみたい.

C#のライブラリとしてGitHubに公開されているものとしては,Osinkoというのがある.これはベースがBigIntegerなので,多分 BigIntegerを先に導入する必要がありそうだ.Osinko の開発者は名前から想像付くように日本人のようだ.これを使ってみることにしよう.ただし,かなり古い.リリースされたのが10年以上前で最新の更新は8年前という感じ.計算結果がマシーンによって異なるというクレームも上がっている… nuget というディストリビューションもある.

いや,その前にもう一つ考えておかなくてはならないことがある.Julia には solve という関数があり,任意の方程式を解ける機能が備わっているが,この代替になるものがC#にあるだろうか?蜜天法で自力で解くという考え方もあり得るが… いまのところ現実性は薄い.むしろ,がんばって Julia で GUI アプリを作ってしまった方が早いかもしれない… ちょっとそのコースを試してみることにしよう.

https://goropikari.hatenablog.com/entry/julia_gui_app

Julia のREPLではサンプルコードを動かすことができたが,VS Code上ではエラーになってしまう.一行目の

win = Window(“Count Click”) # 大枠のWindowをつくる

でエラーが発生している.何かが不足しているのだろう.上記URLの筆者の記事はシリーズものなので,もう少し前まで遡る必要があるかもしれない.ここではGtkを使っているが,クロスプラットフォームGUIを生成するツールキット Qt.jlというのもある.また,WebベースのGUIアプリを作るWebIO.jlというのもある.PCを使っていないユーザもいるので,ブラウザで動くというのは有用かも知れない.
https://www.reddit.com/r/Julia/comments/wdeda0/help_with_gtkjl_in_vscode/?rdt=48792&onetap_auto=true&one_tap=true

VS Codeの中で,Julia のREPLから実行するという提案があり,実行できた.ただし,まだエラーは出ている.⇒エラーは出ないようになったが,クリックがカウントされない.つまり,イベントを拾っていない.このコードの作者はLinux環境でJuliaを動かしているようだ.別の選択肢としては,Jupyterというのがある.これはJuliaだけでなくPythonその他複数の言語をサポートしている.

VS Codeの右上メニューからJulia:Execute active file in REPL でウィンドウを開き,イベントを取るところまではできた.しかし,デバッグはできない.デバッグモードで実行しようとすると,sigatomic_end called in non-sigatomic region エラーが起きてしまう.クロスプラットフォームパッケージのQtをインストールしてみよう.Qtというパッケージは見つからないので,QT_jllというのをインストールしてみた.インストール時にエラーが起きている.VS Code内でJulia→pkgではエラーは起きなかった.⇒しかし,サンプルは動かない.

オリジナルのソースコードは反応するようになった.

image

デバッグはできないが,何とかアプリを構築できる目処は立ったとも言える.EXEに仕立てるには,PackageCompiler.jlというのが必要になる.⇒インストールできたが,ビルドできない.build_executableが未定義になってしまう.PackageCompilerではなく,ApplicationBuilder という名前が出てきた.以下のコマンドで動いた.

Julia> PackageCompiler
Julia> create_app(“密天GUI.jl”, “密天GUI”)

ただし,エラーが出ている.引数がまずいようだ.

using PackageCompiler
create_app("/path/to/Hello",         # this is the directory where Project.toml resides
           "/path/to/HelloCompiled") # target directory where you want your compiled app to be generated

project.tomlというファイルがどこかになくてはならないのだが… Julia にはプロジェクトという概念はなかったような気がするのだが… 実際,メニューにはそれらしきコマンドは見当たらない.⇒プロジェクトはpkgで生成されるようだ.

pkg> generate 密天GUI

現在のフォルダの下に指定した密天GUIというプロジェクトが生成され,同時に蜜天GUI.jlというファイルも作られる.密天GUIの中にはProject.tomlというファイルが作られ,そこにはsrcというフォルダができていて,その中にも蜜天GUI.jlというファイル作られている.いや,最初の蜜天GUI.jlは元々あったものだ.Project.tomlの内容は以下のようなものだ.

name = “密天GUI”
uuid = “d0bef8e6-be7e-4316-93e9-b4cd7ca35f8f”
authors = [“babalabo “]
version = “0.1.0”

src\蜜天GUI.jlの中身は,以下の3行だ.

module 密天GUI
greet() = print(“Hello World!”)
end # module 密天GUI

このファイルを実行すると,

Main.密天GUI

が出力される.しかし,greet()という関数が実行された気配はない.greet()の下に一行追加して

println(“密天GUI ############”)

実行すると,

WARNING: replacing module 密天GUI.
密天GUI ############
Main.密天GUI

が出力される.どうもよく訳が分からない… フォルダを変えて,新しいプロジェクトフォルダを見るようにしたら,上の警告が消えて,まともな動作になった.

密天GUI ############
Main.密天GUI

(@v1.10) pkg> activate .
   Activating project at `D:\蜜蜂天国GUI\密天GUI\密天GUI`

ビルドするときにはJuliaを以下の構文で起動する必要がある.

❯ julia -q –project ⇒エラーになる.

その後で,以下を実行する.

julia> create_app(“MyApp”, “MyAppCompiled”) [ Info: PackageCompiler: creating base system image (incremental=false), this might take a while… [ Info: PackageCompiler: creating system image object file, this might take a while…

ほとんど空に近いアプリだが,ビルドはかなりの時間が掛かる.⇒しかし,最終的にはエラーで終わってしまった.

ERROR: failed process: Process(setenv(`’C:\Users\babalabo\.julia\juliaup\julia-1.10.2+0.x64.w64.mingw32\bin\julia.exe’ ....

今回は39個しかDLLが生成されていない.(その前は54個?できていた)julia.exeを実行してもぱっとウィンドウが一瞬開いて閉じてしまう.ただし,今回はbinの他に,shareというフォルダができている.この中にはファイルが3個できているが,そのうちの一つはProject.tomlだ.⇒どうも,GtkはWindows向きにはできていないようだ.REPLでは動作しているようなのだが…

https://docs.gtk.org/gtk3/building.html

GtkをWindowsで使うためには,gvebuildが必要なようだ.これはPythonスクリプトで,VSを使ってGTKライブラリを構築する.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA