Repository files navigation

RiverDB.org Server

TLDR Quick Start

The main thing missing is a process for setting up a fresh install. For now, you can just ask for a copy of the database from @thosmos

Ensure you have a Java JDK

javac -version

Install Clojure CLI

Install Clojure CLI on Mac OS:

brew install clojure

Admin UI

# Load all JS deps from package.json.
yarn
(npm install)
# Start up the client UI compiler (watches the code and hot-reloads the browser on changes):
yarn main

Datomic

unzip datomic-pro-0.9.6397.zip
cd datomic-pro-0.9.6397
# Get the data zip from a project member
unzip ../riverdb-backup-data.zip
bin/transactor config/dev-transactor-template.properties

Backend Server

Change some defaults using environment variables like DATOMIC_URI in an .env file or in the shell (the following are the defaults)

APP_ENV=dev
DATOMIC_URI=datomic:dev://localhost:4334/riverdb
PORT=8989

run the server:

clojure -A:dev:server:rad:run

OR start the server in a REPL:

clj -A:dev:server:rad
# The ns is defined in src/dev/user## Start the server
user=> (start)
## After modifications of the backend code:
user=> (restart)

Browse to the app at: http://localhost:8989

The client build server

Run the shadow-cljs build server with:

yarn main

Optionally open the client build manager UI There you can recompile or trigger release builds

Clojurescript REPL:

You can execute CLJS code in a REPL running in the browser environment

  1. Open a remote nREPL to localhost:9000

  2. Execute (shadow/repl :main)

  3. Test with (js/alert "Hello from the CLJS REPL")

A More Detailed Setting Up Description …​

The shadow-cljs compiler uses all js dependencies through NPM. If we use a library that is in cljsjs we will also have to add it to our package.json.

You cannot compile this project until you install the ones it depends on already:

$ yarn

or if you prefer npm:

$ npm install

Adding NPM Javascript libraries is as simple as adding them to the package.json file and requiring them! See the the Shadow-cljs User’s Guide for more information.

Dependency Aliases:

You will want to enable the :dev, :server, and :rad Clojure dependencies while developing the server-side of this project. In IntelliJ this is in the "Clojure Deps" border tab window under "Aliases".

The client and common project source is in src/main. The server project source is in src/server.

Development Mode

Shadow-cljs handles the client-side development build. The file src/main/app/client.cljs contains the code to start and refresh the client for hot code reload.

In general it is easiest just to run the compiler in server mode:

$ npx shadow-cljs server
INFO: XNIO version 3.3.8.Final
Nov 10, 2018 8:08:23 PM org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.3.8.Final
shadow-cljs - HTTP server for :test available at http://localhost:8022
shadow-cljs - HTTP server for :workspaces available at http://localhost:8023
shadow-cljs - server version: 2.7.2
shadow-cljs - server running at http://localhost:9630
shadow-cljs - socket REPL running on port 51936
shadow-cljs - nREPL server started on port 9000
...

then navigate to the server URL (shown in this example as http://localhost:9630) and use the Builds menu to enable/disable whichever builds you want watched/running.

Shadow-cljs will also start a web server for any builds that configure one. This template configures one for workspaces, and one for tests:

You can also run the individual client builds directly

#### Develop components with cljs ##### Workspaces:
npm run client/workspaces

Visit http://localhost:8023 Have a look at src/workspaces and https://github.com/nubank/workspaces

#### Refreshing tests in the browser ####
# CLJS Tests:
npm run client/test
#### Full-stack development ####
# Start the cljs compiler for the main target (server must be running)
npm run client/main

See the server section below for working on the full-stack app itself.

Client REPL

The shadow-cljs compiler starts an nREPL. It is configured to start on port 9000 (in shadow-cljs.edn).

In IntelliJ: add a remote Clojure REPL configuration with host localhost and port 9000.

then:

(shadow/repl :main)

will connect you to the REPL for a specific build (NOTE: Make sure you have a browser running the result, or your REPL won’t have anything to talk to!)

If you’re using CIDER see the Shadow-cljs User’s Guide and the comments in deps.edn for more information.

The API Server

In order to work with your main application you’ll want to start your own server that can also serve your application’s API.

Start a LOCAL clj nREPL in IntelliJ (using IntelliJ’s classpath with the dev alias selected in the Clojure Deps tab), or from the command line:

$ clj -A:dev:server
user=> (start)
user=> (stop)
...
user=> (restart) ; stop, reload server code, and go again
user=> (tools-ns/refresh) ; retry code reload if hot server reload fails

Some options can be set on the command line or in the deps.edn under the :dev alias:

The -J-Dtrace adds a JVM argument that will enable performance tracing for Fulcro Inspect’s network tab so you can see how your resolvers and mutations are performing.

The -J-Dguardrails.enabled=true turns on guardrails instrumentation of guardrails spec’d functions, which is a wrapper of Clojure spec that makes instrumentation and production-time elision (for performance and size) much easier.

ℹ️
For real development, please use an editor that has REPL integration, like Cursive (recommended), Atom Chlorine, or Spacemacs.

The URL to work on your application is then http://localhost:8989

Hot code reload, preloads, and such are all coded into the javascript.

Preloads

There is a preload file that is used on the development build of the application riverdb.development-preload. You can add code here that you want to execute before the application initializes in development mode.

Fulcro Inspect

Fulcro inspect will preload on the development build of the main application and workspaces. You must install the plugin in Chrome from the Chrome store (free) to access it. It will add a Fulcro Inspect tab to the developer tools pane.

Tests

Tests are in src/test. Any test namespace ending in -test will be auto-detected.

src/test
└── app
└── sample_test.cljc spec runnable by client and server.

You can write plain deftest in here, and it is preconfigured to support the helper macros in fulcro-spec as well.

Running tests:

Clojure Tests

Typically you’ll just run your tests using the editor of choice (e.g. Run tests in namspace in IntelliJ).

The tests are also set up to run with Kaocha at the command line for your convenience and CI tools:

$ clj -A:dev:clj-tests --watch

See the Kaocha project for more details.

Clojurescript tests

The tests can be run in any number of browsers simply by navigating to the test URL that shadow-cljs outputs.

CI support is done through the ci-test build in shadow, and via Karma.

If you start the ci-tests build in Shadow-cljs, then you can also run cljs tests in a terminal "watch mode" with:

npx karma start

Of course, this make CLJS CI easy:

npx shadow-cljs compile ci-tests
npx karma start --single-run

Running all Tests Once

There is a UNIX Makefile that includes all of the CI commands as the default target. Just run:

make

Workspaces

Workspaces is a project by Nubank that is written in Fulcro, and has great support for developing in Fulcro. It is similar to devcards but has a more powerful user interface, integration with Fulcro Inspect, and much more.

The source directory for making additions to your workspace is src/workspaces.

Any namespace ending in -ws will be auto-detected and added to your workspace!

Standalone Runnable Jar (Production, with advanced optimized client js)

See tools deps projects like Depstar. You’ll need to make a release js build, optionally pre-compile your CLJ, and package it. We will likely add a demo of this process soon.

About

A river science data management system in Clojure

Resources

Stars

17 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

RiverDB.org Server

TLDR Quick Start

The main thing missing is a process for setting up a fresh install. For now, you can just ask for a copy of the database from @thosmos

Ensure you have a Java JDK

javac -version

Install Clojure CLI

Install Clojure CLI on Mac OS:

brew install clojure

Admin UI

# Load all JS deps from package.json.
yarn
(npm install)
# Start up the client UI compiler (watches the code and hot-reloads the browser on changes):
yarn main

Datomic

unzip datomic-pro-0.9.6397.zip
cd datomic-pro-0.9.6397
# Get the data zip from a project member
unzip ../riverdb-backup-data.zip
bin/transactor config/dev-transactor-template.properties

Backend Server

Change some defaults using environment variables like DATOMIC_URI in an .env file or in the shell (the following are the defaults)

APP_ENV=dev
DATOMIC_URI=datomic:dev://localhost:4334/riverdb
PORT=8989

run the server:

clojure -A:dev:server:rad:run

OR start the server in a REPL:

clj -A:dev:server:rad
# The ns is defined in src/dev/user## Start the server
user=> (start)
## After modifications of the backend code:
user=> (restart)

Browse to the app at: http://localhost:8989

The client build server

Run the shadow-cljs build server with:

yarn main

Optionally open the client build manager UI There you can recompile or trigger release builds

Clojurescript REPL:

You can execute CLJS code in a REPL running in the browser environment

  1. Open a remote nREPL to localhost:9000

  2. Execute (shadow/repl :main)

  3. Test with (js/alert "Hello from the CLJS REPL")

A More Detailed Setting Up Description …​

The shadow-cljs compiler uses all js dependencies through NPM. If we use a library that is in cljsjs we will also have to add it to our package.json.

You cannot compile this project until you install the ones it depends on already:

$ yarn

or if you prefer npm:

$ npm install

Adding NPM Javascript libraries is as simple as adding them to the package.json file and requiring them! See the the Shadow-cljs User’s Guide for more information.

Dependency Aliases:

You will want to enable the :dev, :server, and :rad Clojure dependencies while developing the server-side of this project. In IntelliJ this is in the "Clojure Deps" border tab window under "Aliases".

The client and common project source is in src/main. The server project source is in src/server.

Development Mode

Shadow-cljs handles the client-side development build. The file src/main/app/client.cljs contains the code to start and refresh the client for hot code reload.

In general it is easiest just to run the compiler in server mode:

$ npx shadow-cljs server
INFO: XNIO version 3.3.8.Final
Nov 10, 2018 8:08:23 PM org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.3.8.Final
shadow-cljs - HTTP server for :test available at http://localhost:8022
shadow-cljs - HTTP server for :workspaces available at http://localhost:8023
shadow-cljs - server version: 2.7.2
shadow-cljs - server running at http://localhost:9630
shadow-cljs - socket REPL running on port 51936
shadow-cljs - nREPL server started on port 9000
...

then navigate to the server URL (shown in this example as http://localhost:9630) and use the Builds menu to enable/disable whichever builds you want watched/running.

Shadow-cljs will also start a web server for any builds that configure one. This template configures one for workspaces, and one for tests:

You can also run the individual client builds directly

#### Develop components with cljs ##### Workspaces:
npm run client/workspaces

Visit http://localhost:8023 Have a look at src/workspaces and https://github.com/nubank/workspaces

#### Refreshing tests in the browser ####
# CLJS Tests:
npm run client/test
#### Full-stack development ####
# Start the cljs compiler for the main target (server must be running)
npm run client/main

See the server section below for working on the full-stack app itself.

Client REPL

The shadow-cljs compiler starts an nREPL. It is configured to start on port 9000 (in shadow-cljs.edn).

In IntelliJ: add a remote Clojure REPL configuration with host localhost and port 9000.

then:

(shadow/repl :main)

will connect you to the REPL for a specific build (NOTE: Make sure you have a browser running the result, or your REPL won’t have anything to talk to!)

If you’re using CIDER see the Shadow-cljs User’s Guide and the comments in deps.edn for more information.

The API Server

In order to work with your main application you’ll want to start your own server that can also serve your application’s API.

Start a LOCAL clj nREPL in IntelliJ (using IntelliJ’s classpath with the dev alias selected in the Clojure Deps tab), or from the command line:

$ clj -A:dev:server
user=> (start)
user=> (stop)
...
user=> (restart) ; stop, reload server code, and go again
user=> (tools-ns/refresh) ; retry code reload if hot server reload fails

Some options can be set on the command line or in the deps.edn under the :dev alias:

The -J-Dtrace adds a JVM argument that will enable performance tracing for Fulcro Inspect’s network tab so you can see how your resolvers and mutations are performing.

The -J-Dguardrails.enabled=true turns on guardrails instrumentation of guardrails spec’d functions, which is a wrapper of Clojure spec that makes instrumentation and production-time elision (for performance and size) much easier.

ℹ️
For real development, please use an editor that has REPL integration, like Cursive (recommended), Atom Chlorine, or Spacemacs.

The URL to work on your application is then http://localhost:8989

Hot code reload, preloads, and such are all coded into the javascript.

Preloads

There is a preload file that is used on the development build of the application riverdb.development-preload. You can add code here that you want to execute before the application initializes in development mode.

Fulcro Inspect

Fulcro inspect will preload on the development build of the main application and workspaces. You must install the plugin in Chrome from the Chrome store (free) to access it. It will add a Fulcro Inspect tab to the developer tools pane.

Tests

Tests are in src/test. Any test namespace ending in -test will be auto-detected.

src/test
└── app
└── sample_test.cljc spec runnable by client and server.

You can write plain deftest in here, and it is preconfigured to support the helper macros in fulcro-spec as well.

Running tests:

Clojure Tests

Typically you’ll just run your tests using the editor of choice (e.g. Run tests in namspace in IntelliJ).

The tests are also set up to run with Kaocha at the command line for your convenience and CI tools:

$ clj -A:dev:clj-tests --watch

See the Kaocha project for more details.

Clojurescript tests

The tests can be run in any number of browsers simply by navigating to the test URL that shadow-cljs outputs.

CI support is done through the ci-test build in shadow, and via Karma.

If you start the ci-tests build in Shadow-cljs, then you can also run cljs tests in a terminal "watch mode" with:

npx karma start

Of course, this make CLJS CI easy:

npx shadow-cljs compile ci-tests
npx karma start --single-run

Running all Tests Once

There is a UNIX Makefile that includes all of the CI commands as the default target. Just run:

make

Workspaces

Workspaces is a project by Nubank that is written in Fulcro, and has great support for developing in Fulcro. It is similar to devcards but has a more powerful user interface, integration with Fulcro Inspect, and much more.

The source directory for making additions to your workspace is src/workspaces.

Any namespace ending in -ws will be auto-detected and added to your workspace!

Standalone Runnable Jar (Production, with advanced optimized client js)

See tools deps projects like Depstar. You’ll need to make a release js build, optionally pre-compile your CLJ, and package it. We will likely add a demo of this process soon.

About

A river science data management system in Clojure

Resources

Stars

17 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

RiverDB.org Server

TLDR Quick Start

The main thing missing is a process for setting up a fresh install. For now, you can just ask for a copy of the database from @thosmos

Ensure you have a Java JDK

javac -version

Install Clojure CLI

Install Clojure CLI on Mac OS:

brew install clojure

Admin UI

# Load all JS deps from package.json.
yarn
(npm install)
# Start up the client UI compiler (watches the code and hot-reloads the browser on changes):
yarn main

Datomic

unzip datomic-pro-0.9.6397.zip
cd datomic-pro-0.9.6397
# Get the data zip from a project member
unzip ../riverdb-backup-data.zip
bin/transactor config/dev-transactor-template.properties

Backend Server

Change some defaults using environment variables like DATOMIC_URI in an .env file or in the shell (the following are the defaults)

APP_ENV=dev
DATOMIC_URI=datomic:dev://localhost:4334/riverdb
PORT=8989

run the server:

clojure -A:dev:server:rad:run

OR start the server in a REPL:

clj -A:dev:server:rad
# The ns is defined in src/dev/user## Start the server
user=> (start)
## After modifications of the backend code:
user=> (restart)

Browse to the app at: http://localhost:8989

The client build server

Run the shadow-cljs build server with:

yarn main

Optionally open the client build manager UI There you can recompile or trigger release builds

Clojurescript REPL:

You can execute CLJS code in a REPL running in the browser environment

  1. Open a remote nREPL to localhost:9000

  2. Execute (shadow/repl :main)

  3. Test with (js/alert "Hello from the CLJS REPL")

A More Detailed Setting Up Description …​

The shadow-cljs compiler uses all js dependencies through NPM. If we use a library that is in cljsjs we will also have to add it to our package.json.

You cannot compile this project until you install the ones it depends on already:

$ yarn

or if you prefer npm:

$ npm install

Adding NPM Javascript libraries is as simple as adding them to the package.json file and requiring them! See the the Shadow-cljs User’s Guide for more information.

Dependency Aliases:

You will want to enable the :dev, :server, and :rad Clojure dependencies while developing the server-side of this project. In IntelliJ this is in the "Clojure Deps" border tab window under "Aliases".

The client and common project source is in src/main. The server project source is in src/server.

Development Mode

Shadow-cljs handles the client-side development build. The file src/main/app/client.cljs contains the code to start and refresh the client for hot code reload.

In general it is easiest just to run the compiler in server mode:

$ npx shadow-cljs server
INFO: XNIO version 3.3.8.Final
Nov 10, 2018 8:08:23 PM org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.3.8.Final
shadow-cljs - HTTP server for :test available at http://localhost:8022
shadow-cljs - HTTP server for :workspaces available at http://localhost:8023
shadow-cljs - server version: 2.7.2
shadow-cljs - server running at http://localhost:9630
shadow-cljs - socket REPL running on port 51936
shadow-cljs - nREPL server started on port 9000
...

then navigate to the server URL (shown in this example as http://localhost:9630) and use the Builds menu to enable/disable whichever builds you want watched/running.

Shadow-cljs will also start a web server for any builds that configure one. This template configures one for workspaces, and one for tests:

You can also run the individual client builds directly

#### Develop components with cljs ##### Workspaces:
npm run client/workspaces

Visit http://localhost:8023 Have a look at src/workspaces and https://github.com/nubank/workspaces

#### Refreshing tests in the browser ####
# CLJS Tests:
npm run client/test
#### Full-stack development ####
# Start the cljs compiler for the main target (server must be running)
npm run client/main

See the server section below for working on the full-stack app itself.

Client REPL

The shadow-cljs compiler starts an nREPL. It is configured to start on port 9000 (in shadow-cljs.edn).

In IntelliJ: add a remote Clojure REPL configuration with host localhost and port 9000.

then:

(shadow/repl :main)

will connect you to the REPL for a specific build (NOTE: Make sure you have a browser running the result, or your REPL won’t have anything to talk to!)

If you’re using CIDER see the Shadow-cljs User’s Guide and the comments in deps.edn for more information.

The API Server

In order to work with your main application you’ll want to start your own server that can also serve your application’s API.

Start a LOCAL clj nREPL in IntelliJ (using IntelliJ’s classpath with the dev alias selected in the Clojure Deps tab), or from the command line:

$ clj -A:dev:server
user=> (start)
user=> (stop)
...
user=> (restart) ; stop, reload server code, and go again
user=> (tools-ns/refresh) ; retry code reload if hot server reload fails

Some options can be set on the command line or in the deps.edn under the :dev alias:

The -J-Dtrace adds a JVM argument that will enable performance tracing for Fulcro Inspect’s network tab so you can see how your resolvers and mutations are performing.

The -J-Dguardrails.enabled=true turns on guardrails instrumentation of guardrails spec’d functions, which is a wrapper of Clojure spec that makes instrumentation and production-time elision (for performance and size) much easier.

ℹ️
For real development, please use an editor that has REPL integration, like Cursive (recommended), Atom Chlorine, or Spacemacs.

The URL to work on your application is then http://localhost:8989

Hot code reload, preloads, and such are all coded into the javascript.

Preloads

There is a preload file that is used on the development build of the application riverdb.development-preload. You can add code here that you want to execute before the application initializes in development mode.

Fulcro Inspect

Fulcro inspect will preload on the development build of the main application and workspaces. You must install the plugin in Chrome from the Chrome store (free) to access it. It will add a Fulcro Inspect tab to the developer tools pane.

Tests

Tests are in src/test. Any test namespace ending in -test will be auto-detected.

src/test
└── app
└── sample_test.cljc spec runnable by client and server.

You can write plain deftest in here, and it is preconfigured to support the helper macros in fulcro-spec as well.

Running tests:

Clojure Tests

Typically you’ll just run your tests using the editor of choice (e.g. Run tests in namspace in IntelliJ).

The tests are also set up to run with Kaocha at the command line for your convenience and CI tools:

$ clj -A:dev:clj-tests --watch

See the Kaocha project for more details.

Clojurescript tests

The tests can be run in any number of browsers simply by navigating to the test URL that shadow-cljs outputs.

CI support is done through the ci-test build in shadow, and via Karma.

If you start the ci-tests build in Shadow-cljs, then you can also run cljs tests in a terminal "watch mode" with:

npx karma start

Of course, this make CLJS CI easy:

npx shadow-cljs compile ci-tests
npx karma start --single-run

Running all Tests Once

There is a UNIX Makefile that includes all of the CI commands as the default target. Just run:

make

Workspaces

Workspaces is a project by Nubank that is written in Fulcro, and has great support for developing in Fulcro. It is similar to devcards but has a more powerful user interface, integration with Fulcro Inspect, and much more.

The source directory for making additions to your workspace is src/workspaces.

Any namespace ending in -ws will be auto-detected and added to your workspace!

Standalone Runnable Jar (Production, with advanced optimized client js)

See tools deps projects like Depstar. You’ll need to make a release js build, optionally pre-compile your CLJ, and package it. We will likely add a demo of this process soon.

About

A river science data management system in Clojure

Resources

Stars

17 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

RiverDB.org Server

TLDR Quick Start

The main thing missing is a process for setting up a fresh install. For now, you can just ask for a copy of the database from @thosmos

Ensure you have a Java JDK

javac -version

Install Clojure CLI

Install Clojure CLI on Mac OS:

brew install clojure

Admin UI

# Load all JS deps from package.json.
yarn
(npm install)
# Start up the client UI compiler (watches the code and hot-reloads the browser on changes):
yarn main

Datomic

unzip datomic-pro-0.9.6397.zip
cd datomic-pro-0.9.6397
# Get the data zip from a project member
unzip ../riverdb-backup-data.zip
bin/transactor config/dev-transactor-template.properties

Backend Server

Change some defaults using environment variables like DATOMIC_URI in an .env file or in the shell (the following are the defaults)

APP_ENV=dev
DATOMIC_URI=datomic:dev://localhost:4334/riverdb
PORT=8989

run the server:

clojure -A:dev:server:rad:run

OR start the server in a REPL:

clj -A:dev:server:rad
# The ns is defined in src/dev/user## Start the server
user=> (start)
## After modifications of the backend code:
user=> (restart)

Browse to the app at: http://localhost:8989

The client build server

Run the shadow-cljs build server with:

yarn main

Optionally open the client build manager UI There you can recompile or trigger release builds

Clojurescript REPL:

You can execute CLJS code in a REPL running in the browser environment

  1. Open a remote nREPL to localhost:9000

  2. Execute (shadow/repl :main)

  3. Test with (js/alert "Hello from the CLJS REPL")

A More Detailed Setting Up Description …​

The shadow-cljs compiler uses all js dependencies through NPM. If we use a library that is in cljsjs we will also have to add it to our package.json.

You cannot compile this project until you install the ones it depends on already:

$ yarn

or if you prefer npm:

$ npm install

Adding NPM Javascript libraries is as simple as adding them to the package.json file and requiring them! See the the Shadow-cljs User’s Guide for more information.

Dependency Aliases:

You will want to enable the :dev, :server, and :rad Clojure dependencies while developing the server-side of this project. In IntelliJ this is in the "Clojure Deps" border tab window under "Aliases".

The client and common project source is in src/main. The server project source is in src/server.

Development Mode

Shadow-cljs handles the client-side development build. The file src/main/app/client.cljs contains the code to start and refresh the client for hot code reload.

In general it is easiest just to run the compiler in server mode:

$ npx shadow-cljs server
INFO: XNIO version 3.3.8.Final
Nov 10, 2018 8:08:23 PM org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.3.8.Final
shadow-cljs - HTTP server for :test available at http://localhost:8022
shadow-cljs - HTTP server for :workspaces available at http://localhost:8023
shadow-cljs - server version: 2.7.2
shadow-cljs - server running at http://localhost:9630
shadow-cljs - socket REPL running on port 51936
shadow-cljs - nREPL server started on port 9000
...

then navigate to the server URL (shown in this example as http://localhost:9630) and use the Builds menu to enable/disable whichever builds you want watched/running.

Shadow-cljs will also start a web server for any builds that configure one. This template configures one for workspaces, and one for tests:

You can also run the individual client builds directly

#### Develop components with cljs ##### Workspaces:
npm run client/workspaces

Visit http://localhost:8023 Have a look at src/workspaces and https://github.com/nubank/workspaces

#### Refreshing tests in the browser ####
# CLJS Tests:
npm run client/test
#### Full-stack development ####
# Start the cljs compiler for the main target (server must be running)
npm run client/main

See the server section below for working on the full-stack app itself.

Client REPL

The shadow-cljs compiler starts an nREPL. It is configured to start on port 9000 (in shadow-cljs.edn).

In IntelliJ: add a remote Clojure REPL configuration with host localhost and port 9000.

then:

(shadow/repl :main)

will connect you to the REPL for a specific build (NOTE: Make sure you have a browser running the result, or your REPL won’t have anything to talk to!)

If you’re using CIDER see the Shadow-cljs User’s Guide and the comments in deps.edn for more information.

The API Server

In order to work with your main application you’ll want to start your own server that can also serve your application’s API.

Start a LOCAL clj nREPL in IntelliJ (using IntelliJ’s classpath with the dev alias selected in the Clojure Deps tab), or from the command line:

$ clj -A:dev:server
user=> (start)
user=> (stop)
...
user=> (restart) ; stop, reload server code, and go again
user=> (tools-ns/refresh) ; retry code reload if hot server reload fails

Some options can be set on the command line or in the deps.edn under the :dev alias:

The -J-Dtrace adds a JVM argument that will enable performance tracing for Fulcro Inspect’s network tab so you can see how your resolvers and mutations are performing.

The -J-Dguardrails.enabled=true turns on guardrails instrumentation of guardrails spec’d functions, which is a wrapper of Clojure spec that makes instrumentation and production-time elision (for performance and size) much easier.

ℹ️
For real development, please use an editor that has REPL integration, like Cursive (recommended), Atom Chlorine, or Spacemacs.

The URL to work on your application is then http://localhost:8989

Hot code reload, preloads, and such are all coded into the javascript.

Preloads

There is a preload file that is used on the development build of the application riverdb.development-preload. You can add code here that you want to execute before the application initializes in development mode.

Fulcro Inspect

Fulcro inspect will preload on the development build of the main application and workspaces. You must install the plugin in Chrome from the Chrome store (free) to access it. It will add a Fulcro Inspect tab to the developer tools pane.

Tests

Tests are in src/test. Any test namespace ending in -test will be auto-detected.

src/test
└── app
└── sample_test.cljc spec runnable by client and server.

You can write plain deftest in here, and it is preconfigured to support the helper macros in fulcro-spec as well.

Running tests:

Clojure Tests

Typically you’ll just run your tests using the editor of choice (e.g. Run tests in namspace in IntelliJ).

The tests are also set up to run with Kaocha at the command line for your convenience and CI tools:

$ clj -A:dev:clj-tests --watch

See the Kaocha project for more details.

Clojurescript tests

The tests can be run in any number of browsers simply by navigating to the test URL that shadow-cljs outputs.

CI support is done through the ci-test build in shadow, and via Karma.

If you start the ci-tests build in Shadow-cljs, then you can also run cljs tests in a terminal "watch mode" with:

npx karma start

Of course, this make CLJS CI easy:

npx shadow-cljs compile ci-tests
npx karma start --single-run

Running all Tests Once

There is a UNIX Makefile that includes all of the CI commands as the default target. Just run:

make

Workspaces

Workspaces is a project by Nubank that is written in Fulcro, and has great support for developing in Fulcro. It is similar to devcards but has a more powerful user interface, integration with Fulcro Inspect, and much more.

The source directory for making additions to your workspace is src/workspaces.

Any namespace ending in -ws will be auto-detected and added to your workspace!

Standalone Runnable Jar (Production, with advanced optimized client js)

See tools deps projects like Depstar. You’ll need to make a release js build, optionally pre-compile your CLJ, and package it. We will likely add a demo of this process soon.

About

A river science data management system in Clojure

Resources

Stars

17 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

RiverDB.org Server

TLDR Quick Start

The main thing missing is a process for setting up a fresh install. For now, you can just ask for a copy of the database from @thosmos

Ensure you have a Java JDK

javac -version

Install Clojure CLI

Install Clojure CLI on Mac OS:

brew install clojure

Admin UI

# Load all JS deps from package.json.
yarn
(npm install)
# Start up the client UI compiler (watches the code and hot-reloads the browser on changes):
yarn main

Datomic

unzip datomic-pro-0.9.6397.zip
cd datomic-pro-0.9.6397
# Get the data zip from a project member
unzip ../riverdb-backup-data.zip
bin/transactor config/dev-transactor-template.properties

Backend Server

Change some defaults using environment variables like DATOMIC_URI in an .env file or in the shell (the following are the defaults)

APP_ENV=dev
DATOMIC_URI=datomic:dev://localhost:4334/riverdb
PORT=8989

run the server:

clojure -A:dev:server:rad:run

OR start the server in a REPL:

clj -A:dev:server:rad
# The ns is defined in src/dev/user## Start the server
user=> (start)
## After modifications of the backend code:
user=> (restart)

Browse to the app at: http://localhost:8989

The client build server

Run the shadow-cljs build server with:

yarn main

Optionally open the client build manager UI There you can recompile or trigger release builds

Clojurescript REPL:

You can execute CLJS code in a REPL running in the browser environment

  1. Open a remote nREPL to localhost:9000

  2. Execute (shadow/repl :main)

  3. Test with (js/alert "Hello from the CLJS REPL")

A More Detailed Setting Up Description …​

The shadow-cljs compiler uses all js dependencies through NPM. If we use a library that is in cljsjs we will also have to add it to our package.json.

You cannot compile this project until you install the ones it depends on already:

$ yarn

or if you prefer npm:

$ npm install

Adding NPM Javascript libraries is as simple as adding them to the package.json file and requiring them! See the the Shadow-cljs User’s Guide for more information.

Dependency Aliases:

You will want to enable the :dev, :server, and :rad Clojure dependencies while developing the server-side of this project. In IntelliJ this is in the "Clojure Deps" border tab window under "Aliases".

The client and common project source is in src/main. The server project source is in src/server.

Development Mode

Shadow-cljs handles the client-side development build. The file src/main/app/client.cljs contains the code to start and refresh the client for hot code reload.

In general it is easiest just to run the compiler in server mode:

$ npx shadow-cljs server
INFO: XNIO version 3.3.8.Final
Nov 10, 2018 8:08:23 PM org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.3.8.Final
shadow-cljs - HTTP server for :test available at http://localhost:8022
shadow-cljs - HTTP server for :workspaces available at http://localhost:8023
shadow-cljs - server version: 2.7.2
shadow-cljs - server running at http://localhost:9630
shadow-cljs - socket REPL running on port 51936
shadow-cljs - nREPL server started on port 9000
...

then navigate to the server URL (shown in this example as http://localhost:9630) and use the Builds menu to enable/disable whichever builds you want watched/running.

Shadow-cljs will also start a web server for any builds that configure one. This template configures one for workspaces, and one for tests:

You can also run the individual client builds directly

#### Develop components with cljs ##### Workspaces:
npm run client/workspaces

Visit http://localhost:8023 Have a look at src/workspaces and https://github.com/nubank/workspaces

#### Refreshing tests in the browser ####
# CLJS Tests:
npm run client/test
#### Full-stack development ####
# Start the cljs compiler for the main target (server must be running)
npm run client/main

See the server section below for working on the full-stack app itself.

Client REPL

The shadow-cljs compiler starts an nREPL. It is configured to start on port 9000 (in shadow-cljs.edn).

In IntelliJ: add a remote Clojure REPL configuration with host localhost and port 9000.

then:

(shadow/repl :main)

will connect you to the REPL for a specific build (NOTE: Make sure you have a browser running the result, or your REPL won’t have anything to talk to!)

If you’re using CIDER see the Shadow-cljs User’s Guide and the comments in deps.edn for more information.

The API Server

In order to work with your main application you’ll want to start your own server that can also serve your application’s API.

Start a LOCAL clj nREPL in IntelliJ (using IntelliJ’s classpath with the dev alias selected in the Clojure Deps tab), or from the command line:

$ clj -A:dev:server
user=> (start)
user=> (stop)
...
user=> (restart) ; stop, reload server code, and go again
user=> (tools-ns/refresh) ; retry code reload if hot server reload fails

Some options can be set on the command line or in the deps.edn under the :dev alias:

The -J-Dtrace adds a JVM argument that will enable performance tracing for Fulcro Inspect’s network tab so you can see how your resolvers and mutations are performing.

The -J-Dguardrails.enabled=true turns on guardrails instrumentation of guardrails spec’d functions, which is a wrapper of Clojure spec that makes instrumentation and production-time elision (for performance and size) much easier.

ℹ️
For real development, please use an editor that has REPL integration, like Cursive (recommended), Atom Chlorine, or Spacemacs.

The URL to work on your application is then http://localhost:8989

Hot code reload, preloads, and such are all coded into the javascript.

Preloads

There is a preload file that is used on the development build of the application riverdb.development-preload. You can add code here that you want to execute before the application initializes in development mode.

Fulcro Inspect

Fulcro inspect will preload on the development build of the main application and workspaces. You must install the plugin in Chrome from the Chrome store (free) to access it. It will add a Fulcro Inspect tab to the developer tools pane.

Tests

Tests are in src/test. Any test namespace ending in -test will be auto-detected.

src/test
└── app
└── sample_test.cljc spec runnable by client and server.

You can write plain deftest in here, and it is preconfigured to support the helper macros in fulcro-spec as well.

Running tests:

Clojure Tests

Typically you’ll just run your tests using the editor of choice (e.g. Run tests in namspace in IntelliJ).

The tests are also set up to run with Kaocha at the command line for your convenience and CI tools:

$ clj -A:dev:clj-tests --watch

See the Kaocha project for more details.

Clojurescript tests

The tests can be run in any number of browsers simply by navigating to the test URL that shadow-cljs outputs.

CI support is done through the ci-test build in shadow, and via Karma.

If you start the ci-tests build in Shadow-cljs, then you can also run cljs tests in a terminal "watch mode" with:

npx karma start

Of course, this make CLJS CI easy:

npx shadow-cljs compile ci-tests
npx karma start --single-run

Running all Tests Once

There is a UNIX Makefile that includes all of the CI commands as the default target. Just run:

make

Workspaces

Workspaces is a project by Nubank that is written in Fulcro, and has great support for developing in Fulcro. It is similar to devcards but has a more powerful user interface, integration with Fulcro Inspect, and much more.

The source directory for making additions to your workspace is src/workspaces.

Any namespace ending in -ws will be auto-detected and added to your workspace!

Standalone Runnable Jar (Production, with advanced optimized client js)

See tools deps projects like Depstar. You’ll need to make a release js build, optionally pre-compile your CLJ, and package it. We will likely add a demo of this process soon.

About

A river science data management system in Clojure

Resources

Stars

17 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

RiverDB.org Server

TLDR Quick Start

The main thing missing is a process for setting up a fresh install. For now, you can just ask for a copy of the database from @thosmos

Ensure you have a Java JDK

javac -version

Install Clojure CLI

Install Clojure CLI on Mac OS:

brew install clojure

Admin UI

# Load all JS deps from package.json.
yarn
(npm install)
# Start up the client UI compiler (watches the code and hot-reloads the browser on changes):
yarn main

Datomic

unzip datomic-pro-0.9.6397.zip
cd datomic-pro-0.9.6397
# Get the data zip from a project member
unzip ../riverdb-backup-data.zip
bin/transactor config/dev-transactor-template.properties

Backend Server

Change some defaults using environment variables like DATOMIC_URI in an .env file or in the shell (the following are the defaults)

APP_ENV=dev
DATOMIC_URI=datomic:dev://localhost:4334/riverdb
PORT=8989

run the server:

clojure -A:dev:server:rad:run

OR start the server in a REPL:

clj -A:dev:server:rad
# The ns is defined in src/dev/user## Start the server
user=> (start)
## After modifications of the backend code:
user=> (restart)

Browse to the app at: http://localhost:8989

The client build server

Run the shadow-cljs build server with:

yarn main

Optionally open the client build manager UI There you can recompile or trigger release builds

Clojurescript REPL:

You can execute CLJS code in a REPL running in the browser environment

  1. Open a remote nREPL to localhost:9000

  2. Execute (shadow/repl :main)

  3. Test with (js/alert "Hello from the CLJS REPL")

A More Detailed Setting Up Description …​

The shadow-cljs compiler uses all js dependencies through NPM. If we use a library that is in cljsjs we will also have to add it to our package.json.

You cannot compile this project until you install the ones it depends on already:

$ yarn

or if you prefer npm:

$ npm install

Adding NPM Javascript libraries is as simple as adding them to the package.json file and requiring them! See the the Shadow-cljs User’s Guide for more information.

Dependency Aliases:

You will want to enable the :dev, :server, and :rad Clojure dependencies while developing the server-side of this project. In IntelliJ this is in the "Clojure Deps" border tab window under "Aliases".

The client and common project source is in src/main. The server project source is in src/server.

Development Mode

Shadow-cljs handles the client-side development build. The file src/main/app/client.cljs contains the code to start and refresh the client for hot code reload.

In general it is easiest just to run the compiler in server mode:

$ npx shadow-cljs server
INFO: XNIO version 3.3.8.Final
Nov 10, 2018 8:08:23 PM org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.3.8.Final
shadow-cljs - HTTP server for :test available at http://localhost:8022
shadow-cljs - HTTP server for :workspaces available at http://localhost:8023
shadow-cljs - server version: 2.7.2
shadow-cljs - server running at http://localhost:9630
shadow-cljs - socket REPL running on port 51936
shadow-cljs - nREPL server started on port 9000
...

then navigate to the server URL (shown in this example as http://localhost:9630) and use the Builds menu to enable/disable whichever builds you want watched/running.

Shadow-cljs will also start a web server for any builds that configure one. This template configures one for workspaces, and one for tests:

You can also run the individual client builds directly

#### Develop components with cljs ##### Workspaces:
npm run client/workspaces

Visit http://localhost:8023 Have a look at src/workspaces and https://github.com/nubank/workspaces

#### Refreshing tests in the browser ####
# CLJS Tests:
npm run client/test
#### Full-stack development ####
# Start the cljs compiler for the main target (server must be running)
npm run client/main

See the server section below for working on the full-stack app itself.

Client REPL

The shadow-cljs compiler starts an nREPL. It is configured to start on port 9000 (in shadow-cljs.edn).

In IntelliJ: add a remote Clojure REPL configuration with host localhost and port 9000.

then:

(shadow/repl :main)

will connect you to the REPL for a specific build (NOTE: Make sure you have a browser running the result, or your REPL won’t have anything to talk to!)

If you’re using CIDER see the Shadow-cljs User’s Guide and the comments in deps.edn for more information.

The API Server

In order to work with your main application you’ll want to start your own server that can also serve your application’s API.

Start a LOCAL clj nREPL in IntelliJ (using IntelliJ’s classpath with the dev alias selected in the Clojure Deps tab), or from the command line:

$ clj -A:dev:server
user=> (start)
user=> (stop)
...
user=> (restart) ; stop, reload server code, and go again
user=> (tools-ns/refresh) ; retry code reload if hot server reload fails

Some options can be set on the command line or in the deps.edn under the :dev alias:

The -J-Dtrace adds a JVM argument that will enable performance tracing for Fulcro Inspect’s network tab so you can see how your resolvers and mutations are performing.

The -J-Dguardrails.enabled=true turns on guardrails instrumentation of guardrails spec’d functions, which is a wrapper of Clojure spec that makes instrumentation and production-time elision (for performance and size) much easier.

ℹ️
For real development, please use an editor that has REPL integration, like Cursive (recommended), Atom Chlorine, or Spacemacs.

The URL to work on your application is then http://localhost:8989

Hot code reload, preloads, and such are all coded into the javascript.

Preloads

There is a preload file that is used on the development build of the application riverdb.development-preload. You can add code here that you want to execute before the application initializes in development mode.

Fulcro Inspect

Fulcro inspect will preload on the development build of the main application and workspaces. You must install the plugin in Chrome from the Chrome store (free) to access it. It will add a Fulcro Inspect tab to the developer tools pane.

Tests

Tests are in src/test. Any test namespace ending in -test will be auto-detected.

src/test
└── app
└── sample_test.cljc spec runnable by client and server.

You can write plain deftest in here, and it is preconfigured to support the helper macros in fulcro-spec as well.

Running tests:

Clojure Tests

Typically you’ll just run your tests using the editor of choice (e.g. Run tests in namspace in IntelliJ).

The tests are also set up to run with Kaocha at the command line for your convenience and CI tools:

$ clj -A:dev:clj-tests --watch

See the Kaocha project for more details.

Clojurescript tests

The tests can be run in any number of browsers simply by navigating to the test URL that shadow-cljs outputs.

CI support is done through the ci-test build in shadow, and via Karma.

If you start the ci-tests build in Shadow-cljs, then you can also run cljs tests in a terminal "watch mode" with:

npx karma start

Of course, this make CLJS CI easy:

npx shadow-cljs compile ci-tests
npx karma start --single-run

Running all Tests Once

There is a UNIX Makefile that includes all of the CI commands as the default target. Just run:

make

Workspaces

Workspaces is a project by Nubank that is written in Fulcro, and has great support for developing in Fulcro. It is similar to devcards but has a more powerful user interface, integration with Fulcro Inspect, and much more.

The source directory for making additions to your workspace is src/workspaces.

Any namespace ending in -ws will be auto-detected and added to your workspace!

Standalone Runnable Jar (Production, with advanced optimized client js)

See tools deps projects like Depstar. You’ll need to make a release js build, optionally pre-compile your CLJ, and package it. We will likely add a demo of this process soon.

About

A river science data management system in Clojure

Resources

Stars

17 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

RiverDB.org Server

TLDR Quick Start

The main thing missing is a process for setting up a fresh install. For now, you can just ask for a copy of the database from @thosmos

Ensure you have a Java JDK

javac -version

Install Clojure CLI

Install Clojure CLI on Mac OS:

brew install clojure

Admin UI

# Load all JS deps from package.json.
yarn
(npm install)
# Start up the client UI compiler (watches the code and hot-reloads the browser on changes):
yarn main

Datomic

unzip datomic-pro-0.9.6397.zip
cd datomic-pro-0.9.6397
# Get the data zip from a project member
unzip ../riverdb-backup-data.zip
bin/transactor config/dev-transactor-template.properties

Backend Server

Change some defaults using environment variables like DATOMIC_URI in an .env file or in the shell (the following are the defaults)

APP_ENV=dev
DATOMIC_URI=datomic:dev://localhost:4334/riverdb
PORT=8989

run the server:

clojure -A:dev:server:rad:run

OR start the server in a REPL:

clj -A:dev:server:rad
# The ns is defined in src/dev/user## Start the server
user=> (start)
## After modifications of the backend code:
user=> (restart)

Browse to the app at: http://localhost:8989

The client build server

Run the shadow-cljs build server with:

yarn main

Optionally open the client build manager UI There you can recompile or trigger release builds

Clojurescript REPL:

You can execute CLJS code in a REPL running in the browser environment

  1. Open a remote nREPL to localhost:9000

  2. Execute (shadow/repl :main)

  3. Test with (js/alert "Hello from the CLJS REPL")

A More Detailed Setting Up Description …​

The shadow-cljs compiler uses all js dependencies through NPM. If we use a library that is in cljsjs we will also have to add it to our package.json.

You cannot compile this project until you install the ones it depends on already:

$ yarn

or if you prefer npm:

$ npm install

Adding NPM Javascript libraries is as simple as adding them to the package.json file and requiring them! See the the Shadow-cljs User’s Guide for more information.

Dependency Aliases:

You will want to enable the :dev, :server, and :rad Clojure dependencies while developing the server-side of this project. In IntelliJ this is in the "Clojure Deps" border tab window under "Aliases".

The client and common project source is in src/main. The server project source is in src/server.

Development Mode

Shadow-cljs handles the client-side development build. The file src/main/app/client.cljs contains the code to start and refresh the client for hot code reload.

In general it is easiest just to run the compiler in server mode:

$ npx shadow-cljs server
INFO: XNIO version 3.3.8.Final
Nov 10, 2018 8:08:23 PM org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.3.8.Final
shadow-cljs - HTTP server for :test available at http://localhost:8022
shadow-cljs - HTTP server for :workspaces available at http://localhost:8023
shadow-cljs - server version: 2.7.2
shadow-cljs - server running at http://localhost:9630
shadow-cljs - socket REPL running on port 51936
shadow-cljs - nREPL server started on port 9000
...

then navigate to the server URL (shown in this example as http://localhost:9630) and use the Builds menu to enable/disable whichever builds you want watched/running.

Shadow-cljs will also start a web server for any builds that configure one. This template configures one for workspaces, and one for tests:

You can also run the individual client builds directly

#### Develop components with cljs ##### Workspaces:
npm run client/workspaces

Visit http://localhost:8023 Have a look at src/workspaces and https://github.com/nubank/workspaces

#### Refreshing tests in the browser ####
# CLJS Tests:
npm run client/test
#### Full-stack development ####
# Start the cljs compiler for the main target (server must be running)
npm run client/main

See the server section below for working on the full-stack app itself.

Client REPL

The shadow-cljs compiler starts an nREPL. It is configured to start on port 9000 (in shadow-cljs.edn).

In IntelliJ: add a remote Clojure REPL configuration with host localhost and port 9000.

then:

(shadow/repl :main)

will connect you to the REPL for a specific build (NOTE: Make sure you have a browser running the result, or your REPL won’t have anything to talk to!)

If you’re using CIDER see the Shadow-cljs User’s Guide and the comments in deps.edn for more information.

The API Server

In order to work with your main application you’ll want to start your own server that can also serve your application’s API.

Start a LOCAL clj nREPL in IntelliJ (using IntelliJ’s classpath with the dev alias selected in the Clojure Deps tab), or from the command line:

$ clj -A:dev:server
user=> (start)
user=> (stop)
...
user=> (restart) ; stop, reload server code, and go again
user=> (tools-ns/refresh) ; retry code reload if hot server reload fails

Some options can be set on the command line or in the deps.edn under the :dev alias:

The -J-Dtrace adds a JVM argument that will enable performance tracing for Fulcro Inspect’s network tab so you can see how your resolvers and mutations are performing.

The -J-Dguardrails.enabled=true turns on guardrails instrumentation of guardrails spec’d functions, which is a wrapper of Clojure spec that makes instrumentation and production-time elision (for performance and size) much easier.

ℹ️
For real development, please use an editor that has REPL integration, like Cursive (recommended), Atom Chlorine, or Spacemacs.

The URL to work on your application is then http://localhost:8989

Hot code reload, preloads, and such are all coded into the javascript.

Preloads

There is a preload file that is used on the development build of the application riverdb.development-preload. You can add code here that you want to execute before the application initializes in development mode.

Fulcro Inspect

Fulcro inspect will preload on the development build of the main application and workspaces. You must install the plugin in Chrome from the Chrome store (free) to access it. It will add a Fulcro Inspect tab to the developer tools pane.

Tests

Tests are in src/test. Any test namespace ending in -test will be auto-detected.

src/test
└── app
└── sample_test.cljc spec runnable by client and server.

You can write plain deftest in here, and it is preconfigured to support the helper macros in fulcro-spec as well.

Running tests:

Clojure Tests

Typically you’ll just run your tests using the editor of choice (e.g. Run tests in namspace in IntelliJ).

The tests are also set up to run with Kaocha at the command line for your convenience and CI tools:

$ clj -A:dev:clj-tests --watch

See the Kaocha project for more details.

Clojurescript tests

The tests can be run in any number of browsers simply by navigating to the test URL that shadow-cljs outputs.

CI support is done through the ci-test build in shadow, and via Karma.

If you start the ci-tests build in Shadow-cljs, then you can also run cljs tests in a terminal "watch mode" with:

npx karma start

Of course, this make CLJS CI easy:

npx shadow-cljs compile ci-tests
npx karma start --single-run

Running all Tests Once

There is a UNIX Makefile that includes all of the CI commands as the default target. Just run:

make

Workspaces

Workspaces is a project by Nubank that is written in Fulcro, and has great support for developing in Fulcro. It is similar to devcards but has a more powerful user interface, integration with Fulcro Inspect, and much more.

The source directory for making additions to your workspace is src/workspaces.

Any namespace ending in -ws will be auto-detected and added to your workspace!

Standalone Runnable Jar (Production, with advanced optimized client js)

See tools deps projects like Depstar. You’ll need to make a release js build, optionally pre-compile your CLJ, and package it. We will likely add a demo of this process soon.

About

A river science data management system in Clojure

Resources

Stars

17 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

RiverDB.org Server

TLDR Quick Start

The main thing missing is a process for setting up a fresh install. For now, you can just ask for a copy of the database from @thosmos

Ensure you have a Java JDK

javac -version

Install Clojure CLI

Install Clojure CLI on Mac OS:

brew install clojure

Admin UI

# Load all JS deps from package.json.
yarn
(npm install)
# Start up the client UI compiler (watches the code and hot-reloads the browser on changes):
yarn main

Datomic

unzip datomic-pro-0.9.6397.zip
cd datomic-pro-0.9.6397
# Get the data zip from a project member
unzip ../riverdb-backup-data.zip
bin/transactor config/dev-transactor-template.properties

Backend Server

Change some defaults using environment variables like DATOMIC_URI in an .env file or in the shell (the following are the defaults)

APP_ENV=dev
DATOMIC_URI=datomic:dev://localhost:4334/riverdb
PORT=8989

run the server:

clojure -A:dev:server:rad:run

OR start the server in a REPL:

clj -A:dev:server:rad
# The ns is defined in src/dev/user## Start the server
user=> (start)
## After modifications of the backend code:
user=> (restart)

Browse to the app at: http://localhost:8989

The client build server

Run the shadow-cljs build server with:

yarn main

Optionally open the client build manager UI There you can recompile or trigger release builds

Clojurescript REPL:

You can execute CLJS code in a REPL running in the browser environment

  1. Open a remote nREPL to localhost:9000

  2. Execute (shadow/repl :main)

  3. Test with (js/alert "Hello from the CLJS REPL")

A More Detailed Setting Up Description …​

The shadow-cljs compiler uses all js dependencies through NPM. If we use a library that is in cljsjs we will also have to add it to our package.json.

You cannot compile this project until you install the ones it depends on already:

$ yarn

or if you prefer npm:

$ npm install

Adding NPM Javascript libraries is as simple as adding them to the package.json file and requiring them! See the the Shadow-cljs User’s Guide for more information.

Dependency Aliases:

You will want to enable the :dev, :server, and :rad Clojure dependencies while developing the server-side of this project. In IntelliJ this is in the "Clojure Deps" border tab window under "Aliases".

The client and common project source is in src/main. The server project source is in src/server.

Development Mode

Shadow-cljs handles the client-side development build. The file src/main/app/client.cljs contains the code to start and refresh the client for hot code reload.

In general it is easiest just to run the compiler in server mode:

$ npx shadow-cljs server
INFO: XNIO version 3.3.8.Final
Nov 10, 2018 8:08:23 PM org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.3.8.Final
shadow-cljs - HTTP server for :test available at http://localhost:8022
shadow-cljs - HTTP server for :workspaces available at http://localhost:8023
shadow-cljs - server version: 2.7.2
shadow-cljs - server running at http://localhost:9630
shadow-cljs - socket REPL running on port 51936
shadow-cljs - nREPL server started on port 9000
...

then navigate to the server URL (shown in this example as http://localhost:9630) and use the Builds menu to enable/disable whichever builds you want watched/running.

Shadow-cljs will also start a web server for any builds that configure one. This template configures one for workspaces, and one for tests:

You can also run the individual client builds directly

#### Develop components with cljs ##### Workspaces:
npm run client/workspaces

Visit http://localhost:8023 Have a look at src/workspaces and https://github.com/nubank/workspaces

#### Refreshing tests in the browser ####
# CLJS Tests:
npm run client/test
#### Full-stack development ####
# Start the cljs compiler for the main target (server must be running)
npm run client/main

See the server section below for working on the full-stack app itself.

Client REPL

The shadow-cljs compiler starts an nREPL. It is configured to start on port 9000 (in shadow-cljs.edn).

In IntelliJ: add a remote Clojure REPL configuration with host localhost and port 9000.

then:

(shadow/repl :main)

will connect you to the REPL for a specific build (NOTE: Make sure you have a browser running the result, or your REPL won’t have anything to talk to!)

If you’re using CIDER see the Shadow-cljs User’s Guide and the comments in deps.edn for more information.

The API Server

In order to work with your main application you’ll want to start your own server that can also serve your application’s API.

Start a LOCAL clj nREPL in IntelliJ (using IntelliJ’s classpath with the dev alias selected in the Clojure Deps tab), or from the command line:

$ clj -A:dev:server
user=> (start)
user=> (stop)
...
user=> (restart) ; stop, reload server code, and go again
user=> (tools-ns/refresh) ; retry code reload if hot server reload fails

Some options can be set on the command line or in the deps.edn under the :dev alias:

The -J-Dtrace adds a JVM argument that will enable performance tracing for Fulcro Inspect’s network tab so you can see how your resolvers and mutations are performing.

The -J-Dguardrails.enabled=true turns on guardrails instrumentation of guardrails spec’d functions, which is a wrapper of Clojure spec that makes instrumentation and production-time elision (for performance and size) much easier.

ℹ️
For real development, please use an editor that has REPL integration, like Cursive (recommended), Atom Chlorine, or Spacemacs.

The URL to work on your application is then http://localhost:8989

Hot code reload, preloads, and such are all coded into the javascript.

Preloads

There is a preload file that is used on the development build of the application riverdb.development-preload. You can add code here that you want to execute before the application initializes in development mode.

Fulcro Inspect

Fulcro inspect will preload on the development build of the main application and workspaces. You must install the plugin in Chrome from the Chrome store (free) to access it. It will add a Fulcro Inspect tab to the developer tools pane.

Tests

Tests are in src/test. Any test namespace ending in -test will be auto-detected.

src/test
└── app
└── sample_test.cljc spec runnable by client and server.

You can write plain deftest in here, and it is preconfigured to support the helper macros in fulcro-spec as well.

Running tests:

Clojure Tests

Typically you’ll just run your tests using the editor of choice (e.g. Run tests in namspace in IntelliJ).

The tests are also set up to run with Kaocha at the command line for your convenience and CI tools:

$ clj -A:dev:clj-tests --watch

See the Kaocha project for more details.

Clojurescript tests

The tests can be run in any number of browsers simply by navigating to the test URL that shadow-cljs outputs.

CI support is done through the ci-test build in shadow, and via Karma.

If you start the ci-tests build in Shadow-cljs, then you can also run cljs tests in a terminal "watch mode" with:

npx karma start

Of course, this make CLJS CI easy:

npx shadow-cljs compile ci-tests
npx karma start --single-run

Running all Tests Once

There is a UNIX Makefile that includes all of the CI commands as the default target. Just run:

make

Workspaces

Workspaces is a project by Nubank that is written in Fulcro, and has great support for developing in Fulcro. It is similar to devcards but has a more powerful user interface, integration with Fulcro Inspect, and much more.

The source directory for making additions to your workspace is src/workspaces.

Any namespace ending in -ws will be auto-detected and added to your workspace!

Standalone Runnable Jar (Production, with advanced optimized client js)

See tools deps projects like Depstar. You’ll need to make a release js build, optionally pre-compile your CLJ, and package it. We will likely add a demo of this process soon.

About

A river science data management system in Clojure

Resources

Stars

17 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages