remove some magic numbers

remove some magic numbers

--- cljs-cheatsheet/cljs_cheatsheet/tooltips.cljs
+++ cljs-cheatsheet/cljs_cheatsheet/tooltips.cljs
@@ -106,6 +106,8 @@
          :y2 (+ tooltip-top tooltip-height tooltip-mouseout-buffer)}})))

 (def link-mousetrap-padding 2.5)
+(def push-right 150)
+(def push-left 160)

 ;; TODO: need to deal with tooltips tooltips at the bottom of the
 ;; page (flip up)
@@ -125,8 +127,8 @@
         push-right? (neg? (- link-x (half tooltip-width)))
         push-left? (> (+ tooltip-right 10) window-width)
         tooltip-left (cond
-                       push-right? (+ tooltip-left 150)
-                       push-left?  (- tooltip-left 160)
+                       push-right? (+ tooltip-left push-right)
+                       push-left?  (- tooltip-left push-left)
                        :else       tooltip-left)
         tooltip-top (+ link-y link-height 5)]
     ;; add the correct arrow class


fix some logic errors in new mongoDB distinct count imll

--- src/metabase/driver/mongo/query_processor.clj
+++ src/metabase/driver/mongo/query_processor.clj
@@ -149,15 +149,18 @@
   ;;
   ;; It's faster and better-behaved to just implement this logic in Clojure-land for the time being.
   ;; Since it's lazy we can handle large data sets (I've ran this successfully over 500,000+ document collections w/o issue).
-  [{:count (->> (i/field-values-lazy-seq @(ns-resolve 'metabase.driver.mongo 'driver) (sel :one Field :id field-id)) ; resolve driver at runtime to avoid circular deps
-                (filter identity)
-                ((fn [s]
-                   (if-let [limit (:limit (:query *query*))]
-                     (take limit s)
-                     s)))
-                (map hash)
-                set
-                count)}])
+  [{:count (let [values (transient (set []))
+                 limit  (:limit (:query *query*))
+                 keep-taking?  (if limit (fn [_]
+                                           (< (count values) limit))
+                                   (constantly true))]
+             (->> (i/field-values-lazy-seq @(ns-resolve 'metabase.driver.mongo 'driver) (sel :one Field :id field-id)) ; resolve driver at runtime to avoid circular deps
+                  (filter identity)
+                  (map hash)
+                  (map #(conj! values %))
+                  (take-while keep-taking?)
+                  dorun)
+             (count values))}])

 (defaggregation ["stddev" field-id]
   nil) ; TODO


Swing probing

Swing probing

error: pathspec 'src/clojureplayground/swing_probing.clj' did not match any file(s) known to git

--- src/clojureplayground/swing_probing.clj
+++ src/clojureplayground/swing_probing.clj
@@ -0,0 +1,43 @@
+(ns clojureplayground.swing-probing
+  (:import (javax.swing JFrame JLabel JButton JRadioButton JPanel)
+           (java.awt.event ActionListener MouseAdapter)))
+
+(declare event-handler)
+
+(defn swing-example-frame []
+  (let [frame (JFrame. "I am frame ;)"),
+        label (JLabel. "Who'd say? I am a label!")
+        button (JButton. "and I am a button")
+        r-button (JRadioButton. "...here comes radio :)")
+        handler (reify ActionListener
+                  (actionPerformed [this e]
+                    (event-handler this e)))]
+    (.addActionListener button handler)
+    (.addActionListener r-button handler)
+    (.addMouseListener label (proxy [MouseAdapter] []
+                                    (mousePressed [e]
+                                 (event-handler this e))))
+
+    (doto frame
+      (.add (let [pane (JPanel.)]
+              (doto pane
+                (.add label)
+                (.add r-button)
+                (.add button))
+              pane))
+      (.setSize 640 480)
+      (.pack)
+      (.setVisible true))
+    {:frame frame, :label label :button button}))
+
+(defmulti event-handler (fn [_ e]
+                          (keyword (str 'clojureplayground.swing-probing) (.. e (getSource) (getClass) (getSimpleName)))))
+
+(derive ::JLabel ::JButton)
+
+(defmethod event-handler ::JButton [this _]
+  (println (str this "btn")))
+(defmethod event-handler ::JRadioButton [this _]
+  (println (str this "rbtn")))
+;(defmethod event-handler :JLabel [this _]
+;  (println (str this "label")))


chi squate performance

chi squate performance

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/clojure-ml/cml.git/'


Add CORS service

Add CORS service

error: pathspec 'dev/src/yada/dev/cors_demo.clj' did not match any file(s) known to git

--- dev/src/yada/dev/cors_demo.clj
+++ dev/src/yada/dev/cors_demo.clj
@@ -0,0 +1,50 @@
+;; Copyright © 2015, JUXT LTD.
+
+(ns yada.dev.cors-demo
+  (:require
+   [clojure.java.io :as io]
+   [bidi.bidi :refer (RouteProvider)]
+   [bidi.ring :refer (files resources-maybe)]
+   [com.stuartsierra.component :refer [using Lifecycle]]
+   [hiccup.core :refer (html)]
+   [modular.component.co-dependency :refer (co-using)]
+   [modular.template :as template :refer (render-template)]
+   [schema.core :as s]
+   [yada.dev.template :refer [new-template-resource]]
+   [yada.yada :as yada :refer [yada]]))
+
+(defn index [{:keys [*router templater]}]
+  (yada
+   (fn [ctx]
+     ;; TODO: Replace with template resource
+     (render-template
+      templater
+      "templates/page.html.mustache"
+      {:content
+       (html
+        [:div.container
+         [:h2 "CORS demo"]
+         ])}))
+   {:id ::index
+    :representations [{:media-type "text/html"
+                       :charset "utf-8"}]}))
+
+(defrecord CorsDemo [*router templater template]
+  Lifecycle
+  (start [component] (assoc component :template (new-template-resource "cors/ajax.js2" {:origin "ABC"})))
+  (stop [component] component)
+
+  RouteProvider
+  (routes [component]
+    ["/"
+     [["index.html" (index component)]
+      ["ajax.js" (yada template)]
+      ]]))
+
+(defn new-cors-demo [& {:as opts}]
+  (-> (->> opts
+           (merge {})
+           (s/validate {})
+           map->CorsDemo)
+      (using [:templater])
+      (co-using [:router])))


optimize even-sampler

optimize even-sampler

--- src/clj/backtype/storm/util.clj
+++ src/clj/backtype/storm/util.clj
@@ -3,7 +3,8 @@
   (:import [java.util Map List Collection])
   (:import [java.io FileReader])
   (:import [backtype.storm Config])
-  (:import [backtype.storm.utils Time Container ClojureTimerTask Utils MutableObject])
+  (:import [backtype.storm.utils Time Container ClojureTimerTask Utils
+            MutableObject MutableInt])
   (:import [java.util UUID])
   (:import [java.util.zip ZipFile])
   (:import [java.util.concurrent.locks ReentrantReadWriteLock])
@@ -609,19 +610,17 @@
     ))

 (defn even-sampler [freq]
-  (let [r (java.util.Random.)
-        state (atom [-1 (.nextInt r freq)])
-        updater (fn [[i target]]
-                  (let [i (inc i)]
-                    (if (>= i freq)
-                      [0 (.nextInt r freq)]
-                      [i target]
-                      )))]
+  (let [start (int 0)
+        r (java.util.Random.)
+        curr (MutableInt. -1)
+        target (MutableInt. (.nextInt r freq))]
     (with-meta
       (fn []
-        (let [[i target] (swap! state updater)]
-          (= i target)
-          ))
+        (let [i (.increment curr)]
+          (when (>= i freq)
+            (.set curr start)
+            (.set target (.nextInt r freq))))
+          (= (.get curr) (.get target)))
       {:rate freq})))

 (defn sampler-rate [sampler]


No need to define a function when a set is a function.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/couragelabs/freefrog.git/'


implement database/get-collection-info-list

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/colophon/clarango.git/'


Fixed url

Fixed url

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/yokalona/threen.git/'


fix for is-palendrome?

fix for is-palendrome?

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/tlight/project-euler.git/'


Test Try with generative tests

Test Try with generative tests

--- test/cats/monad/exception_spec.cljc
+++ test/cats/monad/exception_spec.cljc
@@ -1,14 +1,24 @@
 (ns cats.monad.exception-spec
-  #?(:cljs
-     (:require [cljs.test :as t]
-               [cats.builtin :as b]
-               [cats.protocols :as p]
-               [cats.monad.exception :as exc :include-macros true]
-               [cats.monad.either :as either]
-               [cats.context :as ctx :include-macros true]
-               [cats.core :as m :include-macros true])
-     :clj
+  #?@(:cljs
+      [(:require [cljs.test :as t]
+                 [clojure.test.check]
+                 [clojure.test.check.generators :as gen]
+                 [clojure.test.check.properties :as prop :include-macros true]
+                 [cats.labs.test :as lt]
+                 [cats.builtin :as b]
+                 [cats.protocols :as p]
+                 [cats.monad.exception :as exc :include-macros true]
+                 [cats.monad.either :as either]
+                 [cats.context :as ctx :include-macros true]
+                 [cats.core :as m :include-macros true])
+       (:require-macros [clojure.test.check.clojure-test :refer (defspec)])])
+  #?(:clj
      (:require [clojure.test :as t]
+               [clojure.test.check.clojure-test :refer [defspec]]
+               [clojure.test.check :as tc]
+               [clojure.test.check.generators :as gen]
+               [clojure.test.check.properties :as prop]
+               [cats.labs.test :as lt]
                [cats.builtin :as b]
                [cats.protocols :as p]
                [cats.monad.exception :as exc]
@@ -89,26 +99,66 @@
                         (m/extract (m/fmap inc m2))))
        (t/is (= (exc/success 2) (m/fmap inc m1))))))

-(t/deftest first-monad-law-left-identity
-  (t/is (= (exc/success 2)
-           (m/>>= (m/return exc/context 2)
-                  exc/success)))
+;; Generators

-  (t/is (= (exc/success 2)
-           (m/>>= (m/return exc/context 2)
-                  exc/success
-                  exc/success))))
+(defn successes-of
+  [g]
+  (gen/fmap exc/success g))

-(t/deftest second-monad-law-right-identity
-  (t/is (= (exc/success 2)
-           (m/>>= (exc/try-on 2) m/return))))
+(def success-gen
+  (successes-of gen/any))

-(t/deftest third-monad-law-associativity
-  (t/is (= (m/>>= (m/mlet [x (exc/try-on 2)
-                           y (exc/try-on (inc x))]
-                    (m/return y))
-                  (fn [y] (exc/try-on (inc y))))
-           (m/>>= (exc/try-on 2)
-                  (fn [x]
-                    (m/>>= (exc/try-on (inc x))
-                           (fn [y] (exc/try-on (inc y)))))))))
+(def failure-gen
+  (gen/return (exc/failure {})))
+
+(def exc-gen
+  (gen/one-of [success-gen failure-gen]))
+
+(def vectors-gen
+  (gen/vector gen/any))
+
+;; Functor
+
+(defspec exc-first-functor-law 10
+  (lt/first-functor-law {:gen exc-gen}))
+
+(defspec exc-second-functor-law 10
+  (lt/second-functor-law {:gen exc-gen
+                          :f str
+                          :g count}))
+
+;; Applicative
+
+(defspec exc-applicative-identity 10
+  (lt/applicative-identity-law {:ctx exc/context
+                                :gen exc-gen}))
+
+(defspec exc-applicative-homomorphism 10
+  (lt/applicative-homomorphism {:ctx exc/context
+                                :gen gen/any
+                                :f (constantly false)}))
+
+(defspec exc-applicative-interchange 10
+  (lt/applicative-interchange {:ctx exc/context
+                               :gen gen/int
+                               :appf (exc/success inc)}))
+
+(defspec exc-applicative-composition 10
+  (lt/applicative-composition {:ctx exc/context
+                               :gen gen/int
+                               :appf (exc/success inc)
+                               :appg (exc/success dec)}))
+
+;; Monad
+
+(defspec exc-first-monad-law 10
+  (lt/first-monad-law {:ctx exc/context
+                       :mf #(if % (exc/success %) (exc/failure {}))}))
+
+(defspec exc-second-monad-law 10
+  (lt/second-monad-law {:ctx exc/context}))
+
+(defspec exc-third-monad-law 10
+  (lt/third-monad-law {:ctx exc/context
+                       :f (comp exc/success str)
+                       :g (comp exc/success count)}))


Starts a linear cluster sim for live peers.

error: pathspec 'test/onyx/peer/simulant/linear_cluster_sim.clj' did not match any file(s) known to git

--- test/onyx/peer/simulant/linear_cluster_sim.clj
+++ test/onyx/peer/simulant/linear_cluster_sim.clj
@@ -0,0 +1,208 @@
+(ns onyx.peer.simulant.linear-cluster-sim
+  (:require [midje.sweet :refer :all]
+            [com.stuartsierra.component :as component]
+            [simulant.sim :as sim]
+            [simulant.util :as u]
+            [datomic.api :as d]
+            [onyx.coordinator.sim-test-utils :as sim-utils]
+            [onyx.peer.hornetq-util :as hq-util]
+            [onyx.api]))
+
+(def cluster (atom []))
+
+(def in-queue (str (java.util.UUID/randomUUID)))
+
+(def out-queue (str (java.util.UUID/randomUUID)))
+
+(def n-messages 150)
+
+(def batch-size 50)
+
+(def echo 1)
+
+(def hornetq-host "localhost")
+
+(def hornetq-port 5445)
+
+(def hq-config {"host" hornetq-host "port" hornetq-port})
+
+(hq-util/write-and-cap! hq-config in-queue (map (fn [x] {:n x}) (range n-messages)) echo)
+
+(defn my-inc [{:keys [n] :as segment}]
+  (assoc segment :n (inc n)))
+
+(defn create-birth [executor t]
+  [[{:db/id (d/tempid :test)
+     :agent/_actions (u/e executor)
+     :action/atTime t
+     :action/type :action.type/register-linear-peer}]])
+
+(defn create-death [executor t]
+  [[{:db/id (d/tempid :test)
+     :agent/_actions (u/e executor)
+     :action/atTime t
+     :action/type :action.type/unregister-linear-peer}]])
+
+(defn generate-linear-scaling-data [test executor]
+  (let [model (-> test :model/_tests first)
+        limit (:test/duration test)
+        rate (:model/peer-rate model)
+        peers (:model/peek-peers model)
+        gap (:model/silence-gap model)
+        births (mapcat (partial create-birth executor)
+                       (range 0 (* peers rate) rate))
+        deaths (mapcat (partial create-death executor)
+                       (range (+ (* peers rate) gap)
+                              (+ (* (* peers rate) 2) gap)
+                              rate))]
+    (concat births deaths)))
+
+(defn create-linear-cluster-test [conn model test]
+  (u/require-keys test :db/id :test/duration)
+  (-> @(d/transact conn [(assoc test
+                           :test/type :test.type/linear-cluster
+                           :model/_tests (u/e model))])
+      (u/tx-ent (:db/id test))))
+
+(defn create-executor [conn test]
+  (let [tid (d/tempid :test)
+        result @(d/transact conn
+                            [{:db/id tid
+                              :agent/type :agent.type/executor
+                              :test/_agents (u/e test)}])]
+    (d/resolve-tempid (d/db conn) (:tempids result) tid)))
+
+(defmethod sim/create-test :model.type/linear-cluster
+  [conn model test]
+  (let [test (create-linear-cluster-test conn model test)
+        executor (create-executor conn test)]
+    (u/transact-batch conn (generate-linear-scaling-data test executor) 1000)
+    (d/entity (d/db conn) (u/e test))))
+
+(defmethod sim/create-sim :test.type/linear-cluster
+  [sim-conn test sim]
+  (-> @(d/transact sim-conn (sim/construct-basic-sim test sim))
+      (u/tx-ent (:db/id sim))))
+
+(def sim-uri (str "datomic:mem://" (d/squuid)))
+
+(def sim-conn (sim-utils/reset-conn sim-uri))
+
+(sim-utils/load-schema sim-conn "simulant/schema.edn")
+
+(sim-utils/load-schema sim-conn "simulant/coordinator-sim.edn")
+
+(def id (str (java.util.UUID/randomUUID)))
+
+(def timeout 500)
+
+(def datomic (str "datomic:mem://" id))
+
+(def coord-opts
+  {:datomic-uri datomic
+   :hornetq-host hornetq-host
+   :hornetq-port hornetq-port
+   :zk-addr "127.0.0.1:2181"
+   :onyx-id id
+   :revoke-delay 2000})
+
+(def peer-opts {:hornetq-host hornetq-host
+                :hornetq-port hornetq-port
+                :zk-addr "127.0.0.1:2181"
+                :onyx-id id})
+
+(def catalog
+  [{:onyx/name :in
+    :onyx/direction :input
+    :onyx/consumption :concurrent
+    :onyx/type :queue
+    :onyx/medium :hornetq
+    :hornetq/queue-name in-queue
+    :hornetq/host hornetq-host
+    :hornetq/port hornetq-port
+    :hornetq/batch-size batch-size
+    :hornetq/timeout timeout}
+
+   {:onyx/name :inc
+    :onyx/fn :onyx.peer.simulant.linear-cluster-sim/my-inc
+    :onyx/type :transformer
+    :onyx/consumption :concurrent
+    :onyx/batch-size batch-size
+    :onyx/timeout timeout}
+
+   {:onyx/name :out
+    :onyx/direction :output
+    :onyx/consumption :concurrent
+    :onyx/type :queue
+    :onyx/medium :hornetq
+    :hornetq/queue-name out-queue
+    :hornetq/host hornetq-host
+    :hornetq/port hornetq-port
+    :onyx/batch-size batch-size
+    :onyx/timeout timeout}])
+
+(def workflow {:in {:inc :out}})
+
+(def conn (onyx.api/connect (str "onyx:memory//localhost/" id) coord-opts))
+
+(onyx.api/submit-job conn {:catalog catalog :workflow workflow})
+
+(def linear-model-id (d/tempid :model))
+
+(def linear-cluster-model-data
+  [{:db/id linear-model-id
+    :model/type :model.type/linear-cluster
+    :model/n-peers 1
+    :model/peek-peers 1
+    :model/peer-rate 200
+    :model/silence-gap 5000}])
+
+(def linear-cluster-model
+  (-> @(d/transact sim-conn linear-cluster-model-data)
+      (u/tx-ent linear-model-id)))
+
+(defmethod sim/perform-action :action.type/register-linear-peer
+  [action process]
+  (let [peer (first (onyx.api/start-peers conn 1 peer-opts))]
+    (swap! cluster conj peer)))
+
+(defmethod sim/perform-action :action.type/unregister-linear-peer
+  [action process]
+  (let [peer (rand-nth @cluster)]
+    ((:shutdown-fn peer))))
+
+(def linear-cluster-test
+  (sim/create-test sim-conn
+                   linear-cluster-model
+                   {:db/id (d/tempid :test)
+                    :test/duration (u/hours->msec 1)}))
+
+(def linear-cluster-sim
+  (sim/create-sim sim-conn
+                  linear-cluster-test
+                  {:db/id (d/tempid :sim)
+                   :sim/systemURI (str "datomic:mem://" (d/squuid))
+                   :sim/processCount 1}))
+
+(sim/create-fixed-clock sim-conn linear-cluster-sim {:clock/multiplier 1})
+
+(sim/create-action-log sim-conn linear-cluster-sim)
+
+(def pruns
+  (->> #(sim/run-sim-process sim-uri (:db/id linear-cluster-sim))
+       (repeatedly (:sim/processCount linear-cluster-sim))
+       (into [])))
+
+(def results (hq-util/read! hq-config out-queue (inc n-messages) echo))
+
+(doseq [prun pruns] (future-cancel (:runner prun)))
+
+(onyx.api/shutdown conn)
+
+(doseq [peer @cluster]
+  ((:shutdown-fn peer)))
+
+(let [expected (set (map (fn [x] {:n (inc x)}) (range n-messages)))]
+  (fact (set (butlast results)) => expected)
+  (fact (last results) => :done))
+


clean up into-seq

clean up into-seq

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/physion/ovation-webapi.git/'


Add currified arity to the fmap function.

--- src/cats/core.cljc
+++ src/cats/core.cljc
@@ -164,9 +164,12 @@
 (defn fmap
   "Apply a function f to the value inside functor's fv
   preserving the context type."
-  [f fv]
-  (-> (get-current-context fv)
-      (p/fmap f fv)))
+  ([f]
+   (fn [fv]
+     (fmap f fv)))
+  ([f fv]
+   (-> (get-current-context fv)
+       (p/fmap f fv))))

 (defn fapply
   "Given function inside af's context and value inside


Clean up unsubscription

Clean up unsubscription

--- pigpen-core/src/main/clojure/pigpen/local.clj
+++ pigpen-core/src/main/clojure/pigpen/local.clj
@@ -178,25 +178,19 @@
   (let [local-loader (load command)
         ^Observable o (->> (rx/observable*
                              (fn [^Subscriber s]
-                               (let [cancel (atom false)
-                                     read-count (atom 0)]
-                                 (.add s
-                                   (reify Subscription
-                                     (unsubscribe [this]
-                                       (reset! cancel true))))
-                                 (future
-                                   (try
-                                     (println "Start reading from " location)
-                                     (doseq [file (locations local-loader)
-                                             :while (not @cancel)]
-                                       (let [reader (init-reader local-loader file)]
-                                         (doseq [value (read local-loader reader)
-                                                 :while (not @cancel)]
-                                           (swap! read-count inc)
-                                           (rx/on-next s value))
-                                         (close-reader local-loader reader)))
-                                     (rx/on-completed s)
-                                     (catch Exception e (rx/on-error s e)))))))
+                               (future
+                                 (try
+                                   (println "Start reading from " location)
+                                   (doseq [file (locations local-loader)
+                                           :while (not (.isUnsubscribed s))]
+                                     (let [reader (init-reader local-loader file)]
+                                       (doseq [value (read local-loader reader)
+                                               :while (not (.isUnsubscribed s))]
+                                         (rx/on-next s value))
+                                       (close-reader local-loader reader)))
+                                   (rx/on-completed s)
+                                   ;; TODO test this more. Errors seem to cause deadlocks
+                                   (catch Throwable t (rx/on-error s t))))))
                         (rx/finally
                           (println "Stop reading from " location)))]
     (.observeOn o (Schedulers/io))))


Filter trashed entities from get-link-targets


[jepsen] set default admin operation timeout to 2 minutes

Increased the default admin operation timeout for the Kudu client
used in Jepsen tests up to 2 minutes.  That's to work around slow DNS
resolutions (sometimes up to 30 seconds) that happen intermittently
while running the tests at VMs provisioned in GCE.

Change-Id: Iaa9ade5cf38b4f3247749fa33bd40ada9616f21f
Reviewed-on: http://gerrit.cloudera.org:8080/11405
Reviewed-by: Hao Hao <99da4db57fde39d3df9f1908299d10b8082bf864@cloudera.com>
Tested-by: Kudu Jenkins

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/InspurUSA/kudu.git/'


Add missing metrics file

Add missing metrics file

error: pathspec 'src/clj/mdr2/metrics.clj' did not match any file(s) known to git

--- src/clj/mdr2/metrics.clj
+++ src/clj/mdr2/metrics.clj
@@ -0,0 +1,14 @@
+(ns mdr2.metrics
+  (:require
+   [iapetos.core :as prometheus]
+   [iapetos.collector.jvm :as jvm]
+   [iapetos.collector.fn :as fn]
+   [iapetos.collector.ring :as ring]))
+
+(defonce registry
+  (-> (prometheus/collector-registry)
+      (jvm/initialize)
+      (fn/initialize)
+      (ring/initialize
+       ;; we have some requests that take a long time, so we extend the default buckets
+       {:latency-histogram-buckets [0.001 0.005 0.01 0.02 0.05 0.1 0.2 0.3 0.5 0.75 1 5 10]})))


Minor refactor

Minor refactor

fatal: unable to access 'https://github.com/shaunstanislaus/cljs2go.git/': The requested URL returned error: 403


Revert "Changed stacktrace css to resource"

This reverts commit 3f100f373f6da9375cd4bb504ccbfa277409f2f3.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/meowcakes/ring.git/'


Create rough cookbook.clj for functions

Create rough cookbook.clj for functions

error: pathspec 'src/tick/cookbook.clj' did not match any file(s) known to git

--- src/tick/cookbook.clj
+++ src/tick/cookbook.clj
@@ -0,0 +1,134 @@
+(ns tick.cookbook
+  (:require [tick.alpha.api :as tick]
+            [tick.alpha.api :as t]))
+
+
+;; Ammend a time / date
+
+(defn add-mins
+  [time duration]
+  (tick/+ (tick/instant time)
+          (tick/new-duration duration :minutes)))
+
+(defn subtract-days
+  [date days]
+  (tick/- (tick/instant date)
+          (tick/new-duration days :days)))
+
+;; Calculate time difference between two instances
+
+(defn time-diff-millis
+  "Returning the total time in millis from
+  the first instance to the second.
+  Handles -ve time"
+  [first-instance second-instance]
+  (if (tick/< first-instance second-instance)
+    (tick/millis (tick/duration {:tick/beginning first-instance
+                                 :tick/end second-instance}))
+    (let [new-first second-instance
+          new-second first-instance]
+      (* -1 (time-diff-millis new-first new-second)))))
+
+;; Convert duration into other magnitudes
+
+(defn convert-magnitudes
+  "Takes a number and a magnitude keyword and returns
+  map containing this time in magnitudes from millis
+  to days."
+  [x magnitude-kw]
+  (let [duration (tick/new-duration x magnitude-kw)]
+    {:millis (tick/millis duration)
+     :seconds (tick/seconds duration)
+     :minutes (tick/minutes duration)
+     :hours (tick/hours duration)
+     :days (tick/days duration)}))
+
+(tick/new-time)
+
+
+;; Create a countdown timer
+
+(defn count-down
+  [end-time]
+  (let [duration (tick/duration
+                  {:tick/beginning (tick/instant)
+                   :tick/end end-time})
+        hours (tick/hours duration)
+        minutes (tick/minutes (tick/- duration
+                                      (tick/new-duration hours :hours)))
+        seconds (tick/seconds (tick/- duration
+                                      (tick/new-duration minutes :minutes)
+                                      (tick/new-duration hours :hours)))
+        millis (tick/millis (tick/- duration
+                                     (tick/new-duration seconds :seconds)
+                                     (tick/new-duration minutes :minutes)
+                                     (tick/new-duration hours :hours)))]
+    (if (tick/< (tick/instant) end-time)
+      (format "%d hours, %d minutes, %d seconds and %d milliseconds remaining"
+              hours minutes seconds millis)
+      "Time's up!")))
+
+
+;; formatting ------------------------------------------------------------------
+
+;; Split up a date-time into a usable map
+
+(defn tick-formatter
+  "When given a time-zone will return formatted time in that zone,
+  else will return in local-time"
+  [t & Z]
+  (when inst? t
+        (let [t (tick/instant t)
+              tz (if Z
+                   (apply tick/in t Z)
+                   (tick/date-time t))]
+          {:day (str (tick/day-of-week t))
+           :month (str (tick/month t))
+           :dd (tick/day-of-month t)
+           :MM (tick/int (tick/month t))
+           :yy (- (tick/int (tick/year t))
+                  2000)  ;; check this in ~ 800 years
+           :yyyy (tick/int (tick/year t))
+           :mm (tick/minute t)
+           :HH (tick/hour tz)
+           :ss (tick/second t)
+           :Z (str (tick/zone (if Z tz (tick/zoned-date-time t))))})))
+
+;; HH:mm time -> (str (tick/time)) will do similar, although will give seconds
+;; and milliseconds too.
+
+(defn format-time
+  [t]
+  (when (inst? t)
+    (let [mapified-time (tick-formatter t)]
+              (format "%02d:%02d"
+                      (:HH mapified-time)
+                      (:mm mapified-time)))))
+
+;; dd-MM-yy date -> can use (tick/date) to extract a date,
+;; but returns yyyy-MM-dd.
+
+(defn format-date
+  [t]
+  (when (inst? t)
+    (let [mapified-time (tick-formatter t)]
+      (format "%02d-%02d-%02d"
+              (:dd mapified-time)
+              (:MM mapified-time)
+              (:yy mapified-time)))))
+
+;; Time maths  -----------------------------------------------------------------
+
+;; Split an interval into monthly intervals
+
+(defn months-in-year
+  [interval]
+  (map #(apply tick/new-interval %)
+       (tick/divide-by (tick/new-period 1 :months) interval)))
+
+;; Split an interval into 10 intervals
+
+(defn ten-split
+  [interval]
+  (map #(apply tick/new-interval %)
+       (tick/divide-by 10 interval)))


Initial draft of isa-test and friends

Initial draft of isa-test and friends

Probably I will not use top-level atoms in the final version.

error: pathspec 'src/chapter4/linneus.cljs' did not match any file(s) known to git

--- src/chapter4/linneus.cljs
+++ src/chapter4/linneus.cljs
@@ -0,0 +1,31 @@
+(ns chapter4.linneus
+  (:refer chapter3.match :only [match match-state atom?])
+  (:refer clojure.test :only [with-test is run-tests]))
+;TODO: This is probably wrong -- should be locally scoped inside the conversation loop
+(def isa (atom {}))
+(def includes (atom {}))
+(with-test
+  (defn add-to-list [aname x]
+    (fn [d]
+      (if (d aname)
+        (update-in d [aname] conj x)
+        (conj d [aname #{x}]))))
+  (is (= {'a #{1}} ((add-to-list 'a 1) {})))
+  (is (= {'a #{1 2}} ((add-to-list 'a 2) {'a #{1}}))))
+(defn add-superset [aname x]
+  (swap! isa (add-to-list aname x)))
+(defn add-subset [aname x]
+  (swap! includes (add-to-list aname x)))
+(with-test
+  (defn isa-test [isa x y n]
+    (if (zero? n)
+      false
+      (or (= x y)
+          (contains? (isa x) y)
+          (some (fn [xx] (isa-test isa xx y (dec n))) (isa x)))))
+  (is (isa-test {} 'dog 'dog 100))
+  (is (not (isa-test {} 'dog 'cat 100)))
+  (is (isa-test {'dog #{'mammal}} 'dog 'mammal 100))
+  (is (not (isa-test {'d #{'mammal}} 'dog 'bug 100)))
+  (is (isa-test {'dog #{'mammal} 'mammal #{'animal}} 'dog 'animal 2))
+  (is (not (isa-test {'dog #{'mammal} 'mammal #{'animal}} 'dog 'animal 1))))


Adding Jaccard distance

Adding Jaccard distance

error: pathspec 'src/clj_fuzzy/jaccard.clj' did not match any file(s) known to git

--- src/clj_fuzzy/jaccard.clj
+++ src/clj_fuzzy/jaccard.clj
@@ -0,0 +1,24 @@
+;; -------------------------------------------------------------------
+;; clj-fuzzy Jaccard Distance
+;; -------------------------------------------------------------------
+;;
+;;
+;;   Author: PLIQUE Guillaume (Yomguithereal)
+;;   Version: 0.1
+;;
+(ns clj-fuzzy.jaccard
+  (:require clojure.set))
+
+;; Main functions
+(defn index
+  "Compute the Jaccard index between [set1] and  [set2]."
+  [set1 set2]
+  (/ (count (clojure.set/intersection set1 set2))
+     (count (clojure.set/union set1 set2))))
+
+(defn distance
+  "Compute the Jaccard distance between [seq1] and [seq2]."
+  [seq1 seq2]
+  (let [set1 (into #{} seq1)
+        set2 (into #{} seq2)]
+    (- 1 (index set1 set2))))


Initial core.logic sudoku solver

Initial core.logic sudoku solver

error: RPC failed; HTTP 403 curl 22 The requested URL returned error: 403
fatal: the remote end hung up unexpectedly


YATF (Yet Another Text Fix)

YATF (Yet Another Text Fix)

--- test/metabase/driver/query_processor_test.clj
+++ test/metabase/driver/query_processor_test.clj
@@ -325,7 +325,7 @@
   :aggregation  ["rows"]
   :page         {:items 5
                  :page 1}
-  :order_by     [[(id :categories :name) "ascending"]]})
+  :order_by     [[(id :categories :id) "ascending"]]})

 ;; ### PAGE - Get the second page
 (qp-expect-with-all-datasets
@@ -341,7 +341,7 @@
   :aggregation  ["rows"]
   :page         {:items 5
                  :page 2}
-  :order_by     [[(id :categories :name) "ascending"]]})
+  :order_by     [[(id :categories :id) "ascending"]]})

 ;; ## "ORDER_BY" CLAUSE


Introduce Bresenham routine for line-segment drawing

error: pathspec 'src/cljs/goya/components/bresenham.cljs' did not match any file(s) known to git

--- src/cljs/goya/components/bresenham.cljs
+++ src/cljs/goya/components/bresenham.cljs
@@ -0,0 +1,33 @@
+(ns goya.components.bresenham)
+
+
+;; =============================================================================
+;; Bresenham line drawing algorithm
+;; Stolen from:
+;;   http://rosettacode.org/wiki/Bitmap/Bresenham's_line_algorithm#Clojure
+
+(defn bresenham [x0 y0 x1 y1]
+  (let [len-x (js/Math.abs (- x0 x1))
+        len-y (js/Math.abs (- y0 y1))
+        is-steep (> len-y len-x)]
+    (let [[x0 y0 x1 y1] (if is-steep [y0 x0 y1 x1] [x0 y0 x1 y1])]
+      (let [[x0 y0 x1 y1] (if (> x0 x1) [x1 y1 x0 y0] [x0 y0 x1 y1])]
+        (let [delta-x (- x1 x0)
+              delta-y (js/Math.abs (- y0 y1))
+              y-step (if (< y0 y1) 1 -1)]
+          (loop [x x0
+                 y y0
+                 error (js/Math.floor delta-x 2)
+                 pixels (if is-steep [[y x]] [[x y]])]
+            (if (>= x x1)
+              pixels
+              (if (< error delta-y)
+                (recur (inc x)
+                       (+ y y-step)
+                       (+ error (- delta-x delta-y))
+                       (if is-steep (conj pixels [y x]) (conj pixels [x y])))
+                (recur (inc x)
+                       y
+                       (- error delta-y)
+                       (if is-steep (conj pixels [y x]) (conj pixels [x y]))
+                       )))))))))


Cosine window

Cosine window

fatal: unable to access 'https://github.com/AntoinePassemiers/Neuhon.git/': The requested URL returned error: 403


clojure.string reversed (split) argument order from 1.2.

fatal: unable to access 'https://github.com/nelhage/riemann.git/': The requested URL returned error: 403


clean up

clean up

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/clojure-ml/cml.git/'


Document the resource query compilation process

--- src/com/puppetlabs/puppetdb/query/resource.clj
+++ src/com/puppetlabs/puppetdb/query/resource.clj
@@ -1,5 +1,24 @@
 ;; ## SQL query compiler
-
+;;
+;; The query compiler operates in effectively a three-step process. Because the
+;; query is compiled depth-first, however, the first two steps may be
+;; intermingled.
+;;
+;; The first step is compilation of = predicates into where clauses, params,
+;; and any necessary join tables. The where clauses are formulated such that
+;; they can be combined using AND/OR without requiring any extra joins or
+;; logic.
+;;
+;; The second step is compilation of and/or/not predicates. The first two of
+;; these are compiled fairly trivially by joining their child WHERE clauses
+;; with AND/OR, and concatenating the joins and params lists. "not" predicates
+;; are first compiled as an OR predicate, whose WHERE clause is then prepended
+;; with NOT.
+;;
+;; The final step is building the ultimate query which will be executed. This
+;; means building JOIN expressions for any necessary tables, and appending the
+;; JOINs and WHERE clause to the query which fetches the desired columns.
+;;
 (ns com.puppetlabs.puppetdb.query.resource
   (:require [com.puppetlabs.utils :as utils]
             [cheshire.core :as json]


added og properties to templates.common/head

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/emil0r/emil0r.git/'


Fixed things

Fixed things

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/OttoJursch/sched-system.git/'


Refactored thunk-timeout

Refactored thunk-timeout

--- jvm-runner/src/clojure/codewars/kill_switch.clj
+++ jvm-runner/src/clojure/codewars/kill_switch.clj
@@ -1,43 +1,28 @@
 (ns codewars.kill-switch
   (:import [java.util.concurrent TimeoutException ExecutionException TimeUnit FutureTask]))

-(def ^{:doc "Create a map of pretty keywords to ugly TimeUnits"}
-  uglify-time-unit
-  (into {} (for [[enum aliases] {TimeUnit/NANOSECONDS [:ns :nanoseconds]
-                                 TimeUnit/MICROSECONDS [:us :microseconds]
-                                 TimeUnit/MILLISECONDS [:ms :milliseconds]
-                                 TimeUnit/SECONDS [:s :sec :seconds]}
-                 alias aliases]
-             {alias enum})))
-
+;; Adapted from https://github.com/Raynes/clojail/blob/master/src/clojail/core.clj#L24
 (defn thunk-timeout
-  "Takes a function and an amount of time to wait for thse function to finish
-   executing. The sandbox can do this for you. unit is any of :ns, :us, :ms,
-   or :s which correspond to TimeUnit/NANOSECONDS, MICROSECONDS, MILLISECONDS,
-   and SECONDS respectively."
-  ([thunk ms]
-     (thunk-timeout thunk ms :ms nil)) ; Default to milliseconds, because that's pretty common.
-  ([thunk time unit]
-     (thunk-timeout thunk time unit nil))
-  ([thunk time unit tg]
-     (let [task (FutureTask. thunk)
-           thr (if tg (Thread. tg task) (Thread. task))]
-       (try
-         (.start thr)
-         (.get task time (or (uglify-time-unit unit) unit))
-         (catch TimeoutException e
-           (.cancel task true)
-           (.stop thr)
-           (throw (TimeoutException. "Execution timed out.")))
-         (catch ExecutionException e
-           (.cancel task true)
-           (.stop thr)
-           (throw (.getCause e)))
-         (catch Exception e
-           (.cancel task true)
-           (.stop thr)
-           (throw e))
-         (finally (when tg (.stop tg)))))))
+  "Takes a function and an amount of time to wait for the function to finish
+   executing."
+  [thunk ms]
+  (let [task (FutureTask. thunk)
+        thr (Thread. task)]
+    (try
+      (.start thr)
+      (.get task ms TimeUnit/MILLISECONDS)
+      (catch TimeoutException e
+        (.cancel task true)
+        (.stop thr)
+        (throw (TimeoutException. (str "Timeout: " ms " msecs"))))
+      (catch ExecutionException e
+        (.cancel task true)
+        (.stop thr)
+        (throw (.getCause e)))
+      (catch Exception e
+        (.cancel task true)
+        (.stop thr)
+        (throw e)))))

 (defmacro with-timeout


Namespace declaration fixed

Namespace declaration fixed

fatal: unable to access 'https://github.com/lteacher/codewars-runner-cli.git/': The requested URL returned error: 403


Stub implementation

Stub implementation

fatal: unable to access 'https://github.com/RackSec/desdemona.git/': The requested URL returned error: 403


Some other stuff I get a lot of mileage out of

error: pathspec 'src/detritus/update.clj' did not match any file(s) known to git

--- src/detritus/update.clj
+++ src/detritus/update.clj
@@ -0,0 +1,34 @@
+(ns detritus.update)
+
+(defn map-vals
+  "λ {A → B} → (λ B → more* → C) → more* → {A → C}
+
+  Computes a new map from m preserving the keys of m, but mapping the
+  keys of m to (apply f (get m k) args)."
+  [m f & args]
+  (->> (for [[k v] m]
+         [k (apply f v args)])
+       (into {})))
+
+
+(defn fix
+  "λ (fn T → T) → T → T
+
+  Eagerly computes the fixed point combinator of the input function
+  and value. As this computation is eager, it will terminate only when
+  a fixed point is reached which may be never."
+  [f dat]
+  (let [dat' (f dat)]
+    (if (= dat dat')
+      dat
+      (recur f dat'))))
+
+
+(defn update
+  "λ {A → B} → A → (λ B → args* → C) → args* → {A → C}
+
+  Updates a key in the map by applying f to the value at that key more
+  arguments, returning the resulting map."
+  [map key f & args]
+  (assoc map key
+         (apply f (get map key) args)))


First work on React backend to support ReactNative as a renderer and provide compatibility with React components where desired.

error: pathspec 'src/freactive/react.cljs' did not match any file(s) known to git

--- src/freactive/react.cljs
+++ src/freactive/react.cljs
@@ -0,0 +1,170 @@
+(ns freactive.react
+  (:require
+   [cljsjs.react]
+   [freactive.core :as r]
+   [freactive.dom :as dom]))
+
+(declare as-react)
+
+(defprotocol IAsReact
+  (-as-react [x]))
+
+(extend-protocol IAsReact
+  object
+  (-as-react [x] (str x))
+
+  nil
+  (-as-react [x] "")
+
+  boolean
+  (-as-react [x] (str x))
+
+  number
+  (-as-react [x] (str x)))
+
+(defn init-binding [this new-ref]
+  (.setState
+   this
+   #js {:binding
+        (r/bind-attr*
+         new-ref
+         (fn [spec]
+           (let [state (.-state this)]
+             (when (or (not state) (not (identical? spec (.-spec state))))
+               (.setState this #js {:spec spec}))))
+         dom/queue-animation)}))
+
+(defn dispose-binding [this]
+  (when-let [binding (.-binding (.-state this))]
+    (r/dispose binding)))
+
+(def binding-spec
+  #js
+  {:displayName "FReactiveBinding"
+   :componentWillMount
+    (fn []
+      (this-as
+       this
+       (init-binding
+        this
+        (if-let [fvec (.-fvec (.-props this))]
+          (r/rx* (fn [] (apply (first fvec) (rest fvec))))
+          (.-aref (.-props this))))))
+    :componentDidMount
+    (fn [])
+    :componentWillReceiveProps
+   (fn [next-props]
+     (this-as
+      this
+      (or
+       (if-let [fvec (.-fvec next-props)]
+         (let [old-fvec (.-fvec (.-props this))]
+           (when-not (= fvec old-fvec)
+             (dispose-binding this)
+             (init-binding this
+                           (r/rx* (fn [] (apply (first fvec) (rest fvec)))))))
+         (let [old-ref (.-aref (.-props this))
+               new-ref (.-aref next-props)]
+           (when-not (identical? old-ref new-ref)
+             (dispose-binding this)
+             (init-binding this new-ref)))))))
+    :shouldComponentUpdate
+    (fn [next-props next-state]
+      (this-as
+       this
+       (not
+        (identical? (.-spec (.-state this))
+                    (.-spec next-state)))))
+    :componentWillUpdate
+    (fn [next-props next-state]
+      (this-as
+       this))
+    :componentDidUpdate
+    (fn [prev-props prev-state]
+      (this-as
+       this))
+    :render
+    (fn []
+      (this-as
+       this
+       (as-react (.-spec (.-state this)))))
+    :componentWillUnmount
+    (fn []
+      (this-as
+       this
+       (dispose-binding this)))})
+
+(def binding-class
+  (.createClass js/React binding-spec))
+
+(defn resolve-react-class [uri tag] tag)
+
+(defn clj->react-attrs [attrs]
+  ;; (let [js-attrs #js {}
+  ;;       class (:class attrs)
+  ;;       style (:style attrs)
+  ;;       attrs (dissoc attrs :class :style)]
+  ;;   (when class
+  ;;     (set! (.-className attrs) class))
+  ;;   (doseq [[k v] attrs]
+  ;;     ))
+  (clj->js attrs)
+  )
+
+(def ^:private element-ns-lookup #js {})
+
+(declare react-element)
+
+(defn- as-react [elem-spec]
+  (cond
+    (string? elem-spec)
+    elem-spec
+
+    (js/React.isValidElement elem-spec)
+    elem-spec
+
+    (sequential? elem-spec)
+    (let [head (first elem-spec)]
+      (cond
+        (keyword? head)
+        (let [tag-ns (namespace head)
+              tag-name (name head)
+              tail (rest elem-spec)]
+          (if tag-ns
+            (if-let [tag-handler (aget element-ns-lookup tag-ns)]
+              (cond
+                (fn? tag-handler)
+                (as-react (tag-handler tag-name tail))
+
+                :default
+                (.warn js/console "Invalid ns node handler" tag-handler))
+              (.warn js/console "Undefined ns node prefix" tag-ns))
+            (react-element nil tag-name tail)))
+
+        (ifn? head)
+        (.createElement
+         js/React binding-class (clj->js (assoc (meta elem-spec) :fvec elem-spec)) nil)))
+
+    (satisfies? IDeref elem-spec)
+    (.createElement
+     js/React binding-class (clj->js (assoc (meta elem-spec) :aref elem-spec)) nil)
+
+    :default
+    (as-react (-as-react elem-spec))))
+
+(def react-element
+  (dom/element*
+   (fn [uri tag attrs children]
+     (.createElement
+      js/React
+      (resolve-react-class uri tag)
+      (clj->react-attrs attrs)
+      children))
+   (dom/append-children* as-react)))
+
+(defn render [element container]
+  (.render js/React
+           (as-react element)
+           (if (dom/dom-node? container)
+             container
+             (dom/create-or-find-root-node container))))


add supplement handler tests

add supplement handler tests

fatal: unable to access 'https://github.com/liquidz/panpan-bot.git/': The requested URL returned error: 403


Argitaletxea eta generoa kontutan ez eduki

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/lnmnd/magnet.zer.git/'


bum version to 2.9.3

bum version to 2.9.3

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/B2W-BIT/restQL-server.git/'


driver.structured -> driver.postgres

driver.structured -> driver.postgres

--- src/metabase/driver.clj
+++ src/metabase/driver.clj
@@ -1,9 +1,9 @@
 (ns metabase.driver
   (:require [clojure.core.match :refer [match]]
             (metabase.driver native
-                             structured)))
+                             postgres)))

 (defn process-and-run [{:keys [type] :as query}]
   (case (keyword type)
     :native (metabase.driver.native/process-and-run query)
-    :query (metabase.driver.structured/process-and-run query)))
+    :query (metabase.driver.postgres/process-and-run query)))


Version 1.11.1-SNAPSHOT

Version 1.11.1-SNAPSHOT

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/starcity-properties/odin.git/'


Release version 1.0.0

Release version 1.0.0

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Yleisradio/rabid.git/'


Version 181-SNAPSHOT

Version 181-SNAPSHOT

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/tobias/clojars-web.git/'


Version 60-SNAPSHOT

Version 60-SNAPSHOT


Bump cljs dependencie

Bump cljs dependencie

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/dignati/om-charts.git/'


Update deps

Update deps

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/voting-method-http-api.git/'


make clojars the default release repository

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/tobiasbayer/lambdacd.git/'


Adding project's URL.

Adding project's URL.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/screen6/cardinality.git/'


bump version to 2.8.7

bump version to 2.8.7

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/B2W-Digital/pdg-core.git/'


fixed license in project.clj

fixed license in project.clj


Update midje and lein-midje dependencies.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/julianespinel/directory.git/'


Added project.clj.

Added project.clj.

error: pathspec 'project.clj' did not match any file(s) known to git

--- project.clj
+++ project.clj
@@ -0,0 +1,10 @@
+(defproject lambda-blog "0.1.0-SNAPSHOT"
+  :description "A static blog generator."
+  :url "https://github.com/Idorobots/lambda-blog"
+  :license {:name "MIT License"
+            :url "http://www.opensource.org/licenses/mit-license.php"}
+  :dependencies [[org.clojure/clojure "1.6.0"]
+                 [s-html "0.1.0"]]
+  :plugins [[jonase/eastwood "0.1.5"]
+            [lein-ancient "0.5.4"]
+            [lein-cloverage "1.0.2"]])


AOT transwarp.ChamberException

AOT transwarp.ChamberException

fatal: unable to access 'https://github.com/michaelsbradleyjr/transwarp.git/': The requested URL returned error: 403


Updating version

Updating version


Update HikariCP to make lein-ancient happy

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/couragelabs/crispy-tatertot.git/'


Added project file for devserver.

Added project file for devserver.

--- project.clj
+++ project.clj
@@ -0,0 +1,14 @@
+(defproject hoplon-reveal-js "0.2.0-SNAPSHOT"
+  :description "Reveal.js for Hoplon"
+  :url "http://github.com/oubiwann/hoplon-reveal-js"
+  :license {:name "Apache V2 License"
+            :url "http://www.apache.org/licenses/LICENSE-2.0.html"}
+  :dependencies [[org.clojure/clojure "1.5.1"]
+                 [http-kit "2.1.16"]
+                 [ring "1.2.1"]
+                 [compojure "1.1.6"]
+                 [org.clojure/clojurescript "0.0-2138"]]
+  :source-paths ["src/clj"]
+  :jvm-opts ^:replace ["-Xmx512m" "-server"]
+  :aot [devserver]
+  :main devserver/run)


Added fast implementations of ecount and div!

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/thinktopic/netlib-ccm.git/'


Fix overly-aggressive backspacing

Fix overly-aggressive backspacing

fatal: unable to access 'https://github.com/democracyworks/mail-works.git/': The requested URL returned error: 403


updated converter

updated converter

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/benzap/baconbot.git/'


java/install options

java/install options

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/jchli/jepsen-aurora.git/'


Initial standard index definitions in vault.index.defs ns.

error: pathspec 'src/vault/index/defs.clj' did not match any file(s) known to git

--- src/vault/index/defs.clj
+++ src/vault/index/defs.clj
@@ -0,0 +1,65 @@
+(ns vault.index.defs
+  (:require
+    [clj-time.core :as time])
+  (:import
+    clojure.lang.Keyword
+    org.joda.time.DateTime
+    vault.blob.digest.HashID))
+
+
+(def blob-index
+  "Stores blob statistic data."
+  {:record-schema
+   {:id        HashID     ; blob hash-id (pk)
+    :size      Long       ; blob byte length
+    :type      Keyword    ; data type
+    :label     String     ; type-specific annotation
+    :stored-at DateTime}  ; time added to index
+
+   :queries
+   {:direct ^:unique [:id]  ; direct lookups (pk)
+    :typed [:type :label]}  ; blobs by type/label
+
+   :projection
+   (fn [blob]
+     [{:id (:id blob)
+       :size (count (:content blob))
+       :type (:data/type blob)
+       ; TODO: label pgp keys
+       :stored-at (time/now)}])})
+
+
+(def ref-index
+  "Stores forward and back references between blobs."
+  {:record-schema
+   {:blob HashID    ; source hash-id
+    :type Keyword   ; source blob type
+    :ref  HashID}   ; target hash-id
+
+   :queries
+   {:forward [:blob]        ; references from a source blob
+    :reverse [:ref :type]}  ; references to a target blob (by type)
+
+   :projection
+   (fn [blob]
+     (let [record {:blob (:id blob)
+                   :type (:data/type blob)}]
+       ; TODO: walk the blob data structure and record refs
+       []))})
+
+
+(def tx-log
+  "Stores a log of entity transactions."
+  {:record-schema
+   {:tx    HashID       ; transaction blob hash-id
+    :type  Keyword      ; transaction type (root/update)
+    :time  DateTime     ; time of modification
+    :owner HashID}      ; owner's public-key hash-id
+
+   :queries
+   {:history [:owner :time]}
+
+   :projection
+   (fn [blob]
+     ; TODO: implement
+     [])})


finish out delete handler, consistent identifiers

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/election-mail-works.git/'


Azala irudiarentzat tokia

Azala irudiarentzat tokia

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/lnmnd/magnet.bez.git/'


finish clojure version

finish clojure version

error: pathspec 'Complex-Number-Multiplication/CNM.clj' did not match any file(s) known to git

--- Complex-Number-Multiplication/CNM.clj
+++ Complex-Number-Multiplication/CNM.clj
@@ -0,0 +1,29 @@
+(require '[clojure.string :as str])
+
+(defn complexNumberMultiply [a b]
+  (let [aL (str/split a #"\+" 2)
+        bL (str/split b #"\+" 2)
+        ai (Integer. (first aL))
+        bi (Integer. (first bL))
+        ac (Integer. (subs (last aL) 0 (- (count (last aL)) 1)))
+        bc (Integer. (subs (last bL) 0 (- (count (last bL)) 1)))
+        ins (- (* ai bi) (* ac bc))
+        com (+ (* ai bc) (* bi ac))]
+    (str ins "+" com "i")
+    ))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


Removed unnecessary nil check in the alternate-hostnames schema

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/partner-works.git/'


Added concatination

Added concatination

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/skprasadu/crud-ui-framework.git/'


Fix schema

Fix schema

--- src/cljc/salava/badge/endorsement_schemas.cljc
+++ src/cljc/salava/badge/endorsement_schemas.cljc
@@ -28,7 +28,7 @@

 (s/defschema received-user-endorsement (-> received-user-endorsement-p
                                            (assoc
-                                            (s/optional-key :issuer_name) _name
+                                            (s/optional-key :issuer_name) (s/maybe _name)
                                             :issuer_url (s/maybe s/Str)
                                             :profile_picture (describe (s/maybe s/Str) "Issuer's image")
                                             :description (s/maybe s/Str)
@@ -56,7 +56,7 @@
                                 :profile_picture (s/maybe s/Str)
                                 :name (s/maybe s/Str)
                                 :image_file (s/maybe s/Str)
-                                (s/optional-key :issuer_name) _name)))
+                                (s/optional-key :issuer_name) (s/maybe _name))))

 (s/defschema received-request-p (-> request
                                     (assoc :requester_id (s/maybe s/Int))))
@@ -64,7 +64,7 @@
 (s/defschema received-request (-> received-request-p
                                   (assoc
                                    :description (s/maybe s/Str)
-                                   (s/optional-key :issuer_name) s/Str
+                                   (s/optional-key :issuer_name) (s/maybe s/Str)
                                    :issued_on s/Int
                                    :issuer_content_id (s/maybe s/Str)
                                    :first_name _name


[#429] wip nashorn interop

[#429] wip nashorn interop

error: pathspec 'backend/src/org/akvo/lumen/transformation/js.clj' did not match any file(s) known to git

--- backend/src/org/akvo/lumen/transformation/js.clj
+++ backend/src/org/akvo/lumen/transformation/js.clj
@@ -0,0 +1,49 @@
+(ns org.akvo.lumen.transformation.js
+  (:import [javax.script ScriptEngineManager ScriptEngine Invocable]
+           [jdk.nashorn.api.scripting NashornScriptEngineFactory ClassFilter]))
+
+(set! *warn-on-reflection* true)
+
+(defn derive-column-function [code]
+  (format "var deriveColumn = function(row) {  return %s; }" code))
+
+(def ^ClassFilter class-filter
+  (reify ClassFilter
+    (exposeToScripts [this s]
+      false)))
+
+(defn row-transform [code]
+  (let [factory (NashornScriptEngineFactory.)
+        engine (.getScriptEngine factory class-filter)]
+    (.eval ^ScriptEngine engine ^String (derive-column-function code))
+    (fn [row]
+      (.invokeFunction ^Invocable engine "deriveColumn" (object-array [row])))))
+
+(def fun (row-transform "quit()"))
+
+
+(fun {"age" 10
+      "foo" 6})
+
+
+
+(time (def f (row-transform "return java.lang.Thread.interrupted()")))
+
+(comment
+  (f {})
+
+  (System/exit 1)
+  )
+
+;;; return row['a'] + (row['b'] < 10 ? row['c'] : row['c']
+;;; return <statement>
+
+;;; return while(true) {}
+
+
+#_(time (dotimes [_ 10000]
+          (f {"a" 3 "b" 7})))
+
+#_(let [m {"a" 1 "b" 2}]
+    (time (dotimes [_ 10000]
+            (+ (get m "a") (get m "b")))))


lein dumps stack trace on exit code 1 now?

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/croeder/clojure-koans-work.git/'


bump version to 3.4.0

bump version to 3.4.0

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/B2W-Digital/pdg-core.git/'


bump version to 3.3.0

bump version to 3.3.0


add testing alias

add testing alias

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/vincentstorme/clojureme.git/'


bump core version to 3.4.1

bump core version to 3.4.1

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/B2W-BIT/restQL-server.git/'


Updated dependencies.

Updated dependencies.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/danielfm/licensator.git/'


Add codox

Add codox

--- project.clj
+++ project.clj
@@ -3,7 +3,8 @@
   :url "https://github.com/crashlytics/finagle-clojure"
   :profiles {:dev {:dependencies [[org.clojure/clojure "1.6.0"]
                                   [midje "1.5.1" :exclusions [org.clojure/clojure]]]
-                   :plugins [[lein-midje "3.1.1"]]}
+                   :plugins [[lein-midje "3.1.1"]
+                             [codox "0.8.9"]]}
              :1.5 {:dependencies [[org.clojure/clojure "1.5.1"]]}
              :1.4 {:dependencies [[org.clojure/clojure "1.4.0"]]}}
   :repositories [["twitter" "http://maven.twttr.com/"]]


AOT and exclude test namespaces from release

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/aaronlahey/coconut.git/'


Define the development-2 environment

Define the development-2 environment

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/physion/ovation-webapi.git/'


Version 0.2.19-SNAPSHOT

Version 0.2.19-SNAPSHOT

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject sablono "0.2.18"
+(defproject sablono "0.2.19-SNAPSHOT"
   :description "Lisp style templating for Facebook's React."
   :url "http://github.com/r0man/sablono"
   :author "r0man"


version change from merge

version change from merge

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/CraZySacX/nitelens.git/'


fix order management and history subs

fix order management and history subs

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/starcity-properties/odin.git/'


cleanup deps

cleanup deps

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/mprokopov/privat24-manager.git/'


Remove commented-out code

Remove commented-out code

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Reefersleep/sleepydo.git/'


update node edit form #62

update node edit form
#62

error: pathspec 'src/cljs/swarmpit/component/node/edit.cljs' did not match any file(s) known to git

--- src/cljs/swarmpit/component/node/edit.cljs
+++ src/cljs/swarmpit/component/node/edit.cljs
@@ -0,0 +1,173 @@
+(ns swarmpit.component.node.edit
+  (:require [material.icon :as icon]
+            [material.component :as comp]
+            [material.component.form :as form]
+            [material.component.list-table-form :as list]
+            [material.component.panel :as panel]
+            [swarmpit.component.mixin :as mixin]
+            [swarmpit.component.state :as state]
+            [swarmpit.component.message :as message]
+            [swarmpit.component.progress :as progress]
+            [swarmpit.url :refer [dispatch!]]
+            [swarmpit.ajax :as ajax]
+            [swarmpit.routes :as routes]
+            [sablono.core :refer-macros [html]]
+            [rum.core :as rum]))
+
+(enable-console-print!)
+
+(def form-node-labels-cursor (conj state/form-value-cursor :labels))
+
+(def form-node-labels-headers
+  [{:name  "Name"
+    :width "35%"}
+   {:name  "Value"
+    :width "35%"}])
+
+(defn- form-role [value]
+  (form/comp
+    "ROLE"
+    (comp/select-field
+      {:value    value
+       :onChange (fn [_ _ v]
+                   (state/update-value [:role] v state/form-value-cursor))}
+      (comp/menu-item
+        {:key         "frm"
+         :value       "manager"
+         :primaryText "manager"})
+      (comp/menu-item
+        {:key         "frw"
+         :value       "worker"
+         :primaryText "worker"}))))
+
+(defn- form-availability [value]
+  (form/comp
+    "AVAILABILITY"
+    (comp/select-field
+      {:value    value
+       :onChange (fn [_ _ v]
+                   (state/update-value [:availability] v state/form-value-cursor))}
+      (comp/menu-item
+        {:key         "faa"
+         :value       "active"
+         :primaryText "active"})
+      (comp/menu-item
+        {:key         "faw"
+         :value       "pause"
+         :primaryText "pause"})
+      (comp/menu-item
+        {:key         "fad"
+         :value       "drain"
+         :primaryText "drain"}))))
+
+(defn- form-labels-name [value index]
+  (list/textfield
+    {:name     (str "form-labels-name-" index)
+     :key      (str "form-labels-name-" index)
+     :value    value
+     :onChange (fn [_ v]
+                 (state/update-item index :name v form-node-labels-cursor))}))
+
+(defn- form-labels-value [value index]
+  (list/textfield
+    {:name     (str "form-labels-value-" index)
+     :key      (str "form-labels-value-" index)
+     :value    value
+     :onChange (fn [_ v]
+                 (state/update-item index :value v form-node-labels-cursor))}))
+
+(defn- form-labels-render
+  [item index]
+  (let [{:keys [name value]} item]
+    [(form-labels-name name index)
+     (form-labels-value value index)]))
+
+(defn- form-labels-table
+  [labels]
+  (list/table-raw form-node-labels-headers
+                  labels
+                  nil
+                  form-labels-render
+                  (fn [index] (state/remove-item index form-node-labels-cursor))))
+
+(defn- add-label
+  []
+  (state/add-item {:name  ""
+                   :value ""} form-node-labels-cursor))
+
+(defn- node-handler
+  [node-id]
+  (ajax/get
+    (routes/path-for-backend :node {:id node-id})
+    {:state      [:loading?]
+     :on-success (fn [{:keys [response]}]
+                   (state/set-value response state/form-value-cursor))}))
+
+(defn- update-node-handler
+  [node-id version]
+  (ajax/post
+    (routes/path-for-backend :node-update {:id node-id})
+    {:params     (-> (state/get-value state/form-value-cursor)
+                     (assoc :version version))
+     :state      [:processing?]
+     :on-success (fn [{:keys [origin?]}]
+                   (when origin?
+                     (dispatch!
+                       (routes/path-for-frontend :node-info {:id node-id})))
+                   (message/info
+                     (str "Node " node-id " has been updated.")))
+     :on-error   (fn [{:keys [response]}]
+                   (message/error
+                     (str "Node update failed. " (:error response))))}))
+
+(defn- init-form-state
+  []
+  (state/set-value {:valid?      false
+                    :loading?    true
+                    :processing? false} state/form-state-cursor))
+
+(def mixin-init-form
+  (mixin/init-form
+    (fn [{{:keys [id]} :params}]
+      (init-form-state)
+      (node-handler id))))
+
+(rum/defc form-edit < rum/static [{:keys [id version nodeName role availability labels]}
+                                  {:keys [processing? valid?]}]
+  [:div
+   [:div.form-panel
+    [:div.form-panel-left
+     (panel/info icon/nodes nodeName)]
+    [:div.form-panel-right
+     (comp/progress-button
+       {:label      "Save"
+        :disabled   (not valid?)
+        :primary    true
+        :onTouchTap #(update-node-handler id version)} processing?)
+     [:span.form-panel-delimiter]
+     (comp/mui
+       (comp/raised-button
+         {:href  (routes/path-for-frontend :node-info {:id id})
+          :label "Back"}))]]
+   [:div.form-layout
+    [:div.form-layout-group
+     (form/section "General settings")
+     (form/form
+       {:onValid   #(state/update-value [:valid?] true state/form-state-cursor)
+        :onInvalid #(state/update-value [:valid?] false state/form-state-cursor)}
+       (form-role role)
+       (form-availability availability))]
+    [:div.form-layout-group.form-layout-group-border
+     (form/section "Labels")
+     (form/form
+       {}
+       (html (form/subsection-add "Add label" add-label))
+       (form-labels-table labels))]]])
+
+(rum/defc form < rum/reactive
+                 mixin-init-form [_]
+  (let [state (state/react state/form-state-cursor)
+        node (state/react state/form-value-cursor)]
+    (progress/form
+      (:loading? state)
+      (form-edit node state))))


cosmetic, p19.clj

cosmetic, p19.clj

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/drcabana/euler-fp.git/'


Get all languages from elections & authorities

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/electorate-works.git/'


don't use -e bash flag in shen.clj script

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/michaelsbradleyjr/shen.clj.git/'


anchor shen.clj w/ $script_path

anchor shen.clj w/ $script_path


latest marginalia

latest marginalia


Move the injections out of main, into repl profile, otherwise it destroyes tests.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/mtravers/incidents.git/'


added project.clj

added project.clj

error: pathspec 'project.clj' did not match any file(s) known to git

--- project.clj
+++ project.clj
@@ -0,0 +1,7 @@
+(defproject limelight "0.1.0-SNAPSHOT"
+  :description "FIXME: write"
+  :dependencies [[org.clojure/clojure "1.2.1"]
+                 [jruby-complete "1.6.3"]
+                 [jna "3.0.9"]]
+  :dev-dependencies [[junit "4.8.2"]]
+  )


[WM] update to clojure 1.7.0-RC1

[WM] update to clojure 1.7.0-RC1

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/notification-works.git/'


Version 179

Version 179

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/tobias/clojars-web.git/'


Disable pedantic for the repl profile

Disable pedantic for the repl profile

Cider brings in a nrepl version that causes pedantic to complain, and
there's not much we can do about it other than disabling pedantic for
just the repl.

--- project.clj
+++ project.clj
@@ -62,6 +62,7 @@
   :pedantic? :abort
   :profiles
   {:dev  [:project/dev  :profiles/dev]
+   :repl {:pedantic? false}
    :test [:project/test :profiles/test]
    :uberjar {:aot :all}
    :profiles/dev  {}


update version

update version

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/aamedina/om-cljs.git/'


Begin work on next development iteration.

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject com.damballa/abracad "0.4.8"
+(defproject com.damballa/abracad "0.4.9-SNAPSHOT"
   :description "De/serialize Clojure data structures with Avro."
   :url "http://github.com/damballa/abracad"
   :licenses [{:name "Eclipse Public License"


Upgrades.

Upgrades.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/couragelabs/freefrog.git/'


(maint) Add dependency exclusion for :pedantic?

Starting a REPL in Cursive blows-up without this patch.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/nathanielksmith/trapperkeeper-status.git/'


Fixing repo, description, bumping clojurescript

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/xcthulhu/clj-bitauth.git/'


:art: Remove duplicate plugin reference

:art: Remove duplicate plugin reference

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/maoo/bot-unfurl.git/'


Adding HTTP on project

Adding HTTP on project

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/acessocard/microscope.git/'


Working on problem 0109.

Working on problem 0109.

error: pathspec 'src/project_euler/problem_0109.clj' did not match any file(s) known to git

--- src/project_euler/problem_0109.clj
+++ src/project_euler/problem_0109.clj
@@ -0,0 +1,74 @@
+(ns project-euler.problem_0109)
+
+;; In the game of darts a player throws three darts at a target board which is split into
+;; twenty equal sized sections numbered one to twenty.
+
+
+;; The score of a dart is determined by the number of the region that the dart lands in.
+;; A dart landing outside the red/green outer ring scores zero.
+;; The black and cream regions inside this ring represent single scores.
+;; However, the red/green outer ring and middle ring score double and treble scores respectively.
+
+;; At the centre of the board are two concentric circles called the bull region, or bulls-eye.
+;; The outer bull is worth 25 points and the inner bull is a double, worth 50 points.
+
+;; There are many variations of rules but in the most popular game the players
+;; will begin with a score 301 or 501 and the first player to reduce their
+;; running total to zero is a winner.
+;; However, it is normal to play a "doubles out" system,
+;; which means that the player must land a double
+;; (including the double bulls-eye at the centre of the board)
+;; on their final dart to win;
+;; any other dart that would reduce their running total to one or lower means the score
+;; for that set of three darts is "bust".
+
+;; When a player is able to finish on their current score it is called a "checkout"
+;; and the highest checkout is 170: T20 T20 D25 (two treble 20s and double bull).
+
+;; There are exactly eleven distinct ways to checkout on a score of 6:
+
+;; D3
+;; D1	D2
+;; S2	D2
+;; D2	D1
+;; S4	D1
+;; S1	S1	D2
+;; S1	T1	D1
+;; S1	S3	D1
+;; D1	D1	D1
+;; D1	S2	D1
+;; S2	S2	D1
+
+;; Note that D1 D2 is considered different to D2 D1 as they finish on different doubles.
+;; However, the combination S1 T1 D1 is considered the same as T1 S1 D1.
+
+;; In addition we shall not include misses in considering combinations;
+;; for example, D3 is the same as 0 D3 and 0 0 D3.
+
+;; Incredibly there are 42336 distinct ways of checking out in total.
+
+;; How many distinct ways can a player checkout with a score less than 100?
+
+(def dbl-sections
+  (->> (concat (range 1 21) [25])
+       (map (fn [x] [(* 2 x) 2]))
+       (vec)
+       ))
+
+(def all-sections
+  (->> (concat (range 1 21) [25])
+       (mapcat (fn [x] [[(* 1 x) 1] [(* 2 x) 2] [(* 3 x) 3]]))
+       (sort)
+       (drop-last)
+       (vec)
+       ))
+
+
+(defn checkouts
+  ([x] (checkouts x 0))
+  ([x d]
+   (cond (> d 2)  []
+         (== d 0) (->> dbl-sections
+                       (take-while (fn [[v k]] (>= x v)))
+                       )
+         )))


Problem 0119.

Problem 0119.

error: pathspec 'src/project_euler/problem_0119.clj' did not match any file(s) known to git

--- src/project_euler/problem_0119.clj
+++ src/project_euler/problem_0119.clj
@@ -0,0 +1,58 @@
+(ns project-euler.problem_0119)
+
+;; The number 512 is interesting because it is equal to the sum of its digits raised to some power:
+;; 5 + 1 + 2 = 8, and 83 = 512.
+;; Another example of a number with this property is 614656 = 284.
+
+;; We shall define an to be the nth term of this sequence
+;; and insist that a number must contain at least two digits to have a sum.
+
+;; You are given that a2 = 512 and a10 = 614656.
+
+;; Find a30.
+
+(defn sum-of-digits [x]
+  (loop [x x s 0]
+    (if (zero? x)
+      s
+      (recur (quot x 10) (+ s (rem x 10))))))
+
+(defn power-of? [x b]
+  (loop [x x]
+    (or (== x b)
+        (and (zero? (rem x b))
+             (recur (quot x b))))))
+
+(defn pow [x n]
+  (loop [n n p 1]
+    (if (zero? n)
+      p
+      (recur (dec n) (* p x)))))
+
+(defn n-digit-powers [n]
+  (let [n-d-min (pow 10 (dec n))
+        n-d-max (pow 10 n)]
+    (->> (range 2 (inc (* 9 n)))
+         (mapcat (fn [b]
+                   (->> (iterate inc 2)
+                        (map (fn [m] (pow b m)))
+                        (drop-while #(< % n-d-min))
+                        (take-while #(< % n-d-max))
+                        )))
+         (sort)
+         (dedupe)
+         )))
+
+
+(defn solution []
+  (->> (iterate inc 2)
+       (mapcat n-digit-powers)
+       (map (fn [x] [x (sum-of-digits x)]))
+       (remove (fn [[x b]] (== 1 b)))
+       (filter (fn [[x b]] (power-of? x b)))
+       (take 30)
+       (last)
+       (first)
+       ))
+
+;;-> 248155780267521


Add separate bootstrap namespace

Add separate bootstrap namespace

error: pathspec 'frontend/src/cruncher/utils/bootstrap.cljs' did not match any file(s) known to git

--- frontend/src/cruncher/utils/bootstrap.cljs
+++ frontend/src/cruncher/utils/bootstrap.cljs
@@ -0,0 +1,12 @@
+(ns cruncher.utils.bootstrap
+  (:require [om.dom :as dom]))
+
+(defn row
+  [& content]
+  (dom/div #js {:className "row"}
+           content))
+
+(defn col
+  [size & content]
+  (dom/div #js {:className (str "col-md-" size)}
+           content))


add markup ns that provides the Markup protocol and the Markdown and Asciidoc implementations

error: pathspec 'src/leiningen/new/cryogen/src/cryogen/markup.clj' did not match any file(s) known to git

--- src/leiningen/new/cryogen/src/cryogen/markup.clj
+++ src/leiningen/new/cryogen/src/cryogen/markup.clj
@@ -0,0 +1,37 @@
+(ns cryogen.markup
+  (:require [markdown.core :refer [md-to-html-string]]
+            [clojure.string :as s])
+  (:import org.asciidoctor.Asciidoctor$Factory
+           java.util.Collections))
+
+(defprotocol Markup
+  (dir [this])
+  (ext [this])
+  (render-fn [this]))
+
+(defn- markdown []
+  (reify Markup
+    (dir [this] "md")
+    (ext [this] ".md")
+    (render-fn [this]
+      (fn [rdr]
+        (md-to-html-string
+         (->> (java.io.BufferedReader. rdr)
+              (line-seq)
+              (s/join "\n"))
+         :heading-anchors true)))))
+
+(defn- asciidoc []
+  (reify Markup
+    (dir [this] "asc")
+    (ext [this] ".asc")
+    (render-fn [this]
+      (fn [rdr]
+        (.convert (Asciidoctor$Factory/create)
+         (->> (java.io.BufferedReader. rdr)
+              (line-seq)
+              (s/join "\n"))
+         (Collections/emptyMap))))))
+
+(defn markups []
+  [(markdown) (asciidoc)])


bumped up cryogen-core version

bumped up cryogen-core version

--- src/leiningen/new/cryogen/project.clj
+++ src/leiningen/new/cryogen/project.clj
@@ -9,7 +9,7 @@
                            [ring/ring-devel "1.3.2"]
                            [compojure "1.3.1"]
                            [ring-server "0.3.1"]
-                           [cryogen-core "0.1.3"]]
+                           [cryogen-core "0.1.5"]]
             :plugins [[lein-ring "0.8.13"]]
             :main cryogen.compiler
             :ring {:init cryogen.server/init


Add user_uuid to tests

Add user_uuid to tests

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/physion/ovation-webapi.git/'


test fix

test fix

--- test/metabase/driver/generic_sql/native_test.clj
+++ test/metabase/driver/generic_sql/native_test.clj
@@ -34,6 +34,9 @@
 (expect {:status :failed
          :error "Column \"ZID\" not found"}
   (do (log/info (color/green "NOTE: The following stacktrace is expected <3"))      ; this will print a stacktrace
-      (driver/process-query {:native   {:query "SELECT ZID FROM CHECKINS LIMIT 2;"} ; make sure people know it's to be expected
-                             :type     :native
-                             :database (db-id)})))
+      (dissoc (driver/process-query {:native   {:query "SELECT ZID FROM CHECKINS LIMIT 2;"} ; make sure people know it's to be expected
+                                     :type     :native
+                                     :database (db-id)})
+              :stacktrace
+              :query
+              :expanded-query)))


unit test for GET /api/meta/db/form_input

--- test/metabase/api/meta/db_test.clj
+++ test/metabase/api/meta/db_test.clj
@@ -14,7 +14,25 @@
                                               :name db-name
                                               :details {:conn_str "host=localhost port=5432 dbname=fakedb user=cam"}}))

-;; DB LIFECYCLE ENDPOINTS
+;; # FORM INPUT
+
+;; ## GET /api/meta/db/form_input
+(expect
+    {:engines [["h2" "H2"]
+               ["postgres" "PostgreSQL"]]
+     :timezones ["GMT"
+                 "UTC"
+                 "US/Alaska"
+                 "US/Arizona"
+                 "US/Central"
+                 "US/Eastern"
+                 "US/Hawaii"
+                 "US/Mountain"
+                 "US/Pacific"
+                 "America/Costa_Rica"]}
+  ((user->client :crowberto) :get 200 "meta/db/form_input"))
+
+;; # DB LIFECYCLE ENDPOINTS

 ;; ## GET /api/meta/db/:id
 (expect


Stub for tests for the config module

Stub for tests for the config module

error: pathspec 'test/cloverage_jenkins_reporter/config_test.clj' did not match any file(s) known to git

--- test/cloverage_jenkins_reporter/config_test.clj
+++ test/cloverage_jenkins_reporter/config_test.clj
@@ -0,0 +1,56 @@
+;;;
+;;;   Statistic about code coverage measured by Cloverage reporter.
+;;;
+;;; Copyright (c) 2015, 2016, 2017  Pavel Tisnovsky, Red Hat
+;;; All rights reserved.
+;;;
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions are met:
+;;;     * Redistributions of source code must retain the above copyright
+;;;       notice, this list of conditions and the following disclaimer.
+;;;     * Redistributions in binary form must reproduce the above copyright
+;;;       notice, this list of conditions and the following disclaimer in the
+;;;       documentation and/or other materials provided with the distribution.
+;;;     * Neither the name of the Red Hat nor the
+;;;       names of its contributors may be used to endorse or promote products
+;;;       derived from this software without specific prior written permission.
+;;;
+;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+;;; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+;;; DISCLAIMED. IN NO EVENT SHALL Pavel Tisnovsky BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+;;; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+;;; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+;;; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(ns cloverage-jenkins-reporter.config-test
+  (:require [clojure.test :refer :all]
+            [cloverage-jenkins-reporter.config :refer :all]))
+
+;
+; Common functions used by tests.
+;
+
+(defn callable?
+    "Test if given function-name is bound to the real function."
+    [function-name]
+    (clojure.test/function? function-name))
+
+;
+; Tests for various defs and functions
+;
+
+(deftest test-load-configuration-existence
+    "Check that the cloverage-jenkins-reporter.config/load-configuration definition exists."
+    (testing "if the cloverage-jenkins-reporter.config/load-configuration definition exists."
+        (is (callable? 'cloverage-jenkins-reporter.config/load-configuration))))
+
+
+(deftest test-print-configuration-existence
+    "Check that the cloverage-jenkins-reporter.config/print-configuration definition exists."
+    (testing "if the cloverage-jenkins-reporter.config/print-configuration definition exists."
+        (is (callable? 'cloverage-jenkins-reporter.config/print-configuration))))
+


move the test database file under /target/ as well and give it a longer name so it's clear what it really is.

--- test/metabase/test_data/load.clj
+++ test/metabase/test_data/load.clj
@@ -19,7 +19,7 @@
 (def ^:private db-name "Test Database")
 (def ^:private org-name "Test Organization")
 (def ^:private test-db-filename
-  (delay (format "%s/t.db" (System/getProperty "user.dir"))))
+  (delay (format "%s/target/test-data" (System/getProperty "user.dir"))))
 (def ^:private test-db-connection-string
   (delay (format "file:%s;AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1" @test-db-filename)))


Attempting to sort out phantom now that we are linking to js/fetch in dev

error: pathspec 'env/test/env/shared/non_phantom.cljs' did not match any file(s) known to git

--- env/test/env/shared/non_phantom.cljs
+++ env/test/env/shared/non_phantom.cljs
@@ -0,0 +1,5 @@
+ (ns non-phantom)
+
+(defn slurp-csv
+      "Body is only present in prod and dev environments"
+      [url success-handler error-handler])


Added Log level mapping

Added Log level mapping

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/ChallenHB/samsara.git/'


Add clojush.instructions.environment

Add clojush.instructions.environment

error: pathspec 'src/clojush/instructions/environment.clj' did not match any file(s) known to git

--- src/clojush/instructions/environment.clj
+++ src/clojush/instructions/environment.clj
@@ -0,0 +1,123 @@
+(ns clojush.instructions.environment
+  (:use [clojush pushstate util]))
+
+(define-registered
+  environment_new
+  ^{:stack-types [:environment]
+    :parentheses 1}
+  ;; Creates new environment using the top item on the exec stack
+  (fn [state]
+    (if (empty? (:exec state))
+      state
+      (let [new-exec (top-item :exec state)
+            parent-env (pop-item :exec state)]
+        (push-item new-exec
+                   :exec
+                   (assoc (assoc (push-item parent-env :environment state)
+                                 :return '())
+                          :exec '()))))))
+
+(define-registered
+  environment_begin
+  ^{:stack-types [:environment]}
+  ;; Creates new environment using the entire exec stack
+  (fn [state]
+    (assoc (push-item (assoc state :exec '())
+                      :environment state)
+           :return '())))
+
+(define-registered
+  environment_end
+  ^{:stack-types [:environment]}
+  ;; Ends current environment
+  (fn [state]
+    (if (empty? (:environment state))
+      state
+      (end-environment state))))
+
+(defn returner
+  "Returns a function that takes a state and moves the top literal
+   from the appropriate stack to the return stack."
+  [type]
+  (fn [state]
+    (if (empty? (type state))
+      state
+      (let [item (top-item type state)]
+        (push-item {:type type :item item} :return (pop-item type state))))))
+
+(define-registered return_fromexec (with-meta (returner :exec) {:stack-types [:environment :exec] :parentheses 1}))
+(define-registered return_fromcode (with-meta (returner :code) {:stack-types [:environment :code]}))
+(define-registered return_frominteger (with-meta (returner :integer) {:stack-types [:environment :integer]}))
+(define-registered return_fromfloat (with-meta (returner :float) {:stack-types [:environment :float]}))
+(define-registered return_fromboolean (with-meta (returner :boolean) {:stack-types [:environment :boolean]}))
+(define-registered return_fromzip (with-meta (returner :zip) {:stack-types [:environment :zip]}))
+(define-registered return_fromstring (with-meta (returner :string) {:stack-types [:environment :string]}))
+(define-registered return_fromchar (with-meta (returner :char) {:stack-types [:environment :char]}))
+(define-registered return_fromgenome (with-meta (returner :genome) {:stack-types [:environment :genome]}))
+
+(define-registered
+  return_exec_pop
+  ^{:stack-types [:environment :exec]}
+  (fn [state]
+    (assoc state :return (list-concat (list {:type :exec :popper true}) (:return state)))))
+
+(define-registered
+  return_code_pop
+  ^{:stack-types [:environment :code]}
+  (fn [state]
+    (assoc state :return (list-concat (list {:type :code :popper true}) (:return state)))))
+
+(define-registered
+  return_integer_pop
+  ^{:stack-types [:environment :integer]}
+  (fn [state]
+    (assoc state :return (list-concat (list {:type :integer :popper true}) (:return state)))))
+
+(define-registered
+  return_float_pop
+  ^{:stack-types [:environment :float]}
+  (fn [state]
+    (assoc state :return (list-concat (list {:type :float :popper true}) (:return state)))))
+
+(define-registered
+  return_boolean_pop
+  ^{:stack-types [:environment :boolean]}
+  (fn [state]
+    (assoc state :return (list-concat (list {:type :boolean :popper true}) (:return state)))))
+
+(define-registered
+  return_zip_pop
+  ^{:stack-types [:environment :zip]}
+  (fn [state]
+    (assoc state :return (list-concat (list {:type :zip :popper true}) (:return state)))))
+
+(define-registered
+  return_string_pop
+  ^{:stack-types [:environment :string]}
+  (fn [state]
+    (assoc state :return (list-concat (list {:type :string :popper true}) (:return state)))))
+
+(define-registered
+  return_char_pop
+  ^{:stack-types [:environment :char]}
+  (fn [state]
+    (assoc state :return (list-concat (list {:type :char :popper true}) (:return state)))))
+
+(define-registered
+  return_genome_pop
+  ^{:stack-types [:environment :genome]}
+  (fn [state]
+    (assoc state :return (list-concat (list {:type :genome :popper true}) (:return state)))))
+
+; Immediately copies the current tagspace to the environment on the top
+; of the :environment stack.
+(define-registered
+  return_tagspace
+  ^{:stack-types [:environment]}
+  (fn [state]
+    (if (empty? (:environment state))
+      state
+      (let [top-env (top-item :environment state)
+            new-env (assoc top-env :tag (:tag state))]
+        (push-item new-env :environment (pop-item :environment state))))))
+