Filter orgs by the selected vcs-type

Filter orgs by the selected vcs-type

--- src-cljs/frontend/components/add_projects.cljs
+++ src-cljs/frontend/components/add_projects.cljs
@@ -78,7 +78,7 @@
     (init-state [_]
       {:vcs-type "github"})
     om/IRenderState
-    (render-state [_ state]
+    (render-state [_ {:keys [vcs-type] :as state}]
       (let [{:keys [user settings repos]} data
             github-active? (= "github" (:vcs-type state))
             bitbucket-active? (= "bitbucket" (:vcs-type state))]
@@ -108,17 +108,17 @@
                  ;; organizations route is much faster than the repos route. We show them
                  ;; in this order (rather than e.g. putting the whole thing into a set)
                  ;; so that new ones don't jump up in the middle as they're loaded.
-                 (concat [user]
-                         (:organizations user)
-                         (let [org-names (->> user
-                                              :organizations
-                                              (cons user)
-                                              (map :login)
-                                              set)
-                               in-orgs? (comp org-names :login)]
-                           (->> repos (map :owner)
-                                (remove in-orgs?)
-                                (set)))))]
+                 (filter #(= (:vcs_type %) vcs-type) (concat [user]
+                                     (:organizations user)
+                                     (let [org-names (->> user
+                                                          :organizations
+                                                          (cons user)
+                                                          (map :login)
+                                                          set)
+                                           in-orgs? (comp org-names :login)]
+                                       (->> repos (map :owner)
+                                            (remove in-orgs?)
+                                            (set))))))]
            (when (:repos-loading user)
              [:div.orgs-loading
               [:div.loading-spinner common/spinner]])]])))))


Test commit for inverted feature

Test commit for inverted feature

--- src/status_im/ui/screens/desktop/main/chat/views.cljs
+++ src/status_im/ui/screens/desktop/main/chat/views.cljs
@@ -156,12 +156,13 @@
           scroll-height (atom nil)
           _ (when (or (not @chat-id*) (not= @chat-id* chat-id))
               (reset! chat-id* chat-id)
-              (js/setTimeout #(when @scroll-ref (.scrollToEnd @scroll-ref)) 400))]
+              #_(js/setTimeout #(when @scroll-ref (.scrollToEnd @scroll-ref)) 400))]
       [react/view {:style styles/messages-view}
        [react/scroll-view {:scrollEventThrottle    16
                            :headerHeight styles/messages-list-vertical-padding
                            :footerWidth styles/messages-list-vertical-padding
                            :enableArrayScrollingOptimization true
+                           :inverted true
                            :on-scroll              (fn [e]
                                                      (let [ne (.-nativeEvent e)
                                                            y (.-y (.-contentOffset ne))]
@@ -173,7 +174,7 @@
                            :ref                    #(reset! scroll-ref %)}
         [react/view
          (doall
-          (for [[index {:keys [from content message-id type value] :as message-obj}] (map-indexed vector (reverse messages))]
+          (for [[index {:keys [from content message-id type value] :as message-obj}] (map-indexed vector messages)]
             ^{:key message-obj}
             [message content (= from current-public-key)
              (assoc message-obj :group-chat group-chat


Comment out outdated dispatching of :send-seen! event

--- src/status_im/ui/screens/desktop/main/chat/views.cljs
+++ src/status_im/ui/screens/desktop/main/chat/views.cljs
@@ -192,9 +192,10 @@
                     (not outgoing)
                     (not= :seen message-status)
                     (not= :seen (keyword (get-in user-statuses [current-public-key :status]))))
-           (re-frame/dispatch [:send-seen! {:chat-id    chat-id
-                                            :from       from
-                                            :message-id message-id}]))
+           ;;TODO(rasom): revisit this when seen messages will be reimplemented
+           #_(re-frame/dispatch [:send-seen! {:chat-id    chat-id
+                                              :from       from
+                                              :message-id message-id}]))
         :reagent-render
         (fn []
           ^{:key (str "message" message-id)}


Example: Make sure page component is started before server

In the system definition from the example code, an explicit dependency
from the :server component to the :example-page component is introduced
to make sure the routes for example-page are registered before the
server is started.

--- example/src/de/otto/tesla/example/example_system.clj
+++ example/src/de/otto/tesla/example/example_system.clj
@@ -13,7 +13,8 @@
       (assoc :calculator
              (c/using (calculating/new-calculator example-calculation-function) [:metering :app-status]))
       (assoc :example-page
-             (c/using (example-page/new-example-page) [:routes :calculator :app-status]))))
+             (c/using (example-page/new-example-page) [:routes :calculator :app-status]))
+      (c/system-using {:server [:example-page]})))

 (defn -main
   "starts up the production system."


better errors when config isn't formatted properly

fixes #456

--- src/main/shadow/cljs/npm/cli.cljs
+++ src/main/shadow/cljs/npm/cli.cljs
@@ -10,7 +10,8 @@
     ["net" :as node-net]
     ["which" :as which]
     [cljs.core.async :as async :refer (go go-loop alt!)]
-    #_[cljs.tools.reader :as reader]
+    [cljs.tools.reader.reader-types :as rt]
+    [cljs.tools.reader.edn :as edn]
     [cljs.reader :as reader]
     [clojure.string :as str]
     [goog.object :as gobj]
@@ -284,8 +285,9 @@
   (let [{:keys [tag] :as data}
         (ex-data ex)]

-    (when (not= tag :java-exit)
-      (log "shadow-cljs - error" (.-message ex)))
+    (js/console.warn "===== ERROR =================")
+    (js/console.warn (.-message ex))
+    (js/console.warn "=============================")
     ))

 (defn get-shared-home []
@@ -551,12 +553,21 @@

 (defn read-config* [config-path]
   (try
-    (-> (util/slurp config-path)
-        (#(reader/read-string {:readers {'shadow/env getenv}} %)))
+    (let [reader-opts
+          {:readers {'shadow/env getenv}}
+
+          config-txt
+          (util/slurp config-path)
+
+          rdr
+          (rt/source-logging-push-back-reader config-txt)]
+
+      (edn/read reader-opts rdr))
+
     (catch :default ex
-      ;; FIXME: missing tools.reader location information
-      ;; FIXME: show error location with excerpt like other warnings
-      (throw (ex-info (format "failed reading config file: %s" config-path) {:config-path config-path} ex)))))
+      (throw (ex-info
+               (format "Failed to read config file: %s\n%s" config-path (.-message ex))
+               {:config-path config-path} ex)))))

 (defn read-user-config []
   (let [config-path (path/resolve (os/homedir) ".shadow-cljs" "config.edn")]


Fix NPE

Fix NPE

--- src/clj_chrome_devtools/automation/fixture.clj
+++ src/clj_chrome_devtools/automation/fixture.clj
@@ -17,7 +17,8 @@
    "chrome.exe"])

 (defn- is-windows? []
-  (str/starts-with? (System/getenv "os") "Windows"))
+  (when-let [os (System/getenv "os")]
+    (str/starts-with? os "Windows")))

 (defn binary-path [candidate]
   (let [{:keys [exit out]}


Index attachment metadata (like filenames and descriptions)

--- src/net/dishevelled/mailindex.clj
+++ src/net/dishevelled/mailindex.clj
@@ -179,25 +179,29 @@
             (org.apache.tika.parser.ParseContext.))
     (.toString content)))

+(defn extract-part-metadata [^Part part]
+  (remove nil? [(.getContentType part) (.getFileName part)]))

 (defn parse-mime-part
   "Recursively parses a MIME part converting it into a sequence of strings."
   [^Part part]
-  (try
-    (if (> (.getSize part) MAX_PART_BYTES)
-      (do (println "Skipping giant part: " (.getSize part))
-          [])
-      (let [content (.getContent part)]
-        (condp re-find (.toLowerCase (.getContentType part))
-          #"^text/(plain|calendar)" [(if (string? content)
-                                       content
-                                       (slurp content))]
-          #"^text/(html|xml)" [(strip-html content)]
-          #"^message/rfc822" (parse-mime-part content)
-          #"^multipart/" (parse-mime-multipart (.getContent part))
-          [])))
-    (catch java.io.UnsupportedEncodingException e
-      [])))
+  (concat
+   (extract-part-metadata part)
+   (try
+     (if (> (.getSize part) MAX_PART_BYTES)
+       (do (println "Skipping giant part: " (.getSize part))
+           [])
+       (let [content (.getContent part)]
+         (condp re-find (.toLowerCase (.getContentType part))
+           #"^text/(plain|calendar)" [(if (string? content)
+                                        content
+                                        (slurp content))]
+           #"^text/(html|xml)" [(strip-html content)]
+           #"^message/rfc822" (parse-mime-part content)
+           #"^multipart/" (parse-mime-multipart (.getContent part))
+           [])))
+     (catch java.io.UnsupportedEncodingException e
+       []))))


improved analytics with flexible word predicates

--- src/distillery/core.clj
+++ src/distillery/core.clj
@@ -5,6 +5,7 @@
   (:require [clojure.edn :as edn])
   (:require [clojure.pprint :refer (pprint)]))

+;----- Helper Functions

 (defn load-data
   "Loads the content of a file as EDN formatted data structure."
@@ -12,6 +13,31 @@
   (with-open
     [r (java.io.PushbackReader. (reader path))]
     (edn/read r)))
+
+(defn map-group-items
+  "Applies a function to the items of the group collection."
+  [f [k xs]] [k (map f xs)])
+
+(defn map-pair-value
+  "Applies a function to the value of a key-value-pair."
+  [f [k v]] [k (f v)])
+
+(defn multi-filter
+  "Applies a number of predicates to a value and returns true if all predicates are true."
+  [predicates x]
+  (if (empty? predicates)
+    true
+    (every? true? ((apply juxt predicates) x))))
+
+(defn sum
+  "Computes the sum of a sequence."
+  [xs] (apply + xs))
+
+(defn squared-sum
+  "Computes the sum of the squared items of a sequence."
+  [xs] (apply + (map #(* % %) xs)))
+
+;----- Domain Logic

 (defn best-alternate
   "Return the best alternate phrase of a recgnition result."
@@ -28,45 +54,49 @@
       false
       (Character/isUpperCase (first word)))))

-(defn map-group-items [f [k xs]] [k (map f xs)])
+(defn words
+  "Returns words from a result sequence."
+  [results & {:keys [filters best-phrases]}]
+  (let [predicate    (partial multi-filter (vec filters))
+        phrase-src   (if best-phrases
+                       (partial map best-alternate)
+                       (partial mapcat :alternates))]
+    (->> results
+         (phrase-src)
+         (mapcat :words)
+         (filter predicate))))

-(defn map-pair-value [f [k v]] [k (f v)])
+(defn grouped-words
+  "Returns ordered statistics over a sequence of phrases."
+  [results filters columns]
+  (let
+    [source (words results :best-phrases true :filters filters)
+     groups (group-by (apply juxt columns) source) ;; Group words by text
+     confidences (map (partial map-group-items :confidence) groups) ;; Reject additional text per confidence
+     squaresums (map (partial map-pair-value squared-sum) confidences)] ;; Build square sums of confidence per word
+    (reverse (sort-by #(get % 1) squaresums)))) ;; Sort the words by sum of squared confidence

-(defn sum [xs] (apply + xs))
+;----- Interactive Demo

-(defn squared-sum [xs] (apply + (map #(* % %) xs)))
+(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\transcript\\11.01 Theoretische, technische, praktische, angewandte Informatik.clj")
+(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\transcript\\12.01.1 Datenstrukturen, Array, Queue, Stack.clj")
+(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\transcript\\12.01.2 Baum als Datenstruktur.clj")
+(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\transcript\\Algorithmen und Datenstrukturen 001.clj")
+(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\transcript\\Algorithmen und Datenstrukturen 002.clj")
+(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\transcript\\Algorithmen und Datenstrukturen 003.clj")
+(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\transcript\\Algorithmen und Datenstrukturen 004.clj")
+(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\transcript\\Bernd Senf 3. Bankgeheimnis Geldschöpfung - Monetative als Lösung (720).clj")
+(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\transcript\\Binomialverteilung_Formel von Bernoulli, Stochastik, Nachhilfe online, Hilfe in Mathe (720).clj")
+(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\transcript\\Der Lambda-Kalkül (720).clj")
+(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\transcript\\Einseitiger(rechtsseitiger) Hypothesentest_mit Ablesen aus der Tabelle, Stochastik, Nachhilfe online (720).clj")
+(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\transcript\\IS-Kurve im Vier-Quadrantenschema Die Herleitung (720).clj")
+(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\transcript\\Gauß-Algorithmus_Lineares Gleichungssystem lösen (einfach_schnell erklärt), Nachhilfe online (720).clj")
+(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\transcript\\Makroökonomie online lernen - VWL Tutorium (360).clj")
+(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\transcript\\Parabeln_Quadratische Funktion_en Übersicht (Scheitelpunkt,Stauchung,Streckung,etc.) (720).clj")

-
-;----------------------------
-
-;(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\11.01 Theoretische, technische, praktische, angewandte Informatik.clj")
-;(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\12.01.1 Datenstrukturen, Array, Queue, Stack.clj")
-;(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\12.01.2 Baum als Datenstruktur.clj")
-;(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\Algorithmen und Datenstrukturen 001.clj")
-;(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\Algorithmen und Datenstrukturen 002.clj")
-;(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\Algorithmen und Datenstrukturen 003.clj")
-;(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\Algorithmen und Datenstrukturen 004.clj")
-;(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\Bernd Senf 3. Bankgeheimnis Geldschöpfung - Monetative als Lösung (720).clj")
-;(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\Binomialverteilung_Formel von Bernoulli, Stochastik, Nachhilfe online, Hilfe in Mathe (720).clj")
-(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\Der Lambda-Kalkül (720).clj")
-;(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\Einseitiger(rechtsseitiger) Hypothesentest_mit Ablesen aus der Tabelle, Stochastik, Nachhilfe online (720).clj")
-;(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\IS-Kurve im Vier-Quadrantenschema Die Herleitung (720).clj")
-;(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\Gauß-Algorithmus_Lineares Gleichungssystem lösen (einfach_schnell erklärt), Nachhilfe online (720).clj")
-;(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\Makroökonomie online lernen - VWL Tutorium (360).clj")
-;(def path "D:\\Daten\\FH\\OLL\\Media\\Audio\\de-DE\\Parabeln_Quadratische Funktion_en Übersicht (Scheitelpunkt,Stauchung,Streckung,etc.) (720).clj")
-
-(def results (load-data path)) ;; Load the recgnition results
-(def phrases (map best-alternate results)) ;; Extract the best phrases from the alternates
-;(def phrases (mapcat :alternates results)) ;; Take all phrases from the results
-(def words (mapcat :words phrases)) ;; Extract the words (text, confidence)
-(def nouns (filter noun? words)) ;; Only take words with first character upper case
-
-(def grouped-nouns
-  (let
-    [groups (group-by :text nouns) ;; Group words by text
-     confidences (map (partial map-group-items :confidence) groups) ;; Reject additional text per confidence
-     squaresums (map (partial map-pair-value squared-sum) confidences) ;; Build square sums of confidence per word
-     ordered (reverse (sort-by #(get % 1) squaresums))] ;; Sort the words by sum of squared confidence
-    ordered))
-
-(pprint (take 20 grouped-nouns)) ;; Print the head of the resulting list
+;; Load the recgnition results
+(def results (load-data path))
+;; group the words and compute stastics
+(def grouped-nouns (grouped-words results [noun?] [:lexical-form :pronunciation]))
+;; Print the head of the resulting list
+(pprint (take 20 grouped-nouns))


Fix incognito write handler.

Fix incognito write handler.

--- src/incognito/base.cljc
+++ src/incognito/base.cljc
@@ -17,10 +17,9 @@
                          handlers))))

 (defn incognito-reader [read-handlers m]
-  (let [read-handlers (rec-name-parser read-handlers)]
     (if (read-handlers (:tag m))
            ((read-handlers (:tag m)) (:value m))
-           (map->IncognitoTaggedLiteral m))))
+           (map->IncognitoTaggedLiteral m)))

 (defn incognito-writer [write-handlers r]
   (let [write-handlers      (rec-name-parser write-handlers)


Using merge.

Using merge.

--- src/cbfg/store.cljs
+++ src/cbfg/store.cljs
@@ -99,7 +99,8 @@
          @res)))

 (defn store-scan [actx store opaque from to]
-  (let [out (achan actx)]
+  (let [out (achan actx)
+        msg {:opaque opaque :status :part}]
     (ago store-scan actx
          (let [s @store
                changes (:changes s)]
@@ -108,22 +109,20 @@
              (when-let [change (get changes sq)]
                (when (not (:deleted change))
                  (aput store-scan out
-                       {:opaque opaque :status :part
-                        :key key :sq sq :cas (:cas change)
-                        :val (:val change)})))))
+                       (merge msg {:key key :sq sq :cas (:cas change)
+                                   :val (:val change)}))))))
          (aput store-scan out {:opaque opaque :status :ok})
          (aclose store-scan out))
     out))

 (defn store-changes [actx store opaque from to]
-  (let [out (achan actx)]
+  (let [out (achan actx)
+        msg {:opaque opaque :status :part}]
     (ago store-changes actx
          (let [s @store]
              (doseq [[sq change]
                      (subseq (into (sorted-map) (:changes s)) >= from < to)]
-               (aput store-changes out (-> change
-                                             (assoc :opaque opaque)
-                                             (assoc :status :part)))))
+               (aput store-changes out (merge msg change))))
          (aput store-changes out {:opaque opaque :status :ok})
          (aclose store-changes out))
     out))


fixed image paths

fixed image paths

--- src/cellf/core.cljs
+++ src/cellf/core.cljs
@@ -264,7 +264,7 @@

         no-stream?
           (dom/div nil
-            (dom/img #js {:src "/img/cellf-white.svg" :className "logo"})
+            (dom/img #js {:src "img/cellf-white.svg" :className "logo"})
             (dom/h1 nil "Hi")
             (dom/p nil
               (str
@@ -348,7 +348,7 @@
             :className (when-not stream "hidden")
             :style     #js {:width capture-size}}

-            (dom/img #js {:src "/img/cellf.svg" :alt "Cellf"})
+            (dom/img #js {:src "img/cellf.svg" :alt "Cellf"})
             (dom/h2 nil "find yourself")
             (dom/canvas #js {
               :ref    "playback"


when compiled need local eval

when compiled need local eval

--- src/test/cljs/self_host/test.cljs
+++ src/test/cljs/self_host/test.cljs
@@ -3,6 +3,8 @@
              :refer-macros [run-tests deftest testing is async]]
             [cljs.js :as cljs]
             [cljs.nodejs :as nodejs]))
+
+(set! (.-user js/cljs) #js {})

 (nodejs/enable-util-print!)

@@ -21,7 +23,9 @@
 (def st (cljs/empty-state))

 (defn node-eval [{:keys [name source]}]
-  (.runInThisContext vm source (str (munge name) ".js")))
+  (if-not js/COMPILED
+    (.runInThisContext vm source (str (munge name) ".js"))
+    (js/eval source)))

 (def libs
   {'bootstrap-test.core :cljs
@@ -31,7 +35,7 @@
 (defn node-load [{:keys [name macros]} cb]
   (if (contains? libs name)
     (let [path (str "src/test/cljs/" (cljs/ns->relpath name)
-                 "." (cljs.core/name (get libs name)))]
+                    "." (cljs.core/name (get libs name)))]
       (.readFile fs path "utf-8"
         (fn [err src]
           (cb (if-not err
@@ -72,7 +76,7 @@
           (is (nil? error))
           (is (== value 2))
           (inc! l)))
-      #_(cljs/eval-str st "(def x 1)" nil
+      (cljs/eval-str st "(def x 1)" nil
         {:eval node-eval
          :context :expr
          :def-emits-var true}


Set input and output streams to jline via global dynamic vars.

--- src/cli4clj/cli.clj
+++ src/cli4clj/cli.clj
@@ -21,7 +21,13 @@
     (jline.console.completer ArgumentCompleter Completer StringsCompleter)))

 (def ^:dynamic *comment-begin-string* ";")
+
 (def ^:dynamic *mock-jline-readline-input* false)
+
+(def ^:dynamic *jline-input-stream* System/in)
+(def ^:dynamic *jline-output-stream* System/out)
+
+

 (defn cli-repl-print
   "The default repl print function of cli4clj only prints non-nil values."
@@ -110,7 +116,7 @@
    Thanks to the functionality provided by jline2, this allows, e.g., command history, command editing, or tab-completion.
    The input that is read is then forwarded to a repl read function that was created with create-repl-read-fn."
   [cmds prompt-string]
-  (let [in-rdr (doto (ConsoleReader.)
+  (let [in-rdr (doto (ConsoleReader. nil *jline-input-stream* *jline-output-stream* nil)
                  (.addCompleter (StringsCompleter. (map name (keys cmds))))
                  (.setPrompt prompt-string))
         arg-hint-completers (create-arg-hint-completers cmds)


Some more type hints

Some more type hints

Signed-off-by: Daniel Borchmann <25857343a15bf1edafebc2912e82ecf775c585c1@mailbox.tu-dresden.de>

--- src/conexp/base.clj
+++ src/conexp/base.clj
@@ -64,9 +64,9 @@
 (def- conexp-version-map
   (let [[_ major minor patch qualifier] (re-find #"(\d+)\.(\d+)\.(\d+)(?:-(.+))?"
                                                  internal-version-string)]
-    {:major (Integer/parseInt major),
-     :minor (Integer/parseInt minor),
-     :patch (Integer/parseInt patch),
+    {:major ^int (Integer/parseInt major),
+     :minor ^int (Integer/parseInt minor),
+     :patch ^int (Integer/parseInt patch),
      :qualifier qualifier}))

 (defn conexp-version
@@ -78,9 +78,9 @@
 (defn has-version?
   "Compares given version of conexp and returns true if and only if
   the current version of conexp is higher or equal than the given one"
-  [{my-major :major, my-minor :minor, my-patch :patch}]
+  [{^int my-major :major, ^int my-minor :minor, ^int my-patch :patch}]
   (assert (and my-major my-minor my-patch))
-  (let [{:keys [major, minor, patch]} conexp-version-map]
+  (let [{:keys [^int major, ^int minor, ^int patch]} conexp-version-map]
     (or (and (< my-major major))
         (and (= my-major major)
              (< my-minor minor))
@@ -178,7 +178,7 @@
       (instance? clojure.lang.Seqable x)
       (nil? x)
       (instance? Iterable x)
-      (-> x .getClass .isArray)
+      (-> ^Object x .getClass .isArray)
       (string? x)
       (instance? java.util.Map x)))


Fixing regular expression to dissect version string

Signed-off-by: Daniel Borchmann <25857343a15bf1edafebc2912e82ecf775c585c1@mailbox.tu-dresden.de>

--- src/conexp/main.clj
+++ src/conexp/main.clj
@@ -30,7 +30,7 @@
   (.trim #=(slurp "VERSION")))

 (defvar- conexp-version-map
-  (let [[_ major minor patch qualifier] (re-find #"(\d+).(\d+).(\d+)-(\w+)" internal-version-string)]
+  (let [[_ major minor patch qualifier] (re-find #"(\d+)\.(\d+)\.(\d+)-(.+)" internal-version-string)]
     {:major (Integer/parseInt major),
      :minor (Integer/parseInt minor),
      :patch (Integer/parseInt patch),


Restored root redirect to point at tables.html

--- src/kixi/hecuba/web.clj
+++ src/kixi/hecuba/web.clj
@@ -16,6 +16,12 @@

 (def base-media-types ["application/json"])

+(defn index [req]
+  {:status 200 :body (slurp (io/resource "sb-admin/index.html"))})
+
+(defn tables [req]
+  {:status 200 :body (slurp (io/resource "sb-admin/tables.html"))})
+
 (defn chart [req]
   {:status 200 :body (slurp (io/resource "hecuba/chart.html"))})

@@ -30,7 +36,9 @@

 (defn make-routes [producer-config querier commander project projects]
   ["/"
-   [;;["" (->Redirect 307 index)]
+   [["" (->Redirect 307 tables)]
+    ["index.html" index]
+    ["tables.html" tables]
     ["chart.html" chart]
     ["counters.html" counters]
     ["map.html" maps]


include case of a buffer boundary mid-word

lots of boundaries in the case of small buffer sizes, but this shows
good behavior when there's exactly one boundary within a match

--- src/kmp_search/core.clj
+++ src/kmp_search/core.clj
@@ -77,5 +77,7 @@
 ;; [10 113 148]
 ;; > (search-file (.getBytes "local") "/etc/hosts" :buffer-size 3)
 ;; [10 113 148]
+;; > (search-file (.getBytes "local") "/etc/hosts" :buffer-size 13)
+;; [10 113 148]
 ;; > (search-file (.getBytes "local") "/etc/hosts" :buffer-size 71)
 ;; [10 113 148]


AS-171: entity viewer handles raw arrays [risk: low] (#1563)

entity viewer handles raw arrays

--- src/cljs/main/broadfcui/page/workspace/data/entity_viewer.cljs
+++ src/cljs/main/broadfcui/page/workspace/data/entity_viewer.cljs
@@ -10,6 +10,7 @@
    [broadfcui.common.style :as style]
    [broadfcui.common.table :refer [Table]]
    [broadfcui.common.table.style :as table-style]
+   [broadfcui.common.table.utils :as table-utils]
    [broadfcui.components.blocker :refer [blocker]]
    [broadfcui.page.workspace.data.utils :as data-utils]
    [broadfcui.utils :as utils]
@@ -119,7 +120,7 @@
                                                                               :attributes {:style {:display "inline"}}
                                                                               :link-label v)]}
                                               {:for-sort (string/lower-case (str v))
-                                               :for-render v})))
+                                               :for-render (table-utils/default-render v)})))
                                     :sort-by :for-sort
                                     :render :for-render}])}
                 :paginator :none}]]))


Added (exactly expected)

Added (exactly expected)

--- src/midje/checkers.clj
+++ src/midje/checkers.clj
@@ -10,11 +10,19 @@
   [actual]
   (not actual))

-(defn in-any-order "Produces matcher that matches sequences without regard to order"
+(defn in-any-order
+  "Produces matcher that matches sequences without regard to order"
   [expected]
-  (fn [actual] (= (set expected) (set actual))))
+  (fn [actual]
+      (and (= (count expected) (count actual))
+	   (= (set expected) (set actual)))))

 (defn anything
   "Accepts any value"
   [actual]
   true)
+
+(defn exactly
+  "Checks for equality. Use to avoid default handling of functions."
+  [expected]
+  (fn [actual] (= expected actual)))


Add select helper function.

Add select helper function.

--- src/multihash/core.clj
+++ src/multihash/core.clj
@@ -318,3 +318,24 @@
     (let [code (.read source)
           digest (read-stream-digest source)]
       (create code digest))))
+
+
+
+;; ## Utility Functions
+
+(defn select
+  "Selects multihash identifiers from a sequence based on some criteria.
+
+  Available options:
+
+  - `:algorithm`  only return hashes using this algorithm
+  - `:encoder`    function to encode multihashes with (default: `hex`)
+  - `:after`      start enumerating ids lexically following this string
+  - `:prefix`     only return ids starting with the given string"
+  [opts ids]
+  (let [{:keys [algorithm prefix encoder], :or {encoder hex}} opts
+        after (:after opts prefix)]
+    (cond->> ids
+      algorithm  (filter #(= algorithm (:algorithm %)))
+      after      (drop-while #(pos? (compare after (encoder %))))
+      prefix     (take-while #(.startsWith ^String (encoder %) prefix)))))


ensure the queue of telemetry events is flushed when shutting down

Not flushing the queue will potentially discard events if the application
is shut down before the next sending iteration.

--- core/src/gorillalabs/tesla/component/telemetry.clj
+++ core/src/gorillalabs/tesla/component/telemetry.clj
@@ -104,6 +104,7 @@
   (log/info "<- stopping telemetry")
   (close! (:killswitch telemetry))
   (when-let [client (:r-client telemetry)]
+    (flush-queue client (:queue telemetry))
     (riemann/close! client)))

 (mnt/defstate telemetry


fix :target :react-native using bad ns alias

fixes #539

--- src/main/shadow/build/targets/react_native.clj
+++ src/main/shadow/build/targets/react_native.clj
@@ -256,7 +256,7 @@
   state)

 (defn process
-  [{::comp/keys [mode stage config] :as state}]
+  [{::build/keys [mode stage config] :as state}]
   (case stage
     :configure
     (configure state mode config)


fix typo in config.clj

fix typo in config.clj

--- src/metabase/config.clj
+++ src/metabase/config.clj
@@ -35,7 +35,7 @@

    We resolve properties from these places:
    1.  environment variables (ex: MB_DB_TYPE -> :mb-db-type)
-   2.  jvm opitons (ex: -Dmb.db.type -> :mb-db-type)
+   2.  jvm options (ex: -Dmb.db.type -> :mb-db-type)
    3.  hard coded `app-defaults`"
   [k]
   (let [k (keyword k)]


Missed these

Missed these

--- support/build-support/project.clj
+++ support/build-support/project.clj
@@ -4,5 +4,8 @@
   :dependencies [[org.clojure/data.zip "0.1.1"]
                  [org.clojure/clojure-contrib "1.2.0"]
                  [commons-io "2.0.1"]
+                 [clj-glob "1.0.0"]
+                 [org.clojars.tcrawley/codox.core "0.6.3"]
+                 [digest "1.4.0"]
                  [cheshire _]
                  [leiningen-core _]])


Linking to the untangled spec docs

Linking to the untangled spec docs

--- src/tutorial/untangled_tutorial/K_Testing.cljs
+++ src/tutorial/untangled_tutorial/K_Testing.cljs
@@ -23,6 +23,11 @@
       - Mocks can simulate timelines for CSP logic
   - Protocol testing support (helps prove network interactions are correct without running the full stack)

+  ## Docs
+
+  Make sure to check out the [Untangled Spec Docs](https://github.com/untangled-web/untangled-spec/blob/develop/docs/index.adoc#untangled-spec-docs) for up
+  to date documentation on features, setup and usage.
+
   ## Setting up

   If you look in `test/client/app` you'll see a few files. Only one of the four is a specification. The other three


Maybe fixed blacklisting in prep-for-uploading-to-client

--- src/polismath/utils.clj
+++ src/polismath/utils.clj
@@ -103,7 +103,7 @@
         repness (:base-clusters results)]
     (-> results
       ; remove things we don't want to publish
-      (dissoc :mat :rating-mat :opts')
+      (dissoc :mat :rating-mat :opts' :bucket-dists :base-clusters-proj)

       ; REFORMAT PROJECTION
       ; remove original projection - we'll provide buckets/base-clusters instead
@@ -112,6 +112,8 @@
       ; REFORMAT BASE CLUSTERS
       (dissoc :base-clusters)
       (dissoc :bid-to-pid)
+      ; XXX - This should actually be based on the base-clusters-proj, since the work has already be done
+      ; here, but before it gets dissoc'd
       (assoc-in [:base-clusters "x"] (map #(first (:center %)) base-clusters))
       (assoc-in [:base-clusters "y"] (map #(second (:center %)) base-clusters))
       (assoc-in [:base-clusters "id"] (map :id base-clusters))


Re-worked remote auth service errors to bubble up to the response.

--- dev-resources/src/cmr/opendap/dev.clj
+++ dev-resources/src/cmr/opendap/dev.clj
@@ -2,6 +2,7 @@
   "CMR OPeNDAP development namespace."
   (:require
     [cheshire.core :as json]
+    [clojure.data.xml :as xml]
     [clojure.java.io :as io]
     [clojure.pprint :refer [pprint]]
     [clojure.set :as set]
@@ -14,7 +15,8 @@
     [cmr.opendap.components.core]
     [com.stuartsierra.component :as component]
     [org.httpkit.client :as httpc]
-    [trifl.java :refer [show-methods]])
+    [trifl.java :refer [show-methods]]
+    [xml-in.core :as xml-in])
   (:import
     (java.net URI)
     (java.nio.file Paths)))


Adjust description of example

Adjust description of example

--- spec/rook/dispatcher_spec.clj
+++ spec/rook/dispatcher_spec.clj
@@ -264,7 +264,7 @@

   (describe "argument resolution"

-    (it "allows overrides of arg-resolvers"
+    (it "allows overrides of :arg-symbol->resolver"

         (let [override (merge dispatcher/default-arg-symbol->resolver {'magic-value (constantly "**magic**")})
                handler (rook/namespace-handler {:arg-symbol->resolver override}


code documentation to address PR feedback

--- src-cljs/frontend/routes.cljs
+++ src-cljs/frontend/routes.cljs
@@ -34,6 +34,8 @@
         action-id (some-> action-id js/parseInt)]
     (merge {:tab tab
             :action-id action-id}
+           ;; dont' add :container-id key unless it's specified (for later
+           ;; destructuring with :or)
            (when container-id
              {:container-id container-id}))))

@@ -196,7 +198,9 @@
     [short-vcs-type org repo build-num _ maybe-fragment]
     ;; normal destructuring for this broke the closure compiler
     (let [_fragment (:_fragment maybe-fragment)
-          fragment-args (parse-build-page-fragment _fragment)]
+          fragment-args (-> _fragment
+                            parse-build-page-fragment
+                            (select-keys [:tab :action-id :container-id]))]
       (open-to-inner! nav-ch :build (merge fragment-args
                                            {:vcs_type (vcs/->lengthen-vcs short-vcs-type)
                                             :project-name (str org "/" repo)


remove editor refreshing since it is unneeded.  needed it before for non-readonly editors whose text sizes are smaller than default

--- src/parinfer/core.cljs
+++ src/parinfer/core.cljs
@@ -31,11 +31,9 @@
   (create-editor! "code-string" :string)
   (create-editor! "code-enter" :enter)

-  (let [opts {:readOnly true}
-        cm-good (create-editor! "code-warn-good" :warn-good opts)
-        cm-bad (create-editor! "code-warn-bad" :warn-bad opts)]
-    (when cm-good (.refresh cm-good))
-    (when cm-bad (.refresh cm-bad)))
+  (let [opts {:readOnly true}]
+    (create-editor! "code-warn-good" :warn-good opts)
+    (create-editor! "code-warn-bad" :warn-bad opts))

   (create-editor! "code-displaced" :displaced)
   (create-editor! "code-not-displaced" :not-displaced)
@@ -59,9 +57,7 @@
         sync! #(.setValue cm-output (infer/format-text (.getValue cm-input)))]
     (when cm-input
       (.on cm-input "change" sync!)
-      (sync!))
-    (when cm-input (.refresh cm-input))
-    (when cm-output (.refresh cm-output)))
+      (sync!)))

   (let [cm-input (create-regular-editor! "code-edit-input")
         cm-output (create-regular-editor! "code-edit-output" {:readOnly true
@@ -70,9 +66,7 @@
                                         "; ERROR: input must be balanced!"))]
     (when cm-input
       (.on cm-input "change" sync!)
-      (sync!))
-    (when cm-input (.refresh cm-input))
-    (when cm-output (.refresh cm-output))))
+      (sync!))))

 (defn animate-when-visible!
   [key-]


Add small variance to test step

Add small variance to test step

--- test/clj_gatling/test_helpers.clj
+++ test/clj_gatling/test_helpers.clj
@@ -89,7 +89,7 @@
   {:name step-name
    :request (fn [ctx]
               ;Note! Highcharts reporter fails if start and end times are exactly the same values
-              (Thread/sleep 1)
+              (Thread/sleep (inc (rand-int 2)))
               [return (assoc ctx :to-next-request return)])})

 (defn throwing-step [step-name]


Add one more test

Add one more test

--- test/obb_rules/ai/common_test.clj
+++ test/obb_rules/ai/common_test.clj
@@ -46,7 +46,14 @@
     (is (< 0 (option :value)))
     (is (= [[:attack [2 5] [2 7]]] (option :actions)))))

-(deftest get-distance-attack-options
+(deftest get-no-attack-options
+  (let [board (-> (board/create-board)
+                  (place-element [2 5] (create-element :p1 krill 1 :south [2 5]))
+                  (place-element [2 7] (create-element :p1 rain 1 :north [2 7])))
+        options (common/attack-options board (board/get-element board [2 5]))]
+    (is (= 0 (count options)))))
+
+(deftest get-attack-options-catapult-obstacles
   (let [board (-> (board/create-board)
                   (place-element [2 1] (create-element :p1 vect 1 :south [2 1]))
                   (place-element [2 2] (create-element :p2 rain 1 :north [2 2]))


riemann.streams: Documentation and whitespace fixes

--- src/riemann/streams.clj
+++ src/riemann/streams.clj
@@ -1,15 +1,29 @@
 (ns riemann.streams
-  "Streams are functions which accept events (or, in some cases, lists of
-  events). They can filter those events, transform them, apply them to other
-  streams, combine them over time, update state, forward to other services, and
-  more. Most streams accept, after their initial arguments, any number of
-  streams as children. When invoking children, they typically catch all
-  exceptions and log them, then proceed to the next child.
-
-  Any function accepting an event map (e.g. {:service \"foo\" :metric 3.5}) can
-  be a stream. prn is a stream. So is (partial log :info), or (fn [x]). The
-  streams namespace aims to provide a comprehensive set of widely applicable,
-  combinable tools for building up more complicated streams."
+  "The streams namespace aims to provide a comprehensive set of widely
+  applicable, combinable tools for building more complex streams.
+
+  Streams are functions which accept events or, in some cases, lists of events.
+
+  Streams typically do one or more of the following.
+
+  * Filter events.
+  * Transform events.
+  * Combine events over time.
+  * Apply events to other streams.
+  * Forward events to other services.
+
+  Most streams accept, after their initial arguments, any number of streams as
+  children. These are known as children or \"child streams\" of the stream.
+  The children are typically invoked sequentially, any exceptions thrown are
+  caught, logged and optionally forwarded to *exception-stream*.
+  Return values of children are ignored.
+
+  Events are backed by a map (e.g. {:service \"foo\" :metric 3.5}), so any
+  function that accepts maps will work with events.
+  Common functions like prn can be used as a child stream.
+
+  Some common patterns for defining child streams are (fn [e] (println e))
+  and (partial log :info)."
   (:use [riemann.common :exclude [match]]
         [riemann.time :only [unix-time
                              linear-time
@@ -32,12 +46,13 @@
 (def -infinity (/ -1.0 0))

 (def ^:dynamic *exception-stream*
-  "When a stream catches an exception, it's converted to an event and send
-  here."
+  "When an exception is caught, it's converted to an event and sent here."
   nil)

 (defn expired?
-  "There are two ways an event can be considered expired. First, if it has state \"expired\". Second, if its :ttl and :time indicates it has expired."
+  "There are two ways an event can be considered expired.
+  First, if it has state \"expired\".
+  Second, if its :ttl and :time indicates it has expired."
   [event]
     (or (= (:state event) "expired")
         (when-let [time (:time event)]
@@ -46,7 +61,8 @@
             (> age ttl)))))

 (defmacro call-rescue
-  "Call each child, in order, with event. Rescues and logs any failure."
+  "Call each child (children), in order, with event.
+  Rescues and logs any failure."
   [event children]
   `(do
      (doseq [child# ~children]
@@ -56,12 +72,13 @@
            (warn e# (str child# " threw"))
            (if-let [ex-stream# *exception-stream*]
              (ex-stream# (exception->event e#))))))
+     ; TODO: Why return true?
      true))

 (defmacro exception-stream
   "Catches exceptions, converts them to events, and sends those events to a
   special exception stream.
-
+
   (exceptions-to (email \"polito@vonbraun.com\")
     (execute-on io-pool
       graph))
@@ -81,7 +98,7 @@
   need to bind this variable during the runtime execution of child streams, but
   *also* during the evaluation of the child streams themselves, e.g. at the
   invocation time of exceptions itself. If we write
-OA
+
   (exceptions (email ...)
     (rate 5 index))

@@ -101,11 +118,12 @@
   [args])

 (defn dual
-  "A stream which splits events into two mirror-images streams, based on (pred
-  e). If (pred e) is true, calls (true-stream e) and (false-stream (expire e)).
+  "A stream which splits events into two mirror-images streams, based on
+  (pred e).
+  If (pred e) is true, calls (true-stream e) and (false-stream (expire e)).
   If (pred e) is false, does the opposite. Expired events are forwarded to both
   streams.
-
+
   (pred e) is always called once per incoming event."
   [pred true-stream false-stream]
   (fn stream [event]
@@ -125,15 +143,15 @@
           (call-rescue event [false-stream]))))))

 (defn combine
-  "Returns a function which takes a seq of events. Combines events with f, then
-  forwards the result to children."
+  "Returns a function which takes a seq of events.
+  Combines events with f, then forwards the result to children."
   [f & children]
   (fn stream [events]
     (call-rescue (f events) children)))

 (defn smap*
-  "Streaming map: less magic. Calls children with (f event). Unlike smap,
-  passes on nil results to children. Example:
+  "Streaming map: less magic. Calls children with (f event).
+  Unlike smap, passes on nil results to children. Example:

   (smap folds/maximum prn) ; Prints the maximum of lists of events."
   [f & children]
@@ -196,7 +214,7 @@
   "Takes a list of functions f1, f2, f3, and returns f such that (f event)
   calls (f1 event) (f2 event) (f3 event). Useful for binding several streams to
   a single variable.
-
+
   (sdo prn (rate 5 index))"
   [& children]
   (fn stream [event]
@@ -214,7 +232,7 @@
   event; e.g. if its queue is full. Use together with
   riemann.service/executor-service for reloadable asynchronous execution of
   streams.
-
+
   (let [io-pool (service!
                   (executor-service
                     #(ThreadPoolExecutor. 1 10 ...)))
@@ -227,7 +245,7 @@
     (.execute executor
              (bound-fn runner []
                (call-rescue event children)))))
-
+
 (defn moving-event-window
   "A sliding window of the last few events. Every time an event arrives, calls
   children with a vector of the last n events, from oldest to newest. Ignores
@@ -425,7 +443,7 @@
                  (reset! task nil))
                ; We're still valid; keep going
                (f)))]
-
+
      (fn stream [event]
        ; Bump the time we're allowed to keep running for.
        (if (and (:ttl event) (:time event))
@@ -457,9 +475,9 @@
   new bin by calling (create). Applies each received event to the current bin
   with (add bin event). When the time interval is over, calls (finish bin
   start-time elapsed-time).
-
+
   Concurrency guarantees:
-
+
   (create) may be called multiple times for a given time slice.
   (add)    when called, will receive exactly one distinct bucket in each time
            slice.
@@ -497,7 +515,7 @@
         ; We have a current bin
         @state
         (add (:current @state) event)
-
+
         ; Create an initial bin
         :else
         (do
@@ -507,7 +525,7 @@
 (defn part-time-simple
   "Divides wall clock time into discrete windows. Returns a stream, composed
   of four functions:
-
+
   (reset previous-state) Given the state for the previous window, returns a
   fresh state for a new window. Reset must be a pure function, as it will be
   invoked in a compare-and-set loop. Reset may be invoked at *any* time. Reset
@@ -525,7 +543,7 @@
   window, and receives the final state for that window, and also the start
   and end times for that window. Finish will be called exactly once per window,
   and may be impure.
-
+
   When no events arrive in a given time window, no functions are called."
   ([dt reset add finish]
    (part-time-simple dt reset add (fn [state event]) finish))
@@ -588,7 +606,10 @@
               event (assoc (last @r) event-key stat)]
           (call-rescue event children)))))

-(defn fold-interval-metric [interval folder & children] (apply fold-interval interval :metric folder children))
+(defn fold-interval-metric
+  "Wrapping for fold-interval that assumes :metric as event-key."
+  [interval folder & children]
+  (apply fold-interval interval :metric folder children))

 (defn fill-in
   "Passes on all events. Fills in gaps in event stream with copies of the given
@@ -725,7 +746,6 @@
               (when-not (zero? dt)
                 (let [diff (/ (- m (:metric prev-event)) dt)]
                   (call-rescue (assoc event :metric diff) children))))))))))
-

 (defn ddt
   "Differentiate metrics with respect to time. With no args, emits an event for
@@ -801,7 +821,7 @@
 (defn counter
   "Counts things. The first argument may be an initial counter value, which
   defaults to zero.
-
+
   ; Starts at zero
   (counter index)

@@ -917,7 +937,7 @@
 (defn top
   "Bifurcates a stream into a dual pair of streams: one for the top k events,
   and one for the bottom k events.
-
+
   f is a function which maps events to comparable values, e.g. numbers. If an
   incoming event e falls in the top k, the top stream receives e and the bottom
   stream receives (expire e). If the event is *not* in the top k, calls (top
@@ -930,14 +950,14 @@
   Index the top 10 events, by metric:

   (top 10 :metric index)
-
+
   Index everything, but tag the top k events with \"top\":

   (top 10 :metric
     (adjust [:tags conj \"top\"]
       index)
     index)
-
+
   This implementation of top is lazy, in a sense. It won't proactively expire
   events which are bumped from the top-k set--you have to wait for another
   event with the same host and service to arrive before child streams will know
@@ -961,11 +981,11 @@
     (fn reset [_] 0)

     (fn add [sent event] (inc sent))
-
+
     (fn side-effects [sent event]
       (when-not (< n sent)
         (call-rescue event children)))
-
+
     (fn finish [sent start end])))

 (defn rollup
@@ -985,14 +1005,14 @@
   [n dt & children]
   (part-time-simple
     dt
-
+
     (fn reset [[sent buffer]]
       (if (empty? buffer)
         ; We didn't carry over any events from the last window
         [0 []]
         ; We did carry over events.
         [1 []]))
-
+
     (fn add [[sent buffer] event]
       (if (< sent n)
         [(inc sent) buffer]
@@ -1073,7 +1093,7 @@
   (match :metric 5 prn)
   (match expired? true prn)
   (match (fn [e] (/ (:metric e) 1000)) 5 prn)
-
+
   For cases where you only care about whether (f event) is truthy, use (where
   some-fn) instead of (match some-fn true)."
   [f value & children]
@@ -1221,7 +1241,7 @@

 (defn tag
   "Adds a new tag, or set of tags, to events which flow through.
-
+
   (tag \"foo\" index)
   (tag [\"foo\" \"bar\"] index)"
   [tags & children]
@@ -1413,7 +1433,7 @@
               (= 'else (first expr))))
           exprs)))

-(defmacro where*
+(defmacro where*
   "A simpler, less magical variant of (where). Instead of binding symbols in
   the context of an expression, where* takes a function which takes an event.
   When (f event) is truthy, passes event to children--and otherwise, passes
@@ -1421,7 +1441,7 @@

   (where* (fn [e] (< 2 (:metric e))) prn)

-  (where* expired?
+  (where* expired?
     (partial prn \"Expired\")
     (else
       (partial prn \"Not expired!\")))"
@@ -1457,7 +1477,7 @@
     (notify-www-team)
     (else
       (notify-misc-team)))
-
+
   The streams generated by (where) return the value of expr: truthy if expr
   matched the given event, and falsey otherwise. This means (where (metric 5))
   tests events and returns true if their metric is five."
@@ -1499,7 +1519,7 @@
 (defmacro split
   "Behave as for split*, expecting predicates to be (where) expressions instead
   of functions. Example:
-
+
   (split
     (< 0.9  metric) (with :state \"critical\" index)
     (< 0.75 metric) (with :state \"warning\" index)
@@ -1521,16 +1541,16 @@
   splitp returns a stream which accepts an event. Expr is a (where) expression,
   which will be evaluated against the event to obtain a value for selecting a
   clause. For each clause, evaluates (pred test-expr value). If the result is
-  logical true, evaluates (stream event) and returns that value.
-
+  logical true, evaluates (stream event) and returns that value.
+
   A single default stream can follow the clauses, and its value will be
   returned if no clause matches. If no default stream is provided and no clause
   matches, an IllegalArgumentException is thrown.
-
+
   Splitp evaluates streams once at invocation time.
-
+
   Example:
-
+
   (splitp < metric
     0.9  (with :state \"critical\" index)
     0.75 (with :state \"warning\" index)
@@ -1576,9 +1596,9 @@
 (defn runs
   "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 with (changed-state ...) as a child to reduce 'flappiness' for
-  state changes.
+  runs passes on the last (newest) event of the window. In practice, this can
+  be 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."
   [len-run field & children]
@@ -1611,7 +1631,7 @@

   May buffer events for up to dt seconds when the value of (f event) changes,
   in order to determine if the new value is stable or not.
-
+
   ; Passes on events where the state remains the same for at least five
   ; seconds.
   (stable 5 :state prn)"
@@ -1652,7 +1672,7 @@
                      (if (empty? buffer)
                        ; We're stable; flush this event immediately.
                        (assoc state :out (list event))
-
+
                        ; We're buffering.
                        (let [buffer (conj buffer event)]
                          (if (<= dt (- (:time event) (:time (first buffer))))
@@ -1699,7 +1719,7 @@
                          (if (<= n i)
                            [clean expired]
                            (if (expired? (state i))
-                             (recur (inc i)
+                             (recur (inc i)
                                     (assoc clean i nil)
                                     (assoc expired i (expire (state i))))
                              (recur (inc i) clean expired)))))
@@ -1723,7 +1743,7 @@
         (when (not (empty? indices))
           (let [[_ events] (swap! state update indices event)]
             (call-rescue events children)))))))
-
+
 (defmacro project
   "Projects an event stream into a specific basis--like (coalesce), but where
   you only want to compare two or three specific events. Takes a vector of
@@ -1797,7 +1817,7 @@
   (satisfied count + (tolerating count / 2) / total count of received events

   Ignores expired events.
-
+
   See http://en.wikipedia.org/wiki/Apdex for details."
   [dt satisfied? tolerated? & children]
   `(apdex* ~dt (where ~satisfied?) (where ~tolerated?) ~@children))
@@ -1824,8 +1844,8 @@
                             ; Figure out what time is is *now*
                             (map (fn [event]
                                    (when (:time event)
-                                     (+ (:time event)
-                                        (- now
+                                     (+ (:time event)
+                                        (- now
                                            (::clock-skew-timestamp event))))))
                             ; Drop expired events (or any others without times)
                             (remove nil?)


Make pickup of one item take fewer keystrokes

--- src/robinson/update.clj
+++ src/robinson/update.clj
@@ -748,8 +748,14 @@
                                                             (fn [_ hotkey] hotkey)
                                                             remaining-hotkeys
                                                             (map :hotkey items))))
-          selected-items     (vec (divided-items :selected))
-          not-selected-items (vec (divided-items :not-selected))
+          selected-items     (if (= (count items) 1)
+                               ;; if just one item, then auto select it and pick it up
+                               items
+                               (vec (divided-items :selected)))
+          not-selected-items (if (= (count items) 1)
+                               ;; if just one item, then auto select it and not-selected is empty
+                               []
+                               (vec (divided-items :not-selected)))
           remaining-hotkeys  (vec (remove #(some (partial = %) (map :hotkey selected-items)) remaining-hotkeys))]
       (log/info "divided-items" divided-items)
       (log/info "selected-items" selected-items)
@@ -766,7 +772,9 @@
                               remaining-hotkeys)
                           ;; reset selected-hotkeys
                           (assoc-in [:world :selected-hotkeys] #{}))]
-          new-state)
+          (if (= (count items) 1)
+            (rw/assoc-current-state new-state :normal)
+            new-state))
         state)))

 (defn pickup-directions
@@ -1155,7 +1163,9 @@
           (rc/append-log "Nothing to pick up.")
           (rw/assoc-current-state :normal))
       (= (count directions) 1)
-        (assoc-pickup-target state (first directions))
+        (-> state
+          (assoc-pickup-target (first directions))
+          pick-up)
       :else
         (rw/assoc-current-state state :pickup))))


made getIncoming work with sets and vectors

--- src/graph/core.cljx
+++ src/graph/core.cljx
@@ -169,7 +169,7 @@

 (defn getIncoming
   ([graph relName vertKey]
-    (if (vector? vertKey)
+    (if (or (vector? vertKey) (set? vertKey)) ; support a sequence of ids
       (vec (mapset
         (fn [key]
           (getIncoming graph relName key))


More bogus dev components

More bogus dev components

--- src/icecap/core.clj
+++ src/icecap/core.clj
@@ -1,5 +1,6 @@
 (ns icecap.core
   (:require [icecap.rest :as rest]
+            [icecap.crypto :refer [bogus-kdf bogus-scheme]]
             [icecap.store.mem :refer [mem-store]]
             [org.httpkit.server :refer [run-server]])
   (:gen-class))
@@ -8,6 +9,6 @@
   "Run the (development) server."
   [& args]
   (let [dev-mode (= args ["dev"])
-        components {:store (mem-store)}
-        handler (rest/build-site components dev-mode)]
+        components {:store (mem-store) :kdf (bogus-kdf) :scheme (bogus-scheme)}
+        handler (rest/build-site components :dev-mode dev-mode)]
     (run-server handler {:port 8080})))


Add two additional frame predicates.

Add two additional frame predicates.

--- src/postal/frames.cljc
+++ src/postal/frames.cljc
@@ -72,3 +72,17 @@
   instance of Frame type."
   [frame]
   (instance? Frame frame))
+
+(defn error?
+  "Return true if a provided frame is a true
+  instance of Frame and it is of error type."
+  [frame]
+  (and (frame? frame)
+       (= (:command frame) :error)))
+
+(defn response?
+  "Return true if a provided frame is a true
+  instance of Frame and it is of response type."
+  [frame]
+  (and (frame? frame)
+       (= (:command frame) :response)))


Refactor state-watcher, update-history only once per step, so write to storage only once per step

--- src/pot/core/hand.cljs
+++ src/pot/core/hand.cljs
@@ -2,20 +2,34 @@
   (:require [pot.core.bl :refer [move-left move-right move-up move-down add-random-cell]]
             [pot.core.comp :refer [init-state init-history]]))

+(defn- update-history
+  [history old new]
+  (let [cursor (:cursor history)
+        prev-snapshot (get-in history [:snapshots (dec cursor)])
+        next-snapshot (get-in history [:snapshots (inc cursor)])]
+    (letfn [(save-old
+              [history]
+              (assoc-in history [:snapshots cursor] old))
+            (truncate
+              [history]
+              (if (and next-snapshot (not= new prev-snapshot) (not= new next-snapshot))
+                (update-in history [:snapshots] (comp vec (partial take (inc cursor))))
+                history))
+            (save-new
+              [history]
+              (if (not= new prev-snapshot)
+                (assoc-in history [:snapshots (inc cursor)] new)
+                history))
+            (update-cursor
+              [history]
+              (update-in history [:cursor] (if (= new prev-snapshot) dec inc)))]
+      (-> history save-old truncate save-new update-cursor))))
+
 (defn state-watcher
   [_ history]
   (fn [_ _ old new]
-    (let [history-value @history
-          cursor (:cursor history-value)
-          prev-snapshot (get-in history-value [:snapshots (dec cursor)])
-          next-snapshot (get-in history-value [:snapshots (inc cursor)])]
-      (when (not= old new)
-        (swap! history assoc-in [:snapshots cursor] old)
-        (when (not= new prev-snapshot)
-          (when (and next-snapshot (not= new next-snapshot))
-            (swap! history update-in [:snapshots] (comp vec (partial take (inc cursor)))))
-          (swap! history assoc-in [:snapshots (inc cursor)] new))
-        (swap! history update-in [:cursor] (if (= new prev-snapshot) dec inc))))))
+    (when (not= old new)
+      (swap! history update-history old new))))

 (defn history-watcher
   [storage key]


Bumped version to sign and release to clojars

--- clients/clojure/project.clj
+++ clients/clojure/project.clj
@@ -1,4 +1,4 @@
-(defproject samsara/samsara-client "0.1.0"
+(defproject samsara/samsara-client "0.1.1"
   :description "Clojure SDK for Samsara"
   :url "http://samsara.github.io"
   :license {:name "Apache License 2.0"


Delete updates.clj

Delete updates.clj

--- bin/codestarter/views/updates.clj
+++ bin/codestarter/views/updates.clj
@@ -1,80 +0,0 @@
-(ns codestarter.views.updates
-  (:use codestarter.views.common
-        [codestarter.views.comments :only (comments*)]
-        hiccup.core
-        hiccup.form-helpers
-        [hiccup.page-helpers :exclude (url)]
-        korma.core
-        korma.db)
-  (:require [noir.validation :as vali]))
-
-(defn index [id {:keys [params] :as request}]
-  (body* [project (select-one projects (where {:id id}) (with updates (with users) (order :id :DESC)))]
-        true
-        request
-        (html
-          (header project request)
-          (if (= (project :user_id) (:id (get-user request)))
-            [:p (link-to {:class "button"} "create/" "create update")])
-          (if (empty? (project :updates))
-            (html [:hr] [:em "No updates"])
-            [:ul#updates.items
-             (map
-               #(vector :li
-                        [:h3 (% :title)
-                         [:small
-                          [:span (link-to (url "users" (% :user_id))
-                                          (display %))]
-                          [:span.muted (pretty-time (% :time))]]]
-                        [:div (markdown (% :update))]
-                        [:div (link-to (str (% :id) "/")
-                                       (get-count comments {:update_id (% :id)}) " comments")])
-               (project :updates))]))))
-
-(defn show [id update-id {:keys [params] :as request}]
-  (body* [update (select-one updates (where {:id update-id})
-                            (with projects)
-                            (with users)
-                            (with comments
-                              (with users)))]
-        true
-        request
-        (html
-          (header (assoc update :id (update :id_2)) request :uri (url "projects" id "updates"))
-          [:h2 (update :title)
-           [:small
-            [:span (link-to (url "users" (update :user_id)) (display update))]
-            [:span.muted (pretty-time (update :time))]]]
-          [:div (markdown (update :update))]
-          [:hr]
-          [:h3 "comments"]
-          (comments* id {:update_id update-id} params request))))
-
-(defn create [id {:keys [params] :as request}]
-  (body* [project (select-one projects (where {:id id}))]
-        (= (project :user_id) (:id (get-user request)))
-        request
-        (html
-          (header project request :uri (url "projects" id "updates"))
-          [:h2 "create update"]
-          (form-to [:post "."]
-                   (csrf)
-                   (control :title (text-field :title (params :title)))
-                   (wmd params :big true)
-                   [:button.button "create update"]))
-        (let [{:keys [title wmd-input]} params]
-          (required params :title)
-          (vali/rule (vali/has-value? wmd-input)
-                     [:wmd-input "Update is required."])
-          (vali/rule (empty? (select updates (where {:project_id id :title title})))
-                     [:title "Title must be unique."]))
-        "update!"
-        (let [user (get-user request)
-              update (insert updates (values {:project_id id
-                                              :time (timestamp)
-                                              :user_id (user :id)
-                                              :title (params :title)
-                                              :update (params :wmd-input)}))]
-          (notify id user (update :time) :update (update :title)
-                  (url "projects" id "updates" (update :id)) (update :update))
-          (redirect (format "/projects/%s/updates/" id)))))


Revised pointcut/1. Renamed pointcutdefinition-pointcut/2 to pointcut-pointcutdefinition/2. New relations aspect-pointcutdefinition+/2, aspect-pointcutdefinition+|exposed/2 (in addition to the older aspect-pointcutdefinition/2) and friends. Difference best illustrated on AJ-LMP-RefineUsedPointcut.  Related to #6.

--- EkekoAspectJ/src/damp/ekeko/aspectj/weaverworld.clj
+++ EkekoAspectJ/src/damp/ekeko/aspectj/weaverworld.clj
@@ -458,7 +458,6 @@
     (type-methods ?resolvedtype ?methods)
     (contains ?methods ?method)))

-
 (defn
   type-method+
   "Relation between a type and one of its declared or inherited methods (as known to the weaver)."
@@ -1040,83 +1039,6 @@
          (advice ?advice)
          (equals ?pointcut (.getPointcut ?advice))))

-(clojure.core/declare pointcutdefinition-pointcut)
-
-(defn
-  pointcut
-  "Relation of all pointcuts known to the AspectJ weaver.
-   Note that these are not pointcut definitions."
-  [?pointcut]
-  (fresh [?pointcutdefinition]
-         (pointcutdefinition-pointcut ?pointcutdefinition ?pointcut)))
-
-
-(defn
-  advice-pointcut
-  "Relation between an Advice ?advice and its Pointcut ?pointcut.
-   Note that these are different from the ResolvedPointcutDefinition instances returned
-   by aspect-pointcutdefinition."
-  [?advice ?pointcut]
-  (fresh [?raw]
-         (advice-poincut|raw ?advice ?raw)
-         (succeeds (instance? AndPointcut ?raw)) ;;TODO: check whether others are possible?
-         (equals ?pointcut (.getLeft ?raw))))
-
-(defn
-  advice-pointcutdefinition
-  [?advice ?pointcutdefinition]
-  (fresh [?pc]
-         (advice-pointcut ?advice ?pc)
-         (pointcutdefinition-pointcut ?pointcutdefinition ?pc)))
-
-
-
-
-;;TODO: decide whether to define relations on Pointcut hierarcy or on PointcutDefinitionHierarchy?
-;; (latter is probably better, given concrete/abstract)
-
-
-;; Pointcut definitions
-;; --------------------
-
-(defn
-  aspect-pointcutdefinitions
-  "Relation between an aspect and its declared pointcutdefinitions.
-   Note that these are instances of ResolvedPointcutDefinition,
-   rather than the Pointcut instances within ShadowMungers (advice)."
-  [?aspect ?pointcutdefinitions]
-  (all
-    (aspect ?aspect)
-    (equals ?pointcutdefinitions (.getDeclaredPointcuts ?aspect))))
-
-(def
-  ^{:doc "Alias for aspect-pointcutdefinitions."}
-  type-pointcutdefinitions
-  aspect-pointcutdefinitions)
-
-(defn
-  aspect-pointcutdefinition
-  "Relation between an aspect and one of the pointcuts it declares.
-   Note that these are instances of ResolvedPointcutDefinition,
-   rather than the Pointcut instances within ShadowMungers (advice)."
-  [?aspect ?pointcutdefinition]
-  (fresh [?pointcutdefinitions]
-         (aspect-pointcutdefinitions ?aspect ?pointcutdefinitions)
-         (contains ?pointcutdefinitions ?pointcutdefinition)))
-
-(def
-  ^{:doc "Alias for aspect-pointcutdefinition."}
-  type-pointcutdefinition
-  aspect-pointcutdefinition)
-
-(defn
-  pointcutdefinition
-  "Relation of pointcuts known to the weaver.
-   Note: these are instances of ResolvedPointcutDefinition."
-  [?pointcut]
-  (fresh [?aspect]
-         (aspect-pointcutdefinition ?aspect ?pointcut)))
-

 ;; some info:
 ;; KindedPointcut or MatchesNothingPointcut returned by
@@ -1143,11 +1065,240 @@
 ;;                     ))

-(defn
-  pointcutdefinition-pointcut
-  "Relation between a PointcutDefinition and its Pointcut."
-  [?pointcutdefinition ?pointcut]
-  (all
+
+(defn
+  advice-pointcut
+  "Relation between an Advice ?advice and its Pointcut ?pointcut.
+   Note that these are different from the ResolvedPointcutDefinition instances returned
+   by aspect-pointcutdefinition."
+  [?advice ?pointcut]
+  (fresh [?raw]
+         (advice-poincut|raw ?advice ?raw)
+         (succeeds (instance? AndPointcut ?raw)) ;;TODO: check whether others are possible?
+         (equals ?pointcut (.getLeft ?raw))))
+
+
+(defn
+  pointcut
+  "Relation of all Pointcuts referred to be Advices.
+   Note that these are not PointcutDefinitions, of which there might be fewer."
+  [?pointcut]
+  (fresh [?advice]
+         (advice-pointcut ?advice ?pointcut)))
+
+
+
+(clojure.core/declare pointcut-pointcutdefinition)
+
+(defn
+  advice-pointcutdefinition
+  "Relation between an Advice and the PointcutDefinition of its Pointcut,
+   if it exist."
+  [?advice ?pointcutdefinition]
+  (fresh [?pc]
+         (advice-pointcut ?advice ?pc)
+         (pointcut-pointcutdefinition ?pc ?pointcutdefinition)))
+
+
+
+;;TODO: decide whether to define relations on Pointcut hierarcy or on PointcutDefinitionHierarchy?
+;; (former is probably better, as there are advices with inline pointcuts)
+
+
+;; Pointcut definitions
+;; --------------------
+
+(defn
+  type-pointcutdefinitions
+  "Relation between a type and its declared pointcutdefinitions.
+   Note that these are instances of ResolvedPointcutDefinition,
+   rather than the Pointcut instances within ShadowMungers (advice)."
+  [?type ?pointcutdefinitions]
+  (all
+    (type ?type)
+    (equals ?pointcutdefinitions (.getDeclaredPointcuts ?type))))
+
+(defn
+  aspect-pointcutdefinitions
+  "Relation between an aspect and its declared pointcutdefinitions."
+  [?aspect ?pointcutdefinitions]
+  (all
+    (aspect ?aspect)
+    (type-pointcutdefinitions ?aspect ?pointcutdefinitions)))
+
+(defn
+  class-pointcutdefinitions
+  "Relation between a class and its declared pointcutdefinitions."
+  [?class ?pointcutdefinitions]
+  (all
+    (class ?class)
+    (type-pointcutdefinitions ?class ?pointcutdefinitions)))
+
+(defn
+  type-pointcutdefinitions+
+  "Relation between a type and all of its own and inherited pointcutdefinitions.
+   Includes overriddens and overriders.
+
+   See also: type-pointcutdefinitions+|exposed where overrides are resolved."
+  [?type ?pointcutdefinitions]
+  (all
+    (type ?type)
+    (equals ?pointcutdefinitions (vec (iterator-seq (.getPointcuts ?type))))))
+
+(defn
+  aspect-pointcutdefinitions+
+  "Relation between an aspect and all of its own and inherited pointcutdefinitions.
+   Includes overriddens and overriders.
+
+   See also: aspect-pointcutdefinitions+|exposed where overrides are resolved."
+  [?aspect ?pointcutdefinitions]
+  (all
+    (aspect ?aspect)
+    (type-pointcutdefinitions+ ?aspect ?pointcutdefinitions)))
+
+(defn
+  class-pointcutdefinitions+
+  "Relation between a class and all of its own and inherited pointcutdefinitions.
+   Includes overriddens and overriders.
+
+   See also: class-pointcutdefinitions+|exposed where overrides are resolved."
+  [?class ?pointcutdefinitions]
+  (all
+    (class ?class)
+    (type-pointcutdefinitions+ ?class ?pointcutdefinitions)))
+
+(defn
+  type-pointcutdefinition
+  "Relation between a type (aspect or class) and one of the pointcuts it declares.
+   Note that these are instances of ResolvedPointcutDefinition,
+   rather than the Pointcut instances within ShadowMungers (advice)."
+  [?type ?pointcutdefinition]
+  (fresh [?pointcutdefinitions]
+         (type-pointcutdefinitions ?type ?pointcutdefinitions)
+         (contains ?pointcutdefinitions ?pointcutdefinition)))
+
+(defn
+  aspect-pointcutdefinition
+  "Relation between an aspect and one of the pointcuts it declares."
+  [?aspect ?pointcutdefinition]
+  (fresh [?pointcutdefinitions]
+         (aspect-pointcutdefinitions ?aspect ?pointcutdefinitions)
+         (contains ?pointcutdefinitions ?pointcutdefinition)))
+
+(defn
+  class-pointcutdefinition
+  "Relation between an aspect and one of the pointcuts it declares."
+  [?class ?pointcutdefinition]
+  (fresh [?pointcutdefinitions]
+         (class-pointcutdefinitions ?class ?pointcutdefinitions)
+         (contains ?pointcutdefinitions ?pointcutdefinition)))
+
+(defn
+  type-pointcutdefinition+
+  "Relation between a type and one of its own or inherited pointcutdefinitions.
+   Includes overriddens and overriders.
+
+   See also: type-pointcutdefinition+|exposed where overrides are resolved."
+  [?type ?pointcutdefinition]
+  (fresh [?pointcutdefinitions]
+         (type-pointcutdefinitions+ ?type ?pointcutdefinitions)
+         (contains ?pointcutdefinitions ?pointcutdefinition)))
+
+(defn
+  aspect-pointcutdefinition+
+  "Relation between an aspect and one of its own or inherited pointcutdefinitions.
+   Includes overriddens and overriders.
+
+   See also: aspect-pointcutdefinition+|exposed where overrides are resolved."
+  [?aspect ?pointcutdefinition]
+  (fresh [?pointcutdefinitions]
+         (aspect-pointcutdefinitions+ ?aspect ?pointcutdefinitions)
+         (contains ?pointcutdefinitions ?pointcutdefinition)))
+
+(defn
+  class-pointcutdefinition+
+  "Relation between a class and one of its own or inherited pointcutdefinitions.
+   Includes overriddens and overriders.
+
+   See also: aspect-pointcutdefinition+|exposed where overrides are resolved."
+  [?class ?pointcutdefinition]
+  (fresh [?pointcutdefinitions]
+         (class-pointcutdefinitions+ ?class ?pointcutdefinitions)
+         (contains ?pointcutdefinitions ?pointcutdefinition)))
+
+(defn
+  type-pointcutdefinitions+|exposed
+  "Relation between a type and all of its exposed pointcutdefinitions.
+   In contrast to type-pointcutdefinitions+, overrides are resolved."
+  [?type ?pointcutdefinitions]
+  (all
+    (type ?type)
+    (equals ?pointcutdefinitions (vec (.getExposedPointcuts ?type)))))
+
+(defn
+  aspect-pointcutdefinitions+|exposed
+  "Relation between an aspect and all of its exposed pointcutdefinitions.
+   In contrast to aspect-pointcutdefinitions+, overrides are resolved."
+  [?aspect ?pointcutdefinitions]
+  (all
+    (aspect ?aspect)
+    (type-pointcutdefinitions+|exposed ?aspect ?pointcutdefinitions)))
+
+(defn
+  class-pointcutdefinitions+|exposed
+  "Relation between a class and all of its exposed pointcutdefinitions.
+   In contrast to class-pointcutdefinitions+, overrides are resolved."
+  [?class ?pointcutdefinitions]
+  (all
+    (aspect ?class)
+    (type-pointcutdefinitions+|exposed ?class ?pointcutdefinitions)))
+
+(defn
+  type-pointcutdefinition+|exposed
+  "Relation between a type and one of its exposed pointcutdefinitions.
+   In contrast to type-pointcutdefinition+, overrides are resolved."
+  [?type ?pointcutdefinition]
+  (fresh [?pointcutdefinitions]
+    (type-pointcutdefinitions+|exposed ?type ?pointcutdefinitions)
+    (contains ?pointcutdefinitions ?pointcutdefinition)))
+
+(defn
+  class-pointcutdefinition+|exposed
+  "Relation between a class and one of its exposed pointcutdefinitions.
+   In contrast to class-pointcutdefinition+, overrides are resolved."
+  [?type ?pointcutdefinition]
+  (fresh [?pointcutdefinitions]
+    (class-pointcutdefinitions+|exposed ?type ?pointcutdefinitions)
+    (contains ?pointcutdefinitions ?pointcutdefinition)))
+
+(defn
+  aspect-pointcutdefinition+|exposed
+  "Relation between a aspect and one of its exposed pointcutdefinitions.
+   In contrast to aspect-pointcutdefinition+, overrides are resolved."
+  [?type ?pointcutdefinition]
+  (fresh [?pointcutdefinitions]
+    (aspect-pointcutdefinitions+|exposed ?type ?pointcutdefinitions)
+    (contains ?pointcutdefinitions ?pointcutdefinition)))
+
+
+(defn
+  pointcutdefinition
+  "Relation of pointcut definitions known to the weaver.
+   Note: these are instances of ResolvedPointcutDefinition."
+  [?pointcutdefinition]
+  (fresh [?type]
+         (type-pointcutdefinition ?type ?pointcutdefinition)))
+
+
+(clojure.core/declare pointcut)
+
+(defn
+  pointcut-pointcutdefinition
+  "Relation between a Pointcut and the PointcutDefinition it refers to,
+   if any."
+  [?pointcut ?pointcutdefinition]
+  (all
+    (pointcut ?pointcut)
     (pointcutdefinition ?pointcutdefinition)
     (equals ?pointcut (.getPointcut ?pointcutdefinition))))

@@ -1594,4 +1745,17 @@
     (element-enclosingtypedeclaration-element  ?shadow ?element)
     (element-type ?element ?type)))

+
+
+;; Names
+;; -----
+
+
+(defn
+  type-name
+  "Relation between a type and its name as a user-friendly string."
+  [?type ?namestring]
+  (all
+    (type ?type)
+    (equals ?namestring (.getName ?type))))


print config read/write diagnostic messages to STDERR by default

--- src/keypin/core.clj
+++ src/keypin/core.clj
@@ -95,8 +95,8 @@
   ([config]
     (realize-config config {}))
   ([config {:keys [info-logger error-logger config-mapper]
-            :or {info-logger   #(println "[keypin] [info]" %)
-                 error-logger  #(println "[keypin] [error]" %)
+            :or {info-logger   #(binding [*out* *err*] (println "[keypin] [info]" %))
+                 error-logger  #(binding [*out* *err*] (println "[keypin] [error]" %))
                  config-mapper Mapper/DEFAULT}
             :as options}]
     (let [logger (reify Logger
@@ -110,8 +110,8 @@
   (^Map [config-filenames]
     (read-config config-filenames {:parent-key "parent"}))
   (^Map [config-filenames {:keys [^String parent-key info-logger error-logger config-readers config-mapper realize?]
-                           :or {info-logger    #(println "[keypin] [info]" %)
-                                error-logger   #(println "[keypin] [error]" %)
+                           :or {info-logger    #(binding [*out* *err*] (println "[keypin] [info]" %))
+                                error-logger   #(binding [*out* *err*] (println "[keypin] [error]" %))
                                 config-readers [property-file-io edn-file-io]
                                 realize?       true}
                            :as options}]
@@ -131,8 +131,8 @@
   ([config-filename config]
     (write-config config-filename config {}))
   ([config-filename config {:keys [info-logger error-logger config-writers escape?]
-                            :or {info-logger    #(println "[keypin] [info]" %)
-                                 error-logger   #(println "[keypin] [error]" %)
+                            :or {info-logger    #(binding [*out* *err*] (println "[keypin] [info]" %))
+                                 error-logger   #(binding [*out* *err*] (println "[keypin] [error]" %))
                                  config-writers [property-file-io edn-file-io]
                                  escape?        true}
                             :as options}]


Reader comment. I regret nothing.

Reader comment. I regret nothing.

--- src/korhal/core.clj
+++ src/korhal/core.clj
@@ -88,7 +88,8 @@

 (defn korhal-keyPressed [this keycode]
   (case keycode
-    82 (repl-control! :toggle)))
+    #_R 82 (repl-control! :toggle)
+    nil))

 (defn korhal-matchEnded [this winner])
 (defn korhal-sendText [this text])


Start on extract-children-links.

Start on extract-children-links.

--- project/scrape-summitpost-data/src/scrape_summitpost_data/extract_from_item.clj
+++ project/scrape-summitpost-data/src/scrape_summitpost_data/extract_from_item.clj
@@ -1,5 +1,6 @@
 (ns scrape-summitpost-data.extract-from-item
-  (:require [reaver]))
+  (:require [clojure.string :as string]
+            [reaver]))

 (defn extract-item-name
   "Given the base url of summitpost a url to an item (such as a mountain),
@@ -13,3 +14,35 @@
   the main article."
   [page]
   (reaver/extract (reaver/parse page) [] "article" reaver/text))
+
+(defn- select-left-box-elements
+  [node]
+  (reaver/select node "#left_box div[class^=\"left_box\"]"))
+
+(defn- extract-left-box-heading
+  [node]
+  (reaver/extract node [] ".left_box_heading" reaver/text))
+
+(defn- is-children-heading?
+  [node]
+  (let [heading (or (extract-left-box-heading node) "")]
+    (string/starts-with? heading "Children")))
+
+(defn- extract-left-box-link
+  [node]
+  (reaver/extract
+    node
+    []
+    ".left_box_list_angle_bluegray > a" (reaver/attr :href)))
+
+(defn extract-children-links
+  "Given a string containing an item page from summitpost, return links to all
+  pages under the 'Children' header in the left sidebar."
+  [page]
+  (->> (reaver/parse page)
+       (select-left-box-elements)
+       (drop-while #(not (is-children-heading? %)))
+       (drop 1)
+       (take-while #(nil? (extract-left-box-heading %)))
+       (keep extract-left-box-link)))
+


Fxied a bug uncovered by the shale-python tests.

--- src/shale/sessions.clj
+++ src/shale/sessions.clj
@@ -62,7 +62,7 @@
                (map #(into #{} (select-keys % exact-match-keys))
                     [requirements session-model])])

-      (apply = (map host-resolved-url
+      (apply = (map (comp str host-resolved-url)
                     (filter identity
                             (map #(get-in % [:node :url])
                                  [session-model requirements])))))))


Fix ClojureScript compilation warning with monad.

--- src/active/clojure/monad.cljc
+++ src/active/clojure/monad.cljc
@@ -3,6 +3,7 @@
   #?(:cljs (:require-macros [active.clojure.record :refer (define-record-type)]
                             [active.clojure.monad :refer (monadic)]))
   (:require #?(:clj [active.clojure.record :refer :all])
+            #?(:cljs active.clojure.record)
             #?(:clj [clojure.core :as core])
             #?(:cljs [cljs.core :as core])
             [active.clojure.condition :as c]))


Working for positive cases

Working for positive cases

--- src/alphabet_diamond/core.clj
+++ src/alphabet_diamond/core.clj
@@ -25,10 +25,8 @@

 (defn diamond [letter]
 	(let [commands (commands-for letter)]
-		(print (map row commands))
-		)
-	)
+		(map row commands)))

 (defn -main
   	[& args]
-  	(diamond args))
+  	(doall (map println (diamond (first args)))))


Fold dimension back into a function of board

--- src/tile_game/grid.cljs
+++ src/tile_game/grid.cljs
@@ -11,8 +11,7 @@
           "#0000C0" "#3030FF" "#800080" "#FF00FF"]))

 (defonce app-state
-  (r/atom {:board (b/create-board 5)
-           :dim 5}))
+  (r/atom {:board (b/create-board 5)}))

 (defn render-tile [[x y] tile]
   (if-not (zero? tile)
@@ -25,7 +24,8 @@
         (str tile)]])))

 (defn tile-grid []
-  (let [{:keys [board dim]} @app-state]
+  (let [{:keys [board]} @app-state
+        dim (b/dimension board)]
     [:center
      [:h1 "Tile Grid"]
      [:svg {:view-box (str "0 0 " dim " " dim) :width 800 :height 800}


Fix indent

Fix indent

--- src/antlion_clojure/redis.clj
+++ src/antlion_clojure/redis.clj
@@ -6,13 +6,13 @@
   [& body]
   `(wcar {:pool {} :spec {:host (env :redis-master-host)
                           :port (some-> (env :redis-master-port) Integer.)}}
-            ~@body))
+         ~@body))

 (defmacro slave-wcar*
   [& body]
   `(wcar {:pool {} :spec {:host (env :redis-slave-host)
                           :port (some-> (env :redis-slave-port) Integer.)}}
-            ~@body))
+         ~@body))

 (def key-leaving-allowed?
   "is_leaving_allowed/")


It'd help if I actually ran the tests, of course [IMMUTANT-77]

--- integration-tests/apps/tx/immutant.clj
+++ integration-tests/apps/tx/immutant.clj
@@ -3,7 +3,7 @@
   (:use ring.middleware.params)
   (:require [immutant.web :as web]
             [clojure.string :as str]
-            [tx core scope listen]))
+            [tx core scope listen korma]))

 (defn response [body]
   {:status 200
@@ -12,7 +12,7 @@

 (defn handler [{params :params}]
   (apply tx.core/testes (str/split (params "dbs") #","))
-  (response (run-tests 'tx.core 'tx.scope 'tx.listen)))
+  (response (run-tests 'tx.core 'tx.scope 'tx.listen 'tx.korma)))

 (web/start "/" (wrap-params handler))


Minor change on fixtures.

Minor change on fixtures.

--- src/uxbox/fixtures.clj
+++ src/uxbox/fixtures.clj
@@ -30,6 +30,8 @@
   (-> (t/encode data)
       (codecs/bytes->str)))

+(def ^:private password (hashers/encrypt "123123"))
+
 (defn- create-user
   [conn i]
   (println "create user" i)
@@ -38,12 +40,12 @@
                        :id (mk-uuid "user" i)
                        :fullname (str "User " i)
                        :metadata {}
-                       :password (hashers/encrypt "123123")
+                       :password password
                        :email (str "user" i ".test@uxbox.io")}))

 (defn- create-project
   [conn i ui]
-  (Thread/sleep 20)
+  ;; (Thread/sleep 20)
   (println "create project" i "for user" ui)
   (sproj/create-project conn
                         {:id (mk-uuid "project" i)
@@ -52,7 +54,7 @@

 (defn- create-page
   [conn i pi ui]
-  (Thread/sleep 20)
+  ;; (Thread/sleep 1)
   (println "create page" i "for user" ui "for project" pi)
   (spag/create-page conn
                     {:id (mk-uuid "page" i)
@@ -64,20 +66,24 @@
                      :height 768
                      :layout "tablet"}))

+(def num-users 1000)
+(def num-projects 5)
+(def num-pages 5)
+
 (defn init
   []
   (mount/start)
   (with-open [conn (up/get-conn)]
     (sc/atomic conn
-      (doseq [i (range 10)]
+      (doseq [i (range num-users)]
         (create-user conn i))

-      (doseq [ui (range 10)]
-        (doseq [i (range 10)]
+      (doseq [ui (range num-users)]
+        (doseq [i (range num-projects)]
           (create-project conn (str ui i) ui)))

-      (doseq [pi (range 10)]
-        (doseq [ui (range 10)]
-          (doseq [i (range 10)]
-            (create-page conn (str pi ui i) (str ui i) ui))))))
+      (doseq [pi (range num-projects)]
+        (doseq [ui (range num-users)]
+          (doseq [i (range num-pages)]
+            (create-page conn (str pi ui i) (str ui pi) ui))))))
   (mount/stop))


Support 0, 1 or more in plural translations

--- src/uxbox/locales.cljs
+++ src/uxbox/locales.cljs
@@ -34,7 +34,14 @@
    (let [value (get-in +locales+ [+locale+ t] (name t))
          plural (first (filter c? args))
          args (mapv #(if (c? %) @% %) args)
-         value (if vector?
+         value (cond
+                 (and (vector? value)
+                      (= 3 (count value)))
+                 (nth value (min 2 @plural))
+
+                 (vector? value)
                  (if (= @plural 1) (first value) (second value))
+
+                 :else
                  value)]
      (apply str/format value args))))


placeholder: more functions and closures in Clojure

--- clojure/clojure.clj
+++ clojure/clojure.clj
@@ -1,4 +1,4 @@
-(use '[clojure.string :only (join)])
+(use '[clojure.string :only (join upper-case)])

 (defn messenger-builder [greeting func]
   (fn [who] (func greeting who))) ; closes over greeting
@@ -37,4 +37,61 @@
 (assert (= "Hello, Clojure!" (greeting "Clojure")))
 (assert (= "Good morning, Clojure!" (greeting "Good morning" "Clojure")))

-(println "Allez Gut!")
+(println "=> Allez Gut!")
+
+(defn my-identity [x] x)
+(println (my-identity 359))
+
+(defn always-thing [& _] 5759)
+(println (always-thing 89 179 359 791 1439 2879))
+
+(defn my-constantly [x] (fn [& _] x))
+(let [n (rand-int Integer/MAX_VALUE)
+      f (my-constantly n)]
+  (assert (= n (f)))
+  (assert (= n (f 123)))
+  (assert (= n (apply f 123 (range)))))
+
+(println "=> Allez OK!")
+
+(defn triplicate [f]
+  (f) (f) (f))
+(triplicate #(println "ding!"))
+
+(defn my-complement [f]
+  (fn [& args] (not (apply f args))))
+(let [f (my-complement (fn [] true))]
+  (println (f)))
+(let [f (my-complement #(my-identity false))]
+  (println (f)))
+(let [f (my-complement #(and %1 %2))]
+  (println (f true true)))
+(let [f (my-complement #(and %1 %2))]
+  (println (f true false)))
+(let [f (my-complement #(reduce (fn [a b] (and a b)) %&))]
+  (println (f true true true false)))
+
+(defn triplicate2 [f & args]
+  (triplicate #(apply f args)))
+(triplicate2 println "ding" "again!")
+
+(println "The cosine of pi is:" (Math/cos Math/PI))
+(let [a (Math/pow (Math/cos 359) 2)
+      b (Math/pow (Math/sin 359) 2)]
+  (println "For some x, sin(x)^2 + cos(x)^2:" (+ a b)))
+
+(defn http-get [url]
+  (slurp
+    (.openStream
+      (java.net.URL. url))))
+(println (http-get "https://api.ipify.org/"))
+
+(defn one-less-arg [f x]
+  (fn [& args] (apply f x args)))
+(def foo (one-less-arg println "first"))
+(foo "second")
+
+(defn two-fns [f g]
+  (fn [arg] (f (g arg))))
+(let [foo (two-fns println upper-case)]
+  (foo "foo"))


Update alias.clj

Update alias.clj

--- example/src/alias.clj
+++ example/src/alias.clj
@@ -11,13 +11,8 @@
 (defn load-config [path]
   (-> (io/resource path)
       repl/load-config
-      (update-in [:databases :psql-dev] url)
-      (update-in [:databases :dt-dev] url)
-      (update-in [:databases :hive-dev] (partial url :subnamef :subname))
-
       ;; to test mem db
-      (assoc-in [:databases :dt-dev :url] "datomic:mem://foo")
-      ))
+      (assoc-in [:databases :dt-dev :url] "datomic:mem://foo")))

 ;; -------------------------------------------------------------------
 ;; lein aliases


delineate type desc with an mdash

delineate type desc with an mdash

--- app/src/semtag_web/rendering.cljs
+++ app/src/semtag_web/rendering.cljs
@@ -345,7 +345,9 @@

 (defn render-type-results [_ [_ path _ new-value] input-queue]
   (let [{:keys [things tags type]} new-value]
-    (set-page-title (format "
Type %s %s
" (:name type) (or (:desc type) "")))
+    (set-page-title (format "
Type %s %s
"
+                            (:name type)
+                            (if (:desc type) (str "— " (:desc type) "") "")))
     (dom/set-html!
      (dom/by-id "content")
       (html


Version 0.2.10

Version 0.2.10

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject sbsk "0.2.10-SNAPSHOT"
+(defproject sbsk "0.2.10"
   :description "FIXME: write description"
   :url "http://example.com/FIXME"
   :license {:name "Eclipse Public License"


bump to cascading 2.0

bump to cascading 2.0

--- project.clj
+++ project.clj
@@ -5,7 +5,7 @@
   :repositories {"conjars" "http://conjars.org/repo"}
   :dependencies [[elephantdb "0.2.0-wip3"]
                  [org.slf4j/slf4j-api "1.6.1"]
-                 [cascading/cascading-hadoop "2.0.0-wip-281"
+                 [cascading/cascading-hadoop "2.0.0"
                   :exclusions [org.codehaus.janino/janino
                                org.apache.hadoop/hadoop-core]]]
   :dev-dependencies [[org.apache.hadoop/hadoop-core "0.20.2-dev"]


Fix version

Fix version

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject deraen/less4clj "0.3.3-SNAPSHOT"
+(defproject deraen/less4clj "0.3.4-SNAPSHOT"
   :description "Wrapper for Less4j"
   :url "https://github.com/deraen/less4clj"
   :license {:name "Eclipse Public License"


Initial push.

Initial push.

--- project.clj
+++ project.clj
@@ -1,6 +1,6 @@
 (defproject csv-emailer "0.1.0-SNAPSHOT"
-  :description "FIXME: write description"
-  :url "http://example.com/FIXME"
+  :description "Tool for emailing promo codes from a CSV file."
+  :url "https://github.com/RGrun/csv-emailer"
   :license {:name "Eclipse Public License"
             :url "http://www.eclipse.org/legal/epl-v10.html"}
   :dependencies [[org.clojure/clojure "1.7.0"]


(maint) Bump ezbake version to remove Fedora 20 build target

--- project.clj
+++ project.clj
@@ -99,7 +99,7 @@
              :ezbake {:dependencies ^:replace [[puppetlabs/puppetserver ~ps-version]
                                                [puppetlabs/trapperkeeper-webserver-jetty9 ~tk-jetty-version]
                                                [org.clojure/tools.nrepl "0.2.3"]]
-                      :plugins [[puppetlabs/lein-ezbake "0.2.10"]]
+                      :plugins [[puppetlabs/lein-ezbake "0.2.11"]]
                       :name "puppetserver"}

              :uberjar {:aot [puppetlabs.trapperkeeper.main]}


Begin 0.4.2-SNAPSHOT

Begin 0.4.2-SNAPSHOT

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject org.pinkgorilla/gorilla-notebook "0.4.1"
+(defproject org.pinkgorilla/gorilla-notebook "0.4.2-SNAPSHOT"
   :description "A rich REPL for Clojure in the notebook style."
   :url "https://github.com/pink-gorilla/gorilla-notebook"
   :scm {:name "git" :url "https://github.com/pink-gorilla/gorilla-notebook"}


lein-release plugin: preparing 0.3.2 release

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject org.clojars.mhuebert/re-view "0.3.2-SNAPSHOT"
+(defproject org.clojars.mhuebert/re-view "0.3.2"
   :description "Tiny React wrapper"
   :url "http://example.com/FIXME"
   :license {:name "Eclipse Public License"


Revert to clojure 1.7-alpha3

Revert to clojure 1.7-alpha3

--- project.clj
+++ project.clj
@@ -28,7 +28,7 @@
              :1.5.0 [:test-libs {:dependencies [[org.clojure/clojure "1.5.0"]]}]
              :1.5.1 [:test-libs {:dependencies [[org.clojure/clojure "1.5.1"]]}]
              :1.6 [:test-libs {:dependencies [[org.clojure/clojure "1.6.0"]]}]
-             :1.7 [:test-libs {:dependencies [[org.clojure/clojure "1.7.0-alpha5"]]}]
+             :1.7 [:test-libs {:dependencies [[org.clojure/clojure "1.7.0-alpha3"]]}]
              ;; The following profile can be used to check that `lein with-profile`
              ;; profiles are obeyed. Note that profile `:test-paths` *add on* to the
              ;; defaults.


Bump version

Bump version

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject zoo-event "2.0.2"
+(defproject zoo-event "2.0.3"
   :description "Live Zooniverse Classifications"
   :url "http://github.com/zooniverse/zoo-events"
   :license {:name "Apache Public License v2"


Version 0.14.0

Version 0.14.0

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject caesium "0.14.0-SNAPSHOT"
+(defproject caesium "0.14.0"
   :description "libsodium for clojure"
   :url "https://github.com/lvh/caesium"
   :deploy-repositories [["releases" {:url "https://repo.clojars.org"


Prepare for development of next version.

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject org.toomuchcode/clara-rules "0.8.3"
+(defproject org.toomuchcode/clara-rules "0.9.0-SNAPSHOT"
   :description "Clara Rules Engine"
   :url "http://rbrush.github.io/clara-rules/"
   :license {:name "Eclipse Public License"


update version

update version

--- project.clj
+++ project.clj
@@ -5,7 +5,7 @@
             :url "http://www.eclipse.org/legal/epl-v10.html"}
   :dependencies [[org.clojure/clojure "1.5.1"]
                  [hiccup "1.0.4"]
-                 [markdown-clj "0.9.40"]
+                 [markdown-clj "0.9.41"]
                  [endophile "0.1.2"]
                  [sitemap "0.2.1"]
                  [clj-time "0.6.0"]


Update core.async library. Fixes #138

Update core.async library. Fixes #138

--- project.clj
+++ project.clj
@@ -22,7 +22,7 @@
                  [mysql/mysql-connector-java "5.1.25"]
                  [congomongo "0.4.1"]
                  [unk "0.9.1"]
-                 [org.clojure/core.async "0.1.267.0-0d7780-alpha"]
+                 [org.clojure/core.async "0.2.374"]
                  [org.clojure/core.logic "0.8.8"]
                  [om "0.6.4"]
                  [prismatic/om-tools "0.2.2"


New dependency: clj-rm-rf

New dependency: clj-rm-rf

--- project.clj
+++ project.clj
@@ -7,12 +7,13 @@
                    [org.clojure/java.jdbc "0.3.5"]
                    [org.clojure/tools.cli "0.3.1"]
                    [org.xerial/sqlite-jdbc "3.7.2"]
-                   [clojure-ini "0.0.1"]
                    [ring/ring-core "1.3.2"]
                    [ring/ring-jetty-adapter "1.3.2"]
                    [org.clojure/data.json "0.2.5"]
                    [clj-http "2.0.0"]
                    [clj-jgit "0.8.8"]
+                   [clj-rm-rf "1.0.0-SNAPSHOT"]
+                   [clojure-ini "0.0.1"]
                    [hiccup "1.0.4"]
                    [irclj "0.5.0-alpha4"]]
     :dev-dependencies [[lein-ring "0.8.10"]]


add :license to project.clj

add :license to project.clj

--- project.clj
+++ project.clj
@@ -1,6 +1,7 @@
 (defproject witch-house/pronouns "1.10.0-SNAPSHOT"
   :description "Pronoun.is is a website for personal pronoun usage examples"
   :url "http://pronoun.is"
+  :license "GNU Affero General Public License 3.0"
   :dependencies [[org.clojure/clojure "1.6.0"]
                  [compojure "1.1.8"]
                  [ring/ring-jetty-adapter "1.2.2"]


bump to 0.1.1-SNAPSHOT

bump to 0.1.1-SNAPSHOT

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject weasel "0.1.0"
+(defproject weasel "0.1.1-SNAPSHOT"
   :description "websocket REPL environment for ClojureScript"
   :url "http://github.com/tomjakubowski/weasel"
   :license {:name "Unlicense"


Update cheshire dep

Update cheshire dep


pump version

pump version

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject sync "0.9.42"
+(defproject sync "0.9.43-SNAPSHOT"
   :description "sync is a Leiningen plugin to sync same code base between different clojure projects"
   :url "https://github.com/otto-de/leinsync"
   :license {:name "Apache License 2.0"


lein-release plugin: preparing 2.0.0 release

--- project.clj
+++ project.clj
@@ -1,10 +1,10 @@
-(defproject dda/dda-managed-ide "2.0.0-SNAPSHOT"
+(defproject dda/dda-managed-ide "2.0.0"
   :description "module to install and configure ide based on ubuntu vm."
   :url "https://www.domaindrivenarchitecture.org"
   :license {:name "Apache License, Version 2.0"
             :url "https://www.apache.org/licenses/LICENSE-2.0.html"}
   :dependencies [[dda/dda-pallet "2.2.1"]
-                 [dda/dda-managed-vm "2.2.1-SNAPSHOT"]]
+                 [dda/dda-managed-vm "2.2.1"]]
   :source-paths ["main/src"]
   :resource-paths ["main/resources"]
   :repositories [["snapshots" :clojars]


lein-release plugin: preparing 0.26 release

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject shuppet "0.26-SNAPSHOT"
+(defproject shuppet "0.26"
   :description "Shuppet service"
   :url "http://wikis.in.nokia.com/NokiaMusicArchitecture/Shuppet"


Version 0.4.25

Version 0.4.25

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject yetibot.core "0.4.25-SNAPSHOT"
+(defproject yetibot.core "0.4.25"
   :description "Core yetibot utilities, extracted for shared use among yetibot
                 and its various plugins"
   :url "https://github.com/yetibot/yetibot.core"


Using CTIM 0.4.4

Using CTIM 0.4.4

--- project.clj
+++ project.clj
@@ -42,7 +42,7 @@
                  ;; Schemas
                  [prismatic/schema ~schema-version]
                  [metosin/schema-tools ~schema-tools-version]
-                 [threatgrid/ctim "0.4.4-SNAPSHOT"]
+                 [threatgrid/ctim "0.4.4"]

                  ;; Web server
                  ;; ring-swagger 0.22.10 provided by compojure-api


Version 2.0.2-SNAPSHOT

Version 2.0.2-SNAPSHOT

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject com.lemondronor/turboshrimp "2.0.1"
+(defproject com.lemondronor/turboshrimp "2.0.2-SNAPSHOT"
   :description "Clojure API for the Parrot AR.Drone 2.0.

   By John Wiseman / jjwiseman@gmail.com / http://twitter.com/lemonodor"


website url updated in project.clj

website url updated in project.clj

--- project.clj
+++ project.clj
@@ -2,7 +2,7 @@
   :description "A simple full-stack web framework for clojure on top of Pnedestal"
   :license     {"mit"
                 "https://opensource.org/licenses/MIT"}
-  :url         "http://github.com/Codamic/hellhound"
+  :url         "http://hellhound.io"
   :scm         {:url "https://github.com/Codamic/hellhound"}

   :exclusions [ch.qos.logback/logback-classic]


fix formatting in project.clj

fix formatting in project.clj

--- project.clj
+++ project.clj
@@ -5,13 +5,13 @@
                  [environ "1.0.2"]
                  [clj-webdriver "0.7.2-SNAPSHOT"]
                  [org.seleniumhq.selenium/selenium-server "2.47.1"]
-                                  ;; Needed by core code
-                                  [org.seleniumhq.selenium/selenium-java "2.47.0"]
-                                  [org.seleniumhq.selenium/selenium-remote-driver "2.47.1"]
-                                  [com.codeborne/phantomjsdriver "1.2.1"
-                                   :exclusion [org.seleniumhq.selenium/selenium-java
-                                               org.seleniumhq.selenium/selenium-server
-                                               org.seleniumhq.selenium/selenium-remote-driver]]]
+                 ;; Needed by core code
+                 [org.seleniumhq.selenium/selenium-java "2.47.0"]
+                 [org.seleniumhq.selenium/selenium-remote-driver "2.47.1"]
+                 [com.codeborne/phantomjsdriver "1.2.1"
+                   :exclusion [org.seleniumhq.selenium/selenium-java
+                               org.seleniumhq.selenium/selenium-server
+                               org.seleniumhq.selenium/selenium-remote-driver]]]

   :aot :all
   :main crison.main)


Update dependency.

Update dependency.

--- project.clj
+++ project.clj
@@ -31,7 +31,7 @@
                  [com.evocomputing/colors "1.0.3"]
                  [environ "1.0.3"]
                  [camel-snake-kebab "0.4.0"]
-                 [com.taoensso/timbre "4.7.0"]
+                 [com.taoensso/timbre "4.7.4"]
                  [com.fzakaria/slf4j-timbre "0.3.2"]
                  [com.taoensso/tower "3.0.2"]
                  [com.taoensso/truss "1.3.3"]


lein-release plugin: preparing 0.142 release

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject maestro "0.142-SNAPSHOT"
+(defproject maestro "0.142"
   :description "Maestro service"
   :license  "https://github.com/mixradio/mr-maestro/blob/master/LICENSE"