Git Product home page Git Product logo

notebook's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

notebook's Issues

Support interruptable eval

Form evaluation may get stuck in IO or long running/endless loops. The basic nrepl building blocks appear to be in place. We should support interruptable eval triggered from the ui - probably via keybinding.

Add tracking code

Add Google analytics or other tracking software to know how many people use the app and for how long. I want to see total hours used per month. That is a metric we shoudl watch. More hours = more useful.

error in editing markdown

open a new notebook.
edit the first cell that has markdown
this came with the laest upgrades

markdown error

in free-output (created by gorilla_repl.worksheet.free_output.free_output)
in gorilla_repl.worksheet.free_output.free_output (created by markup-segment)
in div (created by markup-segment)
in markup-segment (created by gorilla_repl.worksheet.free_segment.free_segment)
in gorilla_repl.worksheet.free_segment.free_segment (created by gorilla_repl.worksheet.core.worksheet)
in div (created by gorilla_repl.worksheet.core.worksheet)
in div (created by gorilla_repl.worksheet.core.worksheet)
in div (created by gorilla_repl.worksheet.core.worksheet)
in gorilla_repl.worksheet.core.worksheet (created by gorilla-app)
in div (created by gorilla-app)
in gorilla-app (created by gorilla_repl.views.gorilla_app)

TypeError: cm is null
cljs$core$IFn$invoke$arity$variadic editor.cljs:249
gorilla_repl$editor$create_editor_BANG
editor.cljs:236
gorilla_repl$worksheet$helper$init_cm_BANG_ helper.cljs:18
G__11293__1 core.cljs:4320
G__11293 core.js:15195
free_output free_output.cljs:35
reagent$impl$component$custom_wrapper_$_componentDidUpdate component.cljs:183
commitLifeCycles react-dom.inc.js:10238
commitAllLifeCycles react-dom.inc.js:11901
callCallback react-dom.inc.js:140
invokeGuardedCallbackDev react-dom.inc.js:178
invokeGuardedCallback react-dom.inc.js:227
commitRoot react-dom.inc.js:12040
completeRoot react-dom.inc.js:12948
performWorkOnRoot react-dom.inc.js:12898
performWork react-dom.inc.js:12816
performSyncWork react-dom.inc.js:12793
requestWork react-dom.inc.js:12693
scheduleWorkImpl react-dom.inc.js:12568
scheduleWork react-dom.inc.js:12528
enqueueForceUpdate react-dom.inc.js:7128
forceUpdate React
reagent$impl$batching$run_queue batching.cljs:39
flush_queues batching.cljs:86
run_queues batching.cljs:76
schedule batching.cljs:63
next_tick re_frame_10x.cljs:128

feature: rendering based on datafiable 7 navigatable / nrebl middleware

Two new protocols: Datafiable and Navigable
Clojure’s narrative has always been around data. Data immutability, Code as data etc… Some people say that Clojure is a Data-drive languages. Clojure 1.10 takes the data story one step further. Now, every piece of Clojure can be seen as data: it can be datified and navigated. Out of the box, Clojure provides datification of atoms, vars, namespaces and more…

Remark: Datafiable and Navigable have their most natural application in the context of building tools for data exploration. You will probably not need it in your web service. But it’s part of Clojure now, so I think it’s interesting to discover their “mechanics”.

To datafy a value, we call the datafy function from the clojure.datafy namespace:

Docker deployment

  1. Make 3449 port accessible from port 80 on outside
  2. Mount /gorilla/sandbox from the host to /gorilla/sandbox on notebook.
    Reason for sandbox: in the socket container there already is the cloned version of the sample-notebook project. I will ask daniel etc etc to make improvements and experiments to the Notebooks. We need to a) ensure they can savely safe Notebooks that survive a reboot of the pod and b) want to so upload somewhere else. I would do a Rsync somewhere or rclone to google drive or Dropbox that I trigger via cron. OR we just auto commit to a new sandbox git repo that would simply show the latest change of every file that was edited. That might be actually faster and more in line with our architecture.

Docker image uses jsu branch for now FYI. Currently master does not work with mist of the ui libraries that I use in the workbooks.

Remote kernel/(nREPL) support

We want the notebook being able to use a remote Clojure Kernel via nREPL.

Implementation of basic functionality should not be difficult to implement. We can just launch nREPL listening on the network and use localhost instead of current default in memory communication. Next step would be allowing the user to choose the nrepl server (kernel).

Great project

Hi!

I am amazed of your improvements over the original gorilla repl! Thanks so much!

I think now that we have reagent under the hood we could use this to allow for nice UI controls in gorilla repl! For example we could add sliders to limit the display of a big table. Or we could add an UI that collects parameter that will trigger the recalculation of a funcion / cell on the server.

We could go even a step further and display dynamically updating data from the server via a websocket. Possibly we could write a routine that syncs server side atoms with client side atoms that arw then displayed in react. This would allow for a completely new level of interactive data analysis.

And we could also add sub routes to each worksheet that would each display different data.

We can so stuff that is eay mroe advanced than jupyter notebooks.

Are you interested to discuss this?

build broken

lein --version

Leiningen 2.9.1 on Java 1.8.0_222 OpenJDK 64-Bit Server VM

lein run -m clojure.main script/figwheel.clj

clojure.lang.Compiler$CompilerException: Syntax error reading source at (cider/nrepl/middleware/test.clj:129:57).
#:clojure.error{:phase :read-source, :line 129, :column 57, :source "cider/nrepl/middleware/test.clj"}
 at clojure.lang.Compiler.load (Compiler.java:7642)
    clojure.lang.RT.loadResourceScript (RT.java:381)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.load (RT.java:463)
    clojure.lang.RT.load (RT.java:428)
    clojure.core$load$fn__6824.invoke (core.clj:6126)
    clojure.core$load.invokeStatic (core.clj:6125)
    clojure.core$load.doInvoke (core.clj:6109)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5908)
    clojure.core$load_one.invoke (core.clj:5903)
    clojure.core$load_lib$fn__6765.invoke (core.clj:5948)
    clojure.core$load_lib.invokeStatic (core.clj:5947)
    clojure.core$load_lib.doInvoke (core.clj:5928)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$load_libs.invokeStatic (core.clj:5985)
    clojure.core$load_libs.doInvoke (core.clj:5969)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$require.invokeStatic (core.clj:6007)
    clojure.core$require.doInvoke (core.clj:6007)
    clojure.lang.RestFn.invoke (RestFn.java:3894)
    cider.nrepl$eval714$loading__6706__auto____715.invoke (nrepl.clj:1)
    cider.nrepl$eval714.invokeStatic (nrepl.clj:1)
    cider.nrepl$eval714.invoke (nrepl.clj:1)
    clojure.lang.Compiler.eval (Compiler.java:7176)
    clojure.lang.Compiler.eval (Compiler.java:7165)
    clojure.lang.Compiler.load (Compiler.java:7635)
    clojure.lang.RT.loadResourceScript (RT.java:381)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.load (RT.java:463)
    clojure.lang.RT.load (RT.java:428)
    clojure.core$load$fn__6824.invoke (core.clj:6126)
    clojure.core$load.invokeStatic (core.clj:6125)
    clojure.core$load.doInvoke (core.clj:6109)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5908)
    clojure.core$load_one.invoke (core.clj:5903)
    clojure.core$load_lib$fn__6765.invoke (core.clj:5948)
    clojure.core$load_lib.invokeStatic (core.clj:5947)
    clojure.core$load_lib.doInvoke (core.clj:5928)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$load_libs.invokeStatic (core.clj:5985)
    clojure.core$load_libs.doInvoke (core.clj:5969)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$require.invokeStatic (core.clj:6007)
    clojure.core$require.doInvoke (core.clj:6007)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    cider_nrepl.plugin$middleware.invokeStatic (plugin.clj:56)
    cider_nrepl.plugin$middleware.invoke (plugin.clj:17)
    clojure.lang.Var.invoke (Var.java:384)
    leiningen.core.project$apply_middleware.invokeStatic (project.clj:817)
    leiningen.core.project$apply_middleware.invoke (project.clj:810)
    clojure.core.protocols$fn__8144.invokeStatic (protocols.clj:168)
    clojure.core.protocols/fn (protocols.clj:124)
    clojure.core.protocols$fn__8099$G__8094__8108.invoke (protocols.clj:19)
    clojure.core.protocols$seq_reduce.invokeStatic (protocols.clj:31)
    clojure.core.protocols$fn__8131.invokeStatic (protocols.clj:75)
    clojure.core.protocols/fn (protocols.clj:75)
    clojure.core.protocols$fn__8073$G__8068__8086.invoke (protocols.clj:13)
    clojure.core$reduce.invokeStatic (core.clj:6828)
    clojure.core$reduce.invoke (core.clj:6810)
    leiningen.core.project$apply_middleware.invokeStatic (project.clj:812)
    leiningen.core.project$apply_middleware.invoke (project.clj:810)
    leiningen.core.project$activate_middleware.invokeStatic (project.clj:844)
    leiningen.core.project$activate_middleware.invoke (project.clj:840)
    leiningen.core.project$init_project.invokeStatic (project.clj:986)
    leiningen.core.project$init_project.invoke (project.clj:974)
    leiningen.core.project$read.invokeStatic (project.clj:1057)
    leiningen.core.project$read.invoke (project.clj:1054)
    leiningen.core.project$read.invokeStatic (project.clj:1058)
    leiningen.core.project$read.invoke (project.clj:1054)
    leiningen.core.main$_main$fn__6681.invoke (main.clj:447)
    leiningen.core.main$_main.invokeStatic (main.clj:442)
    leiningen.core.main$_main.doInvoke (main.clj:439)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.lang.Var.applyTo (Var.java:705)
    clojure.core$apply.invokeStatic (core.clj:665)
    clojure.main$main_opt.invokeStatic (main.clj:491)
    clojure.main$main_opt.invoke (main.clj:487)
    clojure.main$main.invokeStatic (main.clj:598)
    clojure.main$main.doInvoke (main.clj:561)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.lang.Var.applyTo (Var.java:705)
    clojure.main.main (main.java:37)
Caused by: java.lang.RuntimeException: Invalid token: ::clojure.test/once-fixtures
 at clojure.lang.Util.runtimeException (Util.java:221)
    clojure.lang.LispReader.interpretToken (LispReader.java:412)
    clojure.lang.LispReader.read (LispReader.java:305)
    clojure.lang.LispReader.readDelimitedList (LispReader.java:1398)
    clojure.lang.LispReader$ListReader.invoke (LispReader.java:1243)
    clojure.lang.LispReader.read (LispReader.java:285)
    clojure.lang.LispReader.readDelimitedList (LispReader.java:1398)
    clojure.lang.LispReader$ListReader.invoke (LispReader.java:1243)
    clojure.lang.LispReader.read (LispReader.java:285)
    clojure.lang.LispReader.readDelimitedList (LispReader.java:1398)
    clojure.lang.LispReader$ListReader.invoke (LispReader.java:1243)
    clojure.lang.LispReader.read (LispReader.java:285)
    clojure.lang.LispReader.readDelimitedList (LispReader.java:1398)
    clojure.lang.LispReader$VectorReader.invoke (LispReader.java:1347)
    clojure.lang.LispReader.read (LispReader.java:285)
    clojure.lang.LispReader.readDelimitedList (LispReader.java:1398)
    clojure.lang.LispReader$ListReader.invoke (LispReader.java:1243)
    clojure.lang.LispReader.read (LispReader.java:285)
    clojure.lang.LispReader.readDelimitedList (LispReader.java:1398)
    clojure.lang.LispReader$ListReader.invoke (LispReader.java:1243)
    clojure.lang.LispReader.read (LispReader.java:285)
    clojure.lang.LispReader.read (LispReader.java:216)
    clojure.lang.Compiler.load (Compiler.java:7630)
    clojure.lang.RT.loadResourceScript (RT.java:381)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.load (RT.java:463)
    clojure.lang.RT.load (RT.java:428)
    clojure.core$load$fn__6824.invoke (core.clj:6126)
    clojure.core$load.invokeStatic (core.clj:6125)
    clojure.core$load.doInvoke (core.clj:6109)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5908)
    clojure.core$load_one.invoke (core.clj:5903)
    clojure.core$load_lib$fn__6765.invoke (core.clj:5948)
    clojure.core$load_lib.invokeStatic (core.clj:5947)
    clojure.core$load_lib.doInvoke (core.clj:5928)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$load_libs.invokeStatic (core.clj:5985)
    clojure.core$load_libs.doInvoke (core.clj:5969)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$require.invokeStatic (core.clj:6007)
    clojure.core$require.doInvoke (core.clj:6007)
    clojure.lang.RestFn.invoke (RestFn.java:3894)
    cider.nrepl$eval714$loading__6706__auto____715.invoke (nrepl.clj:1)
    cider.nrepl$eval714.invokeStatic (nrepl.clj:1)
    cider.nrepl$eval714.invoke (nrepl.clj:1)
    clojure.lang.Compiler.eval (Compiler.java:7176)
    clojure.lang.Compiler.eval (Compiler.java:7165)
    clojure.lang.Compiler.load (Compiler.java:7635)
    clojure.lang.RT.loadResourceScript (RT.java:381)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.load (RT.java:463)
    clojure.lang.RT.load (RT.java:428)
    clojure.core$load$fn__6824.invoke (core.clj:6126)
    clojure.core$load.invokeStatic (core.clj:6125)
    clojure.core$load.doInvoke (core.clj:6109)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5908)
    clojure.core$load_one.invoke (core.clj:5903)
    clojure.core$load_lib$fn__6765.invoke (core.clj:5948)
    clojure.core$load_lib.invokeStatic (core.clj:5947)
    clojure.core$load_lib.doInvoke (core.clj:5928)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$load_libs.invokeStatic (core.clj:5985)
    clojure.core$load_libs.doInvoke (core.clj:5969)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$require.invokeStatic (core.clj:6007)
    clojure.core$require.doInvoke (core.clj:6007)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    cider_nrepl.plugin$middleware.invokeStatic (plugin.clj:56)
    cider_nrepl.plugin$middleware.invoke (plugin.clj:17)
    clojure.lang.Var.invoke (Var.java:384)
    leiningen.core.project$apply_middleware.invokeStatic (project.clj:817)
    leiningen.core.project$apply_middleware.invoke (project.clj:810)
    clojure.core.protocols$fn__8144.invokeStatic (protocols.clj:168)
    clojure.core.protocols/fn (protocols.clj:124)
    clojure.core.protocols$fn__8099$G__8094__8108.invoke (protocols.clj:19)
    clojure.core.protocols$seq_reduce.invokeStatic (protocols.clj:31)
    clojure.core.protocols$fn__8131.invokeStatic (protocols.clj:75)
    clojure.core.protocols/fn (protocols.clj:75)
    clojure.core.protocols$fn__8073$G__8068__8086.invoke (protocols.clj:13)
    clojure.core$reduce.invokeStatic (core.clj:6828)
    clojure.core$reduce.invoke (core.clj:6810)
    leiningen.core.project$apply_middleware.invokeStatic (project.clj:812)
    leiningen.core.project$apply_middleware.invoke (project.clj:810)
    leiningen.core.project$activate_middleware.invokeStatic (project.clj:844)
    leiningen.core.project$activate_middleware.invoke (project.clj:840)
    leiningen.core.project$init_project.invokeStatic (project.clj:986)
    leiningen.core.project$init_project.invoke (project.clj:974)
    leiningen.core.project$read.invokeStatic (project.clj:1057)
    leiningen.core.project$read.invoke (project.clj:1054)
    leiningen.core.project$read.invokeStatic (project.clj:1058)
    leiningen.core.project$read.invoke (project.clj:1054)
    leiningen.core.main$_main$fn__6681.invoke (main.clj:447)
    leiningen.core.main$_main.invokeStatic (main.clj:442)
    leiningen.core.main$_main.doInvoke (main.clj:439)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.lang.Var.applyTo (Var.java:705)
    clojure.core$apply.invokeStatic (core.clj:665)
    clojure.main$main_opt.invokeStatic (main.clj:491)
    clojure.main$main_opt.invoke (main.clj:487)
    clojure.main$main.invokeStatic (main.clj:598)
    clojure.main$main.doInvoke (main.clj:561)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.lang.Var.applyTo (Var.java:705)
    clojure.main.main (main.java:37)

Always use url-context other than root "/"

We want this for several reasons and even during development:

  • Allow different versions on one virtual host https://host/wb-1/
  • Allow drop-in usage (uberjar in WEB-INF/lib of alien Java Webapps)

Merging upgrade-toolchain currently has a a regression in this regard, as websocket repl is no longer implemented by abusing a ring-handler.

syntax error when running tests

Hi, I'm excited to try out the new version of gorilla notebook. However, when I try to run the tests I get an error.

When I build the jar I get similar errors.
I still get the error after deleting .m2 dir , and on other gorilla-notebook versions.

What I don't understand is that the github ci for that commit completes the tests without problems. The older docker version also runs without problem.

Any idea what might be causing this?

Cheers

lein test
Warning: implicit hook found: lein-environ.plugin/hooks 
Hooks are deprecated and will be removed in a future version.
Compiling 2 source files to /Users/keesterbrugge/code/gorilla-notebook/target/classes
Note: /Users/keesterbrugge/code/gorilla-notebook/src/java/pinkgorilla/NReplEndpoint.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Compiling 2 source files to /Users/keesterbrugge/code/gorilla-notebook/target/classes
Note: /Users/keesterbrugge/code/gorilla-notebook/src/java/pinkgorilla/NReplEndpoint.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

Testing pinkgorilla.core-test

Ran 1 tests containing 3 assertions.
0 failures, 0 errors.
Syntax error (NullPointerException) compiling at (pinkgorilla/handle_test.clj:1:1).
null

Full report at:
/var/folders/l6/xnlks1hs181039ynqpdfp1kc0000gn/T/clojure-6403240090655342054.edn
Tests failed.

Full report:

 cat /var/folders/l6/xnlks1hs181039ynqpdfp1kc0000gn/T/clojure-6403240090655342054.edn
{:clojure.main/message
 "Syntax error (NullPointerException) compiling at (pinkgorilla/handle_test.clj:1:1).\nnull\n",
 :clojure.main/triage
 {:clojure.error/phase :compile-syntax-check,
  :clojure.error/line 1,
  :clojure.error/column 1,
  :clojure.error/source "handle_test.clj",
  :clojure.error/path "pinkgorilla/handle_test.clj",
  :clojure.error/class java.lang.NullPointerException},
 :clojure.main/trace
 {:via
  [{:type clojure.lang.Compiler$CompilerException,
    :message
    "Syntax error compiling at (pinkgorilla/handle_test.clj:1:1).",
    :data
    {:clojure.error/phase :compile-syntax-check,
     :clojure.error/line 1,
     :clojure.error/column 1,
     :clojure.error/source "pinkgorilla/handle_test.clj"},
    :at [clojure.lang.Compiler load "Compiler.java" 7648]}
   {:type java.lang.ExceptionInInitializerError,
    :at [java.lang.Class forName0 "Class.java" -2]}
   {:type java.lang.NullPointerException,
    :at [clojure.java.io$resource invokeStatic "io.clj" 451]}],
  :trace
  [[clojure.java.io$resource invokeStatic "io.clj" 451]
   [clojure.java.io$resource invokeStatic "io.clj" 450]
   [clojure.java.io$resource invoke "io.clj" 446]
   [cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.java$fn__7549
    invokeStatic
    "java.clj"
    66]
   [cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.java$fn__7549
    invoke
    "java.clj"
    66]
   [cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.java__init
    load
    nil
    66]
   [cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.java__init
    <clinit>
    nil
    -1]
   [java.lang.Class forName0 "Class.java" -2]
   [java.lang.Class forName "Class.java" 348]
   [clojure.lang.RT classForName "RT.java" 2211]
   [clojure.lang.RT classForName "RT.java" 2220]
   [clojure.lang.RT loadClassForName "RT.java" 2239]
   [clojure.lang.RT load "RT.java" 449]
   [clojure.lang.RT load "RT.java" 424]
   [clojure.core$load$fn__6839 invoke "core.clj" 6126]
   [clojure.core$load invokeStatic "core.clj" 6125]
   [clojure.core$load doInvoke "core.clj" 6109]
   [clojure.lang.RestFn invoke "RestFn.java" 408]
   [clojure.core$load_one invokeStatic "core.clj" 5908]
   [clojure.core$load_one invoke "core.clj" 5903]
   [clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
   [clojure.core$load_lib invokeStatic "core.clj" 5947]
   [clojure.core$load_lib doInvoke "core.clj" 5928]
   [clojure.lang.RestFn applyTo "RestFn.java" 142]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$load_libs invokeStatic "core.clj" 5985]
   [clojure.core$load_libs doInvoke "core.clj" 5969]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$require invokeStatic "core.clj" 6007]
   [clojure.core$require doInvoke "core.clj" 6007]
   [clojure.lang.RestFn invoke "RestFn.java" 703]
   [cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.info$loading__6721__auto____7168
    invoke
    "info.clj"
    1]
   [cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.info__init
    load
    nil
    1]
   [cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.info__init
    <clinit>
    nil
    -1]
   [java.lang.Class forName0 "Class.java" -2]
   [java.lang.Class forName "Class.java" 348]
   [clojure.lang.RT classForName "RT.java" 2211]
   [clojure.lang.RT classForName "RT.java" 2220]
   [clojure.lang.RT loadClassForName "RT.java" 2239]
   [clojure.lang.RT load "RT.java" 449]
   [clojure.lang.RT load "RT.java" 424]
   [clojure.core$load$fn__6839 invoke "core.clj" 6126]
   [clojure.core$load invokeStatic "core.clj" 6125]
   [clojure.core$load doInvoke "core.clj" 6109]
   [clojure.lang.RestFn invoke "RestFn.java" 408]
   [clojure.core$load_one invokeStatic "core.clj" 5908]
   [clojure.core$load_one invoke "core.clj" 5903]
   [clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
   [clojure.core$load_lib invokeStatic "core.clj" 5947]
   [clojure.core$load_lib doInvoke "core.clj" 5928]
   [clojure.lang.RestFn applyTo "RestFn.java" 142]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$load_libs invokeStatic "core.clj" 5985]
   [clojure.core$load_libs doInvoke "core.clj" 5969]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$require invokeStatic "core.clj" 6007]
   [clojure.core$require doInvoke "core.clj" 6007]
   [clojure.lang.RestFn invoke "RestFn.java" 1096]
   [cider.nrepl.middleware.stacktrace$loading__6721__auto____7119
    invoke
    "stacktrace.clj"
    1]
   [cider.nrepl.middleware.stacktrace__init load nil 1]
   [cider.nrepl.middleware.stacktrace__init <clinit> nil -1]
   [java.lang.Class forName0 "Class.java" -2]
   [java.lang.Class forName "Class.java" 348]
   [clojure.lang.RT classForName "RT.java" 2211]
   [clojure.lang.RT classForName "RT.java" 2220]
   [clojure.lang.RT loadClassForName "RT.java" 2239]
   [clojure.lang.RT load "RT.java" 449]
   [clojure.lang.RT load "RT.java" 424]
   [clojure.core$load$fn__6839 invoke "core.clj" 6126]
   [clojure.core$load invokeStatic "core.clj" 6125]
   [clojure.core$load doInvoke "core.clj" 6109]
   [clojure.lang.RestFn invoke "RestFn.java" 408]
   [clojure.core$load_one invokeStatic "core.clj" 5908]
   [clojure.core$load_one invoke "core.clj" 5903]
   [clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
   [clojure.core$load_lib invokeStatic "core.clj" 5947]
   [clojure.core$load_lib doInvoke "core.clj" 5928]
   [clojure.lang.RestFn applyTo "RestFn.java" 142]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$load_libs invokeStatic "core.clj" 5985]
   [clojure.core$load_libs doInvoke "core.clj" 5969]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$require invokeStatic "core.clj" 6007]
   [clojure.core$require doInvoke "core.clj" 6007]
   [clojure.lang.RestFn invoke "RestFn.java" 482]
   [pinkgorilla.middleware.cider$loading__6721__auto____6084
    invoke
    "cider.clj"
    1]
   [pinkgorilla.middleware.cider__init load nil 1]
   [pinkgorilla.middleware.cider__init <clinit> nil -1]
   [java.lang.Class forName0 "Class.java" -2]
   [java.lang.Class forName "Class.java" 348]
   [clojure.lang.RT classForName "RT.java" 2211]
   [clojure.lang.RT classForName "RT.java" 2220]
   [clojure.lang.RT loadClassForName "RT.java" 2239]
   [clojure.lang.RT load "RT.java" 449]
   [clojure.lang.RT load "RT.java" 424]
   [clojure.core$load$fn__6839 invoke "core.clj" 6126]
   [clojure.core$load invokeStatic "core.clj" 6125]
   [clojure.core$load doInvoke "core.clj" 6109]
   [clojure.lang.RestFn invoke "RestFn.java" 408]
   [clojure.core$load_one invokeStatic "core.clj" 5908]
   [clojure.core$load_one invoke "core.clj" 5903]
   [clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
   [clojure.core$load_lib invokeStatic "core.clj" 5947]
   [clojure.core$load_lib doInvoke "core.clj" 5928]
   [clojure.lang.RestFn applyTo "RestFn.java" 142]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$load_libs invokeStatic "core.clj" 5985]
   [clojure.core$load_libs doInvoke "core.clj" 5969]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$require invokeStatic "core.clj" 6007]
   [clojure.core$require doInvoke "core.clj" 6007]
   [clojure.lang.RestFn invoke "RestFn.java" 805]
   [pinkgorilla.route$loading__6721__auto____9016 invoke "route.clj" 1]
   [pinkgorilla.route__init load nil 1]
   [pinkgorilla.route__init <clinit> nil -1]
   [java.lang.Class forName0 "Class.java" -2]
   [java.lang.Class forName "Class.java" 348]
   [clojure.lang.RT classForName "RT.java" 2211]
   [clojure.lang.RT classForName "RT.java" 2220]
   [clojure.lang.RT loadClassForName "RT.java" 2239]
   [clojure.lang.RT load "RT.java" 449]
   [clojure.lang.RT load "RT.java" 424]
   [clojure.core$load$fn__6839 invoke "core.clj" 6126]
   [clojure.core$load invokeStatic "core.clj" 6125]
   [clojure.core$load doInvoke "core.clj" 6109]
   [clojure.lang.RestFn invoke "RestFn.java" 408]
   [clojure.core$load_one invokeStatic "core.clj" 5908]
   [clojure.core$load_one invoke "core.clj" 5903]
   [clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
   [clojure.core$load_lib invokeStatic "core.clj" 5947]
   [clojure.core$load_lib doInvoke "core.clj" 5928]
   [clojure.lang.RestFn applyTo "RestFn.java" 142]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$load_libs invokeStatic "core.clj" 5985]
   [clojure.core$load_libs doInvoke "core.clj" 5969]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$require invokeStatic "core.clj" 6007]
   [clojure.core$require doInvoke "core.clj" 6007]
   [clojure.lang.RestFn invoke "RestFn.java" 436]
   [pinkgorilla.handle_test$eval488$loading__6721__auto____489
    invoke
    "handle_test.clj"
    1]
   [pinkgorilla.handle_test$eval488 invokeStatic "handle_test.clj" 1]
   [pinkgorilla.handle_test$eval488 invoke "handle_test.clj" 1]
   [clojure.lang.Compiler eval "Compiler.java" 7177]
   [clojure.lang.Compiler eval "Compiler.java" 7166]
   [clojure.lang.Compiler load "Compiler.java" 7636]
   [clojure.lang.RT loadResourceScript "RT.java" 381]
   [clojure.lang.RT loadResourceScript "RT.java" 372]
   [clojure.lang.RT load "RT.java" 459]
   [clojure.lang.RT load "RT.java" 424]
   [clojure.core$load$fn__6839 invoke "core.clj" 6126]
   [clojure.core$load invokeStatic "core.clj" 6125]
   [clojure.core$load doInvoke "core.clj" 6109]
   [clojure.lang.RestFn invoke "RestFn.java" 408]
   [clojure.core$load_one invokeStatic "core.clj" 5908]
   [clojure.core$load_one invoke "core.clj" 5903]
   [clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
   [clojure.core$load_lib invokeStatic "core.clj" 5947]
   [clojure.core$load_lib doInvoke "core.clj" 5928]
   [clojure.lang.RestFn applyTo "RestFn.java" 142]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$load_libs invokeStatic "core.clj" 5985]
   [clojure.core$load_libs doInvoke "core.clj" 5969]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$require invokeStatic "core.clj" 6007]
   [clojure.core$require doInvoke "core.clj" 6007]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$apply invoke "core.clj" 660]
   [user$eval334 invokeStatic "form-init2538780913966845374.clj" 1]
   [user$eval334 invoke "form-init2538780913966845374.clj" 1]
   [clojure.lang.Compiler eval "Compiler.java" 7177]
   [clojure.lang.Compiler eval "Compiler.java" 7167]
   [clojure.lang.Compiler load "Compiler.java" 7636]
   [clojure.lang.Compiler loadFile "Compiler.java" 7574]
   [clojure.main$load_script invokeStatic "main.clj" 475]
   [clojure.main$init_opt invokeStatic "main.clj" 477]
   [clojure.main$init_opt invoke "main.clj" 477]
   [clojure.main$initialize invokeStatic "main.clj" 508]
   [clojure.main$null_opt invokeStatic "main.clj" 542]
   [clojure.main$null_opt invoke "main.clj" 539]
   [clojure.main$main invokeStatic "main.clj" 664]
   [clojure.main$main doInvoke "main.clj" 616]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.lang.Var applyTo "Var.java" 705]
   [clojure.main main "main.java" 40]],
  :phase :compile-syntax-check}}

Expected behavior

I expected to be able to use gorilla notebook

Actual behavior

I get an error during compilation.

Steps to reproduce the problem

lein deps
lein test

Environment & Version information

gorilla-notebook version

3eaf0ed

Java version

java version "1.8.0_141"

Operating system

macos 10.14

save worksheet not working

SAVE Worksheet

2a: Alt G S [In an existing worksheet]
What it does: Brings up the save file box
What it should do: Save and display save success message [It already knows the filename]

2b: Alt G S [In a new worksheet]
What it should do: Should show the save dialog and save the file.
In Firefox 69 Quantum: It shows the save-file dialog but then shows the Firefox menu "History/Show All History"
This works fine in the original gorilla repl.
In LOADING files Alt G L it immediately brings the dialog. Only happens on SAVING.

2c: Alt G S [After I enter test2.clj into the file box and press enter]
Browser: Ugh, got bad response : Forbidden (403)
This message keeps staying there even after loading other files works find which should
reset that message.

2019-10-13 13:05:10,417 [figwh-httpkit-2] INFO  gorilla-repl.handle - Loading: resources/gorilla-repl-client/test.clj ... 
2019-10-13 13:05:10,418 [figwh-httpkit-2] INFO  gorilla-repl.handle - done.
2019-10-13 13:05:28,917 [figwh-httpkit-3] WARN  gorilla-repl.websocket-relay - FIXME : Channel closed, we should probably close remote connections
2019-10-13 13:05:30,236 [figwh-httpkit-1] INFO  gorilla-repl.handle - Loading: resources/gorilla-repl-client/test.clj ... 
2019-10-13 13:05:30,236 [figwh-httpkit-1] INFO  gorilla-repl.handle - done.

The save api seems to go to a non existent endpoint.

Parinfer paste

I was pasting vega spec from some other workbook to a gorilla notebook cell. And the result that I got pasted in was different to what I had in the clipboard.

{:data {:values [ 1 2 3]}}

Was pasted as:

{:data {}}
:values []
123

My data structure was a little more complex.. So illustration only.

I think there needs to be an option to disable parinfer. When writing new code parinfee mode is a huge plus, but when using snippets it is impossible to impoet them

Ctrl g p
Toggle parinfer mode

notebook ui redesign

observablehq has nicer ui:

https://observablehq.com/@observablehq/observables-not-javascript

  • input can be hidden for any code cell; only output is visible always.
    by having this distinction, markup processing can be moved to a dedicated kernel, and
    the ui for markdown is identical to the ui of other kernels.

  • slick white design, no massive notebook style layout. The view gets on creating a
    document that also has nice clean layout, not so much on a input-output mode of operation.
    when we have reagent cells I am definitely not interested to view the sourcecode definition of
    how the ui component works.

  • code cells have an output -> the name and parameters of the functions that were
    defined in the input - this is very nice view and rescues us being bothered by looking
    inside the cell.

  • cell reordering by drag and drop (I dont think this is an immediately important feature though).

load bug with reagent component error

When a notebook is saved that does not correctly render reagent based components,
in the live notebook it gives an error.
But when this notebook is saved, then thereafter it can no longer be reopened AT ALL.
It needs manual patching in a text editor.

The notebook is in branch "dynamic-resolve" called notebooks/reagent-fuckup.clj

data-type for custom components

Jupyter has mime-bundle, which includes both data and javascript.
We need to do something longterm with this.
Perhaps we should include in the notebook both the compiled javascript, and
the data? Or we include plugin function name and plugin version name to render the data.
If the viewer works only with requirejs and the bundle (which excludes the dependency to
say the full vega library), then we only need to store in the notebook the code that was used
to load the renderers with the external dependencies.

def repr_mimebundle(self, include=None, exclude=None):
"""Display the visualization in the Jupyter notebook."""
id = uuid.uuid4()
return (
{'application/javascript': self._generate_js(id)},
{'jupyter-vega': '#{0}'.format(id)},
)

Widget system / plugin architecture

steps needed

  1. Discovery (make reagent components discoverable by name)

  2. A) Sync atoms two way and unidirectional.
    Helper library to start sync.

  3. B) Helper library to trigger atom syncing.
    This is a meta syntax we need while we dont have clojurescript in notebook.
    we could use gered:
    https://github.com/gered/views.reagent/blob/master/views.reagent/src/views/reagent/client/component.clj
    https://github.com/gered/views.reagent/blob/master/examples/todomvc-browserchannel/src/todomvc/client.cljs
    We could use replikativ:
    https://github.com/replikativ/chat42/blob/master/src/cljs/chat42/core.cljs

startup picture

Startup Picture not showing (Picture not included or not served by ring ?)

UI: SandDance

I saw SandDance 3 by Microsoft a while ago, that’s a library that seem to cover your use case, since it’s designed to render huge amounts of data — in the browser, using GPU.

Open source react component that can, that can render millions of rows, also has
3d graphics.

load workbook issues

Workbook content not showing on workbook load.

The file "examples/image-safe.clj" (the file is added in my pull request)
contains several cells with comments and code.
This content can be seen in the workbook file with
cat examples/image-safe.clj

But it does not show up on loading the workbook.

load workbook - error in webbrowser.

This is what happens in a workbook with external dependencies:

Loading a workbook that contains add-dependencies brings this error in the browser:

html-image2

Migrate to shadow-cljs

We should be aiming for a smooth transition without to many sacrifes along the way.

In that sense, it appears reasonable to stick with leiningen based dependencies first and run shadow-cljs like this:

lein run -m shadow.cljs.devtools.cli watch app

Issues I found along the way:

Recent versions of shadow-cljs (2.8.78) require more recent version of Closure than current ClojureScript (1.10.597) so we should probably exclude Closure Deps from ClojureScript at this time.

We need replacements for figwheel auto-testing and devcards.

Fault tolerant connections

We should make all connections (websocket and raw tcp/nrepl) as fault tolerant as possible.Network partition should be handled gracefully (try reconnecting really hard, maybe even buffer requests here and there).

At this time we see jetty closing the websocket due to idle timeouts:

Close 1001 java.util.concurrent.TimeoutException: Idle timeout expired: 500001/500000 ms

libpython bootstrapping woes

We see various issues bootstrapping libpython and numpy. We consider numpy and pandas essential with regards to python conversions.

Appears current version [cnuernber/libpython-clj "1.13"] has a strict python3.6 requirement and Ubuntu has special lib_apt quirks. Had a hard time figuring things out on Ubuntu 19.10.

Other than that, it appears dynamical (pomegranate based) loading it from the repl does not work either.

Expected behavior

Python initialization somehow working

Actual behavior

Python initialization failing

Environment & Version information

libpython-1.13

gorilla-notebook version

f82e54c

Java version

E.g. 1.8

Operating system

n/a

todo misc

comes from todo.md

core.cljs:3718 re-frame: no :event handler registered for: :palette-blurcljs.core.apply.cljs$core$IFn$_invoke$arity$2 @ core.cljs:3718cljs$core$apply @ core.cljs:3709re_frame.loggers.console.cljs$core$IFn$_invoke$arity$variadic @ loggers.cljc:38re_frame$loggers$console @ loggers.cljc:35re_frame.registrar.get_handler.cljs$core$IFn$_invoke$arity$3 @ registrar.cljc:31re_frame$registrar$get_handler @ registrar.cljc:18re_frame$events$handle @ events.cljc:55re_frame.router.EventQueue.re_frame$router$IEventQueue$_process_1st_event_in_queue$arity$1 @ router.cljc:169re_frame$router$_process_1st_event_in_queue @ router.cljc:82re_frame.router.EventQueue.re_frame$router$IEventQueue$_run_queue$arity$1 @ router.cljc:188re_frame$router$_run_queue @ router.cljc:84(anonymous function) @ router.cljc:140re_frame.router.EventQueue.re_frame$router$IEventQueue$_fsm_trigger$arity$3 @ router.cljc:159re_frame$router$_fsm_trigger @ router.cljc:78(anonymous function) @ router.cljc:177channel.port1.onmessage @ nexttick.js:211 core.cljs:3718 Handling re-frame event: [:app:commands]

Service worker (js)

lein assets compress

Fix lein ring uberwar

Deploy on heroku

Add PWA stuff

Enable standalone jar "drop in other webapp extension deployment"

Everything marked with TODO in the code

Introduce next gen clj native worksheet persistence, save uuid to allow references

Implement render/db tests, re-frame

Revisit (Clo)Jupyter

test, devcards TDD

Implement specs

Implement viewer

Explore local (brower repl/kernel)

Drop in uberjar (with min aot)

prod build

Enable clipboard

Enable config / parinfer (optionally)

Build docker image allowing drop in jars (via volume)

Introduce com.stuartsierra.component, maybe tesla ms

Enable travis

Try out dirac devtools

Use timbre logging

Fix Websocket failure handling/reconnect

Authentication/Authorization

POC Sparking/big data

Kill long running threads on server

https://github.com/gadfly361/re-surface

Use the template below when reporting bugs. Please, make sure that you're
running the latest stable release or the latest snapshot/pre-release of
gorilla-notebook and that the problem you're reporting hasn't been reported (and
potentially fixed) already.

Expected behavior

Actual behavior

Steps to reproduce the problem

This is extremely important! Providing us with a reliable way to reproduce
a problem will expedite its solution.

Environment & Version information

gorilla-notebook version

E.g. 0.11.2

Java version

E.g. 1.8

Operating system

E.g. Windows 10

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.