[ANN] ConventionalApp.jl

Simple framework for making conventional applications in Julia.

What is it for?

Julia “Project Environments” define the set of packages needed to experiment within a particular problem space. The Julia flow therefore encourages users to activate a project environment and use problem-specific “scripts” to run their experiments.

By design, project environments are meant for somewhat open, “interactive” explorations (i.e. assemble custom analyses as needed).

In comparison, conventional applications tend to run specific code when launched. ConventionalApp.jl therefore provides tools to help configure the Julia environment, and launch said code.

Doesn’t PackageCompiler.jl do this?

As far as I know, PackageCompiler.jl works to compile your code as a standalone application.

ConventionalApp.jl does not compile your application. It is meant to launch standalone applications on computers that do have Julia installed.

What does it do?

  1. Creates a run.jl file in your application/environment’s root folder which does:
    • Resets the LOAD_PATH (environment stack) to only include ["@", "@stdlib"].
      ("@v#.#" is usually full of packages that should not be available in the stack)
    • activate-s your application’s project/environment (Project.toml).
    • include("startup.jl") if your project has a startup.jl file in its root folder.
    • Launches your application’s run_app() function (same idea as int main() {}).
  2. Creates a bash launch script on the user’s computer.
  3. OR Creates a windows shortcut on the user’s computer.
    • Actually only prints out how to create the shortcut at the moment (haven’t yet figured out API calls necessary to create shortcuts).

Is it that awesome?

I don’t think so, no. It seems overly complicated to do something that is conceptually very simple. Maybe I am missing something, but it has been a pain to deploy applications on other machines for users that are not savvy developers.

I’m actually hoping someone will show me how to do this more easily so that I can update my flow.

But if that’s the best we have at the moment, I guess I’ll stick with it.