Out of curiosity, the topic on crowdfunding for a GUI ML project make me asking if does any project (not necessarily related to ML) exist that uses PackageCompiler.jl to produce a self-contained julia-base GUI app for Windows or Linux… any example ?
ok, but does any actual publicly available GUI app exists ?
what do you mean by “publicly available”? download links for App binaries?
Yes, if there is any example I can just download & run… And even better if there exists any “real app”, in the sense that does something, not just for demonstrative purposes…
I did upload one, but only for macOS.
I made a small example using QML.jl. The kids love it
nice… did you release it also as a self-contained binary executable?
Yes, it’s in the releases:
At least in the Linux tarball, symlinks aren’t symlinks but text files with the path of the target as content
I have tried your MacOS app. Two concerns:
- The size of the binary is just too large.
- It is too slow to start it for the first time.
If it is normal for GUI app written in Julia, I’d say Julia still has a long way to go in GUI app development: the user experience is so painful.
yep, for example
TimesTablesApp/lib/julia/libjulia.so.1 is a text file whose content is
libjulia.so.1.5 instead of being a symlink to it…
(obviously then the executable doesn’t work…)
Yes, I didn’t actually test the linux binary myself. I’m guessing it’s because I use 7z to create the archive, this probably needs a platform-dependent if clause around it:
Note that the very first time you start something in mac, the OS does a bunch of extra checks which makes it a lot slower. The second time is faster. (It might still be slow though, depends on the application).
I think the PackageCompiler developers are aware of the size issue, but since we need to ship the Julia runtime it’s never going to be small. Another issue specific to this case is that our Qt package is monolithic, so we’re shipping a lot more Qt libs than needed here. Anyway, it seems like large binaries are a trend, for example the element.io chat app is also a 100 MB download, and that is just a wrapper around a website… (no excuse not to do our best to limit sizes here, of course).
Regarding the speed: I’m a bit disappointed myself, I assume this will get better and it may also be in part due to CxxWrap, which is not that precompilation friendly, apparently.
A third problem on Mac is that it doesn’t actually start unless you quench the security features, otherwise you have to manually allow every included library to open. Similar warnings appear on Windows.
The build steps (very few) can be seen in the Readme.md
A ZIP archive for windows can be downloaded here: https://github.com/oheil/PlayGroundApp/raw/main/PlayGroundApp.zip
Unpack and double click on PlayGroundApp\bin\PlayGround.exe
- PackageCompiler works out of the box
- the standalone executable doesn’t show any issues
Con’s (confirming already mentioned concerns from previous posters):
- Package (the ZIP archive to download) is too large
- Console window is shown (should be suppressed)
- Startup time is not so short as expected (a splash screen would be nice). It is faster to create a sysimage, than run Julia and the startup command manually.
All in all I am very pleased with the outcome. Until now I have only read about the possibility to create something standalone and I knew I would want it sometimes, but never tried it. The Con’s are not so nice and should be addressed somehow, but, for me, they aren’t a show stopper right now.
I wouldn’t add a binary blob, especially such a large one, to the Git repository. It bloats the history in a very bad way
It’s only a play ground, nothing serious. If the large file annoys me, I will remove it again (and the history).
Note that you can also trigger github to build the binary for you, and automatically attach it to a release, see the workflow files in TimesTables.jl.
We wanted to let you know that you’ve used 80% of your data plan for Git LFS on your personal account oheil. No immediate action is necessary, but you might want to consider purchasing additional data packs to cover your bandwidth and storage usage:
Well, it starts to annoy…