clerk

pieterbreed 2024-08-23T13:28:33.325409Z

Hi everyone, I'm getting an unexpected error Hash is missing on dependency ... of the form (defrecord ...).` I see there was some code merged to main yesterday that seems to fix a similar error. Is this in fact the same issue? Or is there some other issue with defrecord that makes it incompatible with clerk?

mkvlr 2024-08-23T13:47:30.361529Z

hi @pieterbreed, this sounds indeed like what @andrea712 fixed yesterday. Can you try the latest main to confirm it is so?

pieterbreed 2024-08-23T13:48:30.465899Z

I was just now trying that and indeed it fixes the issue for me πŸ‘πŸ½

πŸ™ 1
pieterbreed 2024-08-23T13:49:54.343409Z

I had to manually include org.clojure.clr/tools.namespaec in my project's (lein) dependencies... not sure if that declaration is maybe missing somewhere?

mkvlr 2024-08-23T13:50:32.305469Z

great, we plan to do a release with that in the coming days

πŸ™πŸ½ 1
mkvlr 2024-08-23T13:51:47.526169Z

strange, not sure about that. Is that maybe related to lein? How do you use a git dep with lein?

pieterbreed 2024-08-23T13:53:18.224349Z

heh - πŸ˜… - I edited the bb/shared.clj file to change the version to include an extra string value, then ran bb run install-jar to get it into my local .m2 , then included the modified version of clerk in project.clj.

mkvlr 2024-08-23T13:58:15.581639Z

I see. And you got an error related to tools namespace?

pieterbreed 2024-08-23T13:58:33.724139Z

yes, unless I included the that extra dependency too, then it's working

mkvlr 2024-08-23T14:01:38.363699Z

strange, can you share the stacktrace?

pieterbreed 2024-08-23T14:04:57.083989Z

after require nextjournal.clerk I get this:

2. Unhandled clojure.lang.Compiler$CompilerException
   Error compiling nextjournal/clerk/cljs_libs.clj at (1:1)
   {:clojure.error/phase :execution,
    :clojure.error/line 1,
    :clojure.error/column 1,
    :clojure.error/source "nextjournal/clerk/cljs_libs.clj"}
             Compiler.java: 7671  clojure.lang.Compiler/load
                   RT.java:  381  clojure.lang.RT/loadResourceScript
                   RT.java:  372  clojure.lang.RT/loadResourceScript
                   RT.java:  459  clojure.lang.RT/load
                   RT.java:  424  clojure.lang.RT/load
                  core.clj: 6162  clojure.core/load/fn
                  core.clj: 6161  clojure.core/load
                  core.clj: 6145  clojure.core/load
               RestFn.java:  408  clojure.lang.RestFn/invoke
                  core.clj: 5934  clojure.core/load-one
                  core.clj: 5929  clojure.core/load-one
                  core.clj: 5976  clojure.core/load-lib/fn
                  core.clj: 5975  clojure.core/load-lib
                  core.clj: 5954  clojure.core/load-lib
               RestFn.java:  142  clojure.lang.RestFn/applyTo
                  core.clj:  669  clojure.core/apply
                  core.clj: 6017  clojure.core/load-libs
                  core.clj: 6001  clojure.core/load-libs
               RestFn.java:  137  clojure.lang.RestFn/applyTo
                  core.clj:  669  clojure.core/apply
                  core.clj: 6039  clojure.core/require
                  core.clj: 6039  clojure.core/require
               RestFn.java:  512  clojure.lang.RestFn/invoke
                  view.clj:    1  nextjournal.clerk.view/eval17962/loading--auto--
                  view.clj:    1  nextjournal.clerk.view/eval17962
                  view.clj:    1  nextjournal.clerk.view/eval17962
             Compiler.java: 7201  clojure.lang.Compiler/eval
             Compiler.java: 7190  clojure.lang.Compiler/eval
             Compiler.java: 7659  clojure.lang.Compiler/load
                   RT.java:  381  clojure.lang.RT/loadResourceScript
                   RT.java:  372  clojure.lang.RT/loadResourceScript
                   RT.java:  459  clojure.lang.RT/load
                   RT.java:  424  clojure.lang.RT/load
                  core.clj: 6162  clojure.core/load/fn
                  core.clj: 6161  clojure.core/load
                  core.clj: 6145  clojure.core/load
               RestFn.java:  408  clojure.lang.RestFn/invoke
                  core.clj: 5934  clojure.core/load-one
                  core.clj: 5929  clojure.core/load-one
                  core.clj: 5976  clojure.core/load-lib/fn
                  core.clj: 5975  clojure.core/load-lib
                  core.clj: 5954  clojure.core/load-lib
               RestFn.java:  142  clojure.lang.RestFn/applyTo
                  core.clj:  669  clojure.core/apply
                  core.clj: 6017  clojure.core/load-libs
                  core.clj: 6001  clojure.core/load-libs
               RestFn.java:  137  clojure.lang.RestFn/applyTo
                  core.clj:  669  clojure.core/apply
                  core.clj: 6039  clojure.core/require
                  core.clj: 6039  clojure.core/require
               RestFn.java: 1789  clojure.lang.RestFn/invoke
               builder.clj:    1  nextjournal.clerk.builder/eval16130/loading--auto--
               builder.clj:    1  nextjournal.clerk.builder/eval16130
               builder.clj:    1  nextjournal.clerk.builder/eval16130
             Compiler.java: 7201  clojure.lang.Compiler/eval
             Compiler.java: 7190  clojure.lang.Compiler/eval
             Compiler.java: 7659  clojure.lang.Compiler/load
                   RT.java:  381  clojure.lang.RT/loadResourceScript
                   RT.java:  372  clojure.lang.RT/loadResourceScript
                   RT.java:  459  clojure.lang.RT/load
                   RT.java:  424  clojure.lang.RT/load
                  core.clj: 6162  clojure.core/load/fn
                  core.clj: 6161  clojure.core/load
                  core.clj: 6145  clojure.core/load
               RestFn.java:  408  clojure.lang.RestFn/invoke
                  core.clj: 5934  clojure.core/load-one
                  core.clj: 5929  clojure.core/load-one
                  core.clj: 5976  clojure.core/load-lib/fn
                  core.clj: 5975  clojure.core/load-lib
                  core.clj: 5954  clojure.core/load-lib
               RestFn.java:  142  clojure.lang.RestFn/applyTo
                  core.clj:  669  clojure.core/apply
                  core.clj: 6017  clojure.core/load-libs
                  core.clj: 6001  clojure.core/load-libs
               RestFn.java:  137  clojure.lang.RestFn/applyTo
                  core.clj:  669  clojure.core/apply
                  core.clj: 6039  clojure.core/require
                  core.clj: 6039  clojure.core/require
               RestFn.java: 1289  clojure.lang.RestFn/invoke
                 clerk.clj:    1  nextjournal.clerk/eval10189/loading--auto--
                 clerk.clj:    1  nextjournal.clerk/eval10189
                 clerk.clj:    1  nextjournal.clerk/eval10189
             Compiler.java: 7201  clojure.lang.Compiler/eval
             Compiler.java: 7190  clojure.lang.Compiler/eval
             Compiler.java: 7659  clojure.lang.Compiler/load
                   RT.java:  381  clojure.lang.RT/loadResourceScript
                   RT.java:  372  clojure.lang.RT/loadResourceScript
                   RT.java:  459  clojure.lang.RT/load
                   RT.java:  424  clojure.lang.RT/load
                  core.clj: 6162  clojure.core/load/fn
                  core.clj: 6161  clojure.core/load
                  core.clj: 6145  clojure.core/load
               RestFn.java:  408  clojure.lang.RestFn/invoke
                  core.clj: 5934  clojure.core/load-one
                  core.clj: 5929  clojure.core/load-one
                  core.clj: 5976  clojure.core/load-lib/fn
                  core.clj: 5975  clojure.core/load-lib
                  core.clj: 5954  clojure.core/load-lib
               RestFn.java:  142  clojure.lang.RestFn/applyTo
                  core.clj:  669  clojure.core/apply
                  core.clj: 6017  clojure.core/load-libs
                  core.clj: 6001  clojure.core/load-libs
               RestFn.java:  137  clojure.lang.RestFn/applyTo
                  core.clj:  669  clojure.core/apply
                  core.clj: 6039  clojure.core/require
                  core.clj: 6039  clojure.core/require
               RestFn.java:  408  clojure.lang.RestFn/invoke
                      REPL:   43  afrolabs.gometro-bridge.core/eval10183
                      REPL:   43  afrolabs.gometro-bridge.core/eval10183
             Compiler.java: 7201  clojure.lang.Compiler/eval
    interruptible_eval.clj:  106  nrepl.middleware.interruptible-eval/evaluator/run/fn
    interruptible_eval.clj:  101  nrepl.middleware.interruptible-eval/evaluator/run
               session.clj:  229  nrepl.middleware.session/session-exec/session-loop
        SessionThread.java:   21  nrepl.SessionThread/run

 

mkvlr 2024-08-23T14:09:28.249649Z

ah ok, looks like we’ve missed a dep, will fix this before the release, thanks!

πŸ‘ŒπŸ½ 1
pieterbreed 2024-08-23T16:03:30.102259Z

I seem to have run into something else unexpected. I'm not 100% sure what is triggering it, but I can show the following. This is the smallest reproducible I can create. I have (require '[java-time.api :as t]). This next is in my notebook:

(let [ds (tech.v3.dataset/mapseq-parser)]
  (doseq [x (for [i (range 100)]
              {:x i
               :xts (t/instant)})]
    (ds x))
  (ds))
Error on the clerk output page (live browser) is this: `Unhandled java.lang.ClassCastException class clojure.lang.Reduced cannot be cast to class clojure.lang.ITransientCollection (clojure.lang.Reduced and clojure.lang.ITransientCollection are in unnamed module of loader 'app')` β€’ all of this works fine in the repl without errors, only the clerk output shows the error β€’ In the example above if I remove the line :xts (t/instant) it works in clerk, so somehow the instant is involved (?) β€’ In the example above, if I change 100 to 10 it works with the (t/instant). So the size of the collection is somehow involved. Here is the visible part of the stack trace I see in the clerk output.
core.clj:	3351	clojure.core/persistent!
core.clj:	6965	clojure.core/into/rf--8532
core.clj:	2820	clojure.core/filter/fn--5958/fn--5959
core.clj:	7365	clojure.core/map-indexed/fn--8634/fn--8635
core.clj:	2889	clojure.core/take/fn--5974/fn--5975
core.clj:	2936	clojure.core/drop/fn--5990/fn--5991
core.clj:	6949	clojure.core/transduce
core.clj:	6963	clojure.core/into
core.clj:	6951	clojure.core/into
viewer.cljc:	1626	nextjournal.clerk.viewer/present+paginate-children
viewer.cljc:	1617	nextjournal.clerk.viewer/present+paginate-children
viewer.cljc:	1690	nextjournal.clerk.viewer/present*
viewer.cljc:	1668	nextjournal.clerk.viewer/present*
viewer.cljc:	1628	nextjournal.clerk.viewer/present+paginate-children/fn--18377
core.clj:	7367	clojure.core/map-indexed/fn--8634/fn--8635
core.clj:	2894	clojure.core/take/fn--5974/fn--5975
core.clj:	2942	clojure.core/drop/fn--5990/fn--5991
protocols.clj:	49	clojure.core.protocols/iter-reduce
protocols.clj:	75	clojure.core.protocols/fn--8230
protocols.clj:	75	clojure.core.protocols/fn--8230
protocols.clj:	13	clojure.core.protocols/fn--8178/G--8173--8191
core.clj:	6948	clojure.core/transduce
core.clj:	6963	clojure.core/into
core.clj:	6951	clojure.core/into
viewer.cljc:	1626	nextjournal.clerk.viewer/present+paginate-children
viewer.cljc:	1617	nextjournal.clerk.viewer/present+paginate-children
viewer.cljc:	1690	nextjournal.clerk.viewer/present*
viewer.cljc:	1668	nextjournal.clerk.viewer/present*
viewer.cljc:	1628	nextjournal.clerk.viewer/present+paginate-children/fn--18377
core.clj:	7367	clojure.core/map-indexed/fn--8634/fn--8635
core.clj:	2894	clojure.core/take/fn--5974/fn--5975
core.clj:	2942	clojure.core/drop/fn--5990/fn--5991
ArraySeq.java:	119	clojure.lang.ArraySeq
core.clj:	6947	clojure.core/transduce
core.clj:	6963	clojure.core/into
core.clj:	6951	clojure.core/into
viewer.cljc:	1626	nextjournal.clerk.viewer/present+paginate-children
viewer.cljc:	1617	nextjournal.clerk.viewer/present+paginate-children
viewer.cljc:	1690	nextjournal.clerk.viewer/present*
viewer.cljc:	1668	nextjournal.clerk.viewer/present*
viewer.cljc:	1773	nextjournal.clerk.viewer/present
I think the stack trace is longer, but I can't scroll down in the browser window.

pieterbreed 2024-08-23T16:06:21.867769Z

Just to be clear, this is also on current origin/main.

mkvlr 2024-09-02T06:40:53.436089Z

@pieterbreed I’ve also asked on tech.ml.dataset if this is expected behavior https://github.com/techascent/tech.ml.dataset/issues/413

πŸ™πŸ½ 1
mkvlr 2024-08-29T08:14:46.522599Z

hi @pieterbreed, can you push a repro we can try somewhere?

pieterbreed 2024-08-29T08:19:54.376459Z

Sure, repro is short, ok if I put it here?

pieterbreed 2024-08-29T08:19:59.622269Z

(ns dataset-issueout-of-order-vehicle-updates
  {:nextjournal.clerk/visibility {:code :hide}}
  (:require
   [nextjournal.clerk :as clerk]
   [java-time.api :as t]
   [tech.v3.dataset :as dataset]))


(comment
  (clerk/serve! {:host "0.0.0.0"
                 :watch-paths ["notebooks"]})
  (clerk/halt!)

  )

;; This works
(let [ds (tech.v3.dataset/mapseq-parser)]
  (doseq [x (for [i (range 10)]
              {:x i
               :xts (t/instant)})]
    (ds x))
  (ds))

;; This throws:
;; Unhandled java.lang.ClassCastException
;; class clojure.lang.Reduced cannot be cast to class clojure.lang.ITransientCollection
;; (clojure.lang.Reduced and clojure.lang.ITransientCollection are in unnamed module of loader 'app')
(let [ds (tech.v3.dataset/mapseq-parser)]
  (doseq [x (for [i (range 100)]
              {:x i
               :xts (t/instant)})]
    (ds x))
  (ds))

mkvlr 2024-08-29T08:20:19.218939Z

would prefer something we can clone and run

mkvlr 2024-08-29T08:20:24.199819Z

with the deps etc

mkvlr 2024-08-29T08:20:28.504439Z

if it’s not too much trouble

πŸ‘πŸ½ 1
pieterbreed 2024-08-29T08:59:52.249989Z

https://github.com/pieterbreed/clerk-dataset-repro

mkvlr 2024-08-29T09:04:03.360659Z

thanks!

mkvlr 2024-08-29T10:47:22.300569Z

@pieterbreed I’ve filed https://github.com/nextjournal/clerk/issues/677 but I’m a little out of my depth here, do you know about about this?

pieterbreed 2024-08-29T10:58:27.700789Z

Unfortunately I do not. I started learning clerk and tech.v3.dataset as part of the same learning journey -> data science tooling in clojure, so both are new to me...

pieterbreed 2024-08-29T10:58:50.866439Z

maybe some of the people in the scicloj community would be good to ask