[HN Gopher] Elixir Livebook now as a desktop app
       ___________________________________________________________________
        
       Elixir Livebook now as a desktop app
        
       Author : cgarvis
       Score  : 212 points
       Date   : 2022-08-02 16:08 UTC (6 hours ago)
        
 (HTM) web link (news.livebook.dev)
 (TXT) w3m dump (news.livebook.dev)
        
       | nivertech wrote:
       | No support for Ubuntu?
        
         | ch4s3 wrote:
         | Not as a downloadable desktop app, yet. You can run it in
         | docker[1].
         | 
         | [1]https://github.com/livebook-dev/livebook#docker]
        
       | wawjgreen wrote:
       | not sure what the livebook is--the landing page is not
       | sufficiently clear or coherent.
        
         | kcartlidge wrote:
         | > _not sure what the livebook is--the landing page is not
         | sufficiently clear or coherent._
         | 
         | The difference between features and benefits. It's good at
         | telling you the features (what it does) but not so much the
         | benefits (why you would use it, how it can help you).
         | 
         | A common issue, but more understandable in this case than most
         | as your average visitor to the Livebook site will likely know
         | they have a need for it already, rather than end up there based
         | on a 'random' link (like this thread).
        
         | lytedev wrote:
         | You're correct that it's not really captured in the prose of
         | the article, but the first image does inform you.
        
         | chrismccord wrote:
         | > Write interactive & collaborative code notebooks in Elixir
         | 
         | Think Jupyter Notebooks (if you're familiar with the python
         | world), but collaborative and for Elixir.
        
         | CodeSgt wrote:
         | The headline on the landing page is "Write interactive &
         | collaborative code notebooks in Elixir".
         | 
         | That's pretty clear and coherent to me.
        
       | varispeed wrote:
       | Any tips why would you want to learn Elixir or what would you use
       | it for?
       | 
       | I tried to learn it a couple of years ago. Bought a book and
       | couldn't shake the impression that it was created to be complex
       | and hard to reason about or maybe I am wrong and it is "easy",
       | but has a steep learning curve?
       | 
       | That being said, I looked at Go around the same time and I
       | clicked instantly. Easy to read, simple and yet powerful.
        
         | stu2b50 wrote:
         | It shines at creating highly concurrent applications with a
         | great deal of built in features to provide reliability and
         | resilience. Sounds a lot like a server, and that's what much of
         | the modern use for Elixir is. In particular, one area where it
         | shines is stateful, long-lived requests (e.g, websockets) where
         | many other concurrency models will either rely much more on
         | databases to track state or potentially get choked up.
         | 
         | If nothing else it's neat to learn as one of the few somewhat
         | well used languages in modern times that actually adheres to
         | Alan Kay's original conception of OOP.
        
       | turtlebits wrote:
       | Was excited for this. However on my M1 mac, it launched once, and
       | now it won't open. Tried killing all processes and now nothing.
        
         | wojtekmach wrote:
         | Sorry about that! A bug report at https://github.com/livebook-
         | dev/livebook/issues/new would be very appreciated, especially
         | with relevant parts from ~/Library/Logs/Livebook.log.
        
           | turtlebits wrote:
           | Thanks for the log location - I killed the erlang process and
           | now it works - it launched in a browser window with no app
           | icon though?
        
             | wojtekmach wrote:
             | Yeah there's no app icon in the Dock because we don't have
             | any GUI besides the menu bar icon.
        
       | lvass wrote:
       | I love the concept of local Web servers as GUI substitutes, and
       | hope we get many more of those. Tachidesk is my favorite example.
       | Thanks to Phoenix Liveview, Elixir is becoming a great option in
       | this space. This method gives us every benefit of Electron and
       | almost none of the downsides.
        
         | chadrs wrote:
         | I have the opposite opinion. These things tend to get lost in
         | my tabs.
        
       | brightball wrote:
       | I'd be interested to see the details of how they did that. Very
       | cool!
        
         | Aqua_Geek wrote:
         | You can have a look at the code: https://GitHub.com/livebook-
         | dev/livebook/tree/main/app_bundl...
        
           | powersurge360 wrote:
           | I, too, am interested but I'm not terribly literate in elixir
           | yet. I am aware that you can compile executables in elixir
           | with a release command but I'd be curious to hear more about
           | (or at least be pointed to the specific spots in the code)
           | how the bundling was done to give you a discrete application
           | per platform, with app icon and everything.
           | 
           | Having a script that opens a web browser pages is simple
           | enough, but the extra sugar on top to wrap in an app bundle
           | that shows up in your task bar or dock is something I am very
           | curious about.
           | 
           | EDIT: Someone further down the thread linked to a more
           | specific place and that led me to the macos.ex file[1] (which
           | is what I was most interested in, being on macOS myself.
           | 
           | It looks like at least in the case of macOS it will build the
           | bundle by hand, template in enough swift code to build the
           | application, sign and notarize a bundle, and add the compiled
           | elixir program in there. Pretty interesting. I guess the idea
           | is that you write just enough swift to manage the life cycle
           | of the compiled elixir application. It's an interesting
           | approach but it seems like it would be frustrating and
           | fragile.
           | 
           | [1]: https://github.com/livebook-
           | dev/livebook/blob/355527f7e8034e...
        
             | wojtekmach wrote:
             | Right, so our goal was to allow configuring the bundle with
             | app icons etc and importantly custom URL schemes and file
             | types [1]. And then macOS- [2] and Windows- [3] specific
             | launchers capture the "open file" and "open url" events and
             | trigger the Elixir side of things. Another reason for
             | native launchers is if for any reason we couldn't start the
             | Elixir side, we want to let the user know that something
             | went wrong and point to logs. (We have that on Mac and will
             | have on Windows very soon.)
             | 
             | [1]: https://github.com/livebook-
             | dev/livebook/blob/920f70817efbac...
             | 
             | [2]: https://github.com/livebook-
             | dev/livebook/blob/920f70817efbac...
             | 
             | [3]: https://github.com/livebook-
             | dev/livebook/blob/920f70817efbac...
        
               | powersurge360 wrote:
               | I know linux is a future supported platform but as far as
               | I'm aware, there's not a clear unified way to build
               | bundles in this way across linux distributions. What kind
               | of things are you folks considering if you don't mind my
               | curiosity.
        
               | wojtekmach wrote:
               | We don't plan to add Linux support ourselves at the
               | moment but we'd love a contribution.
        
       | aaaaaaaaaaab wrote:
       | Is it by any chance an Electron app?
        
         | ch4s3 wrote:
         | It uses an erlang binding for wxWidgets[1].
         | 
         | [1]https://www.wxwidgets.org/
        
           | lvass wrote:
           | What for? The Livebook interface is built with Phoenix
           | Liveview.
        
             | ch4s3 wrote:
             | The window it runs in.
        
               | lvass wrote:
               | Is this required in some OS and not another? A comment in
               | this thread claims it just uses a browser tab.
        
               | ch4s3 wrote:
               | It's used for the desktop app, as you can see here[1].
               | 
               | [1] https://github.com/livebook-
               | dev/livebook/blob/355527f7e8034e...
        
               | powersurge360 wrote:
               | Thanks for linking this. I was interested in how it
               | worked but I didn't know enough elixir to get around the
               | codebase by myself. This entry point is very informative
               | for how they managed to do it.
               | 
               | I just looked at the macOS part, but the tl;dr for that
               | is they seem to have compiled the elixir program into a
               | binary and wrote enough swift to manage the lifecycle of
               | the elixir program and signed it and notarized it and
               | prepared it for shipment using CLI via shell!
               | invocations. I didn't look at the windows way of doing
               | things but I imagine it's similar.
        
               | ch4s3 wrote:
               | No problem! The pr here[1] is also instructive, and here
               | is the one for windows[2]. It seems similar-ish.
               | 
               | [1] https://github.com/livebook-
               | dev/livebook/pull/865/files
               | 
               | [2] https://github.com/livebook-
               | dev/livebook/pull/1032/files
        
         | lytedev wrote:
         | Since Livebook is a web app, I would assume so.
        
           | spiderice wrote:
           | I just installed it and it actually doesn't use Electron.
           | It's basically just a local web server that runs on your
           | computer, and opens a browser tab in your default browser
           | pointing to http://localhost:60904/
        
             | dmix wrote:
             | On macOS this is a great app for turning browser web apps
             | like these into dedicated 'apps':
             | 
             | https://www.bzgapps.com/unite
             | 
             | I use it with YNAB
        
               | dugmartin wrote:
               | Or Fluid which is free except for a few features which
               | cost $5 (https://fluidapp.com/)
        
       | adriancarrieres wrote:
       | A super cool notebook, you should give it a try even without
       | knowing Elixir with the tutorials coming with it :D
        
       | freedomben wrote:
       | No Linux download :-(
       | 
       | Nevertheless it's fairly easy to install[1]. If you have docker,
       | you can just run the image to try it out:
       | docker run -p 8080:8080 -p 8081:8081 --pull always
       | livebook/livebook
       | 
       | You may want to configure some things, so check out the
       | options[2].:
       | 
       | If you want a "native" install, after you have elixir installed
       | you can use                    mix escript.install hex livebook
       | 
       | and start it with                    livebook server
       | 
       | Check out the readme for more configuration options[1]
       | 
       | [1]: https://github.com/livebook-dev/livebook#installation
       | 
       | [2]: https://github.com/livebook-dev/livebook#docker
        
         | ch4s3 wrote:
         | > No Linux download :-(
         | 
         | They discussed it, but no one has taken it on yet. I think
         | Wojtek Mach(the desktop initial author) is a mac user, and they
         | actively wanted to provide a way for windows users to easily
         | try it.
        
           | wojtekmach wrote:
           | We don't plan to add Linux support ourselves at the moment
           | but we'd love if someone contributed that. As was mentioned
           | elsewhere it might be challenging to provide a bundle that
           | works across different distributions so investigating the
           | possible options would be an important first step.
        
             | ch4s3 wrote:
             | That's what I assumed was the case. Seems like a good
             | opportunity for the community to take on for major distros.
        
       | codeptualize wrote:
       | This is awesome! Starting it up from the terminal and going to
       | the url was not super convenient for quick tasks and scripts,
       | this is much better.
       | 
       | Edit: one thing that would make it even nicer is if it would
       | remember the folder and/or recently opened notebooks.
        
         | hugobarauna wrote:
         | Recently opened notebooks are on the roadmap. ;)
        
           | codeptualize wrote:
           | Amazing! Can't wait.
        
         | redrobein wrote:
         | Why would you use a notebook for quick scripts though
        
           | codeptualize wrote:
           | I often need to inspect/transform some JSON/CSV/text/whatever
           | data, move around/organize a bunch files, and similar things.
           | I find that notebooks work great for that as you don't need
           | to set up an environment, you can easily collect and rerun
           | your scripts if you do need them again, and the output
           | options are great for debugging and looking at data.
        
             | powersurge360 wrote:
             | I know this is a Livebook love-fest, but you may also
             | consider setting up org-mode sometime. There's a lot to
             | love about org-mode but to stay on subject, you can write
             | your documents in a plain text syntax akin to markdown and
             | any of the code blocks that you add in as examples are
             | _executable_. And you can take the output from one and pipe
             | to another.
             | 
             | At work, for example, we have to hit a remote API and the
             | secrets are stored in AWS secrets manager. I have some
             | documentation that has a block describing how to get the
             | secrets and some other documentation elsewhere describing
             | how to issue a post request and I can pipe the output from
             | one block into another and receive the output either in the
             | same file or put it somewhere else.
             | 
             | The one downside with this extreme flexibility is I
             | sometimes catch myself squirreling away useful
             | functionality in my own notes instead of adding it in a
             | utility CLI or similar where it can be shared with the
             | team.
             | 
             | If having access to a scripting language is duct tape,
             | piping output from one script to another in this way in a
             | single file is like having inter-dimensional duct tape.
        
       | bebrws wrote:
       | How many layers can we do!! I'm guessing elixir to JavaScript to
       | v8 or whatever the js vm was called in chrome. Then jit then
       | binary.
       | 
       | Communicating over a network or one of those chrome sockets to an
       | elixir or erlang vm so someone else can manage your data.
       | 
       | Life is good
        
         | [deleted]
        
         | lvass wrote:
         | Not quite, this is just your standard server side rendering for
         | providing a convenient GUI alongside your erlang vm. There's no
         | layering here, just bundling of things that are usually
         | distributed separately (editor and vm).
        
           | matreyes wrote:
           | And the interaction is handled by Phoenix LiveView (html
           | pushed trough websockets)
        
       | xcambar wrote:
       | The Elixir ecosystem is growing incredibly well. I am impressed
       | both from an engineering and a product perspective.
       | 
       | It shows that they are playing the long game.
       | 
       | I think they are achieving what I wished happen to the Clojure
       | ecosystem: productive, well designed, respected and popular.
       | Clojure missed the last step, unfortunately.
        
         | Scarbutt wrote:
         | Because of the Java ecosystem, in Clojure you are in much more
         | advantageous position than with Elixir.
        
           | kitotik wrote:
           | Elixir also opens you up to the entire erlang and Beam
           | ecosystems. Not as common as Java, I know, but still decades
           | of knowledge and tooling around it cutting across many
           | industries.
        
             | ElemenoPicuares wrote:
             | Seems like Beam is a more specialized tool than JVM but if
             | you need that sort of functionality it's phenomenal. With
             | things like built-in performant persistent key value stores
             | and cluster management I'm kind of surprised more people
             | haven't pushed through the "this is useful but lacks broad
             | adoption" barrier.
        
         | didibus wrote:
         | It seems making a Lisp popular is an impossible task.
         | 
         | That said, I'm not sure if the data agrees with you. I think
         | Clojure is more popular and widely used at this time. Not sure,
         | but I think from what I remember of the few rankings, and just
         | the fact I don't know an equivalent success story to NuBank for
         | Elixir, I think maybe Clojure is at the moment more popular in
         | practice.
         | 
         | But with the amazing learning material Elixir is putting out,
         | maybe it won't last.
        
           | stu2b50 wrote:
           | In terms of major companies using Elixir, Discord and
           | Whatsapp are built with it. Whatsapp is slowly chipping away
           | at its Elixir for infra homogeneity reasons with the rest of
           | facebook but discord is still all aboard the Elixir train.
        
             | hactar_ wrote:
             | WhatsApp uses mostly erlang if I recall correctly.
        
         | freedomben wrote:
         | I agree, and I think their move into ML is a genius move that
         | is going to make elixir mainstream. I'm super excited for the
         | future.
        
           | thejosh wrote:
           | I've wondered whether it's easier to add data analyst stuff
           | to Elixir that Python seems to have, or add features to
           | Python that Erlang (and by extension Elixir) provides out of
           | the box.
           | 
           | By what I can see, if you want multiprocessing on Python in
           | an easier way (let's say running async), you have to use
           | something like ray core[0], then if you want multiple
           | machines you need redis(?). Elixir/Erlang supports this out
           | of the box.
           | 
           | Explorer[1] is an interesting approach, where it uses Rust
           | via Rustler (Elixir library to call Rust code) and uses
           | Polars as its dataframe library. I think Rustler needs to be
           | reworked for this usecase, as it can be slow to return data.
           | I made initial improvements which drastically improves
           | encoding (https://github.com/elixir-nx/explorer/pull/282 and
           | https://github.com/elixir-nx/explorer/pull/286, tldr 20+
           | seconds down to 3).
           | 
           | [0] https://github.com/ray-project/ray [1]
           | https://github.com/elixir-nx/explorer
        
             | jolux wrote:
             | Definitely easier to add Pandas to Elixir than preemptively
             | scheduled green threads to Python.
        
               | throwawaymaths wrote:
               | Plus sane failure domains: go has had preemptively
               | scheduled green threads from day one but failure domains
               | are really not a thing in go.
        
       | didibus wrote:
       | Props to the Elixir community, it seems for some reason they've
       | attracted a lot of people who have the will, the free time and
       | the talent to provide amazing educational content. I've never
       | seen a language of this size have so much quality learning
       | material and tooling.
        
       | junwonapp wrote:
       | How is Livebook using iframes? Is each notebook cell an iframe?
        
       | throwawaymaths wrote:
       | It would be crazy awesome if someone could figure out how to
       | layer python underneath this. There is a very nice feature set in
       | livebook that doesn't really exist in jupyter.
        
       ___________________________________________________________________
       (page generated 2022-08-02 23:00 UTC)