Moved Rich Hickey's ant simulation to here from elsewhere.

error: pathspec 'src/com/nomistech/clojure_the_language/ants_by_rich_hickey.clj' did not match any file(s) known to git

--- src/com/nomistech/clojure_the_language/ants_by_rich_hickey.clj
+++ src/com/nomistech/clojure_the_language/ants_by_rich_hickey.clj
@@ -0,0 +1,313 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ant sim ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;; Copyright (c) Rich Hickey. All rights reserved.
+;;;; The use and distribution terms for this software are covered by the
+;;;; Common Public License 1.0 (http://opensource.org/licenses/cpl.php)
+;;;; which can be found in the file CPL.TXT at the root of this distribution.
+;;;; By using this software in any fashion, you are agreeing to be bound by
+;;;; the terms of this license.
+;;;; You must not remove this notice, or any other, from this software.
+
+(ns com.nomistech.clojure-the-language.ants-by-rich-hickey)
+
+(def dim         "Dimensions of square world."          80)
+(def nants-sqrt  "Number of ants = nants-sqrt^2."        7)
+(def food-places "Number of places with food."          35)
+(def food-range  "Range of amount of food at a place." 100)
+(def pher-scale  "Scale factor for pheromone drawing."  20.0)
+(def food-scale  "Scale factor for food drawing."       30.0)
+(def evap-rate   "Evaporation rate."                     0.99)
+
+(def animation-sleep-ms 100)
+(def ant-sleep-ms 40)
+(def evap-sleep-ms 1000)
+
+(def running true)
+
+(defstruct cell :food :pher) ;may also have :ant and :home
+
+(def world
+  "A 2d vector of refs to cells."
+  (apply vector
+         (map (fn [_]
+                (apply vector (map (fn [_] (ref (struct cell 0 0)))
+                                   (range dim))))
+              (range dim))))
+
+(defn place [[x y]]
+  (-> world (nth x) (nth y)))
+
+(defstruct ant :dir) ;may also have :food
+
+(defn create-ant
+  "create an ant at the location, returning an ant agent on the location"
+  [loc dir]
+  (sync nil
+        (let [p (place loc)
+              a (struct ant dir)]
+          (alter p assoc :ant a)
+          (agent loc))))
+
+(def home-off (/ dim 4))
+(def home-range (range home-off (+ nants-sqrt home-off)))
+
+(defn setup
+  "places initial food and ants, returns seq of ant agents"
+  []
+  (sync nil
+        (dotimes [i food-places]
+          (let [p (place [(rand-int dim) (rand-int dim)])]
+            (alter p assoc :food (rand-int food-range))))
+        (doall
+         (for [x home-range y home-range]
+           (do
+             (alter (place [x y])
+                    assoc :home true)
+             (create-ant [x y] (rand-int 8)))))))
+
+(defn bound
+  "returns n wrapped into range 0-b"
+  [b n]
+  (let [n (rem n b)]
+    (if (neg? n)
+      (+ n b)
+      n)))
+
+(defn wrand
+  "given a vector of slice sizes, returns the index of a slice given a
+  random spin of a roulette wheel with compartments proportional to
+  slices."
+  [slices]
+  (let [total (reduce + slices)
+        r (rand total)]
+    (loop [i 0 sum 0]
+      (if (< r (+ (slices i) sum))
+        i
+        (recur (inc i) (+ (slices i) sum))))))
+
+;dirs are 0-7, starting at north and going clockwise
+;these are the deltas in order to move one step in given dir
+(def dir-delta {0 [0 -1]
+                1 [1 -1]
+                2 [1 0]
+                3 [1 1]
+                4 [0 1]
+                5 [-1 1]
+                6 [-1 0]
+                7 [-1 -1]})
+
+(defn delta-loc
+  "returns the location one step in the given dir. Note the world is a torus"
+  [[x y] dir]
+  (let [[dx dy] (dir-delta (bound 8 dir))]
+    [(bound dim (+ x dx)) (bound dim (+ y dy))]))
+
+;(defmacro dosync [& body]
+;  `(sync nil ~@body))
+
+;ant agent functions
+;an ant agent tracks the location of an ant, and controls the behavior of
+;the ant at that location
+
+(defn turn
+  "turns the ant at the location by the given amount"
+  [loc amt]
+  (dosync
+   (let [p (place loc)
+         ant (:ant @p)]
+     (alter p assoc :ant (assoc ant :dir (bound 8 (+ (:dir ant) amt))))))
+  loc)
+
+(defn move
+  "moves the ant in the direction it is heading. Must be called in a
+  transaction that has verified the way is clear"
+  [loc]
+  (let [oldp (place loc)
+        ant (:ant @oldp)
+        newloc (delta-loc loc (:dir ant))
+        p (place newloc)]
+    ;; move the ant
+    (alter p assoc :ant ant)
+    (alter oldp dissoc :ant)
+    ;; leave pheromone trail
+    (when-not (:home @oldp)
+      (alter oldp assoc :pher (inc (:pher @oldp))))
+    newloc))
+
+(defn take-food [loc]
+  "Takes one food from current location. Must be called in a
+  transaction that has verified there is food available"
+  (let [p (place loc)
+        ant (:ant @p)]
+    (alter p assoc
+           :food (dec (:food @p))
+           :ant (assoc ant :food true))
+    loc))
+
+(defn drop-food [loc]
+  "Drops food at current location. Must be called in a
+  transaction that has verified the ant has food"
+  (let [p (place loc)
+        ant (:ant @p)]
+    (alter p assoc
+           :food (inc (:food @p))
+           :ant (dissoc ant :food))
+    loc))
+
+(defn rank-by
+  "returns a map of xs to their 1-based rank when sorted by keyfn"
+  [keyfn xs]
+  (let [sorted (sort-by (comp float keyfn) xs)]
+    (reduce (fn [ret i] (assoc ret (nth sorted i) (inc i)))
+            {} (range (count sorted)))))
+
+(defn behave
+  "the main function for the ant agent"
+  [loc]
+  (let [p (place loc)
+        ant (:ant @p)
+        ahead (place (delta-loc loc (:dir ant)))
+        ahead-left (place (delta-loc loc (dec (:dir ant))))
+        ahead-right (place (delta-loc loc (inc (:dir ant))))
+        places [ahead ahead-left ahead-right]]
+    (. Thread (sleep ant-sleep-ms))
+    (dosync
+     (when running
+       (send-off *agent* #'behave))
+     (if (:food ant)
+       ;; going home
+       (cond
+        (:home @p)
+        (-> loc drop-food (turn 4))
+        (and (:home @ahead) (not (:ant @ahead)))
+        (move loc)
+        :else
+        (let [ranks (merge-with +
+                                (rank-by (comp #(if (:home %) 1 0) deref) places)
+                                (rank-by (comp :pher deref) places))]
+          (([move #(turn % -1) #(turn % 1)]
+              (wrand [(if (:ant @ahead) 0 (ranks ahead))
+                      (ranks ahead-left) (ranks ahead-right)]))
+           loc)))
+       ;; foraging
+       (cond
+        (and (pos? (:food @p)) (not (:home @p)))
+        (-> loc take-food (turn 4))
+        (and (pos? (:food @ahead)) (not (:home @ahead)) (not (:ant @ahead)))
+        (move loc)
+        :else
+        (let [ranks (merge-with +
+                                (rank-by (comp :food deref) places)
+                                (rank-by (comp :pher deref) places))]
+          (([move #(turn % -1) #(turn % 1)]
+              (wrand [(if (:ant @ahead) 0 (ranks ahead))
+                      (ranks ahead-left) (ranks ahead-right)]))
+           loc)))))))
+
+(defn evaporate
+  "causes all the pheromones to evaporate a bit"
+  []
+  (dorun
+   (for [x (range dim) y (range dim)]
+     (dosync
+      (let [p (place [x y])]
+        (alter p assoc :pher (* evap-rate (:pher @p))))))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; UI ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(import
+ '(java.awt Color Graphics Dimension)
+ '(java.awt.image BufferedImage)
+ '(javax.swing JPanel JFrame))
+
+;pixels per world cell
+(def scale 5)
+
+(defn fill-cell [#^Graphics g x y c]
+  (doto g
+    (.setColor c)
+    (.fillRect (* x scale) (* y scale) scale scale)))
+
+(defn render-ant [ant #^Graphics g x y]
+  (let [black (. (new Color 0 0 0 255) (getRGB))
+        gray (. (new Color 100 100 100 255) (getRGB))
+        red (. (new Color 255 0 0 255) (getRGB))
+        [hx hy tx ty] ({0 [2 0 2 4]
+                        1 [4 0 0 4]
+                        2 [4 2 0 2]
+                        3 [4 4 0 0]
+                        4 [2 4 2 0]
+                        5 [0 4 4 0]
+                        6 [0 2 4 2]
+                        7 [0 0 4 4]}
+                       (:dir ant))]
+    (doto g
+      (.setColor (if (:food ant)
+                   (new Color 255 0 0 255)
+                   (new Color 0 0 0 255)))
+      (.drawLine (+ hx (* x scale)) (+ hy (* y scale))
+                 (+ tx (* x scale)) (+ ty (* y scale))))))
+
+(defn render-place [g p x y]
+  (when (pos? (:pher p))
+    (fill-cell g x y (new Color 0 255 0
+                          (int (min 255 (* 255 (/ (:pher p) pher-scale)))))))
+  (when (pos? (:food p))
+    (fill-cell g x y (new Color 255 0 0
+                          (int (min 255 (* 255 (/ (:food p) food-scale)))))))
+  (when (:ant p)
+    (render-ant (:ant p) g x y)))
+
+(defn render [g]
+  (let [v (dosync (apply vector (for [x (range dim) y (range dim)]
+                                  @(place [x y]))))
+        img (new BufferedImage (* scale dim) (* scale dim)
+                 (. BufferedImage TYPE_INT_ARGB))
+        bg (. img (getGraphics))]
+    (doto bg
+      (.setColor (. Color white))
+      (.fillRect 0 0 (. img (getWidth)) (. img (getHeight))))
+    (dorun
+     (for [x (range dim) y (range dim)]
+       (render-place bg (v (+ (* x dim) y)) x y)))
+    (doto bg
+      (.setColor (. Color blue))
+      (.drawRect (* scale home-off) (* scale home-off)
+                 (* scale nants-sqrt) (* scale nants-sqrt)))
+    (. g (drawImage img 0 0 nil))
+    (. bg (dispose))))
+
+(def panel (doto (proxy [JPanel] []
+                   (paint [g] (render g)))
+             (.setPreferredSize (new Dimension
+                                     (* scale dim)
+                                     (* scale dim)))))
+
+(def frame (doto (new JFrame) (.add panel) .pack .show))
+
+(def animator (agent nil))
+
+(defn animation [x]
+  (when running
+    (send-off *agent* #'animation))
+  (. panel (repaint))
+  (. Thread (sleep animation-sleep-ms))
+  nil)
+
+(def evaporator (agent nil))
+
+(defn evaporation [x]
+  (when running
+    (send-off *agent* #'evaporation))
+  (evaporate)
+  (. Thread (sleep evap-sleep-ms))
+  nil)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; use ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(comment
+  ;; demo
+  ;; (load-file "/Users/rich/dev/clojure/ants.clj")
+  (do
+    (def ants (setup))
+    (send-off animator animation)
+    (dorun (map #(send-off % behave) ants))
+    (send-off evaporator evaporation)))
+


added note to database/get-info-user: might not work under windows

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/'


extend generation of regex

extend generation of regex

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/'


compilation side pixelfont image recognition systems

error: pathspec 'src/cljs/infinitelives/pixi/pixelfont.clj' did not match any file(s) known to git

--- src/cljs/infinitelives/pixi/pixelfont.clj
+++ src/cljs/infinitelives/pixi/pixelfont.clj
@@ -0,0 +1,50 @@
+(ns infinitelives.pixi.pixelfont
+  (:require [clojure.java.io :as io])
+  (:import [javax.imageio ImageIO]))
+
+(defn horizontal-strip [y x1 x2]
+  (for [x (range x1 x2)] [x y]))
+
+(defn vertical-strip [x y1 y2]
+  (for [y (range y1 y2)] [x y]))
+
+(defn alpha-at [image [x y]]
+  (-> image
+      (.getRGB x y)
+      (bit-shift-right 24)
+      (bit-and 0xff)))
+
+(defn alphas [image xy-seq]
+  (map (partial alpha-at image) xy-seq))
+
+(defn image-set-all-transparent? [image xy-seq]
+  (not (some (comp not zero?) (alphas image xy-seq))))
+
+(defn transparent-hlines [image x1 x2 y1 y2]
+  (for [y (range y1 y2)]
+    (image-set-all-transparent?
+     image (horizontal-strip y x1 x2))))
+
+(defn transparent-vlines [image x1 x2 y1 y2]
+  (for [x (range x1 x2)]
+    (image-set-all-transparent?
+     image (vertical-strip x y1 y2))))
+
+;; (defn -main
+;;   "I don't do a whole lot ... yet."
+;;   [& args]
+;;   (println "Hello, World!"))
+
+(comment
+  (def a (-> "test.png"
+             io/file
+             ImageIO/read
+             (transparent-hlines 0 200 0 200)
+             (->> (map-indexed vector)
+                  (partition-by second)
+                  (map count))
+
+             ))
+
+
+  (for [n (range (count a))] (apply + (take (inc n) a))))


[WM] fix voting-method-pref read data structure

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-works.git/'


generator calls semantic differ for changed

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/Zallin/fhirvc.git/'


convert comments in main method into console output first step: paragraph headlines


DB-ify in the API too.

DB-ify in the API too.

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/'


home redirect failing on herokul; try alternate home route


added support for native library packaging

--- src/leiningen/droid/sdk.clj
+++ src/leiningen/droid/sdk.clj
@@ -1,5 +1,6 @@
 (ns leiningen.droid.sdk
   "Convenient function to interact with utilities in Android SDK."
+  (:use [leiningen.core.main :only [debug]])
   (:require [cemerick.pomegranate :as pomegranate]
             [clojure.java.io :as io])
   (:import java.io.File java.io.PrintStream))
@@ -16,7 +17,7 @@

 (defn create-apk
   "Delegates APK creation to ApkBuilder class in sdklib.jar."
-  [{{:keys [sdk-path out-res-pkg-path out-dex-path]}
+  [{{:keys [sdk-path out-res-pkg-path out-dex-path native-libraries-paths]}
     :android} & {:keys [apk-name resource-jars]}]
   ;; Dynamically load sdklib.jar
   (pomegranate/add-classpath (io/file sdk-path "tools" "lib" "sdklib.jar"))
@@ -24,4 +25,8 @@
         apkbuilder (make-apk-builder apk-name out-res-pkg-path out-dex-path)]
     (doseq [rj resource-jars]
       (.addResourcesFromJar apkbuilder rj))
+    (when-not (empty? native-libraries-paths)
+      (debug "Adding native libraries:" native-libraries-paths))
+    (doseq [lib native-libraries-paths]
+      (.addNativeLibraries apkbuilder ^File (io/file lib)))
     (.sealApk apkbuilder)))


Added specs to ensure we can operate on policies at the role and circle level.

--- spec/freefrog/governance_circles_spec.clj
+++ spec/freefrog/governance_circles_spec.clj
@@ -181,6 +181,8 @@
 (def domain "domain")
 (def accountability "acc")
 (def alternate-circle-name "something else")
+(def policy "Policy1")
+(def policy-text "Policy1 Text")

 (def circle-with-subcircle-with-domain
   (g/add-role-domain circle-with-subcircle subcircle-name domain))
@@ -188,6 +190,9 @@
 (def circle-with-subcircle-with-acc
   (g/add-role-accountability circle-with-subcircle subcircle-name
                              accountability))
+
+(def circle-with-subcircle-with-policy
+  (g/add-role-policy circle-with-subcircle subcircle-name policy policy-text))

 (describe "using role operations on a circle is OK"
   (it "can change the purpose of a circle"
@@ -210,6 +215,24 @@
                         assoc :accountabilities #{accountability})
       circle-with-subcircle-with-acc))

+  (it "can add a policy to a circle"
+    (should= (update-in circle-with-subcircle [:roles subcircle-name]
+                        assoc :policies {policy {:name policy
+                                                 :text policy-text}})
+      circle-with-subcircle-with-policy)
+    (should= (update-in circle-with-subcircle-with-domain
+                        [:roles subcircle-name]
+                        assoc :policies {policy {:name policy
+                                                 :text policy-text
+                                                 :domain domain}})
+      (g/add-role-policy circle-with-subcircle-with-domain subcircle-name policy
+                         policy-text domain)))
+
+  (it "can remove a policy from a circle"
+    (should= circle-with-subcircle
+      (g/remove-role-policy circle-with-subcircle-with-policy subcircle-name
+                            policy)))
+
   (it "can remove an accountability from a circle"
     (should= circle-with-subcircle
       (g/remove-role-accountability circle-with-subcircle-with-acc


Add copy of cljs.repl.nashorn r.1.0.439

Add copy of cljs.repl.nashorn r.1.0.439

https://raw.githubusercontent.com/clojure/clojurescript/r1.10.439/src/main/clojure/cljs/repl/nashorn.clj

error: pathspec 'src/test/resources/clojure/data/xml/cljs_repl_nashorn.clj' did not match any file(s) known to git

--- src/test/resources/clojure/data/xml/cljs_repl_nashorn.clj
+++ src/test/resources/clojure/data/xml/cljs_repl_nashorn.clj
@@ -0,0 +1,193 @@
+;; Copyright (c) Rich Hickey. All rights reserved.
+;; The use and distribution terms for this software are covered by the
+;; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
+;; which can be found in the file epl-v10.html at the root of this distribution.
+;; By using this software in any fashion, you are agreeing to be bound by
+;; the terms of this license.
+;; You must not remove this notice, or any other, from this software.
+
+(ns cljs.repl.nashorn
+  (:require [clojure.java.io :as io]
+            [clojure.string :as string]
+            [clojure.stacktrace]
+            [clojure.data.json :as json]
+            [cljs.analyzer :as ana]
+            [cljs.env :as env]
+            [cljs.util :as util]
+            [cljs.repl :as repl]
+            [cljs.cli :as cli]
+            [cljs.compiler :as comp]
+            [cljs.closure :as closure]
+            [cljs.stacktrace :as st])
+  (:import [javax.script ScriptEngine ScriptEngineManager ScriptException ScriptEngineFactory]))
+
+(util/compile-if (Class/forName "jdk.nashorn.api.scripting.NashornException")
+  (do
+    (import 'jdk.nashorn.api.scripting.NashornException)
+    ;; Implementation
+
+    (defn create-engine
+      ([] (create-engine nil))
+      ([{:keys [code-cache] :or {code-cache true}}]
+       (let [args (when code-cache ["-pcc"])
+             factories (.getEngineFactories (ScriptEngineManager.))
+             factory (get (zipmap (map #(.getEngineName %) factories) factories) "Oracle Nashorn")]
+         (if-let [engine (if-not (empty? args)
+                           (.getScriptEngine ^ScriptEngineFactory factory (into-array args))
+                           (.getScriptEngine ^ScriptEngineFactory factory))]
+           (let [context (.getContext engine)]
+             (.setWriter context *out*)
+             (.setErrorWriter context *err*)
+             engine)
+           (throw (IllegalArgumentException.
+                    "Cannot find the Nashorn script engine, use a JDK version 8 or higher."))))))
+
+    (defn eval-str [^ScriptEngine engine ^String s]
+      (.eval engine s))
+
+    (defn eval-resource
+      "Evaluate a file on the classpath in the engine."
+      [engine path debug]
+      (let [r (io/resource path)]
+        (eval-str engine (slurp r))
+        (when debug (println "loaded: " path))))
+
+    (defn init-engine [engine {:keys [output-dir] :as opts} debug]
+      (eval-str engine (format "var CLJS_DEBUG = %s;" (boolean debug)))
+      (eval-str engine (format "var CLJS_OUTPUT_DIR = \"%s\";" output-dir))
+      (eval-resource engine "goog/base.js" debug)
+      (eval-resource engine "goog/deps.js" debug)
+      (eval-resource engine "cljs/bootstrap_nashorn.js" debug)
+      (eval-str engine
+        (format "goog.global.CLOSURE_UNCOMPILED_DEFINES = %s;"
+          (json/write-str (:closure-defines opts))))
+      engine)
+
+    (defn tear-down-engine [engine]
+      (eval-str engine "nashorn_tear_down();"))
+
+    (defn load-js-file [engine file]
+      (eval-str engine (format "nashorn_load(\"%s\");" file)))
+
+    ;; Create a minimal build of Clojurescript from the core library.
+    ;; Copied from clj.cljs.repl.node.
+    (defn bootstrap-repl [engine output-dir opts]
+      (env/ensure
+        (let [deps-file ".nashorn_repl_deps.js"
+              core (io/resource "cljs/core.cljs")
+              core-js (closure/compile core
+                        (assoc opts :output-file
+                          (closure/src-file->target-file
+                            core (dissoc opts :output-dir))))
+              deps (closure/add-dependencies opts core-js)]
+          ;; output unoptimized code and the deps file
+          ;; for all compiled namespaces
+          (apply closure/output-unoptimized
+            (assoc opts :output-to (.getPath (io/file output-dir deps-file)))
+            deps)
+          ;; load the deps file so we can goog.require cljs.core etc.
+          (load-js-file engine deps-file))))
+
+    (defn load-ns [engine ns]
+      (eval-str engine
+        (format "goog.require(\"%s\");" (comp/munge (first ns)))))
+
+    ;; Nashorn script stacktraces have a relative path which includes the output-dir
+    (defn- strip-file-name [^String file-name output-dir]
+      (let [with-slash (str output-dir "/")]
+        (if (.startsWith file-name with-slash)
+          (string/replace-first file-name with-slash "")
+          file-name)))
+
+    (def repl-filename "<cljs repl>")
+
+    (defrecord NashornEnv [engine debug]
+      repl/IReplEnvOptions
+      (-repl-options [this]
+        {:output-dir ".cljs_nashorn_repl"
+         :target :nashorn})
+      repl/IJavaScriptEnv
+      (-setup [this {:keys [output-dir bootstrap output-to] :as opts}]
+        (init-engine engine opts debug)
+        (let [env (ana/empty-env)]
+          (if output-to
+            (load-js-file engine output-to)
+            (bootstrap-repl engine output-dir opts))
+          (repl/evaluate-form this env repl-filename
+            '(.require js/goog "cljs.core"))
+          ;; monkey-patch goog.isProvided_ to suppress useless errors
+          (repl/evaluate-form this env repl-filename
+            '(set! js/goog.isProvided_ (fn [ns] false)))
+          ;; monkey-patch goog.require to be more sensible
+          (repl/evaluate-form this env repl-filename
+            '(do
+               (set! *loaded-libs* #{"cljs.core"})
+               (set! (.-require js/goog)
+                 (fn [name reload]
+                   (when (or (not (contains? *loaded-libs* name)) reload)
+                     (set! *loaded-libs* (conj (or *loaded-libs* #{}) name))
+                     (js/CLOSURE_IMPORT_SCRIPT
+                       (if (some? goog/debugLoader_)
+                         (.getPathFromDeps_ goog/debugLoader_ name)
+                         (goog.object/get (.. js/goog -dependencies_ -nameToPath) name))))))))))
+      (-evaluate [{engine :engine :as this} filename line js]
+        (when debug (println "Evaluating: " js))
+        (try
+          {:status :success
+           :value (if-let [r (eval-str engine js)] (.toString r) "")}
+          (catch ScriptException e
+            (let [^Throwable root-cause (clojure.stacktrace/root-cause e)]
+              {:status :exception
+               :value (.getMessage root-cause)
+               :stacktrace (NashornException/getScriptStackString root-cause)}))
+          (catch Throwable e
+            (let [^Throwable root-cause (clojure.stacktrace/root-cause e)]
+              {:status :exception
+               :value (.getMessage root-cause)
+               :stacktrace
+               (apply str
+                 (interpose "\n"
+                   (map str
+                     (.getStackTrace root-cause))))}))))
+      (-load [{engine :engine :as this} ns url]
+        (load-ns engine ns))
+      (-tear-down [this]
+        (tear-down-engine engine))
+      repl/IParseStacktrace
+      (-parse-stacktrace [this frames-str ret opts]
+        (st/parse-stacktrace this frames-str
+          (assoc ret :ua-product :nashorn) opts))
+      repl/IParseError
+      (-parse-error [_ err _]
+        (update-in err [:stacktrace]
+          (fn [st]
+            (string/join "\n" (drop 1 (string/split st #"\n")))))))
+
+    (defn repl-env* [{:keys [debug] :as opts}]
+      (let [engine (create-engine opts)]
+        (merge
+          (NashornEnv. engine debug)
+          opts)))
+
+    (defn repl-env
+      "Create a Nashorn repl-env for use with the repl/repl* method in Clojurescript."
+      [& {:as opts}]
+      (repl-env* opts))
+
+    ;; -------------------------------------------------------------------------
+    ;; Command Line Support
+
+    (defn -main [& args]
+      (apply cli/main repl-env args)))
+
+  (do
+    (defn repl-env* [{:keys [debug] :as opts}]
+      (throw (ex-info "Nashorn not supported" {:type :repl-error})))
+
+    (defn repl-env
+      "Create a Nashorn repl-env for use with the repl/repl* method in Clojurescript."
+      [& {:as opts}]
+      (throw (ex-info "Nashorn not available under this Java runtime" {:type :repl-error})))
+
+    (defn -main []
+      (throw (ex-info "Nashorn not available under this Java runtime" {:type :repl-error})))))


load a jar file and read entries

load a jar file and read entries

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

--- src/app/jarloading.clj
+++ src/app/jarloading.clj
@@ -0,0 +1,28 @@
+(ns app.jarloading
+  (:use [app.javaparser])
+  (:use [app.operations])
+  (:use [app.utils])
+  (:import [app.operations Operation]))
+
+(import java.net.URLDecoder)
+(import java.util.jar.JarEntry)
+(import java.util.jar.JarFile)
+
+; An element on the classpath (a single class, interface, enum or resource file)
+(defrecord ClasspathElement [resource path contentAsStream])
+
+(def myjarpath "test-resources/sample-jars/javaparser-core-2.0.0.jar")
+
+(defn- jarEntryToClasspathElement [jarFile jarEntry]
+  (let [name (.getName jarEntry)
+        content (.getInputStream jarFile jarEntry)]
+    (ClasspathElement. jarFile name content)))
+
+(defn getElementsInJar
+  "Return a set of ClasspathElements"
+  [pathToJarFile]
+  (let [url (URLDecoder/decode pathToJarFile "UTF-8")
+        jarfile (new JarFile url)
+        entries (enumeration-seq (.entries jarfile))
+        entries' (filter (fn [e] (not (.isDirectory e))) entries )]
+    (map (partial jarEntryToClasspathElement jarfile) entries')))


Clarify function naming

Clarify function naming

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-notification-works.git/'


doc string comes before params

doc string comes before params


Do not recover topology automatically

Do not recover topology automatically

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/'


[WM] Bump ext. service timeout to 10s

[WM] Bump ext. service timeout to 10s


Add :where clause to mlet

Add :where clause to mlet

--- src/cljx/cats/core.cljx
+++ src/cljx/cats/core.cljx
@@ -50,6 +50,12 @@
   [mv mv']
   (p/mplus mv mv'))

+(defn guard
+  [b]
+  (if b
+    (return nil)
+    (mzero)))
+
 (defn fmap
   "Apply a function f to the value inside functor's fv
   preserving the context type."
@@ -89,12 +95,16 @@
     (throw (IllegalArgumentException. "bindings has to be a vector with even number of elements.")))
   (if (seq bindings)
     (let [l (get bindings 0)
-          r (get bindings 1)]
-      (if (= :let l)
-        `(let ~r (mlet ~(subvec bindings 2) ~body))
+          r (get bindings 1)
+          next-mlet `(mlet ~(subvec bindings 2) ~body)]
+      (condp = l
+        :let `(let ~r ~next-mlet)
+        :when `(bind (guard ~r)
+                     (fn [~(gensym)]
+                       ~next-mlet))
         `(bind ~r
                (fn [~l]
-                 (mlet ~(subvec bindings 2) ~body)))))
+                 ~next-mlet))))
     body))

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


Refactor: move title div into own component

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/'


0:00 => "0:00"

0:00 => "0:00"

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/jtbeckha/alda.git/'


Support custom styling

Support custom styling

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/'


Also fix blatantly false information in the docstring :-)

--- src/riemann/streams.clj
+++ src/riemann/streams.clj
@@ -1470,7 +1470,7 @@
   "Usable to perform flap detection, runs examines a moving-event-window of
   n events and determines if :field is the same across all them. If it is,
   runs passes on the last (newest) event of the window. In practice, this can be
-  used nested within a (changed-state ...) to reduce 'flappiness' for
+  used with (changed-state ...) as a child to reduce 'flappiness' for
   state changes.

   (runs 3 :state prn) ; Print events where there are 3-in-a-row of a state."


Add ccw.util.edn/read-vector for reading vectors from EDN strings

error: pathspec 'ccw.core/src/clj/ccw/util/edn.clj' did not match any file(s) known to git

--- ccw.core/src/clj/ccw/util/edn.clj
+++ ccw.core/src/clj/ccw/util/edn.clj
@@ -0,0 +1,23 @@
+(ns ccw.util.edn
+  (:require [clojure.edn :as edn]
+            [clojure.test :refer [testing is]]))
+
+(defn read-vector
+  "Reads a vector from the EDN string s. Returns an empty vector if s does not
+  contain a valid EDN vector."
+  [s]
+  (let [x (try
+            (edn/read-string s)
+            (catch Throwable _
+              nil))]
+    (if (vector? x)
+      x
+      [])))
+
+(testing "read-vector"
+  (testing "returns the vector in the input string"
+    (is (= [123 456] (read-vector "[123 456]"))))
+  (testing "returns an empty vector if input is invalid EDN"
+    (is (= [] (read-vector "[123"))))
+  (testing "returns an empty vector if input is not a vector"
+    (is (= [] (read-vector "123")))))


do not pass text filter inside vs/expand if filter is blank

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/fhirbase/fhirterm.git/'


forgot to add wordsearch.cljs

forgot to add wordsearch.cljs

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

--- src/cljs/conceal/wordsearch.cljs
+++ src/cljs/conceal/wordsearch.cljs
@@ -0,0 +1,125 @@
+;;; Copyright 2014 Mitchell Kember. Subject to the MIT License.
+
+(ns conceal.wordsearch)
+
+(defn empty-grid
+  "Creates a grid of n rows and m columns of empty cells."
+  [n m]
+  {:rows n :cols m :words [] :data (vec (repeat (* n m) :empty))})
+
+(defn rand-letter
+  "Returns a random lowercase alphabetic character."
+  []
+  (char (+ 97 (rand-int 26))))
+
+(defn empty->letter
+  "Returns x, or a random letter if x is :empty."
+  [x]
+  (if (= x :empty) (rand-letter) x))
+
+(defn fill-grid
+  "Fills the empty cells in a grid with random letters."
+  [grid]
+  (update-in grid [:data] (partial map empty->letter)))
+
+(defn nth-index
+  "Returns the index in a grid with cols columns of the nth letter in a word
+  starting from (r,c) and going in the direction of the vector (dr,dc)."
+  [n cols [r c dr dc]]
+  (+ (* cols (+ r (* n dr)))
+     (+ c (* n dc))))
+
+(defn nth-cell
+  "Returns the nth cell in the grid for a word placed with posdir. Returns nil
+  if the cell would be out of bounds."
+  [n {:keys [cols data]} posdir]
+  (get data (nth-index n cols posdir)))
+
+(defn every-indexed?
+  "Returns true if (pred i x) is logical true for every index i and item x in
+  coll, otherwise returns false."
+  [pred coll]
+  (letfn [(every-i? [idx coll]
+            (or (nil? (seq coll))
+                (and (pred idx (first coll))
+                     (recur (inc idx) (next coll)))))]
+    (every-i? 0 coll)))
+
+(defn word-fits?
+  "Returns whether it is possible to place the given word in the grid with
+  posdir. A letter can be only placed in a cell either if the cell is empty or
+  it already contains the right letter. The word is assumed to stay in bounds."
+  [grid word posdir]
+  {:pre [grid]}
+  (if posdir
+    (every-indexed?
+      (fn [i letter]
+        (let [c (nth-cell i grid posdir)]
+          (#{:empty letter} c)))
+      word)))
+
+(defn add-word
+  "Adds a word into the grid with the position and direction given by posdir.
+  Assumes the word will not go out of bounds."
+  [{:keys [cols words data] :as grid} word posdir]
+  {:pre [grid posdir]}
+  (if (empty? word)
+    grid
+    (let [word-inds (range (count word))
+          grid-inds (map #(nth-index % cols posdir) word-inds)
+          mappings (interleave grid-inds word)
+          new-data (apply assoc data mappings)
+          new-words (conj words word)]
+      (assoc grid :words new-words :data new-data))))
+
+(defn irand
+  "Returns a random int between a (defaults to zero) and b (exclusive)."
+  ([b] (rand-int b))
+  ([a b] (+ a (rand-int (- b a)))))
+
+(defn rand-pos-1d
+  "Generates a random position along a dimension of size dim for a word of
+  length wlen going in the direction dir."
+  [dim wlen dir]
+  (if (or (zero? dir) (<= wlen dim))
+    (case dir
+      0 (irand dim)
+      1 (irand (inc (- dim wlen)))
+      -1 (irand (dec wlen) dim))))
+
+(defn rand-posdir
+  "Generates a random valid position-direction vector (row, column, row-dir,
+  column-dir) for a word of length wlen on the given grid."
+  [{:keys [rows cols]} wlen]
+  (let [dr (rand-nth [-1 0 1])
+        dc (rand-nth (if (zero? dr) [-1 1] [-1 0 1]))
+        r (rand-pos-1d rows wlen dr)
+        c (rand-pos-1d cols wlen dc)]
+    (if (and r c)
+      [r c dr dc])))
+
+(defn try-placing-word
+  "Attempts to randomly place the word. If successful, returns the new grid. If
+  still unsuccessful after give-up tries, returns the original grid."
+  [grid word give-up]
+  (if (or (nil? grid) (zero? give-up))
+    grid
+    (let [posdir (rand-posdir grid (count word))]
+      (if (word-fits? grid word posdir)
+        (add-word grid word posdir)
+        (recur grid word (dec give-up))))))
+
+(defn make-wordsearch
+  "Generates a word search grid with n rows and m columns. Attempts to place
+  each word in the word search, but gives up after give-up tries."
+  [n m give-up words]
+  (let [place (fn [g w] (try-placing-word g w give-up))
+        grid (reduce place (empty-grid n m) words)]
+    (fill-grid grid)))
+
+(defn grid->dom
+  "Converts a grid into a dommy-compatible data structure representing a table."
+  [{:keys [cols data]}]
+  (letfn [(make-row [r] (into [:tr] (map make-cell r)))
+          (make-cell [c] [:td (str c)])]
+    (into [:table] (map make-row (partition cols data)))))


improved unit test. it had false positives before.

--- test/clj/backtype/storm/integration_test.clj
+++ test/clj/backtype/storm/integration_test.clj
@@ -292,31 +292,30 @@
    (nextTuple [])))

 (deftest test-submit-inactive-topology
-  (with-tracked-cluster [cluster]
-    (let [[feeder checker] (ack-tracking-feeder ["num"])
-          tracked (mk-tracked-topology
-                   cluster
-                   (topology
-                    {"1" (spout-spec feeder)
-                     "2" (spout-spec open-tracked-spout)}
-                    {"3" (bolt-spec {"1" :shuffle} prepare-tracked-bolt)}))]
+  (with-simulated-time-local-cluster [cluster :daemon-conf {TOPOLOGY-ENABLE-MESSAGE-TIMEOUTS true}]
+    (let [feeder (feeder-spout ["field1"])
+          tracker (AckFailMapTracker.)
+          _ (.setAckFailDelegate feeder tracker)
+          topology (thrift/mk-topology
+                    {"1" (thrift/mk-spout-spec feeder)
+                     "2" (thrift/mk-spout-spec open-tracked-spout)}
+                    {"3" (thrift/mk-bolt-spec {"1" :global} prepare-tracked-bolt)})]
       (reset! bolt-prepared? false)
-      (reset! spout-opened? false)
+      (reset! spout-opened? false)

       (submit-local-topology-with-opts (:nimbus cluster)
         "test"
-        {}
-        (:topology tracked)
+        {TOPOLOGY-MESSAGE-TIMEOUT-SECS 10}
+        topology
         (SubmitOptions. TopologyInitialStatus/INACTIVE))
-      (.feed feeder [1])
-      (Thread/sleep 5000)
-      (is (= 0 (global-amt (-> tracked :cluster :backtype.storm.testing/track-id) "spout-emitted")))
+      (.feed feeder ["a"] 1)
+      (advance-cluster-time cluster 9)
       (is (not @bolt-prepared?))
-      (is (not @spout-opened?))
-
-      (.activate (:nimbus cluster) "test")
-      (tracked-wait tracked 1)
-      (checker 1)
+      (is (not @spout-opened?))
+      (.activate (:nimbus cluster) "test")
+
+      (advance-cluster-time cluster 12)
+      (assert-acked tracker 1)
       (is @bolt-prepared?)
       (is @spout-opened?))))


Stop normalizing start times so we have some splay

While it was useful for testing to see that the
reservations worked well with each other, we
don't need to encourage them to start up at a
rounded interval.

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/scheduled-message-works.git/'


Print the count of the number of UUIDs in a streaming request

Not all the UUIDs

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/voter-registration-works.git/'


Add a classpath-resource to serve files from classpath

For directories, i.e., requests with path infos that end with a /,
classpath resources will lazily try all index files specified via
the :index-files key in the optional options map.

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

--- src/yada/resources/classpath_resource.clj
+++ src/yada/resources/classpath_resource.clj
@@ -0,0 +1,48 @@
+(ns yada.resources.classpath-resource
+  (:require
+   [clojure.java.io :as io]
+   [clojure.string :as str]
+   [yada.resource :refer [resource]]
+   [yada.protocols :refer [as-resource]]))
+
+(defn new-classpath-resource
+  "Create a new classpath resource that resolves requests with
+   path info in the active classpath, relative to root-path.
+
+   Optionally takes an options map with the following keys:
+
+   * index-files - a collection of files to try if the path info
+                   ends with /
+
+   Example:
+
+      (new-classpath-resource \"public\")
+
+   would resolve index.html to public/index.html inside
+   the active classpath (e.g. of the JAR that serves the resource).
+
+   If used with bidi, the following route
+
+     [\"\" (yada (new-classpath-resource
+                \"public\" {:index-files [\"index.html\"]}))]
+
+   can be used to serve all files in public/ and fall back to
+   index.html for URL paths like / or foo/."
+  ([root-path]
+   (new-classpath-resource root-path nil))
+  ([root-path {:keys [index-files]}]
+   (resource
+    {:path-info?   true
+     :methods      {}
+     :sub-resource
+     (fn [ctx]
+       (let [path-info (-> ctx :request :path-info)
+             path      (str/replace path-info #"^/" "")
+             files     (if (= (last path-info) \/)
+                         (map #(io/file root-path path %) index-files)
+                         (list (io/file root-path path)))
+             res       (first (sequence (comp (map #(.getPath %))
+                                              (map io/resource)
+                                              (drop-while nil?))
+                                        files))]
+         (as-resource res)))})))


Add arglists metadata to resource-data multimethod

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/'


Fix tests (except api_test.clj)

Fix tests (except api_test.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/delitescere/yada.git/'


Adds wrap-with-logger

Adds wrap-with-logger

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/'


Set RabbitMQ prefetch limits on all incoming

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/'


Added macro to differentiate client and server code

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

--- src/supper/detector.clj
+++ src/supper/detector.clj
@@ -0,0 +1,11 @@
+(ns supper.detector
+  (:require [cljs.env]))
+
+(def is-node? (= :nodejs (-> @cljs.env/*compiler* :options :target)))
+
+(defmacro cs
+  "Produces client or server specific code at compile time."
+  [client server]
+  (if is-node?
+    server
+    client))


Clean up handler imports

Clean up handler imports


Gogokoa zerrendatik kendu

Gogokoa zerrendatik kendu

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/'


start on testing of routes

start on testing of routes

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

--- test/start_clojure/test/core.clj
+++ test/start_clojure/test/core.clj
@@ -0,0 +1,51 @@
+(ns start-clojure.test.core
+	(:use		[start-clojure.core]
+				[clojure.test]
+				[clj-time.core :only (now)])
+	(:require	[start-clojure.data :as data]))
+
+(defn request [resource web-app & params]
+	(web-app {:request-method :get :uri resource :params (first params)}))
+
+(deftest routes
+	(is (= 200 (:status (request "/post/" main-routes)))))
+
+
+(comment XXX remove all this garbage
+; test (make-post), (get-posts 1 0), and (get-post id)
+(deftest post
+	(let [content (str "some content " (now))]
+		(data/make-post "text" content)
+		(let [result (data/get-posts 1 0)]
+			(is (= 1 (count result)))
+			(is (= content (get (first result) :content)))
+	  		(let [single-result (data/get-post (get (first result) :id))]
+		 		(is (= (get (first result) :content)
+						(get single-result :content))))))
+	(comment sqlite doesn't sort sub-1s, so this'll clean up for the next test)
+	(. Thread (sleep 1001)))
+
+; test getting many posts, and posts over an interval
+(deftest interval-post
+	(let [content1 (str "first content " (now))
+			content2 (str "second content " (now))
+			content3 (str "third content " (now))
+			content4 (str "fourth content " (now))]
+		(. Thread (sleep 1001))
+		(data/make-post "title" content1)
+		(. Thread (sleep 1001))
+		(data/make-post "title" content2)
+		(. Thread (sleep 1001))
+		(data/make-post "title" content3)
+		(let [result (data/get-posts 1 0)]
+			(is (= 1 (count result)))
+			(is (= content3 (get (first result) :content))))
+		(let [result (data/get-posts 1 1)]
+			(is (= 1 (count result)))
+			(is (= content2 (get (first result) :content))))
+		(let [result (data/get-posts 2 1)]
+			(is (= 2 (count result)))
+			(is (= content2 (get (first result) :content)))
+			(is (= content1 (get (second result) :content)))))
+	(. Thread (sleep 1001)))
+)


Handling empty and case when first item in list is another 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/michaelsbradleyjr/shen.clj.git/'


remove onboarding only services when fetching catalogs and services

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/'


break apart finger draw

break apart finger draw

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/gltut.git/'


hello world @my hand~

hello world @my hand~

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/carolove/clojure-ring-app.git/'


verify controller does not post

verify controller does not post

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/'


Add some initial tests.

Add some initial tests.

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

--- test/frmr/dstt_test.clj
+++ test/frmr/dstt_test.clj
@@ -0,0 +1,36 @@
+(ns frmr.dstt-test
+  (:require [clojure.test :refer :all]
+            [frmr.dstt]
+            [clj-http.client :as client]))
+
+(def average #'frmr.dstt/average)
+(def issue-timed-request #'frmr.dstt/issue-timed-request)
+(def parse-header #'frmr.dstt/parse-header)
+(def select-function-for-http-method #'frmr.dstt/select-function-for-http-method)
+(def parse-body #'frmr.dstt/parse-body)
+
+(deftest average-averages-correctly
+  (is (= 2 (average [2 2 2])))
+  (is (= 15 (average [5 10 30]))))
+
+(deftest issue-timed-request-passes-body-to-handler
+  (let [last-handler-string (atom "")
+        test-request-invoker (fn [] {:status 200 :body "Bacon123"})
+        test-handler (fn [_ body] (reset! last-handler-string body))
+        future (issue-timed-request test-request-invoker 0 test-handler)
+        _ @future]
+    (is (= @last-handler-string "Bacon123") "Handler receives body content.")))
+
+(deftest parse-header-parses-http-headers
+  (let [expected-header {"User-Agent" "Barney Stinson"}
+        input "User-Agent: Barney Stinson"]
+    (is (= expected-header (parse-header input)))))
+
+(deftest select-function-for-http-method-makes-correct-selections
+  (is (= client/get (select-function-for-http-method "GET")))
+  (is (= client/post (select-function-for-http-method "POST")))
+  (is (= client/get (select-function-for-http-method "PATCH")))
+  (is (= client/get (select-function-for-http-method "wroifjwofij"))))
+
+(deftest parse-body-returns-map
+  (is (= {:body "bacon"} (parse-body "bacon"))))


Test fix

Test fix

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-notification-works.git/'


Add a temp FS test. A little cursory, but works and Is There at All

error: pathspec 'test/doctopus/storage/impls/temp_fs_test.clj' did not match any file(s) known to git

--- test/doctopus/storage/impls/temp_fs_test.clj
+++ test/doctopus/storage/impls/temp_fs_test.clj
@@ -0,0 +1,29 @@
+(ns doctopus.storage.impls.temp-fs-test
+  (:require [clojure.set :as set]
+            [clojure.test :refer :all]
+            [doctopus.files :as files]
+            [doctopus.storage.impls.temp-fs :refer :all]
+            [doctopus.test-utilities :as utils]
+            [me.raynes.fs :as fs]))
+
+
+(def test-pairs (files/read-html "resources/test/html"))
+(def test-key (str (utils/make-today) "-doctopus-testing"))
+
+(defn- thing-count
+  "Brute-force counts the files in a dir"
+  [dir]
+  (count (apply set/union (map #(nth % 2) (fs/walk vector dir)))))
+
+(deftest temp-fs-test
+  (let [initial-count (thing-count (fs/file "resources/test/html"))]
+    (testing "Can we save to the permanent filesystem?"
+      (save-fn test-key test-pairs)
+      (print initial-count)
+      (binding [fs/*cwd* @temp-dir]
+        (is (= initial-count (thing-count (fs/file test-key))))))
+    (testing "Can we load from the permanent filesystem?"
+      (is (= initial-count (count (load-fn test-key)))))
+    (testing "Can we remove from the permanent filesystem?"
+      (remove-fn test-key)
+      (is (false? (fs/exists? (fs/file test-key)))))))


06-candy-factory: A straightforward Clojure solution.

error: pathspec '06-candy-factory/tf-06.clj' did not match any file(s) known to git

--- 06-candy-factory/tf-06.clj
+++ 06-candy-factory/tf-06.clj
@@ -0,0 +1,46 @@
+":";exec java -cp "$HOME/.m2/repository/org/clojure/clojure/1.5.1/clojure-1.5.1.jar" clojure.main $0 $*
+
+; Sort of a hack; Clojure isn't really intended as a scripting language. :-/
+
+(require '[clojure.string :refer [split]]
+         '[clojure.java.io :refer [reader]]
+         '[clojure.pprint :refer [pprint]])
+
+(defn stopwords
+  "Reads a set of comma-separated stopwords from the given filename."
+  [file]
+  (-> file
+      slurp
+      (split #"\s+,\s+")
+      set))
+
+(defn words
+  "Splits a string into a sequence of words."
+  [string]
+  (clojure.string/split string #"[^a-zA-Z]+"))
+
+(defn normalize
+  "Normalizes split words to terms."
+  [word]
+  (.toLowerCase word))
+
+(defn too-short?
+  "Is a word too short for consideration?"
+  [word]
+  (<= (.length word) 2))
+
+; Lazily split the file into lines, explode lines into words, normalize into
+; terms, reject unsuitable candidates, compute frequencies, and take the top
+; 25.
+(with-open [f (reader "../pride-and-prejudice.txt")]
+  (->> f
+       line-seq
+       (mapcat words)
+       (map normalize)
+       (remove too-short?)
+       (remove (stopwords "../stop_words.txt"))
+       frequencies
+       (sort-by second)
+       reverse
+       (take 25)
+       pprint))


Implement test case for failing to create a role.

--- spec/freefrog/rest_spec.clj
+++ spec/freefrog/rest_spec.clj
@@ -173,8 +173,14 @@
             (xit "should return the location of the updated resource")))

         (context "with creating a role"
+            (with create-role-response (http-post-request
+                                         "/"
+                                         (json/generate-string
+                                           {:command "addRole",
+                                            :params {:foo "Test Circle!"}})))
           (context "with invalid parameters"
-            (xit "should return an error code"))
+            (it "should return a failure"
+              (should= 400 (:status @create-role-response))))

           (context "with valid parameters"
             (with create-role-response (http-post-request


Handle JWTs with missing information

Handle JWTs with missing information

These should return the same response as an invalid JWT (403)

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/turbovote-http-api.git/'


Allow integer or string ids

Allow integer or string ids


Formularioa osatu

Formularioa osatu


Azala base64 moduan bidali

Azala base64 moduan bidali


Create layouts.html ns.

Create layouts.html ns.

Defines macros and functions for more easily creating html rendering layouts.

error: pathspec 'src/incise/layouts/html.clj' did not match any file(s) known to git

--- src/incise/layouts/html.clj
+++ src/incise/layouts/html.clj
@@ -0,0 +1,63 @@
+(ns incise.layouts.html
+  (:require [incise.parsers.core]
+            [robert.hooke :refer [with-scope add-hook]]
+            (hiccup [core :refer [html]]
+                    [page :refer [html5]])))
+
+(declare ^:dynamic *site-options*)
+(declare ^:dynamic *parse*)
+
+(defmacro deflayout
+  "This is a helper macro for defining html layout functions. An html layout
+   function at its core is just a function which takes two arguments:
+
+     site-options - Global options for the site from incise.edn
+     parse        - An instance of Parse containing keys such as content and
+                    title
+
+   This macro makes it just a little bit easier to define such functions by
+   taking care of some boiler plate stuff like using the robert.hooke with-scope
+   macro and binind the functions arguments to *site-options* and *parse* so
+   partials can easily access them."
+  [sym-name doc-string? & body]
+  (let [[doc-string body]
+        (if (string? doc-string?)
+          [doc-string? body]
+          ["" (conj body doc-string?)])]
+    `(defn ~sym-name
+       ~doc-string
+       [{:keys [~'site-title ~'author ~'contacts]
+         :as ~'site-options}
+        ^incise.parsers.core.Parse
+        {:keys [~'date ~'tags ~'category ~'title ~'content] :as ~'parse}]
+       (binding [*site-options* ~'site-options
+                 *parse* ~'parse]
+           (with-scope (html5 ~@body))))))
+
+(defmacro defpartial
+  "Defines a 'partial' which is baically some hiccup markup. An arguments vector
+   is required and can be used to destructure the dynamic vars set by a layout."
+  [sym-name doc-string? destructuring & body]
+  (let [[doc-string destructuring body]
+        (if (string? doc-string?)
+          [doc-string? destructuring body]
+          ["" doc-string? (conj body destructuring)])]
+    `(defn ~sym-name
+       ~doc-string
+       [& args#]
+       (let [~destructuring [*site-options* *parse* args#]]
+         (html ~@body)))))
+
+(defmacro repartial
+  "Replace the given var in a layout with a new function which will be called in
+   its place and passed the result of the fn it is replacing. Returns an empty
+   string so it can be used in layouts without issues."
+  [to-be-replaced replacement]
+  `(do
+     (add-hook #'~to-be-replaced
+               (fn [f# & args#] (~replacement (apply f# args#))))
+     ""))
+
+(defn use-layout
+  "Use the given layout function by calling it with *site-options* and *parse*."
+  [layout-fn] (layout-fn *site-options* *parse*))


Added new API module.

Added new API module.

This is mostly for REPL convenience right now.

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

--- src/simulacrum/api.clj
+++ src/simulacrum/api.clj
@@ -0,0 +1,8 @@
+(ns simulacrum.api
+  (:require [clojure.data.json :as json]
+            [clojure.pprint :refer [pprint]]
+            [clojure.string :as string]
+            [clj-http.client :as client]
+            [net.cgrand.enlive-html :as html]
+            [simulacrum.util :as util]
+            [simulacrum.version :as version]))


Add dummy design for static column

Add dummy design for static column

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/'


Refactor: reorder app-container style components..

... for clearer reading. They are now ordered in groups and
in descending order of importance. That is, according to to some
ad hoc order of importance as it makes sense to me : )


Add initial source file.

Add initial source file.

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

--- src/multicodec/core.clj
+++ src/multicodec/core.clj
@@ -0,0 +1,63 @@
+(ns multicodec.core
+  "Core multicodec definitions and methods."
+  (:require
+    [clojure.string :as str])
+  (:import
+    (java.io
+      IOException
+      InputStream)
+    java.nio.charset.Charset))
+
+
+(def header-charset
+  "The character set that codec headers are encoded with."
+  (Charset/forName "UTF-8"))
+
+
+(defn encode-header
+  "Return the byte-encoded version of the given header path."
+  ^bytes
+  [path]
+  (let [path-bytes (-> path str/trim (str "\n") (.getBytes header-charset))
+        length (count path-bytes)]
+    (when (> length 127)
+      (throw (IllegalArgumentException.
+               (str "Header paths larger than 127 bytes are not supported yet: "
+                    (pr-str path) " has " length))))
+    (let [encoded (byte-array (inc length))]
+      (aset-byte encoded 0 (byte length))
+      (System/arraycopy path-bytes 0 encoded 1 length)
+      encoded)))
+
+
+(defn- read-stream!
+  "Attempts to read `length` bytes from the given stream. Returns a byte array with
+  the read bytes."
+  ^bytes
+  [^InputStream input length]
+  (let [content (byte-array length)]
+    (loop [offset 0
+           remaining length]
+      (let [n (.read input content offset remaining)]
+        (if (< n remaining)
+          (recur (+ offset n) (- remaining n))
+          content)))))
+
+
+(defn read-codec!
+  "Attempts to read a multicodec header from the given stream. Returns the
+  header path read. Throws an IOException if the stream does not have a valid
+  header or there is an error reading from the stream."
+  ^String
+  [^InputStream input]
+  (let [length (.read input)]
+    (when-not (pos? length)
+      (throw (IOException.
+               (format "First byte in stream is not a valid header length: %02x"
+                       length))))
+    (let [header (String. (read-stream! input length) header-charset)]
+      (when-not (.endsWith header "\n")
+        (throw (IOException.
+                 (str "Last byte in header is not a newline: "
+                      (pr-str (.charAt header (dec (count header))))))))
+      (str/trim-newline header))))


Simplification

Simplification


Adjust bundle docstring

Adjust bundle docstring

--- src/play_clj/core_utils.clj
+++ src/play_clj/core_utils.clj
@@ -11,7 +11,7 @@
   "Returns an entity containing other entities. This is a useful way to keep
 related entities together. They will be drawn in the order they appear in the
 internal :entities vector. Any keys in the bundle, such as :x and :y, will
-override the equivalent keys in each entity when being drawn.
+be passed down to all the internal entities unless they already have those keys.

     (bundle (shape :filled) (shape :line))
     (assoc (bundle (shape :filled) (shape :line))


Example in progress.

Example in progress.

error: pathspec 'src/overtone/sc/examples/blackrain.clj' did not match any file(s) known to git

--- src/overtone/sc/examples/blackrain.clj
+++ src/overtone/sc/examples/blackrain.clj
@@ -0,0 +1,21 @@
+(ns overtone.sc.examples.blackrain
+  (:use [overtone.sc.machinery defexample]
+        [overtone.sc ugens]))
+
+(defexamples iir-filter
+  (:low-pass
+   "Create a low pass filter asdfasdf"
+   "Modifying rq changes the characteristics of the filter around the cutoff frequency.  Here we use iir-filter to create a low pass filter.  The iir-filter has a 24db/oct rolloff.  For input signal, we'll use pink noise.  For the cutoff frequency we'll use frequencies ranging from 20 to 20000 Hz exponentially, depending on the mouse-x coordinate.  The rq ranges from 0.001 to 1 linearly depending on the mouse-y coordinate."
+   rate :ar
+   []
+   "(iir-filter (pink-noise) (mouse-x 20 20000 EXP) (mouse-y 0.001 1))"
+   contributor "Colleen"))
+
+(defexamples b-moog
+   (:compare-filters
+   "Compare low, high, and bandpass"
+   "Some longer description here."
+   rate :ar
+   []
+   "(b-moog (pink-noise 265 (mouse-x (/ 0.001 265) (/ 10000 265)) (mouse-y 0.01 2.99)))"
+   contributor "Colleen"))


Reformat: last indentation of modal-content map


Don't bother with timezones.

Don't bother with timezones.

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/coachbot.git/'


json/decode not json-decode

json/decode not json-decode

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/'


Adds failing multi peer test.

Adds failing multi peer test.

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

--- test/onyx/peer/multi_peer_mem_test.clj
+++ test/onyx/peer/multi_peer_mem_test.clj
@@ -0,0 +1,113 @@
+(ns onyx.peer.multi-peer-mem-test
+  (:require [com.stuartsierra.component :as component]
+            [onyx.system :refer [onyx-development-env]]
+            [midje.sweet :refer :all]
+            [onyx.queue.hornetq-utils :as hq-util]
+            [onyx.api]))
+
+(def id (java.util.UUID/randomUUID))
+
+(def config (read-string (slurp (clojure.java.io/resource "test-config.edn"))))
+
+(def env-config
+  {:hornetq/mode :udp
+   :hornetq/server? true
+   :hornetq.server/type :embedded
+   :hornetq.udp/cluster-name (:cluster-name (:hornetq config))
+   :hornetq.udp/group-address (:group-address (:hornetq config))
+   :hornetq.udp/group-port (:group-port (:hornetq config))
+   :hornetq.udp/refresh-timeout (:refresh-timeout (:hornetq config))
+   :hornetq.udp/discovery-timeout (:discovery-timeout (:hornetq config))
+   :hornetq.embedded/config (:configs (:hornetq config))
+   :zookeeper/address (:address (:zookeeper config))
+   :zookeeper/server? true
+   :zookeeper.server/port (:spawn-port (:zookeeper config))
+   :onyx/id id
+   :onyx.coordinator/revoke-delay 5000})
+
+(def peer-config
+  {:hornetq/mode :udp
+   :hornetq.udp/cluster-name (:cluster-name (:hornetq config))
+   :hornetq.udp/group-address (:group-address (:hornetq config))
+   :hornetq.udp/group-port (:group-port (:hornetq config))
+   :hornetq.udp/refresh-timeout (:refresh-timeout (:hornetq config))
+   :hornetq.udp/discovery-timeout (:discovery-timeout (:hornetq config))
+   :zookeeper/address (:address (:zookeeper config))
+   :onyx/id id
+   :onyx.peer/inbox-capacity (:inbox-capacity (:peer config))
+   :onyx.peer/outbox-capacity (:outbox-capacity (:peer config))
+   :onyx.peer/job-scheduler :onyx.job-scheduler/round-robin})
+
+(def dev (onyx-development-env env-config))
+
+(def env (component/start dev))
+
+(def n-messages 100000)
+
+(def batch-size 1320)
+
+(def echo 1000)
+
+(def id (str (java.util.UUID/randomUUID)))
+
+(def in-queue (str (java.util.UUID/randomUUID)))
+
+(def out-queue (str (java.util.UUID/randomUUID)))
+
+(def hq-config {"host" (:host (:non-clustered (:hornetq config)))
+                "port" (:port (:non-clustered (:hornetq config)))})
+
+(hq-util/create-queue! hq-config in-queue)
+(hq-util/create-queue! hq-config out-queue)
+
+(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)))
+
+(def catalog
+  [{:onyx/name :in
+    :onyx/ident :hornetq/read-segments
+    :onyx/type :input
+    :onyx/medium :hornetq
+    :onyx/consumption :concurrent
+    :hornetq/queue-name in-queue
+    :hornetq/host (:host (:non-clustered (:hornetq config)))
+    :hornetq/port (:port (:non-clustered (:hornetq config)))
+    :onyx/batch-size batch-size}
+
+   {:onyx/name :inc
+    :onyx/fn :onyx.peer.multi-peer-mem-test/my-inc
+    :onyx/type :function
+    :onyx/consumption :concurrent
+    :onyx/batch-size batch-size}
+
+   {:onyx/name :out
+    :onyx/ident :hornetq/write-segments
+    :onyx/type :output
+    :onyx/medium :hornetq
+    :onyx/consumption :concurrent
+    :hornetq/queue-name out-queue
+    :hornetq/host (:host (:non-clustered (:hornetq config)))
+    :hornetq/port (:port (:non-clustered (:hornetq config)))
+    :onyx/batch-size batch-size}])
+
+(def workflow {:in {:inc :out}})
+
+(def v-peers (onyx.api/start-peers! 1 peer-config))
+
+(onyx.api/submit-job peer-config
+                     {:catalog catalog :workflow workflow
+                      :task-scheduler :onyx.task-scheduler/round-robin})
+
+(def results (hq-util/consume-queue! hq-config out-queue echo))
+
+(doseq [v-peer v-peers]
+  ((:shutdown-fn v-peer)))
+
+(component/stop env)
+
+(let [expected (set (map (fn [x] {:n (inc x)}) (range n-messages)))]
+  (fact (set (butlast results)) => expected)
+  (fact (last results) => :done))
+


don't auto-create record on navigate in

don't auto-create record on navigate in

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/wilkerlucio/youtube-looper.git/'


Also trace delete in the handlers

Also trace delete in the handlers

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/scheduled-message-works.git/'


First cut of the Channel service.

First cut of the Channel service.

error: pathspec 'src/appengine_magic/services/channel.clj' did not match any file(s) known to git

--- src/appengine_magic/services/channel.clj
+++ src/appengine_magic/services/channel.clj
@@ -0,0 +1,26 @@
+(ns appengine-magic.services.channel
+  (:refer-clojure :exclude [send])
+  (:import [com.google.appengine.api.channel ChannelServiceFactory ChannelMessage]))
+
+
+(defonce *channel-service* (atom nil))
+
+
+(defn get-channel-service []
+  (when (nil? @*channel-service*)
+    (reset! *channel-service* (ChannelServiceFactory/getChannelService)))
+  @*channel-service*)
+
+
+(defn create-channel
+  "Returns a channel ID."
+  [channel-group-key]
+  (.createChannel (get-channel-service) channel-group-key))
+
+
+(defn make-message [channel-group-key message]
+  (ChannelMessage. channel-group-key message))
+
+
+(defn send [message]
+  (.sendMessage (get-channel-service) message))


remove delayed refresh

remove delayed refresh

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/'


add CONTEXT_PATH support

add CONTEXT_PATH support

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/'


fix currency key in parse-gql-params

fix currency key in parse-gql-params


Print out the message that caused the error

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-notification-works.git/'


add pseudo parameters

add pseudo parameters

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

--- src/crucible/pseudo.clj
+++ src/crucible/pseudo.clj
@@ -0,0 +1,17 @@
+(ns crucible.pseudo
+  (:require [clojure.spec :as s]))
+
+(s/def ::parameter (s/cat :pseudo #{:pseudo}
+                          :type (s/alt ::account-id
+                                       ::notification-arns
+                                       ::no-value
+                                       ::region
+                                       ::stack-id
+                                       ::stack-name)))
+
+(def account-id [:pseudo ::account-id])
+(def notification-arns [:pseudo ::notification-arns])
+(def no-value [:pseudo ::no-value])
+(def region [:pseudo ::region])
+(def stack-id [:pseudo ::stack-id])
+(def stack-name [:pseudo ::stack-name])


Add dummy core

Add dummy core

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

--- src/dependable/core.clj
+++ src/dependable/core.clj
@@ -0,0 +1,8 @@
+(ns dependable.core
+  (:gen-class))
+
+(defn -main
+  "I don't do a whole lot ... yet."
+  [& args]
+  (println "Hello, World!"))
+


Fixing pipeline

Fixing pipeline

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/iot-paas-home/telegram-iot-gateway.git/'


partekatu erabili

partekatu erabili

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/'


note re: *core-cache-op*, need to revise or elim

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/transwarp.git/'


fix bug with team page unmount clobbering state

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/clojurecup/cc2014-frontend.git/'


Create directories for log file

Create directories for log file

This allows not having to rely on existing directories (e.g. via .gitkeep).

--- sidecar/src/figwheel_sidecar/components/figwheel_server.clj
+++ sidecar/src/figwheel_sidecar/components/figwheel_server.clj
@@ -235,7 +235,9 @@
   (let [logfile-path (or (:server-logfile figwheel-options) "figwheel_server.log")]
     (if (false? (:repl figwheel-options))
       *out*
-      (io/writer logfile-path :append true))))
+      (do
+        (io/make-parents logfile-path)
+        (io/writer logfile-path :append true)))))

 (defn extract-cljs-build-fn [{:keys [cljs-build-fn]}]
   (or (utils/require-resolve-handler cljs-build-fn)