corywalker / expreduce

An experimental computer algebra system written in Go
MIT License
389 stars 27 forks source link

Work book integration #125

Open ghost opened 6 years ago

ghost commented 6 years ago

Does anyone use a Jupiter workbook GUI with this. Otherwise I am thinking of writing one to make doing lab work easier and visualisation of what's going on. This allows putting the same lab code into production and makes it easier for the non programmers and programmers to use the same system.

This might resonate with others. Yell if it does as I am curious to know others issues with Matlab and production code aspects.

corywalker commented 6 years ago

Currently there is no Jupyter notebook interface yet, although it should be quite easy to make a simple one. Jupyter should allow connecting the notebook to some web API that receives input code to run and then responds with the result. We could expose Expreduce as an API that does just this. It would be very similar to expreduce.go, just that it would take input from HTTP rather than from stdin.

If you make one, I'm sure people would use it. I certainly would, as I've been hoping for such a feature for a long time.

ghost commented 6 years ago

ok. I am actually thinking of not using the Jupiter notebook but something more golang centric.

github.com/mjl-/duit

My reasoning is based on the fact that its a single binary and everyone can work. Charts and stuff is easy to do with this library, etc its fast because its all golang type of thinking. For example we have a ML system where we needed to monitor electricla grids and do device recognition, and then labelling of data to teach the system.

duit would have been perfect because you can quickly make a UI for the non programmers to use and they can install it on anything with no dependency crap.

have a looksie. its pretty cool. Curious is you would accept a PR that integrated it ?

corywalker commented 6 years ago

This is certainly reasonable. I had always been leaning towards a Jupyter integration since it seemed like less work. If someone's willing to put in the effort for a non-web frontend then I'd certainly find it useful. And as you mention the Python dependencies could be confusing for users who are either non-devs or golang-only.

As for accepting the PR, I think we would want to split this into a separate project for now. You can simply depend on this Expreduce package and use the .Eval() interface accordingly. Same as expreduce.go. Whatever you create, I can add the test suite to this project somehow to ensure this project does not break the interface.

ghost commented 6 years ago

Ok i will reference this package and built the GUI. Thanks for the test suite offer.

Will be in contact when i have something working

darvin commented 6 years ago

Jupyter btw already has a kernel for Mathematica / Mathics : https://github.com/mmatera/iwolfram

Jupyter is a go to project for opensource workbook, at this point (at least amongst datascientists/machine learning folks) Jupyter + python is way, way more popular than Mathematica itself. There are jupyter kernels for bunch of languages too btw, including 4 different ones for Go.

Jupyter is much more than just a web workbook. It provides generalized abstract interface to kernel, so one can for example forego web workbook and connect to the supported kernels via graphical console. It provides bunch of widgets for representation of data, client side programming, tools for collaboration, native clients - you name it, its default infrastructure for modern work books. https://github.com/markusschanta/awesome-jupyter

As to complexity for user & python dependencies... with Docker one can install fully prepared machine learning notebook with all libraries, configured to use GPU and whatnot, on any system (Windows, OSX or Linux), with (literally) one command.

(just my .5 cents, wanna advertise some Jupyter here 'cause its amazing and its iwolfram kernel deserves some love <3 )