Hi, Yesterday, I posted a link to a new package StringInterpolation <https://groups.google.com/d/msg/julia-users/3IRDXQgb34g/9Uht7g8PAQAJ>. That was a warmup for this one :)
JuliaJS started life as PlotlyJS <https://groups.google.com/d/msg/julia-users/ix5fxt68rwM/NaIUGk0MCQAJ> providing an interface from Julia to the recently open-sourced plotly.js <https://plot.ly/javascript/>. By the time I finished PlotlyJS, there wasn't really much "Plotly"-specific about it and I changed the name to make way for Spencer's cool PlotlyJS package <https://github.com/spencerlyon2/PlotlyJS.jl> (which I think these two packages can work happily together btw). JuliaJS is HEAVILY inspired by the awesome Blink <https://github.com/JunoLab/Blink.jl> package, but there is no dependence on Atom/Electron. One thing I like about JuliaJS, other than being able to use string interpolation with JS commands, is the ease at which the two-way communication works. For example, you can define a callback in Julia like so: callback["Run My Code Please"] = begin println("Ok! I will run your code.") # Your code here. end Then, on the JavaScript side: JuliaJS.message("Run My Code Please") and guess what it does? :) I'm still learning Julia so I'm sure there are plenty of bugs and a ton of ways to do things better, so feedback, issues, PRs are most welcome. >From the README: https://github.com/EricForgy/JuliaJS.jl Warning: This package is still very early in development. Feedback, issues and PRs are most welcome. *JuliaJS.jl* This is simple package that allows Julia to interact with JavaScript in a browser. *Installation* JuliaJS is not registered and it requires another unregistered package: StringInterpolation. To install, you'll need to run the following commands: julia> Pkg.clone("https://github.com/EricForgy/StringInterpolation.jl.git") julia> Pkg.clone("https://github.com/EricForgy/JuliaJS.jl.git") *Usage Example:* After installation, running the following from the Julia REPL julia> using JuliaJS Listening on 0.0.0.0:8000... will start an HttpServer. Open your browser to http://localhost:8000/julia and you should see a blank page with "JuliaJS" in the browser tab. With the browser open, run the following: julia> include(Pkg.dir("JuliaJS","examples","plotly.jl")) If the stars are aligned, you should see several sample charts appear in the browser window. *Notes:* *Interpolation* The non-standard string literal `js` supports interpolation, but at the moment, the Julia expression needs to be enclosed in parentheses, e.g. instead of julia> msg = "Hello World" julia> js""" console.log("$msg") """ you will need to enclose `msg` in parentheses as illustrated below: julia> msg = "Hello World" julia> js""" console.log("$(msg)") """ *WebSockets* JuliaJS creates an active link between Julia and your browser via WebSockets so you can update your charts from Julia without reloading the page. To see this, try rerunning the above example several times: julia> include(Pkg.dir("JuliaJS","examples","plotly.jl")) julia> include(Pkg.dir("JuliaJS","examples","plotly.jl")) julia> include(Pkg.dir("JuliaJS","examples","plotly.jl")) julia> include(Pkg.dir("JuliaJS","examples","plotly.jl")) Each time you run from the REPL, the charts are updated without having to reload. A fun artifact of using WebSockets is that you can "broadcast" your charts to several browsers and they will all get updated interactively. Here is a silly video <https://www.youtube.com/watch?v=mWDyyfVNqP0> demonstrating three browsers (including an iPhone) with charts being interactively controlled from the Julia REPL.
