周長2等分線図(全域版)をXに投稿

動作のおかしいところがある.

image

Aの左にグリーンの◯が飛び出している.いや,これはノーマルなのかもしれない.辺ACは短いので周長/4の点が延長に出てしまうのだろう.まぁ,これは現在の仕様では仕方ないのかも知れない.2個の点を線分で結んでおけばよいのではないか?

周長2等分線図(全域版)をXに投稿した.これを見たのかどうかは分からないが,おしろい(Face Powder)とOmolesho Quadry Abiodunがフォローしてくれた.これでフォロワーが4人になった.

https://twitter.com/Cabbage1946/status/1787243696062341419

結構いい線まで行っているのだが

結構いい線まで行っているのだが,てこずっている.要領は大体分かったので,作り込んでゆけばよいはずだ.目標は,P点を全領域で動かせるようになることだ.つまり,P点がデカルト平面上のどこにあっても,与えられた三角形の周長等分線が引けるというのがゴールだ.P点が三角形の内部にあるときは,場合によっては等分線が2本になる場合もある.このような場合にも正しく動作するようにしなくてはならない.図面に書き込んでいる円の個数は18個,多分これ以上増えることはないと思われるが,直線ないし線分の数はその何倍もあり,それをまた上回る数の点がある.おそらく,最終的にはオブジェクトの総数は数百個に達するのではないかという気がする…

この図面にはおそらく6個の象限があると推定されるが,現在のところそのうちの2.5象限しかカバーできていない.まだ未整備のところが多々あるためと考えられる.それらを潰してゆくしかないだろう.blueの領域がまったく出ていないのはなぜだろう.すでにF点は決めてあるのだが,N点が定まっていない.まず,ここから片付けることにしよう.F点というのは頂角の2等分線上の点でこの点とPの中点を中心とする円がN点の位置を決定することになっている.N点はL2上の点であり,L2というのは,3本の基線のうちの一つだ.

大体全域で動くようになった.ただし,まだ問題点がいくつかある.内部の三角形と小円が交差するとき,2点で爻わる場合,どちらを取るかという問題だ.どちらかを消さなくてはならないが,それを図形から判断できるだろうか?スクリプトを使って切り替えることができれば話は簡単なのだが… 実際,現在の実装では目視で明らかに2等分になっていない場合がある.⇒1本線を消したら正しく動作するようになった.⇒等分線が3本出てくる場合がある.この動作は正しい.

ナムの三角形周長2等分線作図問題の一般解

ナムの三角形周長2等分線作図問題の一般解をGeoGebraで書こうとしているのだが,なかなか難しい.できるだけ画面をすっきりさせたいのだが,余分なゴミが出てきてしまう.これはポイントが落ちてしまっているためだろう.たとえば,下図には3本千切れた尻尾出ている.

image

これの固着できない点はどこかの線分の延長上にあったのではないだろうか?⇒単純に消しておくだけでよいのではないか?どうも,そもそも仕様通りの動作になっていない.実装が悪いのか,設計が間違っているのか?もう一度作り直しするしかない.

image

真ん中の小さい三角形は包絡線図でかなり重要な図形になってくるが,⊿ABCの形状によっては描画できないことがある.線分との交点ではなく,延長上の交点を取ってみる.


特性関数を対話的に切り替える

また,CalcTrajectoryでエラーが出ている.⇒処理本体を関数化したため,変数が見えなくなっている.変数をトップスコープに移した.

PNGファイルの保存パスが存在しないというエラーになる.

png(“.\\PNG\\” * titleName())

現在の作業フォルダが蜜天GUIになっているためではないか?その下のmittenを開くようにした方がよい.⇒このフォルダは事前に作っておく必要がある.あるいは,むしろデスクトップに生成するようにした方が分かり易いかもしれないが…⇒これは後から考えることにして,とりあえずフォルダを作っておこう.

一応一通り動くようになった.⇒InfinitePoolGameをモジュール化したらまた動かなくなってしまった.isinteractiveをisinteractive()に変えたためだ.isinteractiveは変数ではないので,これまでそれが通っていたことの方がおかしいのだが,デバッガで走らせることはinteractiveには入らないのだろう.REPLからinclude(“src\\InfinitePoolGame.jl”)では想定通りの動作,つまり,isinteractiveはtrueになる.定数を切って切り分けるしかなさそうだ.技術的にかなり難しい問題が出てきた.

ようやく元のように動くようになった.特性関数を動的に切り替えるというのが目下の課題だ.julia には eval という関数があるのでなんとかなるのではないかと思っているのだが… まず,関数ポインタのようなものがあるかどうかを探さなくてはならない.⇒プロットを表示するのは以外と簡単にできた.

include(“InfinitePoolGame.jl”)

でInfinitePoolGame内の関数にアクセスできる.とりあえずは,これで十分だ.本当はimporないしusingでロードしたいのだが,まだパッケージになっていないためロードできない.includeは実行時に何回でも実行できるので,最悪の場合(他に打つ手がない場合)は,InfinitePoolGame.jlを直接書き換えて再ロードするということが考えられる.多分,これは不可能ではないと思われる.juliaは正規表現をサポートしているので,ソースファイルの書き換えはできるはずだ.一度ここでバックアップを取っておこう.

スタンドアローン型のJuliaアプリを断念

スタンドアローン型のJuliaアプリを作ろうとしていたのだが,断念した.ともかく,先に進むことにしよう.画面上にはまだボタン1つしか出ていないが,少なくとも,①関数入力用のテキストボックス,②グラフの範囲を設定するための数値ボックスx4,③実行ボタンが必要だ.ただし,それに入る前にこれまで開発したPlotsを使ったグラフ表示を組み込んで動作確認しておいた方がよい.

なぜだろう?Plotsが読み込めなくなっている.Juliah本体でも読めない.⇒pkgで読み直した.Rootsも入っていない.⇒追加した.最終版と思われるものを動かしているのだが,エラーになった.グラフは一応出ているが,軌跡は描画されていない.CalcTrajectoryの中でエラーが起きている.なぜだろう?メニューに中国語が出ている.

image

いままではGotoDefinitionが先頭にあったような気がするのだが… おかしい.元に戻っている.Julia には言語設定というのがあったろうか?CalcProjectoryの中でplot!を実行して例外が起きている.

ErrorException(“Cannot convert Float64 to series data for plotting”)

これまではこれで動いていたはずなのだが,Plotsをリロードしたことでバージョンが変わってしまったのだろうか?少しバージョンを戻したら動いた.多分,この辺りは仕掛りのままになっていたのだろう.蜜蜂天国 2024-04-05の前は2024-04-01で4日も空いている.ログを見てみよう.4月5日には「find_zeroが動作していない」というのがあり,修正して動作するようになったが,それ以上の記載はない.その一つ前は2024/03/29で「た軌跡の描線が出なくなっている」から始まる.

2024/04/05という日付のログは2本あり,2本目のログでは「蜜蜂天国のまとめに入っているところだが,足踏み状態だ.いろいろなパターンを試してみたいのだが,そのためにはもうちょっと準備が必要だ.」として,「まとめ」を打ち切り,「JuliaでGUIアプリ」という方向に走り出している.2024-04-01版ではCalcTrajectoryではplot!を実行する代わりにpush(plt,…)している.確かにこの違いは大きい.⇒論理を戻して動作するようになった.ただし,ウィンドウが出てこない.PNGとGIFは保存されている.どこが違うのだろう?⇒出た!show=:trueのコロンが落ちていた.うまく行ったようだ.アニメを作らないオプションでも動作するようになった.

image

これで行くしかない.

なぜだろう?実行しようとすると,precompiling Gtkというのが入るようになってしまった.ステータスバーでは Julia: Evaluateing…という状態が続いている.⇒Execute active file in REPLモードでは問題なく動作するようになったが,create_appでアプリが生成されていない.⇒REPLで動作するようにjulia_main()を追加したためだ.これを外すと今度はパネルのボタンイベントが無視されるようになる.アプリの場合にはやはりコードをすべて julia_main の中に置くしかないのではないか?どうもそういうことのようだ.バックアップに戻って確認してみよう.2024-04-10版を走らせるとパネルが2つも出た.いや,遅れてでてきたのを見落としていただけだ.

書き始めてから大部日時が経ってしまったが,続けよう.ようやく動いたが,エラーが出ている.

★★★★★ julia_main ENTER ★★★★★

(mitten.exe:10740): GLib-GObject-CRITICAL **: 14:44:46.180: g_boxed_type_register_static: assertion ‘g_type_from_name (name) == 0’ failed

(mitten.exe:10740): GLib-CRITICAL **: 14:44:46.180: g_once_init_leave: assertion ‘result != 0’ failed

(mitten.exe:10740): GLib-GObject-CRITICAL **: 14:44:46.180: g_boxed_type_register_static: assertion ‘g_type_from_name (name) == 0’ failed

(mitten.exe:10740): GLib-CRITICAL **: 14:44:46.180: g_once_init_leave: assertion ‘result != 0’ failed

(mitten.exe:10740): GLib-GObject-CRITICAL **: 14:44:46.180: g_boxed_type_register_static: assertion ‘g_type_from_name (name) == 0’ failed

(mitten.exe:10740): GLib-CRITICAL **: 14:44:46.180: g_once_init_leave: assertion ‘result != 0’ failed
★★★★★ julia_main INIT ★★★★★

クリックでフリーズし,以下が出る.

image

ともかく一度バックアップしておこう.

⠸ [00m:16s] PackageCompiler: compiling incremental system image★★★★★ julia_main ENTER ★★★★★
⣄ [00m:17s] PackageCompiler: compiling incremental system imagecould not load library “C:\Users\babalabo\.julia\artifacts\da6c2aa0d20a483437256f245d3c35b25e667c62\bin\libgtk-3-0.dll”
The specified module could not be found.

▲久留島喜内の道具箱でエラーが出た.α=2, ε=1000, γ=19

image

どこかでゼロ割が発生している.εを100まで落としても同じ.自動計算ではエラーにならない.更新ボタンを押したときエラーが起きるようだ.⇒これは後日見ることにしよう.

またEXEが作れなくなってしまったい.どこをいじるとどうなるという脈絡がよくわからない.REPLでもエラーが出ている.

仕掛版ではREPLでカウントアップによるアプリ終了が機能していない.というか,その処理が入っていないので停止しない.ウィンドウを閉じれば完了するが,signal_connect(win, :destroy)のところでエラーが出る.ここではnotify(c)というのを投げているがうまく通っていないようだ.グローバル変数で状態を渡したいところだが,gtk_mainで回っているだけなので,対応できない.以前,Gtk.gtk_mainの引数のところでループを回していたことがあるが,復活させてみよう.

nclickで離脱できるようになったが,エラーが出ている.MethodError: no method matching gtk_main(::Nothing) そもそもこの構文自体よく理解できないのだが…

Gtk.gtk_main(
 while nclick < 21
  println(“gtk_main:”, nclick)
  sleep(1)
 end
)

この構文もよくわからない.

@async Gtk.gtk_main()
wait(c)

C言語風に書けば,gtk_main(void)なので,エラーになるのは当然だろう.メソッドのオーバーロードというのはJuliaでは聞いたことがない… ⇒ notify(c)を2個所で呼び出していたのが,競合していたようだ.signal_connect(win, :destroy)を止めて動作するようになった.Julia の主画面とパネルが出るようになったが,動作していない.クリックイベントが受け付けられていない.やはり,以前と同じ mitten.exeは応答していませんになってしまう.とりあえずバックアップしておこう.

EXEを実行すると,主画面が表示され,ループが回りだしてプリント文を出すところまでは動いたが,クリックするとループが停止してしまう.これは生のループでもgtk_mainでも同じだ.つまり,クリックイベントを処理する段階でどこか野壺にはまってしまっているように思われるが,その場所を特定することができない.本体ループではないことは確かだし,REPLでは動作しているので,パネル上のパーツの動作でもなく,おそらく,イベント処理後の戻り道を見失ってしまっているのではないかという気がする.

元々Juliaではこのような構成は予定外なので「できない」と言ってしまえばそれまでなのだが… GTKやそれ以外にもJuliaにGUIを付け加えるためのモジュールは多数ある.また,パッケージを生成してスタンドアローンアプリを走らせるためのモジュールというのもあるにはあるのだが,それらを同時に実現した事例というのは見当たらない.あきらめるのが一番早いのかもしれないが,それではこれまでに費やした時間がすべてただの浪費になってしまう.

実際問題としてはJuliaのパッケージは一般に配布するには大き過ぎるので,これを定版とするというつもりは元々ないのだが… 次善策として,バッチファイルでジュリアのモジュールを走らせるということは可能だろうか?これができれば実質的にスタンドアローンアプリを走らせると同等のことができるようになり,かつ配布パッケージも極小のもので済むという利点がある.この構成なら現状でもなんとか動かせるのではないかと思う.これが現時点における現実策ではないだろうか?しかし,

julia mitten.jl

を実行しても何も起こらない.以下のURLでは

https://qiita.com/Authns/items/9b13655159f90715b2fd

「> julia 〇〇.jl してはいけないよ」とあり,理由としてコンパイル時間が掛かることを挙げているが,動いている気配がない.この記事ではむしろjuliaを開いてそのREPLから実行することを勧めている.しかし,REPLからmitten.jlを実行することもできない.(以前はこの方法で走ったような気がするのだが…)どうもモジュール自体をあらかじめpkgしておく必要があるという感じだ.ただし,エラーになった.

(@v1.10) pkg> add mitten
     Updating registry at `C:\Users\babalabo\.julia\registries\General.toml`
ERROR: The following package names could not be resolved:
  * mitten (not found in project, manifest or registry)
    Suggestions: MieScattering MoistThermodynamics LimitOfDetection MicrostructureNoise mosquitto_client_jll

この方向なら行けるだろうと思っていたのだが,逆にますます嵌りそうだ.往くも地獄戻るも地獄の世界になってきた.

run(command, args…; wait::Bool = true)

というコマンドがある.これはどうだろう?juliaのREPLを開いておいて,そこにソースを流し込む方法で実行することはできる.これはVS Code内でもできる.モジュールをincludeしたりusingしたりするためにはその名前のパッケージが存在しなくてはならないようだ.このためにはgitに登録する必要があるのではないか?以前にできたというのはgitに登録したことがあったからではないだろうか?この辺りを習得するにはまた,かなりの習熟曲線が必要になりそうだ.

パッケージと呼んでいるものは,数百MBもあるフォルダのことを言っているのだろうか?ますますわからなくなってきた.ここまで粘って解けないというのも悔しいが,ここでは一旦打ち切って,juliaのREPL上で動かすことを考えてみよう.できれば,それをバッチファイルのようなものでアイコンから起動できるようなればベストなのだが… ⇒ともかく,includeで実行できることが分かった.たとえば,

julia> include(“./mitten/src/mitten.jl”)

ただし,その前にディレクトリをcd(パス名)で切り替えておく必要がある.コンソール出力はすべてJuliaのREPLに出力される.これで行くしかない.バッチコマンドから起動については後で考えることにする.

スタンドアローン型の julia アプリ

スタンドアローン型のアプリを作ろうとしているのだが,動作しない.必ずしもスタンドアローン型である必要はないのだが,生成されているのに動かないというのはおもしろくないので,もう少し粘ってみることにする.パッケージは800MBを超えてしまうので,これを毎回バックアップしていたのではたまらない.外部に置くことにしてD:の直下のcompiledに保存するようにした.ここに生成されたmitten.exeを実行すると,いままでよりは多少長い時間ウィンドウが表示されるようになった.と言っても数秒も立たないうちに閉じてしまうのだが…

ただこれではっきり分かったことは,Gtkではjulia_mainを実行しているということだ.この中にループを組んでやれば多分動作するようになると思う.ただし,動作を観ていると,Julia_mainでシェルは開かれてはいるが,UIの入ったウィンドウは開かれていないように見える.多分,これはどこかに書いてあったような気がするが,Julia_mainの中にすべての処理を突っ込まなくてはならないのではないかと思う.言い換えると,REPL用のコードとスタンドアローン用のコードが切り分けできるようになっていなくてはならない.

コマンドシェルでmitten.exeを実行すると,julia_main中のプリント文は表示されるが,すぐに抜けてしまう.また,EXEのダブルクリックによる実行では何も表示されず,プリント文も出ない.⇒julia_mainの中でwaitすることによって,下図までは動いた.

image

生成された小さいパネルも表示されているが,ボタンクリックでフリーズしてしまった.

なかなか埒が明かない

なかなか埒が明かない.パッケージを作るのにPkgTemplates.jlというのが出てきた.これを試してみよう.

https://julialang.org/contribute/developing_package/

ここではGitHubを使っている.アカウントは作ってあるので,乗ってみることにする.まず,

using Pkg
Pkg.add(“PkgTemplates”)

でPkgTemplatesをインストールし,次に以下のテンプレートを作る.

using PkgTemplates
t = Template(; user=”your-GitHub-username”,
 authors=[“your-name”],
 plugins=[
  License(name=”MIT”),
  Git(),
  GitHubActions(),
 ],
)

エラーが出てしまった.user名が通らない.ArgumentError: Git: Global Git config is missing required value ‘user.name’ “babalabos” で登録しているはずなのだが… 中にピリオドが入ることが必須なのだろうか?⇒GitHubは将来(近未来的)使うことになるような気もしているのだが,どうもとんだ回り道になりそうな気がしてきた.PkgTemplatesというのを下調べしてみた方がよさそうだ.PkgTemplatesはJulia パッケージを新規生成しようとするときの手段を与えるものだ.典型的には,既存のGit 構成から起こすというのが手っ取り早い.最初からGitに繋がっているので,いろいろ好都合ということなのだろう.これは,もうちょっと手が空いてからということにしておこう.

https://qiita.com/mametank/items/9fc1c9227303d6ca304b

この記事はJuliaのプロジェクトについての分かり易い解説になっている.この続きでPkgTemplatesを解説している.現行の開発環境では,トップに蜜蜂天国GUIというフォルダがあり,その下に蜜蜂天国GUI→ 蜜天GUI→ 蜜天→ という構成になっている..code-workspace は蜜天GUIの並びにあり,蜜天の並びには.gitと.vscodeがある.このプロジェクトはGitに登録しているので,その際に.gitが生成されたのだろう..vscodeにはlaunch.jsonが入っている.これはVS Codeに関係するものだ.つまり,Julia的には外部に当たる.

蜜天というフォルダがJuliaのプロジェクトファイルに当たる.まだプロジェクトは生成されていないが(一度は生成しているが,後に削除)srcというフォルダが残っていて,蜜天.jlが配置されている.プロジェクトとして構成するためには,ここにProject.tomlとManifest.tomlを置く必要がある.これとは別にJulia本体がインストールされたユーザ環境がある.babalabo\.juliaで,この下のenvironmentsにもManifest.tomlとProject.tomlがある.Project.tomlを開いてみると,

[deps]
Gtk = “4c0ca9eb-093a-5379-98c5-f87ac0bbbf44”
JuliaFormatter = “98e50ef6-434e-11e9-1051-2b60c6c9e899”
PkgTemplates = “14b8a8f1-9102-5b29-a752-f990bacb7fe1”
Printf = “de0858da-6303-5e67-8744-51eddeeeb8d7”

のようになっている.Gtk, JuliaFormatter, PkgTemplates, Printfの名前が見える.これらは比較的最近導入されたもので,それ以前にインストールしたPlotsなどの名前は出てこない.この記事では最初にPkgモードでgenerateによってプロジェクトを作っている.これは前にやったことがあるが,もう一度作り直してみよう.蜜天というフォルダは温存して,別にmittenというプロジェクトを起こしてみる.

pkg> generate mitten

mittenというフォルダが生成され,その中にProject.tomlというファイルとsrcというフォルダがあり,srcにはmitten.jlというファイルが作られている.このままactivateしてみよう.

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

(mitten) pkg>

プロンプトの表示が(mitten) pkg> のように変わり,「環境」が変化したことを示している.mitten.jl には以下のコードが入っている.

module mitten
greet() = print(“Hello World!”)
end # module mitten

しかし,実行しても

> Connecting to debugger… Done!

が出るだけで,何も表示されない.println(“蜜蜂天国”)を追加すれば出る.greet()は単に宣言されているというだけのようだ.確かに,呼び出せば実行できる.⇒動画を1本観た(1時間物).

Juliaのパッケージ開発2022年版 @ Bio”Pack”athon2022#2
https://togotv.dbcls.jp/en/20220421.html

ようやくコンパイルが通ったようだ.コンパイル後にアプリの実行が始まった.正常に動作している.コマンドは

julia> using PackageCompiler
julia> create_app(“mitten”, “compiled”)

で compiled フォルダには,julia.exe だけではなく,mitten.exe もできている.ただし,これを実行しても画面をちらっと見せただけで閉じてしまう.ともかく,一度バックアップしておこう.⇒julia_mainをGtk.gtk_mainで置き換えるという修正を入れてようやく動くようにはなったが,今度は最後にエラーが出るようになってしまった.

[00m:19s] PackageCompiler: compiling nonincremental system image
ERROR: failed process: Process(`’C:\Users\babalabo\.julia\juliaup\j…

バックアップに戻ってもう一度やり直してみよう.なぜだろう.フォルダがやけに大きくなっている.56KBしかなかったものが,700MB以上になっている.システムイメージを持っているかいないかの違いだ.しかし,こんなに大きなパッケージを配布するなど非現実的だ.

確かにこのバージョンではエラーは発生していない.この版ではJulia_main も gtk_main も使わずにモジュール内で単純にループしているだけだ.clickの中でもループカウントをチェックしていて,オーバーするとexitを実行するようになっているが,これを止めても動作は変わらない.ただし,ウィンドウは開いたままになってしまう.これでもう一度ビルドしてみよう.いや,おそらくEXEでウィンドウを開いたままにするには,gtk_mainが必要なのではないか?

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ライブラリを構築する.

いつの間にか来訪者が20万の大台超え

蜜蜂天国のまとめに入っているところだが,find_zeroが動作していない.どうもtryブロック内の変数がローカルになっているようだ.global 宣言することで動作するようになった.

いつの間にか来訪者が20万の大台を超えていた.何かいいことあるだろうか?タバコが切れてからそろそろ一週間…

image