[HN Gopher] GenieFramework - Build web applications with Julia
___________________________________________________________________
GenieFramework - Build web applications with Julia
Author : msravi
Score : 196 points
Date : 2022-04-06 08:45 UTC (14 hours ago)
(HTM) web link (genieframework.com)
(TXT) w3m dump (genieframework.com)
| blindseer wrote:
| I would caution someone interested in this to consider some of
| the ramifications of using Julia / Genie. When I last used it, it
| was a extremely painful development experience because of the
| time it took to for Julia to reload when "live reload" was
| enabled. Further more, many features like authetication were
| nowhere to be found. Also, startup time for the server was SO
| large that it just does not work on heroku, even with
| PackageCompiler. And forget about using AWS Lambdas or Cloudflare
| pages or something like that. IMO, Rust, Go, Javascript or even
| Python is a waaayyy better option for this.
|
| Kudos to the devs for continuing this work though. I'm sure it'll
| get there some day.
|
| If you absolutely want to use Julia because you have an existing
| Julia code, you can use HTTP.jl instead. It's more lightweight
| and you can build routes using that into your application.
| sundarurfriend wrote:
| Adding a couple of responses from Genie's creator [1], when
| parent commenter mentioned these issues a few months ago, for
| visibility in case it's helpful to someone here:
|
| > startup time for the server was SO large that it just does
| not work on heroku
|
| Response: The solution (which granted should be maybe better
| documented) is to set the `EARLYBIND` env variable to `true` -
| this will allow Genie to bind to the port very early so Heroku
| will love it.
|
| > many features like authetication were nowhere to be found.
|
| Response: Genie has built in support for handling (encrypted)
| cookies and sessions and plugins like GenieAuthentication (or
| GenieAuthorisation) and SearchLight provide straightforward
| features. Have you used these?
|
| ----
|
| With that said, I myself do think of Genie as (currently)
| something to be used when (a) you already have Julia code and
| need a web front-end for it, or (b) you want to experiment and
| possibly break things for the potential of expanding horizons.
|
| [1] https://news.ycombinator.com/item?id=29830003
| svnpenn wrote:
| In regards to startup time, isn't Julia an order of magnitude
| slower than everything, even Ruby? Why would anyone want this?
| freemint wrote:
| A webserver spends a minuscule amount of its time in startup.
| freedomben wrote:
| Startup time in a big Spring Boot or Rails project can easily
| be two minutes or more. Sadly I speak from experience.
| adgjlsfhk1 wrote:
| For this use-case, PackageCompiler (for dependencies) + Revise
| (for your code) fixes that.
| blindseer wrote:
| This is just not true. Even with PackageCompiler I was
| getting 30 seconds or more startup time for a medium size
| codebase with Genie.
| NeutralForest wrote:
| Good stuff! I think it's important that analyses done in Julia
| can be presented in dashboard form with Julia tools as well.
| Having a one language stack is just that much less work.
| melkael wrote:
| To Genie users, what is your workflow ? I love Julia for
| scientific computing but the compilation time is a bit of an
| issue. I would imagine I would need to compile a lot more when
| doing web dev. How do you work around this ?
|
| If there is a solution to this, Genie would be awesome as I could
| directly put into production my Julia models without using a
| third party language.
| huijzer wrote:
| Have you tried PackageCompiler.jl?
| abstracto wrote:
| Honestly, this is an area where the op would be far better
| served by using go/rust/c++ or another backend language. Can
| launch a server with microsecond latency, and if it grows get
| good elastic behavior. No awkward route precompilation or
| thirty minute build times... Julia sure is neat, but this
| isn't an area where it's strong.
| 0des wrote:
| I do webdev in Go, and freely recompile as it takes a
| second or less on my hardware which consists of a rock, a
| rubber band and two sesame seeds on 20x2 liquid crystal.
| Its no struggle to recompile 100x in a day just iterating.
| jjtheblunt wrote:
| microsecond latency? on what exact hardware are you seeing
| that?
| mirekrusin wrote:
| Must be new M1 Ultra or something.
| [deleted]
| andyferris wrote:
| I haven't used Genie (though after this post I am tempted!) but
| I imagine compilation overhead would only occur once (e.g. the
| first time each route is used) and that you could pretty easily
| use precompile statements and/or PackageCompiler.jl to do the
| compilation before the service goes live. After that point,
| Julia should have produced fast code and provides a good
| runtime for these kinds of async/multithreaded applications
| with built-in M:N scheduling (perhaps a
| concurrent/multithreaded GC might help reduce tail latency but
| I imagine it should already be competitive with everything but
| well-written Rust/C++/C).
| alhirzel wrote:
| Revise.jl[1] is very helpful for development, as it allows for
| seamless recompilation without restarts. Cold start can also
| take a long time, so sometimes it helps to add options[2] such
| as -O0 when developing. Two paths forward for AOT compilation
| are PackageCompiler.jl[3] mentioned already in this thread
| (things like RelocatableFolders.jl[4] come in handy) and the
| possibility of GPUCompiler.jl[5] some day.
|
| [1]: https://github.com/timholy/Revise.jl
|
| [2]: https://docs.julialang.org/en/v1/manual/command-line-
| options...
|
| [3]: https://github.com/JuliaLang/PackageCompiler.jl
|
| [4]: https://github.com/JuliaPackaging/RelocatableFolders.jl
|
| [5]: https://github.com/JuliaGPU/GPUCompiler.jl/issues/3
| zorked wrote:
| I only use Genie slightly to add a simple UI to my projects -
| I'm no web dev. Time to first request is as terrible as you
| would expect, but one can then dynamically iterate on a running
| interpreter by changing and adding pieces, and then it's not
| that bad as only the new bits need recompilation.
|
| I never tried the fancy to speed up compilation.
| white_dragon88 wrote:
| This looks utterly bananas. I mean... why. Because variety is the
| spice of life? How are also those companies using this framework?
| cmrdporcupine wrote:
| Julia is a fairly elegant nice language and multiple dispatch
| makes a lot of sense in all sorts of places.
|
| I don't really get why Julia is pigeon-holed for numerics. I
| prefer its syntax to Python and would consider it for scripting
| applications where I use Julia now.
| open-source-ux wrote:
| I also think Julia is a very nice language and I prefer its
| syntax over Python.
|
| However, I can understand why Julia is "pigeon-holed for
| numerics". It started as a language for scientific computing.
| Today, it promotes itself as a general-purpose language
| suitable for any task - not just for scientific tasks. Only
| time will tell if perception of the language will shift. As
| this discussion shows though, the association with scientific
| computing remains strong.
| qualudeheart wrote:
| Single language stacks are simpler. For heavy duty webdev tasks
| you should use a real web language. For simple sites this looks
| fine.
| clarkevans wrote:
| Frameworks are helpful when a community would benefit by having
| a bit less variety in how things are done. Even if it's sub-
| optimal for most individual use cases, having a standard way of
| building applications in a community makes it easier to
| construct and maintain projects.
| FieryTransition wrote:
| Imagine spending a lot of time on learning Julia, then imagine
| you want to do web dev, then imagine your favorite language is
| Julia, and you don't want to use time on learning something
| else? So why not I guess. From reading the landing page, I
| don't see a compelling reason to use it unless you are already
| in the ecosystem, which is fair.
| lf-non wrote:
| why not ?
|
| People are free to use their time & energy to develop
| interesting things in whatever language/toolchain/techstack
| they like and share with the community.
|
| That is how ecosystems evolve, expand, and new ecosystems
| emerge.
|
| We don't want to be locked into incumbent solutions forever.
|
| Not everything needs to have corporate support or large scale
| use from day one. It doesn't even have to be useful at all on
| day one, or ever for that matter.
| epolanski wrote:
| I'm curious about this project.
|
| Web development benefits a lot from near-instant recompilations,
| which I heard aren't possible with the Julia programming language
| as codebases grow. Is that still the case?
| clarkevans wrote:
| Revise.jl is used to provide incremental runtime recompilation;
| and Genie now has Revise built-in.
| NeutralForest wrote:
| Good to know, thanks for pointing it out.
| nancarrow wrote:
| why? i like Julia but it's not a great general purpose language
| IMO.
| clarkevans wrote:
| I'm curious if Julia's multiple dispatch could work naturally for
| server-side web development. In many content management problems,
| you often run into pages that are parameterized in multiple ways:
| the kind of data object being viewed, role based permission, and
| display capabilities, among others. In object oriented systems
| this often leads to double dispatch in one way or another. With
| Julia, it may instead result with an "just ahead of time" compile
| for each permutation; once that's done, page rendering should be
| snappy. One could use PackageCompiler to build an image with
| commonly needed permutations so that each computational unit's
| startup time is reasonable. During development, Revise.jl
| provides incremental updates to pages affected via code
| dependency graph.
| pjmlp wrote:
| If it works for Common Lisp and C++ [0], it certainly does for
| Julia as well.
|
| [0] - In C++ you can emulate it via a mix of function
| overloading and template metaprogramming.
| freemint wrote:
| > With Julia, it may instead result with an "ahead of time"
| compile for each permutation;
|
| This would be an odd approach, just have the first person who
| hits a new combination of function and type pay a few ms of
| compile time. That should work fine.
| clarkevans wrote:
| Oh dear. I meant to write " _just_ ahead of time " (I
| corrected the post above). This is the Julia community's take
| on "just in time", but taking into account that there isn't
| an interpreted fallback. Exactly when a new type
| specialization is used, it is compiled then and there.
| dTal wrote:
| >there isn't an interpreted fallback
|
| julia --compile=no
| logankilpatrick wrote:
| Folks might be interested in:
| https://www.freecodecamp.org/news/how-to-build-web-apps-in-j...
___________________________________________________________________
(page generated 2022-04-06 23:01 UTC)