Code Monkey home page Code Monkey logo

clerk-demo's Introduction

🤹 Clerk Demo

This is a bucket of interesting Clerk demos. See https://github.clerk.garden/nextjournal/clerk-demo.

Usage

To play with this, you need to have Clojure installed, then run:

clj -M:nextjournal/clerk nextjournal.clerk/serve! --watch-paths notebooks --port 7777 --browse

This will start the Clerk webserver on port 7777 and watch the notebooks/ directory for changes and open Clerk in your browser.

Open one of the files there, e.g. rule_30.clj, make a change and save it. You should then see these changes reflected in the browser.

From your Editor

For interactive development, it is recommended you let your editor start the project (jack-in), if asked you should select deps.edn as the project type.

Then, evaluate forms in dev/user.clj.

clerk-demo's People

Contributors

genmeblog avatar jackrusher avatar mk avatar philippamarkovics avatar rogererens avatar sritchie avatar zampino avatar

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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

clerk-demo's Issues

clerk/table does not load more rows

first of all, great tool for clojure, really enjoying clerk!

after the version update,
72c626e

it seems clerk/table does not load more rows.

eg: datascience.clj notebook
(clerk/table life-expectancy)

used to load more data in version 0.6.387.

Cannot invoke "java.io.File.isAbsolute()" because "f" is null

I cloned [email protected]:nextjournal/clerk-demo.git
and then opened clerk-demo/dev/user.clj in emacs and ran cider-jack-in-clj.
I followed the instructions here.

[nREPL] Starting server via c\:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -encodedCommand YwBsAG8AagB1AHIAZQAgAC0AUwBkAGUAcABzACAAJwB7ADoAZABlAHAAcwAgAHsAbgByAGUAcABsAC8AbgByAGUAcABsACAAewA6AG0AdgBuAC8AdgBlAHIAcwBpAG8AbgAgACIAIgAwAC4AOQAuADAAIgAiAH0AIABjAGkAZABlAHIALwBjAGkAZABlAHIALQBuAHIAZQBwAGwAIAB7ADoAbQB2AG4ALwB2AGUAcgBzAGkAbwBuACAAIgAiADAALgAyADgALgA0ACIAIgB9ACAAYwBvAG0ALgBjAGUAbQBlAHIAaQBjAGsALwBwAG8AbQBlAGcAcgBhAG4AYQB0AGUAIAB7ADoAbQB2AG4ALwB2AGUAcgBzAGkAbwBuACAAIgAiADEALgAxAC4AMAAiACIAfQAgAHIAZQBmAGEAYwB0AG8AcgAtAG4AcgBlAHAAbAAvAHIAZQBmAGEAYwB0AG8AcgAtAG4AcgBlAHAAbAAgAHsAOgBtAHYAbgAvAHYAZQByAHMAaQBvAG4AIAAiACIAMwAuADUALgAyACIAIgB9AH0AIAA6AGEAbABpAGEAcwBlAHMAIAB7ADoAYwBpAGQAZQByAC8AbgByAGUAcABsACAAewA6AG0AYQBpAG4ALQBvAHAAdABzACAAWwAiACIALQBtACIAIgAgACIAIgBuAHIAZQBwAGwALgBjAG0AZABsAGkAbgBlACIAIgAgACIAIgAtAC0AbQBpAGQAZABsAGUAdwBhAHIAZQAiACIAIAAiACIAWwByAGUAZgBhAGMAdABvAHIALQBuAHIAZQBwAGwALgBtAGkAZABkAGwAZQB3AGEAcgBlAC8AdwByAGEAcAAtAHIAZQBmAGEAYwB0AG8AcgAsAGMAaQBkAGUAcgAuAG4AcgBlAHAAbAAvAGMAaQBkAGUAcgAtAG0AaQBkAGQAbABlAHcAYQByAGUAXQAiACIAXQB9AH0AfQAnACAALQBNADoAYwBpAGQAZQByAC8AbgByAGUAcABsAA==
error in process sentinel: nrepl-server-sentinel: Could not start nREPL server: #< CLIXML

Error building classpath. Cannot invoke "java.io.File.isAbsolute()" because "f" is null

java.lang.NullPointerException: Cannot invoke "java.io.File.isAbsolute()" because "f" is null

	at clojure.tools.deps.alpha.util.dir$canonicalize.invokeStatic(dir.clj:30)

	at clojure.tools.deps.alpha.extensions.deps$fn__1352.invokeStatic(deps.clj:32)

	at clojure.tools.deps.alpha.extensions.deps$fn__1352.invoke(deps.clj:32)

	at clojure.lang.MultiFn.invoke(MultiFn.java:244)

	at clojure.tools.deps.alpha$expand_deps$children_task__746$fn__748$fn__749.invoke(alpha.clj:406)

	at clojure.tools.deps.alpha.util.concurrent$submit_task$task__479.invoke(concurrent.clj:34)

	at clojure.lang.AFn.call(AFn.java:18)

	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)

	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)

	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)

	at java.base/java.lang.Thread.run(Thread.java:831)

<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04"><Obj S="progress" RefId="0"><TN RefId="0"><T>System.Management.Automation.PSCustomObject</T><T>System.Object</T></TN><MS><I64 N="SourceId">1</I64><PR N="Record"><AV>Preparing modules for first use.</AV><AI>0</AI><Nil /><PI>-1</PI><PC>-1</PC><T>Completed</T><SR>-1</SR><SD> </SD></PR></MS></Obj><Obj S="progress" RefId="1"><TNRef RefId="0" /><MS><I64 N="SourceId">2</I64><PR N="Record"><AV>Preparing modules for first use.</AV><AI>0</AI><Nil /><PI>-1</PI><PC>-1</PC><T>Completed</T><SR>-1</SR><SD> </SD></PR></MS></Obj><Obj S="progress" RefId="2"><TNRef RefId="0" /><MS><I64 N="SourceId">1</I64><PR N="Record"><AV>Preparing modules for first use.</AV><AI>0</AI><Nil /><PI>-1</PI><PC>-1</PC><T>Completed</T><SR>-1</SR><SD> </SD></PR></MS></Obj><Obj S="progress" RefId="3"><TNRef RefId="0" /><MS><I64 N="SourceId">3</I64><PR N="Record"><AV>Preparing modules for first use.</AV><AI>0</AI><Nil /><PI>-1</PI><PC>-1</PC><T>Completed</T><SR>-1</SR><SD> </SD></PR></MS></Obj></Objs>
error in process sentinel: Could not start nREPL server: #< CLIXML

Error building classpath. Cannot invoke "java.io.File.isAbsolute()" because "f" is null

java.lang.NullPointerException: Cannot invoke "java.io.File.isAbsolute()" because "f" is null

	at clojure.tools.deps.alpha.util.dir$canonicalize.invokeStatic(dir.clj:30)

	at clojure.tools.deps.alpha.extensions.deps$fn__1352.invokeStatic(deps.clj:32)

	at clojure.tools.deps.alpha.extensions.deps$fn__1352.invoke(deps.clj:32)

	at clojure.lang.MultiFn.invoke(MultiFn.java:244)

	at clojure.tools.deps.alpha$expand_deps$children_task__746$fn__748$fn__749.invoke(alpha.clj:406)

	at clojure.tools.deps.alpha.util.concurrent$submit_task$task__479.invoke(concurrent.clj:34)

	at clojure.lang.AFn.call(AFn.java:18)

	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)

	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)

	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)

	at java.base/java.lang.Thread.run(Thread.java:831)

<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04"><Obj S="progress" RefId="0"><TN RefId="0"><T>System.Management.Automation.PSCustomObject</T><T>System.Object</T></TN><MS><I64 N="SourceId">1</I64><PR N="Record"><AV>Preparing modules for first use.</AV><AI>0</AI><Nil /><PI>-1</PI><PC>-1</PC><T>Completed</T><SR>-1</SR><SD> </SD></PR></MS></Obj><Obj S="progress" RefId="1"><TNRef RefId="0" /><MS><I64 N="SourceId">2</I64><PR N="Record"><AV>Preparing modules for first use.</AV><AI>0</AI><Nil /><PI>-1</PI><PC>-1</PC><T>Completed</T><SR>-1</SR><SD> </SD></PR></MS></Obj><Obj S="progress" RefId="2"><TNRef RefId="0" /><MS><I64 N="SourceId">1</I64><PR N="Record"><AV>Preparing modules for first use.</AV><AI>0</AI><Nil /><PI>-1</PI><PC>-1</PC><T>Completed</T><SR>-1</SR><SD> </SD></PR></MS></Obj><Obj S="progress" RefId="3"><TNRef RefId="0" /><MS><I64 N="SourceId">3</I64><PR N="Record"><AV>Preparing modules for first use.</AV><AI>0</AI><Nil /><PI>-1</PI><PC>-1</PC><T>Completed</T><SR>-1</SR><SD> </SD></PR></MS></Obj></Objs>

here's the decoded command

clojure -Sdeps '{:deps {nrepl/nrepl {:mvn/version ""0.9.0""} cider/cider-nrepl {:mvn/version ""0.28.4""} com.cemerick/pomegranate {:mvn/version ""1.1.0""} refactor-nrepl/refactor-nrepl {:mvn/version ""3.5.2""}} :aliases {:cider/nrepl {:main-opts [""-m"" ""nrepl.cmdline"" ""--middleware"" ""[refactor-nrepl.middleware/wrap-refactor,cider.nrepl/cider-middleware]""]}}}' -M:cider/nrepl

RejectedExecutionException

$ clj -M:nextjournal/clerk nextjournal.clerk/serve! --watch-paths notebooks --port 7777 --browse
Unhandled java.util.concurrent.RejectedExecutionException
Task java.util.concurrent.FutureTask@1ba6ce55[Not completed, task = clojure.core$binding_conveyor_fn$fn__5772@7612514b] rejected from java.util.concurrent.ThreadPoolExecutor@27b089ec[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 4]
$ clj --version
Clojure CLI version 1.11.1.1347
$ java --version
openjdk 11.0.19 2023-04-18
OpenJDK Runtime Environment (build 11.0.19+7-post-Ubuntu-0ubuntu123.04)
OpenJDK 64-Bit Server VM (build 11.0.19+7-post-Ubuntu-0ubuntu123.04, mixed mode, sharing)

'posix:permissions' not supported on Windows

I started the web server and 'file-event' watcher. When modifying a file, I get the following:
This occurs whether or not ".cache" dir exists.
image

Unhandled java.lang.UnsupportedOperationException
'posix:permissions' not supported as initial attribute
nil

WindowsSecurityDescriptor.java: | 358 | sun.nio.fs.WindowsSecurityDescriptor
WindowsFileSystemProvider.java: | 497 | sun.nio.fs.WindowsFileSystemProvider
Files.java: | 692 | java.nio.file.Files
Files.java: | 799 | java.nio.file.Files
Files.java: | 745 | java.nio.file.Files
core.clj: | 285 | datoteka.core/create-dir
core.clj: | 278 | datoteka.core/create-dir
core.clj: | 280 | datoteka.core/create-dir
core.clj: | 278 | datoteka.core/create-dir
clerk.clj: | 90 | nextjournal.clerk/read+eval-cached
clerk.clj: | 76 | nextjournal.clerk/read+eval-cached

some issues

Great to see clerk live finally!

Three small issues at the beginning:

  1. (rather harmless) On WSL2 watcher throws an exception, but seems to work:
11:50:10.166 [nREPL-session-0c829bc3-2c90-4658-9c85-9546896127b1] DEBUG io.methvin.watcher.DirectoryWatcher - Assuming ExtendedWatchEventModifier.FILE_TREE is not supported
java.lang.UnsupportedOperationException: Modifier not supported
	at java.base/sun.nio.fs.LinuxWatchService$Poller.implRegister(LinuxWatchService.java:238)
	at java.base/sun.nio.fs.AbstractPoller.processRequests(AbstractPoller.java:265)
	at java.base/sun.nio.fs.LinuxWatchService$Poller.run(LinuxWatchService.java:366)
	at java.base/java.lang.Thread.run(Thread.java:829)
  1. Unicode chars in the how_clerk_works.clj hang my Emacs
  2. How to display dataset (from tablecloth) as a table? I managed to display markdown ((clerk/md (print-str (expand-grid input)))) but well it's not as cute as the result of the clerk/table

Rule 30 demo unresolved symbol "v/inspect-children"

Cloned clerk-demo and fired it up in cider. The Rule 30 page references "v/inspect-children", which doesn't seem to be in the library. clerk-demo pulled commit 53cba6c

Stack trace from browser:

error in render-fn: Could not resolve symbol: v/inspect-children
{:render-fn
(fn [row opts] (into [:div.flex.inline-flex]
(v/inspect-children opts) row))}

Hide Stacktrace (20 lines)
kn.A@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:3546:71
rna/<@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:2946:90
g.h@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:4365:404
Lg@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:2249:7
Mg@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:2248:446
lh.h@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:3155:121
lga@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:2525:376
Vz@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:2526:293
mga/<@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:2527:279
Zv@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:2459:316
uw@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:2464:140
mga@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:2527:258
c@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:2527:418
L@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:1732:297
hl@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:1874:103
df@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:1819:403
cf@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:1819:255
Wc@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:1809:232
l@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:1626:148
U@https://storage.googleapis.com/nextjournal-cas-eu/assets/5g4LrXM79jqWPAH95KvBVuphVj1NGcaaYmJJgJPmrAaBGLnjScag4uVvALUANwbJ6mVXonCSjuZi4nXueujJGBrW-viewer.js:1627:11

Novice: How to spin up REPL via a cli command

Hi, I love the clerk idea. I'm a novice in clojure, especially unwritten conventions. I read "Brave Clojure" and made a few scripts with bb though.

I would love to play around with this interactively, but the Jack-in comment doesn't help me. I guess that's an emacs thing. How can I canoncically call this dev/user.clj from a terminal? What does an editor to behind the scene to "jack-in"?

I wrote this bb.edn to help me, but I don't know, feels wrong? Isn't there a "one-liner" to start a REPL for this kind of situation?

; bb.edn
{:paths ["."]
 :deps {; reuse deps.edn in bb.edn:
               local/deps {:local/root "."} 
        }
 :tasks {; write `.nrepl-port` file on nrepl startup
         nrepl
         {:requires ([babashka.fs :as fs]
                     [babashka.nrepl.server :as srv])
          :task (
do (srv/start-server! {:host "localhost" :port 1339})
                    (spit ".nrepl-port" "1339")
                    (-> (Runtime/getRuntime)
                        (.addShutdownHook
                         (Thread. (fn [] (fs/delete ".nrepl-port")))))
                    (deref (promise)))}}}

I use nvim with Conjure on linux, if that helps/differs.

missing :sha in coordinate.

Team, I just cloned https://github.com/nextjournal/clerk-demo/ in my InteliJ and I am getting the below error when it is trying to resolve dependencies with deps.edn

Errors during project resolution The following errors were found during project resolve: /Users/karansingrajput/clerk/clerk-demo/deps.edn: Library io.github.nextjournal/clerk has missing :sha in coordinate.

Here is my deps.edn

{:nextjournal/clerk
;; we might use a version of Clerk which is ahead of main for demo purposes
{:override-deps {io.github.nextjournal/clerk {:git/sha "37d3686f8f475a7aef1d34b147f043b31dfd50a7"}}
:extra-paths ["datasets"]
:exec-fn nextjournal.clerk/build-static-app!
;; notebooks to be built, accepts globs patterns
:exec-args {:bundle? false
:paths ["index.md"
"notebooks/introduction.clj"
"notebooks/data_science.clj"
"notebooks/semantic.clj"
"notebooks/sicmutils.clj"
"notebooks/rule_30.clj"]}}}

Can anyone please help me, Thanks in Advance 🙏

data_science example uses missing dataset

notebooks/data_science.clj references datasets/worker-ceo-ratio.tsv, which isn't included in this repository (and a quick Google doesn't show it up as an easily available source?).

NotDirectoryException on index.md

I opened dev/user.clj with emacs and ran cider-jack-in-clj then evaled (clerk/serve! {:watch-paths ["notebooks" "src" "index.md"]}) but got an error about index.md being a file and not a directory.

Starting new watcher for paths ["notebooks" "src" "index.md"]
Execution error (NotDirectoryException) at sun.nio.fs.WindowsWatchService$Poller/implRegister (WindowsWatchService.java:379).
index.md

Illegal char <:> exception on Windows

This is still an issue on clerk-demo sha: 8cbed37
As reported on Slack nextjournal
I've got a small Clerk project I created already running ok on my system.
I'm trying to start:
https://github.com/nextjournal/clerk-demo
from a Windows terminal using "clj" (CLI version 1.10.3.933).
I get a startup exception (updated):
Caused by: org.graalvm.polyglot.PolyglotException: java.nio.file.InvalidPathException: Illegal char <:> at index 4: file:/C:/Users/mail/.m2/repository/io/github/nextjournal/markdown/0.1.36/markdown-0.1.36.jar!/js/markdown.mjs

mkvlr initial response:
this looks like nextjournal/viewers#29
This has now been closed but this clerk-demo issue still persists.

Describe editor jack-in a bit more with beginners in mind

Today in Slack there was a question from a Clojure beginner about how to jack-in using Calva. Calva warns about the :nextjournal/clerk alias potentially tripping the REPL connection up. (Which, after having looked at the deps.edn, I think is a valid concern.) Another user in that Slack thread said things worked if he jacked-in without selecting any aliases.

I think some little more guidance about this in the README would take us far. I can help with it from a Calva perspective, but I need to understand the project setup a bit. Any CIDER user in the Clerk team who can describe how they jack-in to the project? That would probably tell me how to advice people to do it from Calva.

In it's simplest form the the README maybe only needs to mention that no aliases should be selected when jacking in from an editor. So it doesn't have to be a Calva specific text. Even if we might want that anyway, since beginners often use Calva and could benefit from clear Calva-specific steps. WDYT?

Cheers!

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.