20 ms·
Julia frameworks to create desktop GUIs and web apps
- thetwentyone 5y agoI'd also add Pluto notebooks[1], which when deployed[2] powers interactive sites like MIT's Intro to Computational Thinking[3]. I also get a ton of mileage creating Pluto notebooks and sharing the results for others to run or view a static webpage of the results. 1: https://github.com/fonsp/Pluto.jl https://github.com/fonsp/Pluto.jl 2: https://github.com/JuliaPluto/PlutoSliderServer.jl https://github.com/JuliaPluto/PlutoSliderServer.jl 3: https://computationalthinking.mit.edu/Spring21/ https://computationalthinking.mit.edu/Spring21/
- petre 5y agoThis is so cool. I wish we had open source tools like this when I was in university and used Mathcad and Mathlab. Edit: I've just tried it and it's quite slow, but I am positive this will improve given more time and development.
- logankilpatrick 5y agoGoing to add this, good idea!
- civilized 5y agoWhoaaaaaa. It's reactive?? Not sure I'd want that in all situations, but what an incredibly powerful feature.
- adgjlsfhk1 5y agoIt's a seriously cool piece of tech.
- civilized 5y agoNothing will ever kill spreadsheets, but if something did, it would be this.
- fault1 5y agospreadsheets are the ultimate reactive interface. I wish there were a mashup of the notebook/spreadsheet paradigm that was reactive.
- adgjlsfhk1 5y agoYou realize that Pluto is a reactive notebook right?
- fault1 5y agopluto is not a spreadsheet though. Observablejs just got support for Excel and Google sheets, which is really interesting and probably the closest thing to an integrated reactive spreadsheet/notebook concept: https://observablehq.com/@observablehq/release-notes#cell-801 https://observablehq.com/@observablehq/release-notes#cell-80... ironically, I remember seeing features like what I'm thinking of, which was first spreadsheet I ever used- Wingz: https://en.wikipedia.org/wiki/Informix_Wingz https://en.wikipedia.org/wiki/Informix_Wingz it had a mode where you could take portion of your cells and make it flow exactly like a notebook
- fault1 5y agoyou can add execution barriers to individual cells for long running processes. here is a linear algebra class taught in pluto/julia (not mine, but found it on a random google search): https://www.math.hkust.edu.hk/~emarberg/teaching/2020/Math2121/ https://www.math.hkust.edu.hk/~emarberg/teaching/2020/Math21... so I think the approach is great at least for education. the notebooks work automagically in binder! I think people are working on a wasm codegen for julia, which should a killer feature.
- zabi_rauf 5y agoShameless plug. I have been building a blog using Next.js (for static content) with Pluto (for interactive and richer content, inspired from MIT Intro to Computation Thinking). I think it's a great combination of richness and expressive content which brings the user along with the interactiveness. Example post: https://zabirauf.dev/blog/notebooks/understanding_std https://zabirauf.dev/blog/notebooks/understanding_std Source code: https://github.com/zabirauf/blog https://github.com/zabirauf/blog P.S: Still dealing with some bugs in deploying PlutoSliderServer so interactivity is broken.
- MisterBiggs 5y agoGreat idea. I was honestly pretty disappointed by how hard it was to put a blog post I wrote in Pluto onto my static website. I still really think Pluto needs a way to generate static markdown similar to jupyter and maybe create a button to "edit or run this notebook" as an image with a link to some javascript magic with the actual notebook embedded. I ended up having to use iframes which felt far from ideal[1] since the html output is a jumbled mess[2]. [1] https://projects.ansonbiggs.com/posts/2021-08-24-julia-for-matlabbers/ https://projects.ansonbiggs.com/posts/2021-08-24-julia-for-m... [2] https://gitlab.com/MisterBiggs/julia-for-matlabbers/-/blob/master/index.html https://gitlab.com/MisterBiggs/julia-for-matlabbers/-/blob/m...
- anchpop 5y agoWow, seems like http://observablehq.com/ http://observablehq.com/ but for julia, which is exactly what I've been looking for! Thank you
- leephillips 5y agoThe reactive model is based on that. https://lwn.net/Articles/835930/ https://lwn.net/Articles/835930/
- bmitc 5y agoThat is pretty cool, and I'll definitely be taking a look (I was actually looking for what Julia was doing in the notebook space just the other day). Also the course seems interesting as well. But I feel compelled to at least remark on the fact that they call this "revolutionary", which is a bit much and cringe worthy. While it is indeed a nice package, just don't call it revolutionary, when this type of thing has been available either in part or whole in things like Mathematica, MATLAB, LabVIEW for years (decades really) and other notebooks have very nice features as well. It's just MIT can't do anything without a little hubris.
- deleted 5y ago[deleted]
- komuher 5y agoMakie.jl is very cool i was using it for few presentations :D
- derbOac 5y agoHow does Makie compare to something like Gadfly?
- krastanov 5y agoThey have little in common. Gadfly is for statistical graphs, roughly in the style of ggplot. Makie is general purpose, roughly in the style of matplotlib, but (I believe) better designed, way faster (after excruciatingly slow compile), much easier to extend with custom functionality, and awesomely interactive. There is a ggplot/Gadfly-like library built on top of Makie called AlgebraOfGraphics (homage to GGplot).
- btbuildem 5y agoWhat is the advantage? Does it make some things easier that are very hard to do in languages / frameworks traditionally used to build app/webapp GUIs?
- dagw 5y agoThink about it from the other direction. Julia makes writing certain types of programs much easier than in other languages traditionally used to build app GUIs. This then makes it possible to wrap those programs in a GUI for distribution. If you're wrapping a GUI around a CRUD app then Julia probably isn't your best choice. If you're writing a novel differential equation solver and want to provide a GUI for people to explore it then this makes it possible to do so.
- acomjean 5y agoGenerally a lot of the end user of these programs aren't supper great at getting them to run, so an easy way to get your algorithms into the hands of users is very helpful. R has a pretty good "share my stuff on the web" story with "R shiny" web application server that's quite popular with our data scientists. And desktop applications for things that require files too big for easy web use is helpful too. https://shiny.rstudio.com https://shiny.rstudio.com
- shepardrtc 5y agoI've been building a GUI with Makie for a personal project and its pretty powerful. It removes virtually all boilerplate code, and lets you add widgets easily. It uses Observables to allow for automatic updates to data values, which can make life much easier. You just need to draw a graph once and you can update the Observable whenever you want - the graph will redraw the data instantly. The only drawbacks I would say are the docs needing to be expanded more and more widgets to be included (such as a menu bar).
- amelius 5y agoIs there anything that is cross-platform, across desktop, smartphone and web-apps?
- hpen 5y agoI went down the rabbit hole of cross platform dev and opted for React-native-web because I already knew React. I sure hope Flutter is a better experience because it just made me want to jump jobs to a native gig.
- jbverschoor 5y agonativescript react-native
- sharikous 5y agostatic HTML files - I am not kidding these days you can embed JS and WebAssembly in your HTML file and have plenty of advanced features: SIMD, GPU access, GUI (obviously), even barcode scanners gently provided by the browser, ... it's only the tooling that is not there yet. give it a few years or so. I am doing myself some work in this area and I must say - the technology is there, it's only a matter of porting to the the web a few scientific libraries
- blindseer 5y agoI used Genie with PackageCompiler on AWS to host build a wedding website for some friends (features included personalized invites + custom photo uploads with filters directly to the bride and groom + live mini games during the wedding). The awesome part about this was that image processing in Julia was a joy to work with. And packaging and environment issues were non existent. I've spent A LOT of time dealing with those in Python, and having things almost always just work was really nice. I had a few issues though, 0) I could not use the free tier in heroku because Julia + Genie would take too long to start up, and Heroku's free tier will kill the VM if you don't serve a response in 30 seconds. I was able to get it to work with PackageCompiler but even that was close when the VM booted up for the first time on Heroku. At the end I decided to use AWS instead. 1) None of my friends who wanted to contribute wanted to use Julia (they said if they were learning something new they'd prefer Go, Ruby or even just using C++). 2) Library support for Genie was just okay. Implementing Auth + Database support + dealing with cookies, sessions etc took waaayyy too long, when I just wanted to implement features for the website. I wanted to parse HTML from a custom calendar page and tried to use Gumbo, and it was slow and painful to work with. In the past when I did the same thing with Python, things just worked. Beautiful Soup 4 was SOOO much more productive for me than trying to do the same thing in Gumbo. 3) Development was SLOW. Julia + Genie takes forever to reload, even with live reload. And if you change one line in the HTML that you are about to generate, and you'll have to wait 30 or more seconds to see the update in a local developent environment. This is PAINFUL. Once the size of the application grows or you add dependencies, it takes longer. The error messages aren't too good either and don't get me started on the usability of language server in vim/neovim. The one other friend who actually downloaded Julia and installed every thing in order to contribute to the project instantly gave up on making any contributions just because of the development experience. And, when I deployed it to AWS, even after using PackageCompiler I wasn't getting instant server responses (I'm assuming I did something wrong here though). The final binaries that I was deploying to AWS were also huge (hundreds of megabytes). On reflection, if I had implemented the same project in Python, I would have completed this maybe 10 times faster (based on past experience), and run time would be been as fast too (except for the image processing piece). Using Python + Flask and using a subprocess to call Julia would have been a better approach to solving this problem, instead of what I choose to do. I had stretch goals for this project (more mini games) that I wasn't able to even attempt making, primarily because I was dealing with all the pain points of developing in Julia (I guess it was also my fault for trying to get all this done in a couple of weeks of my spare time). I really like Julia as a language, but using it for anything other than scientific computing (more specifically using it as a general purpose programming language) seems to me as a recipe for pain at the moment. I would not recommend deploying production applications in Julia right now unless you HAVE to use it (because of some library that's only available in Julia) or your development team is willing to put in work to write libraries from scratch + deal with slow start up. Maybe in a few years when tree shaking is implemented and more latency issues are resolved and language server gets significantly better, it'll be a competitive choice. Until then I'll be curiously watching from a distance :)
- boznz 5y agoWhat are the overheads and dependencies compared to say QT, C# or Delphi/Lazarus ?
- cardosof 5y agoI feel that the time to migrate to Julia is now. The ecosystem is finally coming together and there doesn't seem to be breaking changes to the language anymore.
- AareyBaba 5y agoThe startup time was a blocker last time I jumped in (mid-2021). Have things changed ?
- shepardrtc 5y agoPackageCompiler.jl helps significantly, but it's still an issue.
- agucova 5y agoIt has improved gradually. The community is targeting latency optimizations in the entire ecosystem, and that effort has been moving rapidly.
- kolbe 5y agoPlots is still a problem for me. Rust and Julia have a lot in common in this respect, but I will gladly take the advantages of their package management systems if it means a longer compilation time.
- adgjlsfhk1 5y agoTLDR: no. 1.7 is marginally better than 1.6 for startup time, but it's not a massive change.
- IshKebab 5y agoI don't see how it can while their "load a module" step involved compiling it from C++ source. Although I guess that doesn't explain why it is still so slow the subsequent times.
- amkkma 5y agoCan you elaborate? How does loading a Julia module involve compiling c++?
- frank4321 5y agolooks interesting