implement ParticleContainer aswell

implement ParticleContainer aswell

--- src/cljs/infinitelives/pixi/sprite.cljs
+++ src/cljs/infinitelives/pixi/sprite.cljs
@@ -133,6 +133,29 @@
         pos-y (get-y sprite)]
     [(+ pos-x x) (+ pos-y y) (+ pos-x x w) (+ pos-y y h)]))

+(defn update-container-handle!
+  [container xhandle yhandle]
+  (let [children (.-children container)
+        edges (map get-edges children)
+        lefts (map first edges)
+        tops (map second edges)
+        rights (map #(nth % 2) edges)
+        bottoms (map #(nth % 3) edges)
+
+        left (apply min lefts)
+        top (apply min tops)
+        right (apply max rights)
+        bottom (apply max bottoms)
+
+        width (- right left)
+        height (- bottom top)
+
+        x-pivot (* xhandle width)
+        y-pivot (* yhandle height)
+        ]
+    (set-pivot! container x-pivot y-pivot)
+    [x-pivot y-pivot]))
+
 (defprotocol Container
   (update-handle! [container xhandle yhandle]))

@@ -140,40 +163,27 @@
   Container
   (update-handle!
     ([container xhandle yhandle]
-     (let [children (.-children container)
-           edges (map get-edges children)
-           lefts (map first edges)
-           tops (map second edges)
-           rights (map #(nth % 2) edges)
-           bottoms (map #(nth % 3) edges)
-
-           left (apply min lefts)
-           top (apply min tops)
-           right (apply max rights)
-           bottom (apply max bottoms)
-
-           width (- right left)
-           height (- bottom top)
-
-           x-pivot (* xhandle width)
-           y-pivot (* yhandle height)
-           ]
-       (set-pivot! container x-pivot y-pivot)
-       [x-pivot y-pivot]))))
+     (update-container-handle! container xhandle yhandle))))
+
+(extend-type js/PIXI.ParticleContainer
+  Container
+  (update-handle!
+    ([container xhandle yhandle]
+     (update-container-handle! container xhandle yhandle))))

 (defn make-container
   [children & {:keys [x y xhandle yhandle scale alpha
                       rotation tint visible
                       mousemove mousedown mouseup mouseupoutside
                       touchmove touchdown touchup touchupoutside
-                      buttonmode]
+                      buttonmode particle]
                :or {x 0 y 0
                     xhandle 0.5 yhandle 0.5
                     scale 1
                     alpha 1
                     visible true
                     rotation 0}}]
-  (let [container (js/PIXI.Container.)]
+  (let [container (if particle (js/PIXI.ParticleContainer.) (js/PIXI.Container.))]
     (assert container "creation of container failed and returned nil")
     (set! (.-x container) x)
     (set! (.-y container) y)


open access reading options in CLI code

open access reading options in CLI code

--- src/clojure/zensols/actioncli/parse.clj
+++ src/clojure/zensols/actioncli/parse.clj
@@ -128,7 +128,7 @@
       (#(apply multi-action-context % options))
       (merge {:action-mode 'single})))

-(defn- create-actions [action-context]
+(defn create-actions [action-context]
   (->> (:action-definitions action-context)
        (map (fn [[key package action-def]]
               (eval (list 'require `(quote [~package])))


make sure clear-subscriber doesn't get skipped


cleanup on entry not on exit

cleanup on entry not on exit


Implement task item

Implement task item

--- src/balance/cmn/pages/home_page.cljs
+++ src/balance/cmn/pages/home_page.cljs
@@ -3,10 +3,14 @@
             [reagent.core :as r]
             [re-frame.core :refer [subscribe]]))

-(def styles {:page      {:margin-top     64
-                         :flex-grow      1
-                         :flex-direction "row"}
-             :task-list {:flex-grow 1}})
+(def styles {:page             {:margin-top     64
+                                :flex-grow      1
+                                :flex-direction "row"}
+             :task-list        {:flex-grow 1}
+             :task-item        {:padding 10}
+             :task-caption     {:font-size 18
+                                :color "gray"}
+             :task-description {:font-size 12}})

 (defn render-item [item]
   (r/as-element [task-item (-> item .-item .-key)]))
@@ -21,6 +25,8 @@

 (defn task-item [task-id]
   (fn []
-    (let [task (subscribe [:get-task task-id])]
-      [rn/view
-       [rn/text (str @task)]])))
+    (let [task (subscribe [:get-task task-id])
+          {:keys [caption description]} @task]
+      [rn/view {:style (:task-item styles)}
+       [rn/text {:style (:task-caption styles)} caption]
+       [rn/text {:style (:task-description styles)} description]])))


fixed derefing issues in reagent search page

--- src/braid/ui/views/pages/search.cljs
+++ src/braid/ui/views/pages/search.cljs
@@ -2,6 +2,7 @@
   (:require [om.core :as om]
             [om.dom :as dom]
             [reagent.core :as r]
+            [reagent.ratom :include-macros true :refer-macros [reaction]]
             [braid.ui.views.thread :refer [thread-view]]
             [chat.client.dispatcher :refer [dispatch!]]
             [chat.client.reagent-adapter :refer [subscribe]]
@@ -29,13 +30,14 @@
                 "Searching..."]]

             (:done-results :loading)
-            (let [loaded-threads (vals (select-keys @threads (@page :thread-ids)))
-                  sorted-threads (->> @threads ; sort-by last reply, newest first
-                                 (sort-by
-                                   (comp (partial apply max)
-                                         (partial map :created-at)
-                                         :messages))
-                                   reverse)]
+            (let [loaded-threads (reaction (vals (select-keys @threads (@page :thread-ids))))
+                  sorted-threads (reaction (->> @threads ; sort-by last reply, newest first
+                                               vals
+                                                (sort-by
+                                                (comp (partial apply max)
+                                                      (partial map :created-at)
+                                                      :messages))
+                                                reverse))]
               [:div.content
                 [:div.description
                   (if (= status :loading)
@@ -72,8 +74,9 @@
                                (- (.-scrollLeft this-elt) (.-deltaY e))))))}
                   (doall
                     (for [thread @sorted-threads]
-                     ^{:key [thread :id]}
-                     [thread-view thread]))]])
+                      (do
+                        (println thread)
+                       [thread-view thread])))]])

             :done-empty
             [:div.content


Fix open signature

Fix open signature

--- src/caesium/magicnonce/secretbox.clj
+++ src/caesium/magicnonce/secretbox.clj
@@ -125,4 +125,4 @@
 (defn open
   "Like [[decrypt]], but with different argument order; analogous to
   [[caesium.crypto.secretbox/secretbox-open-easy]]."
-  [])
+  [ctext key])


Fix border discontinuities

Fix border discontinuities

--- src/dactyl_keyboard/dactyl-manuform.clj
+++ src/dactyl_keyboard/dactyl-manuform.clj
@@ -371,37 +371,27 @@
 (defn bottom-hull [& p]
   (hull p (bottom 10.001 p)))

-
-(def upper-brace-multiplier -4)
-
 (defn wall-brace [place1 dx1 dy1 post1 place2 dx2 dy2 post2]
   (union
     (hull
       (place1 post1)
-      (place1 (scale [1 1 -3] post1))
-      (place1 (translate [(* dx1 5) (* dy1 5) 0] (scale [1 1 -3] post1)))
+      (place1 (translate [0 0 -15] post1))
+      (place1 (translate [(* dx1 5) (* dy1 5) -4] post1))
+      (place1 (translate [(* dx1 5) (* dy1 5) -15] post1))
       (place2 post2)
-      (place2 (scale [1 1 -3] post2))
-      (place2 (translate [(* dx2 5) (* dy2 5) 0] (scale [1 1 -3] post2)))
-      )
+      (place2 (translate [0 0 -15] post2))
+      (place2 (translate [(* dx2 5) (* dy2 5) -4] post2))
+      (place2 (translate [(* dx2 5) (* dy2 5) -15] post2)))
     (bottom-hull
       (place1 (translate [(* dx1 5) (* dy1 5) -15] post1))
       (place1 (translate [0         0         -15] post1))
       (place1 (translate [(* dx1 5) (* dy1 5) -15] post1))
       (place2 (translate [0         0         -15] post2))
-      (place2 (translate [(* dx2 5) (* dy2 5) -15] post2))
-      )
-    ;  (hull
-    ;   (translate [0 0 -19] (place1 (translate [0         0         -15] post1)))
-    ;   (translate [0 0 -19] (place2 (translate [0         0         -15] post2)))
-    ;   (place1 (translate [(* dx1 5) (* dy1 5) -15] post1))
-    ;   (place1 (translate [0         0         -15] post1))
-    ;   (place1 (translate [(* dx1 5) (* dy1 5) -15] post1))
-    ;   (place2 (translate [0         0         -15] post2))
-    ;   (place2 (translate [(* dx1 5) (* dy1 5) -15] post2))
-    ))
-
-(defn key-wall-brace [x1 y1 dx1 dy1 post1 x2 y2 dx2 dy2 post2] (wall-brace (partial key-place x1 y1) dx1 dy1 post1 (partial key-place x2 y2) dx2 dy2 post2))
+      (place2 (translate [(* dx2 5) (* dy2 5) -15] post2)))))
+
+(defn key-wall-brace [x1 y1 dx1 dy1 post1 x2 y2 dx2 dy2 post2]
+  (wall-brace (partial key-place x1 y1) dx1 dy1 post1
+              (partial key-place x2 y2) dx2 dy2 post2))

 (def case-walls
   (union


Rewrite item/newline pairs with join instead of str

--- src/dxf.clj
+++ src/dxf.clj
@@ -68,16 +68,17 @@
 (defn section [name x]
   (let
     [xstr (
-           if (or (nil? x) (= (count x) 0))
-          ""
-           (str (nextline) (join (nextline) x))
+            if
+            (or (nil? x) (= (count x) 0))
+            []
+            [(join (nextline) x)]
            )
      ]
-    (str
-      "0" (nextline) "SECTION" (nextline)
-      "2" (nextline) (upper-case name)
-      xstr (nextline)
-      "0" (nextline) "ENDSEC"
+    (join (nextline) (concat [
+      "0" "SECTION"
+      "2" (upper-case name)]
+      xstr
+      ["0" "ENDSEC"])
     )
   )
 )
@@ -85,22 +86,28 @@
 (defn table [name x]
   (let
     [
-     xstr (if (or (nil? x) (= (count x) 0)) "" (str (nextline) (join (nextline) x)))
+     xstr (if
+            (or (nil? x) (= (count x) 0))
+            []
+            [(join (nextline) x)]
+          )
      xlen (if (nil? x) (0) (count x))
     ]
-    (str
-      "0" (nextline) "TABLE" (nextline)
-      "2" (nextline) (upper-case name) (nextline)
-      "70" (nextline) xlen xstr (nextline)
-      "0" (nextline) "ENDTAB")
+    (join (nextline) (concat [
+      "0" "TABLE"
+      "2" (upper-case name)
+      "70" xlen]
+      xstr
+      ["0" "ENDTAB"])
+    )
   )
 )

 (defn acadver []
-  (str
-    "9" (nextline) "$ACADVER" (nextline)
-    "1" (nextline) "AC1006"
-  )
+  (join (nextline) [
+    "9" "$ACADVER"
+    "1" "AC1006"
+  ])
 )

 (defn point
@@ -125,7 +132,7 @@
 (defmulti generate (fn [x] (:kind x)))

 (defn drawing-name [x]
-  (str "10" (nextline)  "$" (upper-case (subs (str x) 1))))
+  (str "10" (nextline) "$" (upper-case (subs (str x) 1))))

 (defn drawing-point [name x]
   (str (drawing-name name) (nextline) (point (name x))))
@@ -145,37 +152,38 @@
 )

 (defmethod generate :layer [l]
-  (str
-    "0" (nextline) "LAYER" (nextline)
-    "2" (nextline) (upper-case (:name l)) (nextline)
-    "70" (nextline) (:flag l) (nextline)
-    "62" (nextline) (:color l) (nextline)
-    "6" (nextline) (:lineType l)
-  ))
+  (join (nextline) [
+    "0" "LAYER"
+    "2" (upper-case (:name l))
+    "70" (:flag l)
+    "62" (:color l)
+    "6" (:lineType l)
+  ]))

 (defmethod generate :style [s]
-    (str
-      "0" (nextline) "STYLE" (nextline)
-      "2" (nextline) (upper-case (:name s)) (nextline)
-      "70" (nextline) (:flag s) (nextline)
-      "40" (nextline) (:flag s) (nextline)
-      "41" (nextline) (:widthFactor s) (nextline)
-      "50" (nextline) (:obliqueAngle s) (nextline)
-      "71" (nextline) (:mirror s) (nextline)
-      "42" (nextline) (:lastHeight s) (nextline)
-      "3" (nextline) (upper-case (:font s)) (nextline)
-      "4" (nextline) (upper-case (:bigFont s))
-    ))
+    (join (nextline) [
+      "0" "STYLE"
+      "2" (upper-case (:name s))
+      "70" (:flag s)
+      "40" (:flag s)
+      "41" (:widthFactor s)
+      "50" (:obliqueAngle s)
+      "71" (:mirror s)
+      "42" (:lastHeight s)
+      "3" (upper-case (:font s))
+      "4" (upper-case (:bigFont s))
+    ]))

 (defmethod generate :linetype [l]
-  (str
-    "0" (nextline) "LTYPE" (nextline)
-    "2" (nextline) (upper-case (:name l)) (nextline)
-    "70" (nextline) (:flag l) (nextline)
-    "3" (nextline) (:description l) (nextline)
-    "72" (nextline) "65" (nextline)
-    "73" (nextline) (count (:elements l)) (nextline)
-    "40" (nextline) "0.0"))
+  (join (nextline) [
+    "0" "LTYPE"
+    "2" (upper-case (:name l))
+    "70" (:flag l)
+    "3" (:description l)
+    "72" "65"
+    "73" (count (:elements l))
+    "40" "0.0"
+  ]))

 (defn common [c]
   (let [parent (:parent c c)]
@@ -189,6 +197,9 @@
     )))

 (defmethod generate :face [f]
-  (join (nextline) ["0" "3DFACE" (common f)
-                         (points (:points f))]))
-
+  (join (nextline) [
+    "0" "3DFACE"
+    (common f)
+    (points (:points f))
+  ]))
+


A PoC websocket server added

A PoC websocket server added

--- src/clj/hellhound/http/websocket.clj
+++ src/clj/hellhound/http/websocket.clj
@@ -4,15 +4,19 @@
   the event coming from clients to `event-router` and send
   back the result"
   (:require
+   [clojure.core.async                   :as async]
    [io.pedestal.http.immutant.websockets :as websocket]
    [hellhound.logger                     :as log]))

-(def ws-clients (atom {}))

-(defn new-ws-client
+(def clients (atom {}))
+
+(defn new-client
   [ws-session send-ch]
+  ;; TODO: Send connection info to client
   (async/put! send-ch "This will be a text message")
-  (swap! ws-clients assoc ws-session send-ch))
+  ;; TODO assoc a strcuture instead of a function
+  (swap! clients assoc ws-session send-ch))

 ;; This is just for demo purposes
 (defn send-and-close! []
@@ -21,7 +25,7 @@
     ;; And now let's close it down...
     (async/close! send-ch)
     ;; And now clean up
-    (swap! ws-clients dissoc ws-session)))
+    (swap! clients dissoc ws-session)))

 ;; Also for demo purposes...
 (defn send-message-to-all!
@@ -36,7 +40,7 @@
 (def ws-routes
   {"/hellhound/ws"
    {
-    :on-connect (webscoket/start-ws-connection new-ws-client)
+    :on-connect (webscoket/start-ws-connection new-client)
     :on-text    (fn [msg] (log/info :msg (str "A client sent - " msg)))
     :on-binary  (fn [payload offset length] (log/info :msg "Binary Message!" :bytes payload))
     :on-error   (fn [t] (log/error :msg "WS Error happened" :exception t))


Added missing `str`.

Added missing `str`.

--- src/cljc/cmr/client/search/impl.cljc
+++ src/cljc/cmr/client/search/impl.cljc
@@ -64,7 +64,7 @@
   ([this tag-id query-params http-options]
    (-> this
        :http-client
-       (http/get (base/get-url this ("/tag/" tag-id))
+       (http/get (base/get-url this (str "/tag/" tag-id))
                  (http-util/query+options query-params http-options)))))

 (defn get-tags


Record the strokes and post it to backend server

--- src/cljs/handwrite_strokes/core.cljs
+++ src/cljs/handwrite_strokes/core.cljs
@@ -1,6 +1,8 @@
 (ns handwrite_strokes.core
   (:require [goog.dom :as dom]
-            [goog.graphics :as graphics]))
+            [goog.graphics :as graphics]
+            [clojure.string :as string]
+            [ajax.core :refer [GET POST]]))

 (enable-console-print!)

@@ -9,9 +11,12 @@
 ;; define your app data so that it doesn't get over-written on reload

 (defonce mouse-down (atom false))
-(defonce strokes [])
+(defonce strokes (atom []))
+(defonce curr-stroke (atom "["))

 (defn handle-mouseup [evt]
+  (swap! strokes (fn [arr] (conj arr (str @curr-stroke "]"))))
+  (swap! curr-stroke (fn [_] "["))
   (swap! mouse-down (fn [_] false)))

 (defn handle-mousedown [evt]
@@ -19,7 +24,13 @@

 (defn handle-mousemove [evt]
   (when @mouse-down
-    (.log js/console (str "(" (.-offsetX evt) "," (.-offsetY evt) ")"))))
+    (swap! curr-stroke (fn [curr-str] (str curr-str (str "'(" (.-offsetX evt) " " (.-offsetY evt) ") "))))))
+
+(defn format-strokes []
+  (str "{" :scale " " (.-width (.getElementById js/document "canvas")) " " :strokes " [" (string/join " " @strokes) "]}"))
+
+(defn call-set-strokes []
+  (POST "/write-character" {:param {:strokes (format-strokes)}}))

 (defn start []
   (let [canvas2d (.getElementById js/document "canvas")
@@ -34,6 +45,6 @@
   ;; optionally touch your app-state to force rerendering depending on
   ;; your application
   ;; (swap! app-state update-in [:__figwheel_counter] inc)
-  (start))
+  )

 (set! (.-onload js/window) start)


Add the user interface to upload a vubis file

--- src/cljs/mdr2/productions/vubis.cljs
+++ src/cljs/mdr2/productions/vubis.cljs
@@ -9,7 +9,7 @@
             [re-frame.core :as rf]))

 (rf/reg-event-fx
-  ::vubis-file
+  ::extract-productions
   (fn [{:keys [db]} [_ js-file-value]]
     (let [form-data (doto (js/FormData.)
                       (.append "file" js-file-value "filename.txt"))]
@@ -21,11 +21,11 @@
                      :headers 	     (auth/auth-header db)
                      :uri             "/api/vubis/upload"
                      :body            form-data
-                     :on-success      [::ack-vubis-file]
-                     :on-failure      [::ack-failure]})})))
-
-(rf/reg-event-db
-  ::ack-vubis-file
+                     :on-success      [::ack-extract-productions]
+                     :on-failure      [::ack-extract-failure]})})))
+
+(rf/reg-event-db
+  ::ack-extract-productions
   (fn [db [_ productions]]
     (let [productions (->> productions
                            (map #(assoc % :uuid (str (random-uuid)))))]
@@ -35,12 +35,58 @@
           (notifications/clear-button-state :vubis :vubis-file)))))

 (rf/reg-event-db
- ::ack-failure
+ ::ack-extract-failure
  (fn [db [_ response]]
    (-> db
        (assoc-in [:errors :version] (or (get-in response [:response :status-text])
                                         (get response :status-text)))
        (notifications/clear-button-state :vubis :vubis-file))))
+
+(rf/reg-event-fx
+  ::save-production
+  (fn [{:keys [db]} [_ id]]
+    (let [production (get-in db [:productions :vubis id])
+          cleaned (dissoc production :uuid)]
+      {:db (notifications/set-button-state db id :vubis)
+       :http-xhrio
+       (as-transit
+        {:method          :put
+         :headers         (auth/auth-header db)
+         :uri             "/api/productions"
+         :params          cleaned
+         :on-success      [::ack-save id]
+         :on-failure      [::ack-failure id :vubis]})})))
+
+(rf/reg-event-db
+  ::ack-save
+  (fn [db [_ id]]
+    (-> db
+        (update-in [:productions :vubis] dissoc id)
+        (notifications/clear-button-state id :vubis))))
+
+(rf/reg-event-db
+ ::ack-failure
+ (fn [db [_ id request-type response]]
+   (-> db
+       (assoc-in [:errors request-type] (or (get-in response [:response :status-text])
+                                            (get response :status-text)))
+       (notifications/clear-button-state id request-type))))
+
+(rf/reg-event-fx
+  ::save-all-productions
+  (fn [{:keys [db]} _]
+    (let [ids (keys (get-in db [:productions :vubis]))]
+      {:dispatch-n (map (fn [id] [::save-production id]) ids)})))
+
+(rf/reg-event-db
+  ::ignore-production
+  (fn [db [_ uuid]]
+    (update-in db [:productions :vubis] dissoc uuid)))
+
+(rf/reg-event-db
+  ::ignore-all-productions
+  (fn [db _]
+    (update-in db [:productions] dissoc :vubis)))

 (rf/reg-sub
  ::productions
@@ -94,16 +140,34 @@
       [:button.button
        {:disabled (or (nil? file) (not admin?))
         :class klass
-        :on-click (fn [e] (rf/dispatch [::vubis-file file]))}
+        :on-click (fn [e] (rf/dispatch [::extract-productions file]))}
        [:span.icon.is-small
         [:span.material-icons "upload_file"]]]]]))
+
+(defn buttons [id]
+  (let [admin? @(rf/subscribe [::auth/is-admin?])]
+    (if @(rf/subscribe [::notifications/button-loading? id :save])
+      [:button.button.is-loading]
+      [:div.field.has-addons
+       [:p.control
+        [:button.button.is-danger
+         {:disabled (not admin?)
+          :on-click (fn [e] (rf/dispatch [::ignore-production id]))}
+         #_[:span.is-sr-only (tr [:ignore])]
+         [:span.icon
+          [:span.material-icons "cancel"]]]]
+       [:p.control
+        [:button.button.is-success
+         {:disabled (not admin?)
+          :on-click (fn [e] (rf/dispatch [::save-production id]))}
+         #_[:span (tr [:save])]
+         [:span.icon
+          [:span.material-icons "done"]]]]])))

 (defn- production [id]
   (let [{:keys [title creator source description
                 library_number source_publisher source_date]
          :as production} @(rf/subscribe [::production id])]
-    (println title)
-    (println id)
     [:tr
      [:td title]
      [:td creator]
@@ -111,7 +175,8 @@
      [:td description]
      [:td library_number]
      [:td source_publisher]
-     [:td (tf/unparse (tf/formatters :date) source_date)]]))
+     [:td (tf/unparse (tf/formatters :date) source_date)]
+     [:td [buttons id]]]))

 (defn- productions []
   [:<>
@@ -124,16 +189,22 @@
       [:th (tr [:description])]
       [:th (tr [:library_number])]
       [:th (tr [:source_publisher])]
-      [:th (tr [:source_date])]]]
+      [:th (tr [:source_date])]
+      [:th (tr [:action])]]]
     [:tbody
      (for [{:keys [uuid]} @(rf/subscribe [::productions-sorted])]
        ^{:key uuid} [production uuid])]]
-   [:div.buttons.has-addons.is-right
-    [:button.button
-     {:on-click (fn [e] (rf/dispatch ::confirm-all))}
+   [:div.buttons.is-right
+    [:button.button.is-success
+     {:on-click (fn [e] (rf/dispatch [::save-all-productions]))}
      [:span (tr [:approve-all])]
      [:span.icon.is-small
-      [:span.material-icons "done"]]]]])
+      [:span.material-icons "done"]]]
+    [:button.button.is-danger
+     {:on-click (fn [e] (rf/dispatch [::ignore-all-productions]))}
+     [:span (tr [:cancel])]
+     [:span.icon.is-small
+      [:span.material-icons "cancel"]]]]])

 (defn page []
   (let [loading? @(rf/subscribe [::notifications/loading? :vubis])


clean up

clean up

--- src/cljs/phonecat_re_frame/core.cljs
+++ src/cljs/phonecat_re_frame/core.cljs
@@ -43,7 +43,6 @@
  :process-phones-bad-response
  (fn
    [app-state [_ response]]
-   (println "Error getting phones" response)
    app-state))

 (re-frame/register-handler
@@ -152,7 +151,7 @@
    [:span phone-id]])

 (defn current-page []
-  [:div [(session/get :current-page) (session/get :params)]])
+  [(session/get :current-page) (session/get :params)])

 ;; -------------------------
 ;; Routes


Remove ineffective type hints

Remove ineffective type hints

--- src/clojure/cljam/pileup/mpileup.clj
+++ src/clojure/cljam/pileup/mpileup.clj
@@ -58,9 +58,7 @@
 (defrecord ^:private PileupStatus [count seq qual])

 (defn- count-for-alignment
-  [^clojure.lang.PersistentHashMap aln
-   ^String rname
-   ^clojure.lang.LazySeq positions]
+  [aln rname positions]
   (if (= rname (:rname aln))
     (let [left  (:pos aln)
           right (dec (+ left (cgr/count-ref (:cigar aln))))
@@ -101,15 +99,15 @@
            positions plp1))))

 (defn- read-alignments
-  [rdr ^String rname ^Long rlength ^Long pos]
-  (let [^Long left (let [^Long val (- pos window-width)]
-                     (if (< val 0)
-                       0
-                       val))
-        ^Long right (let [^Long val (+ pos window-width)]
-                      (if (< rlength val)
-                        rlength
-                        val))]
+  [rdr rname rlength pos]
+  (let [left (let [val (- pos window-width)]
+               (if (< val 0)
+                 0
+                 val))
+        right (let [val (+ pos window-width)]
+                (if (< rlength val)
+                  rlength
+                  val))]
     (io/read-alignments rdr {:chr rname
                              :start left
                              :end right
@@ -128,22 +126,22 @@
            refs)))

 (defn- pileup*
-  ([rdr ^FASTAReader fa-rdr ^String rname ^Long rlength ^Long start ^Long end]
+  ([rdr ^FASTAReader fa-rdr rname rlength start end]
      (flatten
       (let [parts (partition-all step (rpositions start end))]
         (map (fn [positions]
-               (let [^Long pos (if (= (count positions) step)
-                                 (nth positions center)
-                                 (nth positions (quot (count positions) 2)))
-                     ^clojure.lang.LazySeq alns (read-alignments rdr rname rlength pos)
+               (let [pos (if (= (count positions) step)
+                           (nth positions center)
+                           (nth positions (quot (count positions) 2)))
+                     alns (read-alignments rdr rname rlength pos)
                      ref-line (read-ref-fasta-line fa-rdr rname)]
                  (count-for-positions alns ref-line rname positions)))
              parts)))))

 (defn pileup
-  ([rdr ^String rname]
+  ([rdr rname]
      (pileup rdr rname -1 -1))
-  ([rdr ^String rname ^Long start* ^Long end* & {:keys [ref-fasta] :or {ref-fasta nil}}]
+  ([rdr rname start* end* & {:keys [ref-fasta] :or {ref-fasta nil}}]
      (let [r (search-ref (.refs rdr) rname)]
        (if (nil? r)
          nil


Fix lint errors :shirt:

Fix lint errors :shirt:

--- src/toucan/db.clj
+++ src/toucan/db.clj
@@ -33,13 +33,14 @@
   nil)

 (defn set-default-quoting-style!
-  "Set the default quoting style that should be used to quote identifiers. Defaults to `:ansi`, but you can instead set
-  it to `:mysql` or `:sqlserver`."
+  "Set the default quoting style that should be used to quote identifiers. Defaults to `:ansi`, but you can instead
+  set it to `:mysql` or `:sqlserver`."
   [new-quoting-style]
   (reset! default-quoting-style new-quoting-style))

 (defn quoting-style
-  "Fetch the HoneySQL quoting style that should be used to quote identifiers. One of `:ansi`, `:mysql`, or `:sqlserver`.
+  "Fetch the HoneySQL quoting style that should be used to quote identifiers. One of `:ansi`, `:mysql`, or
+  `:sqlserver`.

   Returns the value of `*quoting-style*` if it is bound, otherwise returns the default quoting style, which is
   normally `:ansi`; this can be changed by calling `set-default-quoting-style!`."
@@ -181,15 +182,15 @@
     :else                        (throw (Exception. (str "Invalid model: " model)))))

 (defn quote-fn
-  "The function that JDBC should use to quote identifiers for our database. This is passed as the `:entities` option to
-  functions like `jdbc/insert!`."
+  "The function that JDBC should use to quote identifiers for our database. This is passed as the `:entities` option
+  to functions like `jdbc/insert!`."
   []
   ((quoting-style) @(resolve 'honeysql.format/quote-fns))) ; have to call resolve because it's not public

 (def ^:private ^:dynamic *call-count*
-  "Atom used as a counter for DB calls when enabled. This number isn't *perfectly* accurate, only mostly; DB calls made
-  directly to JDBC won't be logged."
+  "Atom used as a counter for DB calls when enabled. This number isn't *perfectly* accurate, only mostly; DB calls
+  made directly to JDBC won't be logged."
   nil)

 (defn -do-with-call-counting
@@ -274,8 +275,8 @@
   (jdbc/query (connection) (honeysql->sql honeysql-form) options))

 (defn reducible-query
-  "Compile `honeysql-from` and call `jdbc/reducible-query` against the application database. Options are passed along to
-  `jdbc/reducible-query`. Note that the query won't actually be executed until it's reduced."
+  "Compile `honeysql-from` and call `jdbc/reducible-query` against the application database. Options are passed along
+  to `jdbc/reducible-query`. Note that the query won't actually be executed until it's reduced."
   [honeysql-form & {:as options}]
   (jdbc/reducible-query (connection) (honeysql->sql honeysql-form) options))

@@ -345,8 +346,8 @@
    x))

 (defn do-post-select
-  "Perform post-processing for objects fetched from the DB. Convert results `objects` to `entity` record types and call
-  the model's `post-select` method on them."
+  "Perform post-processing for objects fetched from the DB. Convert results `objects` to `entity` record types and
+  call the model's `post-select` method on them."
   {:style/indent 1}
   [model objects]
   (let [model            (resolve-model model)
@@ -454,9 +455,9 @@
   (not (nil? (find-protocol-method models/IModel methodk model))))

 (defn update!
-  "Update a single row in the database. Returns `true` if a row was affected, `false` otherwise. Accepts either a single
-  map of updates to make or kwargs. `entity` is automatically resolved, and `pre-update` is called on `kvs` before the
-  object is inserted into the database.
+  "Update a single row in the database. Returns `true` if a row was affected, `false` otherwise. Accepts either a
+  single map of updates to make or kwargs. `entity` is automatically resolved, and `pre-update` is called on `kvs`
+  before the object is inserted into the database.

      (db/update! 'Label 11 :name \"ToucanFriendly\")
      (db/update! 'Label 11 {:name \"ToucanFriendly\"})"


last-modified no longer deref'ed

last-modified no longer deref'ed

--- src/yada/core.clj
+++ src/yada/core.clj
@@ -479,46 +479,46 @@

                (fn [ctx]

-                 (if-let [last-modified (round-seconds-up
-                                         (or
-                                          (service/last-modified last-modified ctx)
-                                          (res/last-modified (:resource ctx) ctx)))]
-
-                   (if-let [if-modified-since (some-> req
-                                                      (get-in [:headers "if-modified-since"])
-                                                      parse-date)]
-                     ;; TODO: Hang on, we can't deref in the
-                     ;; middle of a handler like this, we need to
-                     ;; build a chain (I think)
-
-                     (let [last-modified
-                           (if (d/deferrable? last-modified) @last-modified last-modified)]
-
-                       (if (<=
-                            (.getTime last-modified)
-                            (.getTime if-modified-since))
-
-                         ;; exit with 304
-                         (d/error-deferred
-                          (ex-info "" (merge {:status 304
-                                              ::http-response true}
-                                             ctx)))
-
-                         (assoc-in ctx [:response :headers "last-modified"] (format-date last-modified))))
-
-                     (or
-                      ;; TODO: Hang on, we can't deref in the
-                      ;; middle of a handler like this, we need to
-                      ;; build a chain (I think)
-
-                      ;; TODO: Also, haven't we already calculated last-modified?
-
-                      (some->> (if (d/deferrable? last-modified) @last-modified last-modified)
-                               format-date
-                               (assoc-in ctx [:response :headers "last-modified"]))
-                      ctx))
-                   ctx))
-
+                 (d/chain
+
+                  (or
+                   (service/last-modified last-modified ctx)
+                   (res/last-modified (:resource ctx) ctx))
+
+                  (fn [last-modified]
+                    (if-let [last-modified (round-seconds-up last-modified)]
+
+                      (if-let [if-modified-since (some-> req
+                                                         (get-in [:headers "if-modified-since"])
+                                                         parse-date)]
+                        ;; TODO: Hang on, we can't deref in the
+                        ;; middle of a handler like this, we need to
+                        ;; build a chain (I think)
+
+                        (let [last-modified
+                              (if (d/deferrable? last-modified) @last-modified last-modified)]
+
+                          (if (<=
+                               (.getTime last-modified)
+                               (.getTime if-modified-since))
+
+                            ;; exit with 304
+                            (d/error-deferred
+                             (ex-info "" (merge {:status 304
+                                                 ::http-response true}
+                                                ctx)))
+
+                            (assoc-in ctx [:response :headers "last-modified"] (format-date last-modified))))
+
+                        (or
+                         (some->> last-modified
+                                  format-date
+                                  (assoc-in ctx [:response :headers "last-modified"]))
+                         ctx))
+
+                      ctx))))
+
+               ;; Methods
                (fn [ctx]
                  (case method
                    (:get :head)


Fix indentation

Fix indentation

--- src/discuss/references/integration.cljs
+++ src/discuss/references/integration.cljs
@@ -23,9 +23,9 @@
   it, this function will return it."
   [doms ref]
   (last
-    (filter
-      identity
-      (map #(when (lib/substring? ref (lib/trim-and-normalize (.-innerHTML %))) %) doms))))
+   (filter
+    identity
+    (map #(when (lib/substring? ref (lib/trim-and-normalize (.-innerHTML %))) %) doms))))

 ;;; Integrate references and highlight them in the article
@@ -60,12 +60,12 @@
     (doall (map convert-reference refs))))

 (defn- references-handler
-    "Called when received a response on the reference-query."
-    [response]
-    (let [res (lib/process-response response)
-          refs (:references res)]
-      (lib/store-to-app-state! 'references/all refs)
-      (process-references refs)))
+  "Called when received a response on the reference-query."
+  [response]
+  (let [res (lib/process-response response)
+        refs (:references res)]
+    (lib/store-to-app-state! 'references/all refs)
+    (process-references refs)))

 (defn request-references
   "When this app is loaded, request all available references from the external discussion system."


Add missing require expression for defregistry

--- src/main/workflo/macros/permission.cljs
+++ src/main/workflo/macros/permission.cljs
@@ -1,5 +1,6 @@
 (ns workflo.macros.permission
-  (:require-macros [workflo.macros.permission :refer [defpermission]]))
+  (:require-macros [workflo.macros.permission :refer [defpermission]])
+  (:require [workflo.macros.registry :refer [defregistry]]))

 ;;;; Permission registry


type hints and docstrings have been added to hellhound.kafka.consumer ns

--- extra_components/kafka/src/clj/hellhound/kafka/consumers.clj
+++ extra_components/kafka/src/clj/hellhound/kafka/consumers.clj
@@ -2,14 +2,21 @@
   (:require
    [hellhound.kafka.core :as core])
   (:import
-   [org.apache.kafka.clients.consumer KafkaConsumer]
+   [org.apache.kafka.clients.consumer
+    KafkaConsumer
+    Consumer]
    [org.apache.kafka.common.serialization StringDeserializer]))

 (def default-key-serializer (StringDeserializer.))
 (def default-value-deserializer (StringDeserializer.))

-(defn make-consumer
+(defn ^KafkaConsumer make-consumer
+  "Create a kafka consumer using the given `config` and key value serializers.
+
+  `key-deserializer` and `value-deserializer` are going to deserialize the
+  respected value from kafka to clojure values. The default deserializer
+  for both of them is `StringDeserializer`."
   ([config]
    (make-consumer config
                   default-key-serializer
@@ -20,21 +27,28 @@
      (KafkaConsumer. props key-deserializer value-deserializer))))

 (defn subscribe
-  [consumer topics]
+  "Subscribe to the given list of `topics` of the given `consumer`."
+  [^Consumer consumer topics]
   (.subscribe consumer topics))

 (defn consume
-  ([consumer f]
+  "Consume records from the given `consumer` and apply function`f` on them.
+
+  By default consumed values are a `ConsumerRecords` java object.
+  An optional third arg is the `timeout` for the connection. The default value
+  for the timeout is `2000ms`."
+  ([^Consumer consumer f]
    ;; TODO: fetch the default timeout value from global config
    (consume consumer f 2000))

-  ([consumer f timeout]
+  ([^Consumer consumer f timeout]
    (try
      (while true
        (let [records (.poll consumer timeout)]
          (f records)))
      (finally
        (.close consumer)))))
+

 (comment
   (def c (make-consumer {"bootstrap.servers" "localhost:9092"


:lipstick: Minor cosmetic changes on project and file naming.

--- frontend/src/uxbox/main/data/projects.cljs
+++ frontend/src/uxbox/main/data/projects.cljs
@@ -187,7 +187,7 @@
   (ptk/reify ::create-project
     ptk/WatchEvent
     (watch [this state stream]
-      (let [name (str "Project Name " (gensym "p"))]
+      (let [name (str "New Project " (gensym "p"))]
         (->> (rp/mutation! :create-project {:name name})
              (rx/map (fn [data]
                        (projects-fetched [data]))))))))
@@ -199,7 +199,7 @@
   (ptk/reify ::create-file
     ptk/WatchEvent
     (watch [this state stream]
-      (let [name (str "File Name " (gensym "p"))
+      (let [name (str "New File " (gensym "p"))
             params {:name name :project-id project-id}]
         (->> (rp/mutation! :create-project-file params)
              (rx/mapcat


testing lein-packer plugin

testing lein-packer plugin

--- ext/chrome/project.clj
+++ ext/chrome/project.clj
@@ -14,7 +14,7 @@
              :exclusions [org.clojure/clojure]]
             ]
   :hooks [leiningen.cljsbuild]
-  :profiles {:dev {:plugins []
+  :profiles {:dev {:plugins [[packer "0.1.0"]]
                    :dependencies []
                    :ring {:handler owl.web.routes/app
                           :init owl.web.routes/init
@@ -25,7 +25,13 @@
                                  :compiler {:output-to
                                             "resources/public/js/main-dev.js"
                                             :optimizations :whitespace
-                                            :pretty-print true}}]}}
+                                            :pretty-print true}}]}
+                   :pack {:mapping [{:source-paths ["manifest.json"
+                                                    #"resources/public/js/\w+\.js"
+                                                    #"resources/public/\w+\.html"]
+                                     :target-path "target/packed/src"}]
+                          :target {:type "crx"
+                                   :path "target/packed/"}}}
              :pro {:cljsbuild {:builds
                                [{:source-paths ["src/cljs"]
                                  :compiler {:output-to


Handle tracker codes as lowercase. Fix #55.

--- src/ruuvi_server/database/event_dao.clj
+++ src/ruuvi_server/database/event_dao.clj
@@ -6,6 +6,7 @@
   (:use [clojure.tools.logging :only (debug info warn error)])
   (:require [ruuvi-server.util :as util])
   (:import org.joda.time.DateTime)
+  (:require [clojure.string :as string])
   )

 ;; private functions
@@ -23,17 +24,18 @@
           (where (in :id ids))))

 (defn get-tracker-by-code [tracker-code]
-  (first (select tracker
-                 (where {:tracker_code tracker-code}))))
+  (let [tracker-code (string/lower-case tracker-code)]
+    (first (select tracker
+                   (where {:tracker_code tracker-code})))))

 ;; TODO add caching
 (defn get-tracker-by-code! [tracker-code & tracker-name]
-  (let [existing-tracker (get-tracker-by-code tracker-code)]
+  (let [tracker-code (string/lower-case tracker-code)
+        existing-tracker (get-tracker-by-code tracker-code)]
     (if existing-tracker
       existing-tracker
       (insert tracker (values {:tracker_code tracker-code
-                               :name (or tracker-name tracker-code)}))
-      )))
+                               :name (or tracker-name tracker-code)})))))

 (defn get-all-trackers []
   (select tracker)
@@ -60,11 +62,12 @@
           (where {:id id})))

 (defn create-tracker [code name shared-secret]
-  (info "Create new tracker" name "(" code ")")
-  (insert tracker (values
-                   {:tracker_code code
-                    :shared_secret shared-secret
-                    :name name})))
+  (let [tracker-code (string/lower-case code)]
+    (info "Create new tracker" name "(" tracker-code ")")
+    (insert tracker (values
+                     {:tracker_code tracker-code
+                      :shared_secret shared-secret
+                      :name name}))))

 (defn- get-event-session-for-code [tracker-id session-code]
   (first (select event-session


fix wrong argument name

fix wrong argument name

--- src/main/cljs/cljs/tools/reader.cljs
+++ src/main/cljs/cljs/tools/reader.cljs
@@ -944,13 +944,13 @@
   ([stream eof-error? eof-value] (read+string stream eof-error? eof-value false))
   ([stream eof-error? eof-value recursive?]
    (let [buf (fn [reader] (str (:buffer @(.-frames stream))))
-         offset (count (buf reader))
+         offset (count (buf stream))
          o (log-source stream (read stream eof-error? eof-value recursive?))
-         s (.trim (subs (buf reader) offset))]
+         s (.trim (subs (buf stream) offset))]
      [o s]))
   ([opts stream]
    (let [buf (fn [reader] (str (:buffer @(.-frames stream))))
-         offset (count (buf reader))
+         offset (count (buf stream))
          o (log-source stream (read opts stream))
-         s (.trim (subs (buf reader) offset))]
+         s (.trim (subs (buf stream) offset))]
      [o s])))


cljs.analyzer/*cljs-ns* is a symbol, no need to ns-name

--- src/main/cljs/cljs/tools/reader.cljs
+++ src/main/cljs/cljs/tools/reader.cljs
@@ -768,7 +768,7 @@
   (let [token (read-token rdr (read-char rdr))]
     (if-let [ns (cond
                   (= token ":")
-                  (ns-name cljs.analyzer/*cljs-ns*)
+                  cljs.analyzer/*cljs-ns*

                   (= \: (first token))
                   (some-> token (subs 1) parse-symbol peek symbol resolve-ns)


Don't try to open a non-existent file

Don't try to open a non-existent file

--- src/net/sekao/nightcode/projects.clj
+++ src/net/sekao/nightcode/projects.clj
@@ -107,8 +107,10 @@
                                  (project-pane parent-path))
                 editors (-> project-pane .getItems (.get 0))]
             (-> editors .getChildren .clear)
-            (if (.isDirectory file)
+            (cond
+              (.isDirectory file)
               (-> editors .getChildren (.add (dir-pane)))
+              (.isFile file)
               (when-let [pane (or (get-in runtime-state [:editor-panes path])
                                   (e/editor-pane @pref-state-atom runtime-state file))]
                 (-> editors .getChildren (.add pane))


Version 1.1.1

Version 1.1.1

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject org.zalando.stups/friboo "1.1.1-SNAPSHOT"
+(defproject org.zalando.stups/friboo "1.1.1"
   :description "A utility library to write microservices in clojure."
   :url "https://github.com/zalando-stups/friboo"


Update jooq version to 3.7.2

Update jooq version to 3.7.2

--- project.clj
+++ project.clj
@@ -3,14 +3,20 @@
   :url "https://github.com/funcool/suricatta"
   :license {:name "BSD (2-Clause)"
             :url "http://opensource.org/licenses/BSD-2-Clause"}
-  :dependencies [[org.clojure/clojure "1.8.0-RC1" :scope "provided"]
-                 [org.jooq/jooq "3.7.1"]]
+  :dependencies [[org.clojure/clojure "1.7.0" :scope "provided"]
+                 [org.jooq/jooq "3.7.2"]]
   ;; :jvm-opts ^:replace ["-Dclojure.compiler.direct-linking=true"]
   :javac-options ["-target" "1.8" "-source" "1.8" "-Xlint:-options"]
-  :profiles {:dev {:global-vars {*warn-on-reflection* false}
-                   :plugins [[lein-ancient "0.6.7"]]
-                   :dependencies [[org.postgresql/postgresql "9.4-1204-jdbc42"]
-                                  [com.h2database/h2 "1.4.190"]
-                                  [cheshire "5.5.0"]]}}
+  :profiles
+  {:dev {:global-vars {*warn-on-reflection* false}
+         :aliases {"test-all" ["with-profile" "dev,1.8:dev,1.6:dev,1.5:dev" "test"]}
+         :plugins [[lein-ancient "0.6.7"]]
+         :dependencies [[org.postgresql/postgresql "9.4-1204-jdbc42"]
+                        [com.h2database/h2 "1.4.190"]
+                        [cheshire "5.5.0"]]}
+   :1.6 {:dependencies [[org.clojure/clojure "1.6.0"]]}
+   :1.5 {:dependencies [[org.clojure/clojure "1.5.1"]]}
+   :1.8 {:dependencies [[org.clojure/clojure "1.8.0-RC4"]]}}
+
   :java-source-paths ["src/java"])


Add `cheshire` as dependency for `clj-http`

--- project.clj
+++ project.clj
@@ -7,4 +7,5 @@
   :dependencies [[org.clojure/clojure "1.8.0"]
                  [org.clojure/data.json "0.2.6"]
                  [org.clojure/data.codec "0.1.0"]
-                 [clj-http "2.1.0"] ])
+                 [cheshire "5.6.0"]
+                 [clj-http "2.1.0"]])


Change to minimal webjars-locator-core library

--- project.clj
+++ project.clj
@@ -15,7 +15,7 @@
                            [prismatic/schema "0.4.3"]
                            [hiccup "1.0.5"]
                            [org.webjars/bootstrap "3.3.5"]
-                           [org.webjars/webjars-locator "0.27"]]
+                           [org.webjars/webjars-locator-core "0.27"]]
   :test-paths ["spec"]
   :plugins [[speclj "3.3.1"]
                       [lein-shell "0.4.0"]]


comments

comments

--- project.clj
+++ project.clj
@@ -21,9 +21,9 @@
    ]

   :exclusions [ javax.mail/mail javax.jms/jms com.sun.jdmk/jmxtools com.sun.jmx/jmxri ]
-  :jvm-opts [~(str "-Djava.library.path=native/:" (System/getenv "LD_LIBRARY_PATH"))]
+  :jvm-opts [~(str "-Djava.library.path=native/:" (System/getenv "LD_LIBRARY_PATH"))]; http://tinyurl.com/7h6vr6s
   :main  com.narkisr.couchfs.mounter
   :aot [com.narkisr.couchfs.mounter]
-  :disable-deps-clean true
+  :disable-deps-clean true ; preventing native cleanup during uberjar
 )


Updating dependencies

Updating dependencies

--- project.clj
+++ project.clj
@@ -3,16 +3,16 @@
   :url "https://github.com/r4um/jmx-dump"
   :license {:name "Eclipse Public License"
             :url "http://www.eclipse.org/legal/epl-v10.html"}
-  :dependencies [[org.clojure/clojure "1.10.3"]
+  :dependencies [[org.clojure/clojure "1.11.1"]
                  [org.clojure/tools.cli "1.0.194"]
                  [org.clojure/java.jmx "1.0.0"]
                  [org.apache.commons/commons-lang3 "3.9"]
-                 [cheshire "5.10.1"]]
+                 [cheshire "5.11.0"]]
   :main jmx-dump.core
   :target-path "target/%s"
   :bin {:name          "jmx-dump"
         :jvm-opts [ "$JVM_OPTS" ]}
   :profiles {:uberjar {:aot :all}
-             :dev     {:dependencies [[clj-kondo "2021.12.01"]]
+             :dev     {:dependencies [[clj-kondo "2022.06.22"]]
                        :plugins      [[lein-binplus "0.6.6"]]}}
   :aliases {"clj-kondo" ["run" "-m" "clj-kondo.main" "--lint" "src"]})


lein-release plugin: preparing 0.1 release

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


Set version to 0.1.0.

Set version to 0.1.0.

--- project.clj
+++ project.clj
@@ -10,7 +10,7 @@
 ;
 ; You must not remove this notice, or any other, from this software.

-(defproject com.ksmpartners/sql-file "0.1.0-SNAPSHOT"
+(defproject com.ksmpartners/sql-file "0.1.0"

   :description "Library for managing data files used by embedded databases."


remove manual plugin activation

remove manual plugin activation

--- project.clj
+++ project.clj
@@ -27,5 +27,4 @@
   :source-paths ["src/clj"]
   :java-source-paths ["src/jvm"]
   :global-vars {*warn-on-reflection* true})
-(cemerick.pomegranate.aether/register-wagon-factory!
- "s3p" #(eval '(org.springframework.aws.maven.PrivateS3Wagon.)))
+


Add friend dep to project.clj

Add friend dep to project.clj

--- project.clj
+++ project.clj
@@ -5,7 +5,8 @@
                  [compojure "1.1.8"]
                  [ring "1.3.0"]
                  [hiccup "1.0.4"]
-                 [org.ocpsoft.prettytime/prettytime-nlp "3.0.2.Final"]]
+                 [org.ocpsoft.prettytime/prettytime-nlp "3.0.2.Final"]
+                 [com.cemerick/friend "0.2.1"]]
   :plugins [[lein-ring "0.8.11"]]
   :ring {:handler todo-repl-webapp.handler/app}
   :profiles


Version 0.4.0

Version 0.4.0

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject pandect "0.3.4"
+(defproject pandect "0.4.0"
   :description "Message Digest and Checksum Library for Clojure"
   :url "https://github.com/xsc/pandect"
   :license {:name "Eclipse Public License"


Start 1.3.3-SNAPSHOT

Start 1.3.3-SNAPSHOT

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject nightcode "1.3.2"
+(defproject nightcode "1.3.3-SNAPSHOT"
   :description "An IDE for Clojure and Java"
   :url "https://github.com/oakes/Nightcode"
   :license {:name "Public Domain"


Version 0.0.3-SNAPSHOT

Version 0.0.3-SNAPSHOT

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject com.lemonodor/pronouncing "0.0.2"
+(defproject com.lemonodor/pronouncing "0.0.3-SNAPSHOT"
   :description "Clojure interface to the CMU pronouncing dictionary. Provides ways to look up word pronounciations, count syllables, and find rhyming words."
   :url "https://github.com/wiseman/clj-pronouncing"
   :license {:name "MIT License"


release 2.0.10

release 2.0.10

--- project.clj
+++ project.clj
@@ -11,7 +11,7 @@
 ;; ..
 ;; babel.zu (Zulu)
 ;;
-(defproject babel "2.0.10-SNAPSHOT"
+(defproject babel "2.0.10"
   :description "A library for natural language generation and parsing"
   :url "http://github.com/ekoontz/babel"
   :license {:name "Proprietary: all rights reserved. No distribution allowed without consent of owners."}


Upgrade to Clojure 1.7

Upgrade to Clojure 1.7

--- project.clj
+++ project.clj
@@ -4,7 +4,7 @@
   :license {:name "Eclipse Public License"
             :url "http://www.eclipse.org/legal/epl-v10.html"}
   :jvm-opts ["-Xmx4g"]
-  :dependencies [[org.clojure/clojure "1.6.0"]
+  :dependencies [[org.clojure/clojure "1.7.0"]
                  [org.clojure/core.async "0.1.346.0-17112a-alpha"]
                  [org.apache.curator/curator-framework "2.8.0"]
                  [org.apache.curator/curator-test "2.8.0"]


Bump nrepl to latest (0.2.8)

Bump nrepl to latest (0.2.8)

--- project.clj
+++ project.clj
@@ -7,7 +7,7 @@
                    [jline "2.12.1"]
                    [org.thnetos/cd-client "0.3.6"]
                    [clj-stacktrace "0.2.7"]
-                   [org.clojure/tools.nrepl "0.2.6"]
+                   [org.clojure/tools.nrepl "0.2.8"]
                    [org.clojure/tools.cli "0.3.1"]
                    [com.cemerick/drawbridge "0.0.6"
                     :exclusions [org.clojure/tools.nrepl]]


Bump fulcro

Bump fulcro

--- project.clj
+++ project.clj
@@ -12,7 +12,7 @@
                  [org.omcljs/om "1.0.0-beta1" :scope "provided"]
                  [org.clojure/math.combinatorics "0.1.4"]
                  [com.wsscode/spec-inspec "1.0.0-alpha2"]
-                 [fulcrologic/fulcro "2.0.0-beta7" :scope "provided"]
+                 [fulcrologic/fulcro "2.0.0-RC2-SNAPSHOT" :scope "provided"]
                  [org.clojure/test.check "0.9.0" :scope "provided"]
                  [camel-snake-kebab "0.4.0"]]


Add leiningen as a dev dependency

Add leiningen as a dev dependency

--- project.clj
+++ project.clj
@@ -15,4 +15,5 @@
                  ^:source-dep [parallel "0.10"]
                  [com.googlecode.jarjar/jarjar "1.3"]]
   :mranderson {:project-prefix "mranderson.inlined"}
-  :profiles {:dev {:dependencies [[org.clojure/clojure "1.8.0"]]}})
+  :profiles {:dev {:dependencies [[org.clojure/clojure "1.8.0"]
+                                  [leiningen-core "2.8.3"]]}})


Latest version of Hiccups lib (0.3.0) fixes multi-class buglet. Use it. [BugId: 142]

--- project.clj
+++ project.clj
@@ -39,7 +39,7 @@
                  [enlive "1.1.1"]

                  ;; HTML generation for Clojurescript (Ported from Clojure Hiccup)
-                 [hiccups "0.2.0"]
+                 [hiccups "0.3.0"]

                  ;; Ring/Compojure RPC
                  [shoreleave/shoreleave-remote-ring "0.3.0"]


Bump version

Bump version

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject cascalog/carbonite "1.0.4"
+(defproject cascalog/carbonite "1.0.5"
   :source-path "src/clj"
   :java-source-path "src/jvm"
   :description "Write Clojure data to and from bytes using Kryo."


Removed clojure testing harness.

Removed clojure testing harness.

--- project.clj
+++ project.clj
@@ -1,8 +1,6 @@
 (defproject backtype/dfs-datastores-cascading "1.1.0-SNAPSHOT"
-  :source-path "src/clj"
   :java-source-path "src/jvm"
   :java-test-path "test/jvm"
-  :test-path "test/clj"
   :javac-options {:debug "true" :fork "true"}
   :repositories {"conjars" "http://conjars.org/repo"}
   :dependencies [[backtype/dfs-datastores "1.1.0-SNAPSHOT"]
@@ -10,5 +8,4 @@
                   :exclusions [org.codehaus.janino/janino
                                org.apache.hadoop/hadoop-core]]]
   :dev-dependencies [[org.apache.hadoop/hadoop-core "0.20.2-dev"]
-                     [midje "1.3.0"]
                      [junit/junit "3.8.2"]])


Upgrade clojure 1.9 to 1.9.0-RC1.

Upgrade clojure 1.9 to 1.9.0-RC1.

--- project.clj
+++ project.clj
@@ -30,7 +30,7 @@
                    :global-vars {*warn-on-reflection* true}}
              :1.7 {:dependencies [[org.clojure/clojure "1.7.0"]]}
              :1.8 {:dependencies [[org.clojure/clojure "1.8.0"]]}
-             :1.9 {:dependencies [[org.clojure/clojure "1.9.0-beta2"]]}
+             :1.9 {:dependencies [[org.clojure/clojure "1.9.0-RC1"]]}
              :uberjar {:dependencies [[org.clojure/clojure "1.8.0"]
                                       [org.apache.logging.log4j/log4j-api "2.9.1"]
                                       [org.apache.logging.log4j/log4j-core "2.9.1"]]


latest ancient

latest ancient

--- project.clj
+++ project.clj
@@ -61,7 +61,7 @@

   :plugins  [[jonase/eastwood "0.1.3"]
              [self-build "0.0.6"]
-             [lein-ancient "0.4.2" :exclusions [org.clojure/clojure]]
+             [lein-ancient "0.6.7" :exclusions [org.clojure/clojure]]
              [lein-tar "2.0.0" ]
              [lein-tag "0.1.0"] [lein-set-version "0.3.0"]
              [topping "0.0.2"] [self-build "0.0.3"]]


Upgrade to om alpha26

Upgrade to om alpha26

--- project.clj
+++ project.clj
@@ -7,7 +7,7 @@
   :dependencies [[org.clojure/clojure "1.7.0"]
                  [org.clojure/clojurescript "1.7.170"]
                  [org.clojure/core.async "0.2.374"]
-                 [org.omcljs/om "1.0.0-alpha24"]
+                 [org.omcljs/om "1.0.0-alpha26"]
                  [figwheel-sidecar "0.5.0-2" :scope "test"]
                  [com.andrewmcveigh/cljs-time "0.3.14"]]
   )


Increment version number

Increment version number

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject nightcode "0.4.5-SNAPSHOT"
+(defproject nightcode "0.4.5"
   :description "An IDE for Clojure and Java"
   :url "https://github.com/oakes/Nightcode"
   :license {:name "Public Domain"


Version 1.8.6-SNAPSHOT

Version 1.8.6-SNAPSHOT

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject puppetlabs/lein-ezbake "1.8.5"
+(defproject puppetlabs/lein-ezbake "1.8.6-SNAPSHOT"
   :description "A system for building packages for trapperkeeper-based applications"
   :url "https://github.com/puppetlabs/ezbake"
   :license {:name "Apache License 2.0"


Add snappy-java 1.0.5 to fix OSX errors.

--- project.clj
+++ project.clj
@@ -9,7 +9,9 @@
   :dependencies [[org.clojure/clojure "1.5.1"]
                  [liberator "0.10.0"]
                  [cheshire "5.3.1"]
-                 ;; [com.cemerick/friend "0.2.0"]
+
+                 ;; Required for Cassandra (possibly only OSX)
+                 [org.xerial.snappy/snappy-java "1.0.5"]

                  ;; ClojureScript dependencies
                  [prismatic/dommy "0.1.1"]


Updated depedencies. Rolled version to v2.0

--- project.clj
+++ project.clj
@@ -9,13 +9,13 @@
 ; Contributors:
 ;    Peter Monks - initial implementation

-(defproject lein-amp "0.2.0-SNAPSHOT"
+(defproject lein-amp "0.2.0"
   :description      "Leiningen plugin for generating Alfresco Module Package (AMP) files."
   :url              "https://github.com/pmonks/lein-amp"
   :license          {:name "Eclipse Public License"
                      :url  "http://www.eclipse.org/legal/epl-v10.html"}
   :min-lein-version "2.0.0"
   :dependencies [
-                  [me.raynes/fs "1.4.5"]
+                  [me.raynes/fs "1.4.6"]
                 ]
   :eval-in-leiningen true)


0.8.1-wip10

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject storm "0.8.1-wip9"
+(defproject storm "0.8.1-wip10"
   :source-path "src/clj"
   :test-path "test/clj"
   :java-source-path "src/jvm"


Version 1.1.1

Version 1.1.1

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject puppetlabs/trapperkeeper-status "1.1.1-SNAPSHOT"
+(defproject puppetlabs/trapperkeeper-status "1.1.1"
   :description "A trapperkeeper service for getting the status of other trapperkeeper services."
   :url "https://github.com/puppetlabs/trapperkeeper-status"
   :license {:name "Apache License, Version 2.0"


Version 0.3.14

Version 0.3.14

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject ancient-clj "0.3.14-SNAPSHOT"
+(defproject ancient-clj "0.3.14"
   :description "Maven Version Utilities for Clojure"
   :url "https://github.com/xsc/ancient-clj"
   :license {:name "MIT License"


Update dependencies.

Update dependencies.

--- project.clj
+++ project.clj
@@ -5,12 +5,12 @@
             :url "http://www.apache.org/licenses/LICENSE-2.0.txt"}
   :javac-options ["-target" "1.8" "-source" "1.8" "-Xlint:-options"]
   :dependencies [[org.clojure/clojure "1.7.0" :scope "provided"]
-                 [com.taoensso/nippy "2.9.0"]
-                 [funcool/cats "1.0.0-SNAPSHOT"]
+                 [com.taoensso/nippy "2.10.0"]
+                 [funcool/cats "1.1.0-SNAPSHOT"]
                  [funcool/cuerdas "0.6.0"]
-                 [funcool/promissum "0.2.0"]
+                 [funcool/promissum "0.3.1"]
                  [funcool/suricatta "0.4.0-SNAPSHOT"]
-                 [com.h2database/h2 "1.4.188"]
+                 [com.h2database/h2 "1.4.189"]
                  [org.postgresql/postgresql "9.4-1202-jdbc42"]
                  [hikari-cp "1.3.1"]
                  [cheshire "5.5.0"]


Show also passed tests in test run output

--- project.clj
+++ project.clj
@@ -14,7 +14,7 @@
   :main nhl-score-api.core
   :profiles {:kaocha {:dependencies [[lambdaisland/kaocha "0.0-413"]]}
              :uberjar {:aot :all}}
-  :aliases {"kaocha" ["with-profile" "+kaocha" "run" "-m" "kaocha.runner"]}
+  :aliases {"kaocha" ["with-profile" "+kaocha" "run" "-m" "kaocha.runner" "--reporter" "kaocha.report/documentation"]}
   :plugins [[lein-heroku "0.5.3"]]
   :uberjar-name "server.jar"
   :heroku {:app-name "nhl-score-api"


Version 0.9.3

Version 0.9.3

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject re-frame "0.9.3-SNAPSHOT"
+(defproject re-frame "0.9.3"
   :description  "A Clojurescript MVC-like Framework For Writing SPAs Using Reagent."
   :url          "https://github.com/Day8/re-frame.git"
   :license      {:name "MIT"}


Update dependencies.

Update dependencies.

--- project.clj
+++ project.clj
@@ -18,17 +18,17 @@
     [org.clojure/core.match "0.3.0-alpha4"] ; Erlang-esque pattern matching https://github.com/clojure/core.match
     [defun "0.3.0-alapha"] ; Erlang-esque pattern matching for Clojure functions https://github.com/killme2008/defun
     [org.clojure/core.incubator "0.1.4"] ; Functions proposed for inclusion in Clojure https://github.com/clojure/core.incubator
-    [cheshire "5.6.1"] ; JSON de/encoding https://github.com/dakrone/cheshire
+    [cheshire "5.6.3"] ; JSON de/encoding https://github.com/dakrone/cheshire
     [org.flatland/ordered "1.5.3"] ; Ordered hash map https://github.com/flatland/ordered
-    [ring/ring-devel "1.5.0"] ; Web application library https://github.com/ring-clojure/ring
-    [ring/ring-core "1.5.0"] ; Web application library https://github.com/ring-clojure/ring
-    [http-kit "2.2.0-alpha2"] ; Web Server http://http-kit.org/
+    [ring/ring-devel "1.6.0-beta1"] ; Web application library https://github.com/ring-clojure/ring
+    [ring/ring-core "1.6.0-beta1"] ; Web application library https://github.com/ring-clojure/ring
+    [http-kit "2.2.0-beta1"] ; Web Server http://http-kit.org/
     [compojure "1.5.1"] ; Web routing https://github.com/weavejester/compojure
     [liberator "0.14.1"] ; WebMachine (REST API server) port to Clojure https://github.com/clojure-liberator/liberator
     [com.ashafa/clutch "0.4.0"] ; CouchDB client https://github.com/clojure-clutch/clutch
     [clojurewerkz/elastisch "3.0.0-beta1"] ; Client for ElasticSearch https://github.com/clojurewerkz/elastisch
     [environ "1.0.3"] ; Get environment settings from different sources https://github.com/weavejester/environ
-    [com.taoensso/timbre "4.5.0-RC2"] ; Logging https://github.com/ptaoussanis/timbre
+    [com.taoensso/timbre "4.5.0"] ; Logging https://github.com/ptaoussanis/timbre
     [clj-http "3.1.0"] ; HTTP client https://github.com/dakrone/clj-http
     [superstring "2.1.0"] ; String manipulation https://github.com/expez/superstring
     [commons-codec "1.10" :exclusions [[org.clojure/clojure]]] ; Dependency of compojure, ring-core, and midje http://commons.apache.org/proper/commons-codec/


(PDB-3489) Update clj-parent version to 0.8.0

--- project.clj
+++ project.clj
@@ -1,6 +1,6 @@
 (def pdb-version "5.0.0-SNAPSHOT")
 (def puppetserver-version "5.0.0-master-SNAPSHOT")
-(def clj-parent-version "0.7.1")
+(def clj-parent-version "0.8.0")

 (defn deploy-info
   "Generate deployment information from the URL supplied and the username and


updating cljfmt and clojurescript versions

--- project.clj
+++ project.clj
@@ -3,8 +3,8 @@
   :url "http://github.com/snoe/node-cljfmt"

   :dependencies [[org.clojure/clojure "1.8.0"]
-                 [org.clojure/clojurescript "1.7.228"]
-                 [cljfmt "0.5.3"]]
+                 [org.clojure/clojurescript "1.10.439"]
+                 [cljfmt "0.6.3"]]

   :plugins [[lein-cljsbuild "1.1.2"]]


Revert "Upgrade to 0.9.0-alpha6."

Revert "Upgrade to 0.9.0-alpha6."

This reverts commit 7b4db1fdf089b20d630eebfc826a2b3fed8c2911.

--- project.clj
+++ project.clj
@@ -1,10 +1,10 @@
-(defproject workshop "0.9.0-alpha6"
+(defproject workshop "0.9.0-alpha5"
   :license {:name "Eclipse Public License"
             :url "http://www.eclipse.org/legal/epl-v10.html"}
   :dependencies [[org.clojure/clojure "1.7.0"]
                  [org.clojure/core.async "0.2.374"]
                  ^{:voom {:repo "git@github.com:onyx-platform/onyx.git" :branch "master"}}
-                 [org.onyxplatform/onyx "0.9.0-alpha6"]
+                 [org.onyxplatform/onyx "0.9.0-alpha5"]
                  [org.slf4j/slf4j-api "1.7.12"]
                  [org.slf4j/slf4j-nop "1.7.12"]]
   :profiles {:dev {:dependencies [[org.clojure/tools.namespace "0.2.10"]


Version 0.1.6-SNAPSHOT

Version 0.1.6-SNAPSHOT

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject breeze-quiescent "0.1.5"
+(defproject breeze-quiescent "0.1.6-SNAPSHOT"
   :description "A minimal, functional ClojureScript wrapper for ReactJS"
   :license {:name "Eclipse Public License"
             :url "http://www.eclipse.org/legal/epl-v10.html"}


version 0.6.2

version 0.6.2

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject cake "0.6.2-SNAPSHOT"
+(defproject cake "0.6.2"
   :description "Save your fork, there's cake!"
   :dependencies [[clojure "1.2.0"]
                  [clojure-contrib "1.2.0"]


lein-release plugin: bumped version from 0.7 to 0.8-SNAPSHOT for next development cycle

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject tyranitar "0.7"
+(defproject tyranitar "0.8-SNAPSHOT"
   :description "Tyranitar service"
   :url "http://wikis.in.nokia.com/NokiaMusicArchitecture/Tyranitar"


Depend on riemann-clojure-client 0.2.1-SNAPSHOT

--- project.clj
+++ project.clj
@@ -33,7 +33,7 @@
     [log4j/apache-log4j-extras "1.0"]
     [org.antlr/antlr "3.2"]
     [org.slf4j/slf4j-log4j12 "1.6.4"]
-    [riemann-clojure-client "0.2.0"]
+    [riemann-clojure-client "0.2.1-SNAPSHOT"]
     [slingshot "0.10.2"]
   ]
   :plugins [[codox "0.6.1"]


Set version to 0.6.0-SNAPSHOT.

Set version to 0.6.0-SNAPSHOT.

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject buddy/buddy-sign "0.5.1"
+(defproject buddy/buddy-sign "0.6.0-SNAPSHOT"
   :description "High level message signing for Clojure"
   :url "https://github.com/funcool/buddy-sign"
   :license {:name "Apache 2.0"


updated project url

updated project url

--- project.clj
+++ project.clj
@@ -1,6 +1,6 @@
 (defproject maqueta "0.1.0-SNAPSHOT"
   :description "FIXME: write description"
-  :url "http://example.com/FIXME"
+  :url "https://github.com/marcovzla/maqueta"
   :license {:name "Eclipse Public License"
             :url "http://www.eclipse.org/legal/epl-v10.html"}
   :dependencies [[org.clojure/clojure "1.4.0"]


(PE-28468) Update clj-parent to 4.3.3

(PE-28468) Update clj-parent to 4.3.3

Include trapperkeeper-metrics 1.2.1 to fix CVE-2020-7943

--- project.clj
+++ project.clj
@@ -1,5 +1,5 @@
 (def pdb-version "6.9.1-SNAPSHOT")
-(def clj-parent-version "4.3.0")
+(def clj-parent-version "4.3.3")

 (defn true-in-env? [x]
   (#{"true" "yes" "1"} (System/getenv x)))


updates server deps

updates server deps

--- project.clj
+++ project.clj
@@ -33,7 +33,7 @@
             "check-updates" ["ancient" ":all"]
             "audit"         ["nvd" "check"]}
   :profiles {:dev  {:plugins [[lein-ancient "0.6.15"]
-                              [jonase/eastwood "0.3.10"]
+                              [jonase/eastwood "0.3.11"]
                               [lein-cloverage "1.1.2"]
                               [lein-nvd "1.3.1"]]}
              :test {:jvm-opts ["-Dlogback.configurationFile=./test/logback-unit.xml"]}}


Rename `move-ns-dev-src-test` -> `u-move-ns-dev-src-test`.

--- dev/user.clj
+++ dev/user.clj
@@ -8,5 +8,5 @@
             [clojure.tools.namespace.move :refer :all]
             [midje.repl :refer :all]))

-(defn move-ns-dev-src-test [old-sym new-sym source-path]
+(defn u-move-ns-dev-src-test [old-sym new-sym source-path]
   (move-ns old-sym new-sym source-path ["dev" "src" "test"]))


fix failing docker http engine timeout test #314

--- test/clj/swarmpit/docker/engine/http_test.clj
+++ test/clj/swarmpit/docker/engine/http_test.clj
@@ -47,7 +47,8 @@
   (testing "timeout"
     (is (thrown?
           ExceptionInfo #"Docker error: Request timeout"
-          (with-redefs [swarmpit.config/config {:docker-http-timeout 0}]
+          (with-redefs [swarmpit.config/config {:docker-sock         "http://localhost:12375"
+                                                :docker-http-timeout 0}]
             (-> (execute {:method :GET
                           :api    "/services"})
                 :body)))))


[Fix #85] Filter out spurious occurrences

By checking if the symbol we're looking for actually exist at the
specified coordinates we can eliminate false positives.

--- src/refactor_nrepl/find/find_symbol.clj
+++ src/refactor_nrepl/find/find_symbol.clj
@@ -2,6 +2,7 @@
   (:require [clojure
              [set :as set]
              [string :as str]]
+            [clojure.java.io :as io]
             [clojure.tools.analyzer.ast :refer [nodes postwalk]]
             [clojure.tools.namespace.parse :as parse]
             [refactor-nrepl
@@ -231,12 +232,32 @@
   [{:keys [line-beg line-end col-beg col-end name file match]}]
   [line-beg line-end col-beg col-end name file match])

+(defn- spurious?
+  "True if the occurrence doesn't exist at the given coordinates."
+  [{:keys [file line-beg col-beg col-end name match] :as occ}]
+  ;; coordinates are wrong for def forms, they match the beginning of
+  ;; the form not the first mention of the symbol being defined
+  (when-not (.startsWith match "(def")
+    (let [thing-in-file (->> file
+                             io/reader
+                             line-seq
+                             (drop (dec line-beg))
+                             first
+                             (drop (dec col-beg))
+                             (take (- col-end col-beg))
+                             (apply str))]
+      (not= (core/suffix thing-in-file)
+            (core/suffix name)))))
+
 (defn find-symbol [{:keys [file ns name dir line column ignore-errors]}]
   (core/throw-unless-clj-file file)
   (let [macros (future (find-macro (core/fully-qualify name ns)))
-        globals (future (find-global-symbol file ns name dir
-                                            (= ignore-errors "true")))]
+        globals (future (remove spurious? (distinct (find-global-symbol file ns name dir
+                                                                        (= ignore-errors "true")))))]
     (or
-     (not-empty (find-local-symbol file name line column)) ; this is the fastest one
-     @macros ; find-macro first because find-global-symbol returns garb for macros
+     ;; find-local-symbol is the fastest of the three
+     (not-empty (remove spurious? (distinct (find-local-symbol file name line column))))
+     ;; find-macros has to be checked first because find-global-symbol
+     ;; can return spurious hits for some macro definitions
+     @macros
      @globals)))


added tests for new long-term stats

added tests for new long-term stats

--- test/clj/forma/trends/analysis_test.clj
+++ test/clj/forma/trends/analysis_test.clj
@@ -16,7 +16,12 @@
   ;; the trends change slightly.
   (let [[coeff t-test] (long-stats ndvi rain)]
     coeff  => (roughly -1.23824)
-    t-test => (roughly -0.99763)))
+    t-test => (roughly -0.99763))
+
+  ;; Returns a pair of nil values in the presence of an exception
+  (let [[coeff t-test] (long-stats [0])]
+    coeff  => nil
+    t-test => nil))

 (fact "Test first-order conditions."
   (ffirst


move hworld

move hworld

--- test/tiltontec/its_alive/model_test.clj
+++ test/tiltontec/its_alive/model_test.clj
@@ -2,11 +2,12 @@
   (:require [clojure.test :refer :all]
             [tiltontec.its-alive.utility :refer :all]
             [tiltontec.its-alive.cell-types :refer :all :as cty]
-            ;[tiltontec.its-alive.observer :refer :all]
+            [tiltontec.its-alive.observer :refer :all]
             [tiltontec.its-alive.evaluate :refer :all]
             [tiltontec.its-alive.cells :refer :all]
             [tiltontec.its-alive.model-base :refer :all]
-            [tiltontec.its-alive.model :refer :all :as md]))
+            [tiltontec.its-alive.model :refer :all :as md]
+            [tiltontec.its-alive.family :refer :all :as fm]))

 (derive cty/ia-types ::typetest ::cty/model)
@@ -74,3 +75,57 @@
     ))

+
+
+(deftest hello-model
+  (let [uni (md/make
+             ::fm/family
+             :kids (c? (the-kids
+                        (md/make
+                         :name :visitor
+                         :moniker "World"
+                         :action (c-in nil
+                                       :ephemeral? true
+                                       :obs (fn [slot me new old c]
+                                              (when new (trx visitor-did new)))))
+                        (md/make
+                         :name :resident
+                         :action (c-in nil :ephemeral? true)
+                         :location (c?+ [:obs (fn-obs (when new (trx :honey-im new)))]
+                                        (case (md-get me :action)
+                                          :leave :away
+                                          :return :home
+                                          :missing))
+                         :response (c?+ [:obs (fn-obs (when new
+                                                        (trx :r-response new)))
+                                         :ephemeral? true]
+                                        (when (= :home (md-get me :location))
+                                          (when-let [act (mdv! :visitor :action)]
+                                            (case act
+                                              :knock-knock "hello, world")))))
+                        (md/make
+                         :name :alarm
+                         :on-off (c?+ [:obs (fn-obs
+                                             (trx :telling-alarm-api new))]
+                                      (if (= :home (mdv! :resident :location)) :off :on))
+                         :activity (c?+ [:obs (fn-obs
+                                               (case new
+                                                 :call-police (trx :auto-dialing-911)
+                                                 nil))]
+                                        (when (= :on (md-get me :on-off))
+                                          (when-let [action (mdv! :visitor :action)]
+                                            (case action
+                                              :smashing-window :call-police
+                                              nil))))))))]
+    (let [viz (fm! :visitor uni)
+          rez (fm! :resident uni)]
+      (is (not (nil? viz)))
+      (is (not (nil? rez)))
+      (is (not (nil? (md-cell rez :action))))
+      (is (= :missing (mdv! :resident :location uni)))
+      (md-reset! viz :action :knock-knock)
+      (md-reset! viz :action :smashing-window)
+      (is (not (nil? (md-cell rez :action))))
+      (md-reset! rez :action :return)
+      (is (= :home (mdv! :resident :location uni)))
+      (md-reset! viz :action :knock-knock))))


Add velocity bounds for seeds as vars.

Add velocity bounds for seeds as vars.

--- src/videotest/coral/motion_seeds.clj
+++ src/videotest/coral/motion_seeds.clj
@@ -9,6 +9,11 @@

 (def SEED-W 10)
 (def SEED-CREATE-ODDS 0.1)
+
+(def SEED-X-VEL-BOUND 20.0)
+(def SEED-Y-VEL-BOUND-MIN 5.0)
+(def SEED-Y-VEL-BOUND-MAX 20.0)
+

 (defn seed-created? []
   (> SEED-CREATE-ODDS (rand)))
@@ -34,8 +39,8 @@
   (assoc-in state [:motion-seeds]
             (reduce (fn [memo {:keys [x y] :as seed}]
                       (let [p-noise (pnoise/xy->perlin x y)
-                            x (+ (pnoise/perlin->range p-noise -10 10.0) x)
-                            y (+ (pnoise/perlin->range p-noise 5.0 10.0) y)]
+                            x (+ (pnoise/perlin->range p-noise (- SEED-X-VEL-BOUND) SEED-X-VEL-BOUND) x)
+                            y (+ (pnoise/perlin->range p-noise SEED-Y-VEL-BOUND-MIN SEED-Y-VEL-BOUND-MAX) y)]
                         (if (< (+ display-height SEED-W) y)
                           memo
                           (conj memo (-> seed


Added namespace aliases

Added namespace aliases

--- dev/user.clj
+++ dev/user.clj
@@ -1,5 +1,7 @@
 (ns user
-  (:require [clojure.java.io :as io]
+  (:require [clojure.edn :as edn]
+            [clojure.data.json :as json]
+            [clojure.java.io :as io]
             [clojure.tools.logging :as log]
             [net.cgrand.reload :refer [auto-reload]]
             [video-server.android :as android]


fix wrapper

fix wrapper

--- internal/machina/src/samsara/machina/core.clj
+++ internal/machina/src/samsara/machina/core.clj
@@ -279,9 +279,37 @@
         (println "transition: " (:state sm1) "->" (:state sm2))
         sm2)))

+  (defn epoch-counter
+    [handler]
+    (fn [sm]
+      (handler (update sm :epoch (fnil inc 0)))))
+
+  (defn- wrapper
+    ([] identity)
+    ([f] f)
+    ([f g] (g f))
+    ([f g & fs]
+     (reduce wrapper (concat [f g] fs))))
+
+  (comment
+    (defn mh [n]
+      (fn [h]
+        (fn [sm]
+          (println n)
+          (h sm))))
+
+    (def f1 (mh 1))
+    (def f2 (mh 2))
+    (def f3 (mh 3))
+    (def f4 (mh 4))
+
+    ((wrapper identity f4 f3 f2 f1) {}))
+
+
   ;; write to file example
   (def sm
     {:state :machine/start
+     :epoch 0
      :data nil

      :dispatch
@@ -309,7 +337,7 @@
         (assoc sm :state :write-to-file))}

      :wrappers
-     [#'log-state-change]})
+     [#'epoch-counter #'epoch-counter #'log-state-change]})

   (defn bad-state [sm]
@@ -327,9 +355,9 @@
   (defn transition
     [{:keys [state data dispatch wrappers] :as sm}]
     (let [f0 (get dispatch state bad-state)
-          f  (reduce (fn [wt w1] (wt w1)) identity
-                (concat wrappers [f0]))]
+          f  (apply wrapper (cons f0 (reverse wrappers)))]
       (f sm)))
+

   (comment


Redirecting System.out to a string for testing purposes

--- jvm-runner/test/codewars/runner/java_test.clj
+++ jvm-runner/test/codewars/runner/java_test.clj
@@ -2,7 +2,17 @@
   (:require [clojure.test :refer :all]
             [codewars.core :refer [-main]]
             [cheshire.core :as json]
-            [codewars.runner :refer [run]]))
+            [codewars.runner :refer [run]])
+  (:import [org.apache.commons.io.output WriterOutputStream]
+           [java.io PrintStream ByteArrayOutputStream]))
+
+(defmacro with-java-out-str [& body]
+  `(let [original-out# (PrintStream. (. System out))
+         byte-out# (ByteArrayOutputStream.)]
+     (-> byte-out# (PrintStream.) System/setOut)
+     ~@body
+     (System/setOut original-out#)
+     (.toString byte-out#)))

 (deftest java-basic
   (testing "-main can handle a very basic java solution and fixture"
@@ -20,3 +30,12 @@
        {:language "java"
         :solution "public class FooFighters {public static int main() {return 1;}}"})
       (is (= 1 (-main))))))
+
+
+(deftest java-solution-print
+  (testing "-main can handle a java solution that prints to standard out"
+    (with-in-str
+      (json/generate-string
+       {:language "java"
+        :solution "public class Hello {public static void main() {System.out.print(\"Hellooo!\");}}"})
+      (is (= "Hellooo!" (with-java-out-str (-main)))))))


[#532] Simplify implementation of

[#532] Simplify implementation of

--- backend/src/akvo/lumen/lib/pivot_impl.clj
+++ backend/src/akvo/lumen/lib/pivot_impl.clj
@@ -66,7 +66,10 @@
         columns (cons (select-keys (:row-column query)
                                    ["title" "type"])
                       category-columns)]
-    {:rows (run-query conn (pivot-sql (:table-name dataset) query filter-str (count categories)))
+    {:rows (run-query conn (pivot-sql (:table-name dataset)
+                                      query
+                                      filter-str
+                                      (count categories)))
      :columns columns}))

 (defn apply-empty-query [conn dataset filter-str]
@@ -78,12 +81,13 @@
      :rows count}))

 (defn apply-empty-category-query [conn dataset query filter-str]
-  (let [rows (run-query conn (format "SELECT %s, count(rnum) FROM %s WHERE %s GROUP BY 1 ORDER BY 1"
-                                     (coalesce (get query :row-column))
-                                     (:table-name dataset)
-                                     filter-str))]
+  (let [rows (->> (format "SELECT %s, count(rnum) FROM %s WHERE %s GROUP BY 1 ORDER BY 1"
+                          (coalesce (get query :row-column))
+                          (:table-name dataset)
+                          filter-str)
+                  (run-query conn))]
     {:columns [{"type" "text"
-                "title" (get (:row-column query) "title")}
+                "title" (get-in query [:row-column "title"])}
                {"type" "number"
                 "title" "Total"}]
      :rows rows}))
@@ -93,16 +97,14 @@
                             (coalesce (get query :category-column))
                             (:table-name dataset)
                             filter-str)
-                    (run-query conn)
-                    (map second))
-        categories (unique-values conn (:table-name dataset) (:category-column query) filter-str)]
+                    (run-query conn))]
     {:columns (cons {"title" ""
                      "type" "text"}
-                    (map (fn [category]
+                    (map (fn [[category]]
                            {"title" category
                             "type" "number"})
-                         categories))
-     :rows [(cons "Total" counts)]}))
+                         counts))
+     :rows [(cons "Total" (map second counts))]}))

 (defn apply-empty-value-query [conn dataset query filter-str]
   (apply-pivot conn


Fix tests

Fix tests

--- backend/test/akvo/lumen/lib/user_test.clj
+++ backend/test/akvo/lumen/lib/user_test.clj
@@ -68,8 +68,8 @@
   (testing "Create invite"
     (let [number-of-initial-invites (-> (user/active-invites  *tenant-conn*)
                                         variant/value :invites count)
-          resp (user/create-invite *emailer* *keycloak* *tenant-conn* "t1"
-                                   server-name ruth-email author-claims ["auth=keycloak"])]
+          resp (user/create-invite *emailer* *keycloak* *tenant-conn* :keycloak "t1"
+                                   server-name ruth-email author-claims)]
       (is (= ::lib/ok (variant/tag resp)))
       (is (= (inc number-of-initial-invites)
              (-> (user/active-invites *tenant-conn*)
@@ -91,8 +91,8 @@

   (testing "Invite user"

-    (let [invite-resp (user/create-invite *emailer* *keycloak* *tenant-conn* "t1"
-                                   server-name ruth-email author-claims ["auth=keycloak"])
+    (let [invite-resp (user/create-invite *emailer* *keycloak* *tenant-conn* :keycloak "t1"
+                                   server-name ruth-email author-claims)
           number-of-original-users (-> (user/users *keycloak* "t1")
                                        variant/value :users count)
           invite-id (-> (user/active-invites *tenant-conn*)


Fix tests.

Fix tests.

--- test/active/clojure/record_test.cljc
+++ test/active/clojure/record_test.cljc
@@ -736,30 +736,23 @@
     (is (= "active.clojure.record-test/RTDStr2{:a 1, :b 2}"
            (pr-str (make-rtd-str2 1 2))))))

-;; str should work as before with non-rtd-records
+;; `pr-str` should work as before with non-rtd-records (`str` wasn't really implemented)
 (define-record-type NonRTDStr
-  {:rtd-record? true
-   :java-class? false}
   make-nrtd-str
   nrtd-str?
   [])

 (define-record-type NonRTDStr2
-  {:rtd-record? true
-   :java-class? false}
   make-nrtd-str2
   nrtd-str2?
   [a nrtd-str2-a
    b nrtd-str2-b])

 (deftest non-rtd-str-test
-  (testing "str / toString"
-    (is (= "active.clojure.record-test/RTDStr{}"
-           (str (make-rtd-str))))
-    (is (= "active.clojure.record-test/RTDStr2{:a 1, :b 2}"
-           (str (make-rtd-str2 1 2)))))
   (testing "pr-str / print-method"
-    (is (= "active.clojure.record-test/RTDStr{}"
-           (pr-str (make-rtd-str))))
-    (is (= "active.clojure.record-test/RTDStr2{:a 1, :b 2}"
-           (pr-str (make-rtd-str2 1 2))))))
+    (is (= #?(:clj "#active.clojure.record_test.NonRTDStr{}"
+              :cljs "#active.clojure.record-test.NonRTDStr{}")
+           (pr-str (make-nrtd-str))))
+    (is (= #?(:clj "#active.clojure.record_test.NonRTDStr2{:a 1, :b 2}"
+              :cljs "#active.clojure.record-test.NonRTDStr2{:a 1, :b 2}")
+           (pr-str (make-nrtd-str2 1 2))))))


Modify user model to construct user tickets explicitly at creation time

--- src/checkin_halake/models/users.clj
+++ src/checkin_halake/models/users.clj
@@ -1,18 +1,24 @@
 (ns checkin-halake.models.users
   (:require [monger.core :as mg]
             [monger.collection :as mc]
-            [environ.core :refer [env]])
+            [environ.core :refer [env]]
+            [checkin-halake.models.ticket :as ticket])
   (:use [crypto.password.bcrypt :only [encrypt check]]
         checkin-halake.models.core))

 (defn- fix-user [doc]
   (dissoc doc :password))

+(def initial-tickets
+  (zipmap (keys ticket/ticket-types)
+          (repeat 0)))
+
 (defn register-user [email password name phone]
   (let [password (encrypt password)
         user {:_id email, :name name,
               :phone phone, :password password,
-              :createdAt (java.util.Date.)}]
+              :createdAt (java.util.Date.)
+              :tickets initial-tickets}]
     (-> (mc/insert-and-return db "users" user)
         fix-user)))


Add firefox and xvfb to the circle node definition

--- src/circle/backend/nodes/circle.clj
+++ src/circle/backend/nodes/circle.clj
@@ -67,7 +67,7 @@
                                                      ;; reliability
                                                      :aptitude {:url "http://us.archive.ubuntu.com/ubuntu/"
                                                                 :scopes ["main" "natty-updates" "universe" "multiverse"]}) ;; TODO the natty is specific to 11.04, change later.
-                             (package/packages :aptitude ["nginx" "htop" "mongodb" "rubygems" "libsqlite3-dev" "nodejs"])
+                             (package/packages :aptitude ["nginx" "htop" "mongodb" "rubygems" "libsqlite3-dev" "nodejs" "firefox" "xvfb"])
                              (java/java :openjdk :jdk)
                              (git/git)
                              (exec-script/exec-script


Update top contrib calculation

Update top contrib calculation

--- src/clj/clojuredocs/pages/intro.clj
+++ src/clj/clojuredocs/pages/intro.clj
@@ -105,19 +105,19 @@
         [:p "First, take a look at the examples style guide, and then add an example for your favorite var (or pick one from the list)."]
         [:p "In addition to examples, you also have the ability to add 'see also' references between vars."]]]]]]])

+
 (defn top-contribs []
   (let [scores (atom {})]
-    (doseq [{:keys [history author]} (mon/fetch :examples)]
-      (let [history (->> history
-                         (concat [{:author author}])
-                         reverse)
-            first-author (-> history first :author)]
-        (swap! scores update-in [first-author] #(+ 4 (or % 0)))
-        (doseq [author (->> history rest (map :author))]
-          (swap! scores update-in [author] #(inc (or % 0))))))
+    (doseq [{:keys [author _id]} (mon/fetch :examples)]
+      (let [editors (->> (mon/fetch :example-histories :where {:example-id _id})
+                         (map :editor))]
+        (swap! scores update-in [author] #(+ 4 (or % 0)))
+        (doseq [editor editors]
+          (swap! scores update-in [editor] #(inc (or % 0))))))
     (->> @scores
          (sort-by second)
          reverse
+         (remove #(get #{"zkim" "zk"} (-> % first :login)))
          (take (* 24 3))
          (map #(assoc (first %) :score (second %))))))


Remove login name from user area

Remove login name from user area

--- src/clj/clojuredocs/site/common.clj
+++ src/clj/clojuredocs/site/common.clj
@@ -10,7 +10,6 @@
 (defn $user-area [user]
   [:li.user-area
    [:img.avatar {:src (:avatar-url user)}]
-   [:span.login  (:login user)]
    " | "
    [:a {:href "/logout"}
     "Log Out"]])


Get email parameter from request map

Get email parameter from request map

--- src/clj/salava/displayer/routes.clj
+++ src/clj/salava/displayer/routes.clj
@@ -9,11 +9,11 @@
   (routes
     (context "/displayer" []
              :tags  ["displayer"]
-             (POST "/convert/email" []
+             (POST "/convert/email" req
                    :return schemas/DisplayerEmail
-                   :form-params [email :- s/Str]
                    :summary "Return user-id by email-address"
-                   (let [user-id (d/convert-email ctx email)]
+                   (let [email (get-in req [:params :email] "missing-email")
+                         user-id (d/convert-email ctx email)]
                      (if user-id
                        (ok {:userId user-id :email email :status "okay"})
                        (not-found {:error (str "Could not find the user by the email address: " email) :status "missing"}))))


Remove `weight` key when creating runnable scenario

--- src/clj_gatling/simulation_util.clj
+++ src/clj_gatling/simulation_util.clj
@@ -61,7 +61,7 @@
         with-concurrencies (map #(assoc %1 :concurrency %2)
                                 scenarios
                                 concurrencies)]
-    (map #(assoc %1 :users %2)
+    (map #(assoc (dissoc %1 :weight) :users %2)
          scenarios
          (split-to-buckets-with-sizes users
                                       (map :concurrency with-concurrencies)))))


export linked-in modal route

export linked-in modal route

--- src/cljs/salava/badge/ui/modal.cljs
+++ src/cljs/salava/badge/ui/modal.cljs
@@ -278,5 +278,6 @@
            :endorsement endr/badge-endorsement-content
            :issuer issuer/content
            :creator issuer/creator-content
-           ;:verify verify/verify-badge
+           :linkedin1 s/linkedin-modal1
+           :linkedin2 s/content-modal-render
            }})


fix channel race condition with paginate

--- src/cljs/server/service/github.cljs
+++ src/cljs/server/service/github.cljs
@@ -10,41 +10,45 @@
             [server.config :refer [config]]))

 ; channels
-(defonce repo-ch (chan))
+(def repo-ch (chan))

 ; GitHub API
-(defonce Github (nodejs/require "github"))
-(defonce client (Github. #js {:version "3.0.0"
+(def Github (nodejs/require "github"))
+(def client (Github. #js {:version "3.0.0"
                               :host    "api.github.com"
                               :debug   false})) ; @TODO: toggle based on NODE_ENV

 ; authenticate client to github using basic credentials
 (.authenticate client (.-github config))

-(defonce RepoApi (.-repos client))
+(def RepoApi (.-repos client))

-(defn- next-page [curr-page]
-  (let [out (chan)]
-    (.getNextPage client curr-page
-                         (fn [err next]
-                           (put! out {:err err :page next} #(close! out))))
-    out))
+(defn- paginate [ch]
+  (fn [err page]
+    (let [cntr (atom 0)]
+      ; go-loop for recursion with channel to async calls
+      (go-loop [result page
+                acc    (js->cljs (or result nil))]
+        (let [next? (.hasNextPage client result)]

-(defn- paginate
-  [ch]
-  (fn [err page]
-    (let [p-ch (chan)]
-      (put! p-ch {:err err :page page})
-      (go-loop [result p-ch]
-        (let [page  (:page (<! result))
-              p (js->cljs (or page nil))]
-          (when (< 0 (count p))
-            (onto-chan ch p false))
-          (if (.hasNextPage client page)
-            ; then
-            (recur (next-page page))
-            ; else
-            (close! ch)))))))
+          ; increment if next? else copy to channel and close
+          (if next?
+            (swap! cntr inc)
+            (onto-chan ch acc))
+
+          ; when next? async call and return that channel's result thru recur
+          (when next?
+            (let [next-page (<! (let [out (chan)]
+                                  (.getNextPage
+                                    client
+                                    result
+                                    (fn [err res]
+                                        (put! out res #(do
+                                                        (close! out)
+                                                        (swap! cntr dec)))))
+                                  out))]
+              (recur next-page (concat acc
+                                       (js->cljs next-page))))))))))

 (defn- reduce-repos [acc repo]
   (let [out-ch (chan)


Allow return_fromzip, now that we can

Allow return_fromzip, now that we can

--- src/clojush/instructions/return.clj
+++ src/clojush/instructions/return.clj
@@ -16,7 +16,7 @@
 (define-registered return_frominteger (with-meta (returner :integer) {:stack-types [:environment :integer]}))
 (define-registered return_fromfloat (with-meta (returner :float) {:stack-types [:environment :float]}))
 (define-registered return_fromboolean (with-meta (returner :boolean) {:stack-types [:environment :boolean]}))
-;(define-registered return_fromzip (returner :zip)) ;; won't work, reconsider
+(define-registered return_fromboolean (with-meta (returner :zip) {:stack-types [:environment :zip]}))
 (define-registered return_fromstring (with-meta (returner :string) {:stack-types [:environment :string]}))
 (define-registered return_fromchar (with-meta (returner :char) {:stack-types [:environment :char]}))


Add missing Tufte stub function.

Add missing Tufte stub function.

--- src/common/datomish/tufte_stub.cljc
+++ src/common/datomish/tufte_stub.cljc
@@ -12,3 +12,5 @@

 (defmacro profile [options & forms]
   `(do ~@forms))
+
+(defn add-basic-println-handler! [args])


hard-wire :from-language to "it"

hard-wire :from-language to "it"


DOM `select-all` method for live nodes can't be called from the current dispatch fn, remove it.


Adding nrepl dependency to cubby.

Adding nrepl dependency to cubby.

--- cubby-app/project.clj
+++ cubby-app/project.clj
@@ -8,6 +8,7 @@
                  [compojure "1.4.0"]
                  [ring/ring-core "1.4.0" :exclusions [clj-time]]
                  [ring/ring-json "0.4.0"]
+                 [org.clojure/tools.nrepl "0.2.11"]
                  [nasa-cmr/cmr-elastic-utils-lib "0.1.0-SNAPSHOT"]
                  [nasa-cmr/cmr-acl-lib "0.1.0-SNAPSHOT"]]
   :plugins [[lein-test-out "0.3.1"]


silence com.coremedia.*

silence com.coremedia.*

--- src/fscrawler_tika_convert/core.clj
+++ src/fscrawler_tika_convert/core.clj
@@ -181,7 +181,9 @@
   (doseq [name ["org" "com" "fscrawler-tika-convert.core" ""]]
     (log-config/set-logger! name :pattern "%c %d %p %m%n"))

-  (doseq [name ["org.apache.pdfbox"]]
+  ;; Jul 01, 2013 4:38:09 PM com.coremedia.iso.boxes.AbstractContainerBox parseChildBoxes
+
+  (doseq [name ["org.apache.pdfbox" "com.coremedia"]]
     (log-config/set-logger! name :level :off))

   ;; (convert "/home/ralf/t/seven-languages-in-seven-weeks_p4_0.pdf")


Fix spello

Fix spello

--- src/keechma/controller_manager.cljs
+++ src/keechma/controller_manager.cljs
@@ -406,7 +406,7 @@
     - if the last value was not `nil` and the current value is not `nil` and these values are different - restart the controller (stop the current instance and start the new one)

   Controller manager also acts as a command router. Each time a command comes - through the `commands-chan`
-  the name of the command should look like this `[:controlnler-key :command-name]`. Controller manager will route the `:command-name` command to the appropriate controller based on the `:controller-key`. Controller key is the key under which the controller was registered in the `controllers` argument.
+  the name of the command should look like this `[:controller-key :command-name]`. Controller manager will route the `:command-name` command to the appropriate controller based on the `:controller-key`. Controller key is the key under which the controller was registered in the `controllers` argument.
   "

   [route-chan route-processor commands-chan app-db$ controllers reporter]


improve tooltip opacity when hovering over related links

--- cljs-cheatsheet/cljs_cheatsheet/core.cljs
+++ cljs-cheatsheet/cljs_cheatsheet/core.cljs
@@ -26,16 +26,15 @@
 ;; Highlight Related Links
 ;;------------------------------------------------------------------------------

-;; NOTE: this function is unnecessary; we already have this information
-;; stored in an atom in the tooltips namespace; probably need to make a new
-;; namespace called "state" and store it there
-(defn- get-tooltip-box []
-  (let [$tooltip-el ($ symbol-tooltip-sel)
-        o (.offset $tooltip-el)
+;; NOTE: surely there must be a jquery or google closure function that does
+;; this already?
+(defn- get-element-box [el]
+  (let [$el ($ el)
+        o (.offset $el)
         x (aget o "left")
         y (aget o "top")
-        height (.outerHeight $tooltip-el)
-        width (.outerWidth $tooltip-el)]
+        height (.outerHeight $el)
+        width (.outerWidth $el)]
     {:x1 x
      :x2 (+ x width)
      :y1 y
@@ -51,16 +50,20 @@
          (<= py (:y2 box)))))

 (defn- related-links-underneath-tooltip? []
-  (let [tooltip-box (get-tooltip-box)
+  (let [tooltip-box (get-element-box ($ symbol-tooltip-sel))
         any-underneath-tooltip? (atom false)
         $related-links ($ related-highlight-sel)]
     (.each $related-links (fn [idx el]
-      (let [$el ($ el)
-            link-offset (.offset $el)
-            link-point {:x (aget link-offset "left")
-                        :y (aget link-offset "top")}
-            link-underneath? (point-inside-box? link-point tooltip-box)]
-        (when link-underneath?
+      (let [el-box (get-element-box el)
+            x1 (:x1 el-box)
+            x2 (:x2 el-box)
+            y1 (:y1 el-box)
+            y2 (:y2 el-box)
+            tl? (point-inside-box? {:x x1 :y y1} tooltip-box)
+            tr? (point-inside-box? {:x x2 :y y1} tooltip-box)
+            bl? (point-inside-box? {:x x1 :y y2} tooltip-box)
+            br? (point-inside-box? {:x x2 :y y2} tooltip-box)]
+        (when (or tl? tr? bl? br?)
           (reset! any-underneath-tooltip? true)))))
     (deref any-underneath-tooltip?)))

@@ -78,7 +81,7 @@

     ;; add some opacity to the tooltip when related links are underneath it
     (when (related-links-underneath-tooltip?)
-      (.fadeTo $tooltip-el 150 0.75))))
+      (.fadeTo $tooltip-el 150 0.5))))

 (defn- mouseleave-related-link [js-evt]
   (let [link-el (aget js-evt "currentTarget")