# TimesTables.jl, a fun (😰) app using QML.jl and PackageCompiler.jl

**URL:** <https://discourse.julialang.org/t/timestables-jl-a-fun-app-using-qml-jl-and-packagecompiler-jl/46799>\
**Category:** Community\
**Tags:** announcement\
**Created:** [September 17, 2020, 7:56pm UTC](https://discourse.julialang.org/t/timestables-jl-a-fun-app-using-qml-jl-and-packagecompiler-jl/46799 "2020-09-17T19:56:19Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![barche](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/barche/32/79_2.png) [@barche](https://discourse.julialang.org/u/barche)\
**Post date:** [September 17, 2020, 7:56pm UTC](https://discourse.julialang.org/t/timestables-jl-a-fun-app-using-qml-jl-and-packagecompiler-jl/46799/1 "2020-09-17T19:56:19Z")

</div>

Hi all,

Following the excellent demo of PackageCompiler at JuliaCon, I decided to give it a try for a GUI application using QML. You can find the result at [https://github.com/barche/TimesTables.jl](https://github.com/barche/TimesTables.jl)

The application itself is quite simple, intended to force my kids to do elementary school math exercises. What is more interesting is how it works, some highlights:

- It is based on the “new” QML.jl workflow, i.e. everything is linked together using Observables. That should make it easy to replace the GUI with something web-based, for example
- The QML code (together with Dutch localization for the prompts) is available in a separate artifact, for PackageCompiler compatibility
- CI (github workflow) is set up so that on release, PackageCompiler is invoked automatically to build an executable for Mac, Linux and Windows

Some caveats:

- Binaries are not signed, leading to dire warnings on Windows and Mac. It is almost unusable because of this on Mac, since you have to approve each dylib separately (a command line workaround exists, if you feel like messing with your security settings in a bad way).
- Just compiling the application with PackageCompiler did not result in a lag-free experience, it was necessary to record a “typical” session to generate precompilation statements. You can see the difference between v0.1 and v0.1.1.

All in all, I think the result is quite promising, showing that an easy way to distribute Julia-based interactive applications is just around the corner. It still needs some polishing regarding the signing and maybe auto-generate an installer.

---

<div class="post-metadata">

**Author:** ![RoyiAvital](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/royiavital/32/571_2.png) [@RoyiAvital](https://discourse.julialang.org/u/RoyiAvital)\
**Post date:** [October 2, 2020, 1:24pm UTC](https://discourse.julialang.org/t/timestables-jl-a-fun-app-using-qml-jl-and-packagecompiler-jl/46799/2 "2020-10-02T13:24:44Z")

</div>

Did you create the `precompile_statements.jl` file manually or automatically?  
Is there a way to create it automatically in a manner which means no compilation actually happens at run time?

---

<div class="post-metadata">

**Author:** ![barche](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/barche/32/79_2.png) [@barche](https://discourse.julialang.org/u/barche)\
**Post date:** [October 3, 2020, 12:32pm UTC](https://discourse.julialang.org/t/timestables-jl-a-fun-app-using-qml-jl-and-packagecompiler-jl/46799/3 "2020-10-03T12:32:29Z")

</div>

I created it using the `--trace-compile=precompile_statements.jl` option when running Julia, and then used the application for a bit. If you want absolutely no compilation at run time, you have to make sure to trigger all possible methods that can get called.
