Split lein serve in two: prod and dev

Split lein serve in two: prod and dev

--- project.clj
+++ project.clj
@@ -83,8 +83,8 @@
             "auto-slimer" ^{:doc "Clean and execute automatic unit tests with SlimerJS (must be installed)."} ["do" "clean" ["doo" "slimer" "test" "auto"]]
             "tests" ^{:doc "Execute once unit tests with PhantomJS and SlimerJS (must be installed)."} ["doo" "headless" "test" "once"]
             "tests*" ^{:doc "Clean and execute once unit tests with PhantomJS and SlimerJS (must be installed)."} ["do" "clean" ["doo" "headless" "test" "once"]]
-            "serve" ^{:doc "Compile minified and start a server on port 9090 at resources/public"} ["do" "cljsbuild" "once" "prod" ["simpleton" "9090" ":from" "resources/public"]]
-            "serve*" ^{:doc "Clean, compile minified and start a server on port 9090 at resources/public"} ["do" "clean" ["cljsbuild" "once" "prod"] ["simpleton" "9090" ":from" "resources/public"]]}
+            "serve-dev" ^{:doc "Clean, compile minified and start a dev server on port 9090"} ["do" "clean" ["cljsbuild" "once" "dev"] ["simpleton" "9090" ":from" "resources/public"]]
+            "serve-prod" ^{:doc "Clean, compile minified and start a prod server on port 9090"} ["do" "clean" ["cljsbuild" "once" "prod"] ["simpleton" "9090" ":from" "resources/public"]]}

   :profiles {:dev {:dependencies [[com.cemerick/piggieback "0.2.1"]
                                   [org.clojure/tools.nrepl "0.2.12"]


Upgraded project packages and plugins.

Upgraded project packages and plugins.

--- project.clj
+++ project.clj
@@ -5,32 +5,32 @@
             :url "http://www.eclipse.org/legal/epl-v10.html"}

   :dependencies [[org.clojure/clojure "1.8.0"]
-                 [org.clojure/core.async "0.2.385" :exclusions [org.clojure/tools.reader]]
-                 [reagent "0.6.0-rc"]
-                 [reagent-forms "0.5.24"]
-                 [reagent-utils "0.1.9"]
-                 [ring "1.5.0"]
-                 [ring/ring-defaults "0.2.1"]
-                 [ring-cors "0.1.7"]
+                 [org.clojure/core.async "0.3.441" :exclusions [org.clojure/tools.reader]]
+                 [reagent "0.6.0"]
+                 [reagent-forms "0.5.28"]
+                 [reagent-utils "0.2.0"]
+                 [ring "1.5.1"]
+                 [ring/ring-defaults "0.2.3"]
+                 [ring-cors "0.1.9"]
                  [ring-server "0.4.0"]
                  [ring-transit "0.1.6"]
-                 [prone "1.1.1"]
-                 [com.fasterxml.jackson.core/jackson-core "2.8.6"]
-                 [buddy "1.2.0"]
+                 [prone "1.1.4"]
+                 [com.fasterxml.jackson.core/jackson-core "2.8.7"]
+                 [buddy "1.3.0"]
                  [fogus/ring-edn "0.3.0"]
                  [commons-codec "1.10"]
-                 [com.taoensso/carmine "2.15.0"]
-                 [compojure "1.5.1"]
+                 [com.taoensso/carmine "2.15.1"]
+                 [compojure "1.5.2"]
                  [hiccup "1.0.5"]
                  [com.cemerick/url "0.1.1"]
                  [yogthos/config "0.8"]
-                 [com.taoensso/timbre "4.7.0"]
-                 [org.clojure/clojurescript "1.9.92" :scope "provided"]
+                 [com.taoensso/timbre "4.8.0"]
+                 [org.clojure/clojurescript "1.9.493" :scope "provided"]
                  [secretary "1.2.3"]
-                 [venantius/accountant "0.1.7" :exclusions [org.clojure/tools.reader]]
-                 [cljs-http "0.1.40"]
+                 [venantius/accountant "0.1.8" :exclusions [org.clojure/tools.reader]]
+                 [cljs-http "0.1.42"]
                  [clj-time "0.13.0"]
-                 [figwheel-sidecar "0.5.0"]]
+                 [figwheel-sidecar "0.5.9"]]

   :plugins [[lein-cljsbuild "1.1.1"]
             [lein-asset-minifier "0.2.7" :exclusions [org.clojure/clojure]]]
@@ -87,11 +87,11 @@
   :profiles {:dev {:repl-options {:init-ns bookmarx.repl}

                    :dependencies [[ring/ring-mock "0.3.0"]
-                                  [ring/ring-devel "1.5.0"]
-                                  [figwheel-sidecar "0.5.8"]
+                                  [ring/ring-devel "1.5.1"]
+                                  [figwheel-sidecar "0.5.9"]
                                   [org.clojure/tools.nrepl "0.2.12"]
                                   [com.cemerick/piggieback "0.2.1"]
-                                  [pjstadig/humane-test-output "0.8.0"]]
+                                  [pjstadig/humane-test-output "0.8.1"]]

                    :source-paths ["env/dev/clj"]
                    :resource-paths ["env/dev/resources"]


lein-release plugin: preparing 0.127 release

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


Release version 0.10.0.0-beta4.

Release version 0.10.0.0-beta4.

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject org.onyxplatform/onyx-metrics "0.10.0.0-SNAPSHOT"
+(defproject org.onyxplatform/onyx-metrics "0.10.0.0-beta4"
   :description "Instrument Onyx workflows"
   :url "https://github.com/onyx-platform/onyx-metrics"
   :license {:name "Eclipse Public License"
@@ -11,7 +11,7 @@
                              :username :env
                              :password :env
                              :sign-releases false}}
-  :dependencies [[org.onyxplatform/onyx "0.10.0-beta3"]
+  :dependencies [[org.onyxplatform/onyx "0.10.0-beta4"]
                  ^{:voom {:repo "git@github.com:onyx-platform/onyx.git" :branch "master"}}
                  [org.clojure/clojure "1.8.0"]
                  [metrics-clojure "2.8.0"]]


Add @cemerick/austin plugin

Add @cemerick/austin plugin

--- project.clj
+++ project.clj
@@ -24,6 +24,7 @@
                    :dependencies [[org.clojure/tools.namespace "0.2.4"]
                                   [org.clojure/java.classpath "0.2.0"]
                                   [midje "1.5.1"]]
+                   :plugins [[com.cemerick/austin "0.1.1"]]
                    :env {:prod false}}
              :prod {:env {:prod true}}}


Version 0.3.4-SNAPSHOT

Version 0.3.4-SNAPSHOT

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject com.codahale/soy-clj "0.3.3"
+(defproject com.codahale/soy-clj "0.3.4-SNAPSHOT"
   :description "An idiomatic Clojure wrapper for Google's Closure templating system."
   :url "https://github.com/codahale/soy-clj"
   :license {:name "Eclipse Public License"


Bump up version of lein-cloverage package

--- project.clj
+++ project.clj
@@ -34,7 +34,7 @@
             [codox "0.8.11"]
             [test2junit "1.1.0"]
             [lein-test-out "0.3.1"]
-            [lein-cloverage "1.0.6"]
+            [lein-cloverage "1.0.7-SNAPSHOT"]
             [lein-kibit "0.1.8"]]
   :main ^:skip-aot branch-handler.core
   :ring {:handler branch-handler.core/ring-app}


Version 0.2.40-SNAPSHOT

Version 0.2.40-SNAPSHOT

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


Add Compojure plaintext test

Add Compojure plaintext test

--- compojure/hello/src/hello/handler.clj
+++ compojure/hello/src/hello/handler.clj
@@ -137,6 +137,10 @@
 ; Define route handlers
 (defroutes app-routes
   (GET "/" [] "Hello, World!")
+  (GET "/plaintext" []
+       {:status 200
+        :headers {"Content-Type" "text/plain; charset=utf-8"}
+        :body "Hello, World!"})
   (GET "/json" [] (response {:message "Hello, World!"}))
   (GET "/db/:queries" [queries] (response (run-queries (get-query-count queries))))
   (GET "/dbraw/:queries" [queries] (response (run-queries-raw (get-query-count queries))))


local-dir to local-root.

local-dir to local-root.

--- src/clj/elephantdb/test/keyval.clj
+++ src/clj/elephantdb/test/keyval.clj
@@ -152,11 +152,12 @@
 ;; ## Thrift Service Testing Helpers

 (defn mk-local-config [local-dir]
-  {:local-dir local-dir
+  {:local-root local-dir
    :download-rate-limit 1024
    :update-interval-s 60})

 ;; TODO: Add in the ability to re-bind the host->shard decision.
+
 (defn mk-service-handler [database]
   (let [handler  (doto (kv/kv-service database)
                    (db/prepare)


Use util/http-get

Use util/http-get

--- src/clj/salava/badge/assertion.clj
+++ src/clj/salava/badge/assertion.clj
@@ -1,12 +1,11 @@
 (ns salava.badge.assertion
-  (:require [clj-http.client :as client]
-            [clojure.tools.logging :as log]
+  (:require [clojure.tools.logging :as log]
             [clojure.java.io :as io]
             [clojure.data.json :as json]
             [slingshot.slingshot :refer :all]
             [net.cgrand.enlive-html :as html]
             [markdown.core :as md]
-            [salava.core.util :refer [hex-digest str->epoch]]
+            [salava.core.util :refer [hex-digest str->epoch http-get]]
             [salava.core.time :refer [iso8601-to-unix-time]] ;cljc
             [salava.core.i18n :refer [t]]                    ;cljc
             [salava.badge.png :as p]))
@@ -14,15 +13,7 @@

 (defn fetch-json-data [url]
   (try+
-    (:body
-      (client/request
-        {:method         :get
-         :url            url
-         :as             :json
-         :throw-entire-message? true
-         :socket-timeout 30000
-         :conn-timeout   30000}))
-
+    (json/read-str (http-get url {:accept :json :throw-entire-message? true}) :key-fn keyword)
     (catch :status e
       (let [{:keys [status body]} e
             body-map (try+


test for Overmind (initial counters)

test for Overmind (initial counters)

--- src/clj/test/cards-icebreakers.clj
+++ src/clj/test/cards-icebreakers.clj
@@ -57,4 +57,19 @@
       (is (empty? (:prompt (get-runner))) "No trash-prevention prompt for program")
       (card-ability state :runner faust 1)
       (prompt-card :runner (find-card "Armitage Codebusting" (:hand (get-runner))))
-      (is (empty? (:prompt (get-runner))) "No trash-prevention prompt for resource"))))+      (is (empty? (:prompt (get-runner))) "No trash-prevention prompt for resource"))))
+
+(deftest overmind-counters
+  "Overmind - Start with counters equal to unused MU"
+  (do-game
+    (new-game (default-corp)
+              (default-runner [(qty "Overmind" 1) (qty "Akamatsu Mem Chip" 2)]))
+    (take-credits state :corp)
+    (take-credits state :runner 1)
+    (play-from-hand state :runner "Akamatsu Mem Chip")
+    (play-from-hand state :runner "Akamatsu Mem Chip")
+    (is (= 6 (:memory (get-runner))))
+    (play-from-hand state :runner "Overmind")
+    (is (= 5 (:memory (get-runner))))
+    (let [ov (get-in @state [:runner :rig :program 0])]
+      (is (= 5 (:counter (refresh ov))) "Overmind has 5 counters"))))


fix browser REPL based on debugging session with Kovas Boguta

patching `goog.require` is the wrong approach for browsers. It will fail when
loading a dependency graph the browser has not already seen. Instead
patch `goog.provide` so it doesn't throw and suppress errors from
`goog.writeScriptTag_` when writing to the document after the page has loaded.

--- src/cljs/clojure/browser/repl.cljs
+++ src/cljs/clojure/browser/repl.cljs
@@ -113,24 +113,20 @@
       (fn [iframe]
         (set! (.-display (.-style iframe))
           "none")))
-    ;; Monkey-patch goog.require if running under optimizations :none - David
+    ;; Monkey-patch goog.provide if running under optimizations :none - David
     (when-not js/COMPILED
-      (set! *loaded-libs*
-        (let [gntp (.. js/goog -dependencies_ -nameToPath)]
-          (into #{}
-            (filter
-              (fn [name]
-                (aget (.. js/goog -dependencies_ -visited) (aget gntp name)))
-              (js-keys gntp)))))
-      (set! (.-isProvided_ js/goog) (fn [_] false))
-      (set! (.-require js/goog)
-        (fn [name reload]
-          (when (or (not (contains? *loaded-libs* name)) reload)
-            (set! *loaded-libs* (conj (or *loaded-libs* #{}) name))
-            (.appendChild js/document.body
-              (let [script (.createElement js/document "script")]
-                (set! (.-type script) "text/javascript")
-                (set! (.-src script)
-                  (str "goog/"
-                    (aget (.. js/goog -dependencies_ -nameToPath) name)))
-                script))))))))
+      (set! (.-provide__ js/goog) js/goog.provide)
+      (set! (.-isProvided___ js/goog) js/goog.isProvided_)
+      (set! (.-provide js/goog)
+        (fn [name]
+          (set! (.-isProvided_ js/goog) (fn [name] false))
+          (.provide__ js/goog name)
+          (set! (.-isProvided_ js/goog) js/goog.isProvided___)))
+      (set! (.-writeScriptTag_ js/goog)
+        (fn [src opt_sourceText]
+          (let [doc js/goog.global.document]
+            (if (nil? opt_sourceText)
+              (.write doc
+                (str "<script type=\"text/javascript\" src=\"" src "\"></script>"))
+              (.write doc
+                (str "<script type=\"text/javascript\">" opt_sourceText "</script>")))))))))


refactor board

refactor board

--- src/cljs/tictactoe/view/board.cljs
+++ src/cljs/tictactoe/view/board.cljs
@@ -5,7 +5,7 @@
     [tictactoe.view.svg.utils :as utils]))

-(defn render-one-cell
+(defn render-cell
   "Dispatch the rendering of the cell based on the player"
   [type cell-pos options]
   (let [renderer
@@ -23,7 +23,7 @@
   [board {:keys [on-move-event]}]
   (into
     (utils/square-svg-panel board)
-    (for [[cell-pos cell-owner] (board/get-cells board)]
-      [render-one-cell cell-owner cell-pos
-       {:on-click #(on-move-event cell-pos)}]
+    (for [[coord owner] (board/get-cells board)]
+      [render-cell owner coord
+       {:on-click #(on-move-event coord)}]
       )))


for comprehension

for comprehension

--- src/cljs/tictactoe/view/board.cljs
+++ src/cljs/tictactoe/view/board.cljs
@@ -14,6 +14,6 @@
   (utils/square-svg-panel
     {:model-size (board/get-size board)
      :pixel-size cst/board-pixel-size}
-    (map
-      (fn [cell] [cell/render-cell cell on-move-event])
-      board)))
+    (for [cell board]
+      [cell/render-cell cell on-move-event]
+      )))


uses the robovm path as starting point for dialog

--- src/clojure/nightcode/builders.clj
+++ src/clojure/nightcode/builders.clj
@@ -38,7 +38,7 @@
   [& _]
   (if (sandbox/get-dir)
     (dialogs/show-simple-dialog! (utils/get-string :sandbox-apology))
-    (when-let [d (dialogs/show-open-dialog! (utils/read-pref :android-sdk))]
+    (when-let [d (dialogs/show-open-dialog! (utils/read-pref :robovm))]
       (utils/write-pref! :robovm (.getCanonicalPath d))
       (show-builder! (ui/get-project-path @ui/tree-selection)))))


Simplify detecting whether a process is running

--- src/clojure/nightcode/builders.clj
+++ src/clojure/nightcode/builders.clj
@@ -93,9 +93,9 @@
       (ui/config! view id :background (when-not is-set? (color/color :red))))))

 (defn toggle-enable!
-  [{:keys [view is-running-fn]} path]
+  [{:keys [view process]} path]
   (let [is-java-project? (lein/is-java-project? path)
-        is-running? (apply is-running-fn [])
+        is-running? (not (nil? @process))
         buttons {:#run-button (not is-running?)
                  :#run-repl-button (not is-running?)
                  :#reload-button is-running?
@@ -217,7 +217,7 @@
     {:view build-group
      :close-fn! #(stop! nil)
      :should-remove-fn #(not (utils/is-project-path? path))
-     :is-running-fn #(not (nil? @process))}))
+     :process process}))

 (defn show-builder!
   [path]


Get rid of editors if necessary

Get rid of editors if necessary

--- src/clojure/nightcode/projects.clj
+++ src/clojure/nightcode/projects.clj
@@ -135,6 +135,9 @@
                                            (filter @tree-projects)
                                            first)
                                        path))
+      (doseq [[editor-path editor] @editors/editors]
+        (when (.startsWith editor-path path)
+          (swap! editors/editors dissoc editor-path)))
       true)))

 (defn update-project-tree


cleanup

cleanup

--- src/clojure/zensols/model/weka.clj
+++ src/clojure/zensols/model/weka.clj
@@ -450,9 +450,7 @@
         (let [res (proxy-super testCV folds fold)]
           (if test-fn
             (test-fn res train-state inst folds fold)
-            res)))
-      (add [item]
-        (proxy-super add item)))))
+            res))))))

 (defn instances
   "Create a new `weka.core.Instances` instance.


CMR-152: modified services internal-error! function to accept exception arg

--- src/cmr/common/services/errors.clj
+++ src/cmr/common/services/errors.clj
@@ -18,6 +18,10 @@
    (throw (ex-info (first errors) {:type type :errors errors}))))

 (defn internal-error!
-  "Throws an Exception with the given message to indicate an internal error in the system."
-  [msg]
-  (throw (Exception. msg)))+  "Throws an Exception with the given message and error, if given, to indicate an internal error in the system."
+  ([msg]
+   (throw (Exception. msg)))
+  ([msg-format arg]
+   (throw (Exception.  (apply format msg-format arg))))
+  ([^Exception excp msg-format & args]
+   (throw (Exception. (apply format msg-format args) excp))))


Add spec for max-key-iterations on parser

--- src/com/wsscode/pathom/parser.cljc
+++ src/com/wsscode/pathom/parser.cljc
@@ -1,11 +1,14 @@
 (ns com.wsscode.pathom.parser
   (:require [clojure.core.async :refer [go <!]]
+            [clojure.spec.alpha :as s]
             [#?(:clj  com.wsscode.common.async-clj
                 :cljs com.wsscode.common.async-cljs) :refer [<? <?maybe go-catch error? go-promise chan?]]
             [clojure.core.async :as async]
             [com.wsscode.pathom.trace :as pt :refer [trace tracing]]
             [clojure.set :as set])
   #?(:clj (:import (clojure.lang IDeref))))
+
+(s/def ::max-key-iterations int?)

 (declare expr->ast)


Fix upgrade/downgrade admin button

Fix upgrade/downgrade admin button

--- src/cljs/salava/admin/ui/admintool_content.cljs
+++ src/cljs/salava/admin/ui/admintool_content.cljs
@@ -395,13 +395,12 @@
         (str (t :admin/Upgradeuser) " " item_owner )
         [:button {:type         "button"
                   :class        "btn btn-primary pull-right"
+                  :data-dismiss "modal"
                   :on-click     #(ajax/POST
                                   (path-for (str "/obpv1/admin/upgrade_user_to_admin/" item_owner_id ))
                                   {:response-format :json
-                                   :keywords?       true
-                                   :handler         (fn [data]
-                                                      (dump "jee")
-                                        ;(reset! status data)
+                                   :keywords?       true
+                                   :handler         (fn [data]
                                                       )
                                    :error-handler   (fn [{:keys [status status-text]}]
                                                       (.log js/console (str status " " status-text)) )})}
@@ -422,13 +421,15 @@
         (str (t :admin/Downgradeuser) " " item_owner )
         [:button {:type         "button"
                   :class        "btn btn-primary pull-right"
+
+                  :data-dismiss "modal"
                   :on-click     #(ajax/POST
                                   (path-for (str "/obpv1/admin/downgrade_admin_to_user/" item_owner_id ))
                                   {:response-format :json
-                                   :keywords?       true
-                                   :handler         (fn [data]
-                                                      (dump "jee")
-                                        ;(reset! status data)
+                                   :keywords?       true
+                                   :handler         (fn [data]
+
+
                                                       )
                                    :error-handler   (fn [{:keys [status status-text]}]
                                                       (.log js/console (str status " " status-text)) )})}


Shorthand pp

Shorthand pp

--- roles/clojure/files/profiles.clj
+++ roles/clojure/files/profiles.clj
@@ -34,6 +34,7 @@
                        ^:lazy cemerick.pomegranate/get-classpath
                        ^:lazy cemerick.pomegranate/resources
                        ^:lazy clojure.java.shell/sh
+                       ^:lazy clojure.pprint/pp
                        ^:lazy clojure.pprint/pprint
                        ^:lazy clojure.pprint/print-table
                        clojure.repl/apropos


Update the datepicker-dropdown demo to have some placeholder text

--- src/re_demo/datepicker.cljs
+++ src/re_demo/datepicker.cljs
@@ -84,7 +84,8 @@
 (defn- show-variant
   [variation]
   (let [model1          (reagent/atom (now))
-        model2          (reagent/atom (plus  (now) (days 120)))
+        model2          (reagent/atom (plus (now) (days 120)))
+        model3          (reagent/atom nil)
         disabled?       (reagent/atom false)
         show-today?     (reagent/atom true)
         show-weeks?     (reagent/atom false)
@@ -155,13 +156,14 @@
                      :align    :start
                      :children [[gap :size "120px"]
                                 [datepicker-dropdown
-                                 :model         model1
+                                 :model         model3
                                  :show-today?   @show-today?
                                  :show-weeks?   @show-weeks?
                                  :selectable-fn selectable-pred
+                                 :placeholder   "Select a date"
                                  :format        "dd MMM, yyyy"
                                  :disabled?     disabled?
-                                 :on-change     #(reset! model1 %)]]]
+                                 :on-change     #(reset! model3 %)]]]
                     enabled-days
                     disabled?
                     show-today?


Macros: Add notes.

Macros: Add notes.

--- test/com/nomistech/clojure_the_language/macros/examples.clj
+++ test/com/nomistech/clojure_the_language/macros/examples.clj
@@ -148,6 +148,8 @@

 ;;;; TODO:

+;;;; - Maybe look at grafana-dashboard-generator DSL next
+
 ;;;; - Don't need to talk about accidental capture, right?

 ;;;; - Repeated evaluation


remove print statement

remove print statement

--- src-cljs/frontend/components/insights.cljs
+++ src-cljs/frontend/components/insights.cljs
@@ -140,8 +140,7 @@
                     "y" #(y-pos-scale (unexterned-prop % "build_time_millis"))
                     "x" #(x-scale (unexterned-prop % "build_num"))
                     "width" (.rangeBand x-scale)
-                    "height" #(- y-zero (y-pos-scale (unexterned-prop % "build_time_millis")))})
-        (.on #js {"click" #(print "clicked" %1 %2)}))
+                    "height" #(- y-zero (y-pos-scale (unexterned-prop % "build_time_millis")))}))

     ;; bottom bar enter and update
     (-> bars-join


Update /security page

Update /security page

--- src-cljs/frontend/components/security.cljs
+++ src-cljs/frontend/components/security.cljs
@@ -2,6 +2,7 @@
   (:require [cljs.core.async :as async :refer [>! <! alts! chan sliding-buffer close!]]
             [clojure.string :as str]
             [frontend.components.common :as common]
+            [frontend.components.features :as features]
             [frontend.components.plans :as plans-component]
             [frontend.components.shared :as shared]
             [frontend.state :as state]
@@ -26,11 +27,11 @@
           [:li [:a {:href "https://github.com/jtmarmon"} "Jason Marmon"] " (2014-12-15)"]
           [:li [:a {:href "https://twitter.com/exploitprotocol"} "Aditya Agrawal"] " (2014-04-07)"]
           [:li [:a {:href "http://kevinmccarthy.org/"} "Kevin McCarthy"] " (2014-04-07)"]
-          [:li [:a {:href "https://twitter.com/gazly"} "J.m.Gazzaly"] " (2014-03-27)"]
+          [:li [:a {:href "https://twitter.com/gazly"} "J.m. Gazzaly"] " (2014-03-27)"]
           [:li [:a {:href "https://twitter.com/ashishbdhaduk"} "Ashishkumar B. Dhaduk"] " (2014-03-26)"]
           [:li [:a {:href "http://www.facebook.com/mtk911"} "Muhammad Talha Khan"] " (2014-03-26)"]
           [:li [:a {:href "https://www.randomstorm.com/"} "Scott Glossop"] " (2014-03-26)"]
-          [:li [:a {:href "https://twitter.com/pranavvenkats"} "S.Venkatesh"] " (2014-03-26)"]
+          [:li [:a {:href "https://twitter.com/pranavvenkats"} "S. Venkatesh"] " (2014-03-26)"]
           [:li [:a {:href "https://twitter.com/NiteshShilpkar"} "Nitesh Kumar Shilpkar"] " (2014-03-25)"]
           [:li [:a {:href "https://twitter.com/OsandaMalith"} "Osanda Malith Jayathissa"] " (2014-03-21)"]
           [:li [:a {:href "https://www.facebook.com/junior.ns1de"} "Rodolfo Godalle, Jr."] " (2014-03-15)"]
@@ -43,112 +44,118 @@
     om/IRender
     (render [_]
       (html
-       [:div.page.security
-        [:div.banner
-         [:div.container
-          [:h1 "Security policy"]
-          [:h3 "If we lose your code, we're out of business."]]]
-        [:div.container.content
-         [:div.timestamp [:p [:strong "Last modified:"] " Mar 17, 2014"]]
-         [:section
-          [:h2 "Code security"]
-          [:p
-           "If Circle ever disclosed your code to an attacker, whether through our own error or through the error of one of our partners, we would very likely be out of business. So the security of your code base is not just important to us, it is essential to the survival of our company."]]
-         [:section
-          [:h3 "Circle staff doesn't read your code!"]
-          [:p
-           "In the normal course of events, Circle staff will never read your code! Occasionally, you might ask us for support, or to look into a problem you experience, in which it would be useful for our engineers to read your code. We will only do this if explicitly granted permission to do so as part of a support request, and will never do it otherwise. Outside of a support context, no human reads your code."]
-          [:p
-           "However, we occasionally do automated analysis of active projects to provide data over what features and services to provide next. We only analyze projects which are already being tested on Circle. For example, when looking at deployment, we ran scripts which told us the percentage of active projects which have "
-           [:em "Capfiles"]
-           " in their repositories."]
-          [:p
-           "Currently, only key employees have the ability to check out your code, including the founders and senior engineers. To reiterate, we would only do so in response to a support request, with explicit permission. Contractors will never be given access to customer code."]
-          [:p
-           "Note that this is a change from our early policies, when we believed that customers wanted our help in setting up their CI with Circle. Early feedback, however, was unanimous: never ever read customer code unless asked to. So that is our rule!"]]
-         [:section
-          [:h3 "Our security model"]
-          [:p
-           "When we run your tests, we run them in a sandbox, meaning you are unable to access another customer's code, and they are unable to access yours. We never ever run any customer code in any context which is not sandboxed, or which allows access to other customer code."]
-          [:p
-           "Each sandbox is firewalled, and it is not possible to access a sandbox from another sandbox, or from the internet at large."]
-          [:p
-           "Circle's founders and employees are well versed in full-stack security. Paul worked on "
-           [:a {:href "http://mozilla.org/"} "Mozilla's"]
-           " Javascript engine, where every bug is a potential security bug; and was a principal engineer at "
-           [:a {:href "http://mylookout.com"} "Lookout"] ", the premiere Android security company. Before that, he did his "
-           [:a {:href "http://paulbiggar.com/research/#phd-dissertation"} "PhD in static analysis"] ", which kept him well versed with the latest security research and vulnerabilities. Allen was a lead developer at "
-           [:a {:href "http://crossroads.com"} "Crossroads"] ", where he provided security audits for their full-stack SAN solution. His experience includes work on Storage Area Networks, Linux kernel drivers and medical imaging software, all of which have an extremely security-oriented focus."]
-          [:p
-           "We know what we're doing, and constantly question and audit our sensitive code, and solicit outside feedback about our security."]]
-         [:section
-          [:h3 "GitHub authorization"]
-          [:p
-           "To run your tests, we need to check out your code from GitHub. When you sign up for Circle, you tell GitHub that you are authorizing us to check out your private repositories. You may revoke this permission at any time through your "
-           [:a
-            {:href (str (gh-utils/http-endpoint) "/settings/applications")}
-            "GitHub application settings page"]
-           " and by removing Circle's " [:em "Deploy Keys"] " and " [:em "Service Hooks"] " from your repositories' " [:em "Admin"] " pages."]
-          [:p
-           "While Circle allows you to selectively test your projects, note that GitHub's permissions model is \"all or nothing\" — Circle gets permission to access all of a user's repositories or none of them. We have asked GitHub to provide finer-grained permissions, but they have indicated it will not be completed in the short term. Please "
-           [:a {:href "https://github.com/contact"} "contact GitHub"]
-           " if this is important to you."]]
-         [:section
-          [:h3 "Canceling your account"]
-          [:p
-           "We do not currently have a button to delete your account, but we will be adding one soon. If you need your account canceled and your data deleted, please contact us at "
-           [:a {:href "mailto:sayhi@circleci.com"} "sayhi@circleci.com"] ". To remove Circle's access to your GitHub account, you can remove it via your "
-           [:a {:href (str (gh-utils/http-endpoint) "/settings/applications")} "GitHub application settings page"] "."
-           " You should also remove Circle's " [:em "Deploy Keys"] " and " [:em "Service Hooks"] " from your repositories' " [:em "Admin"] " pages."]]
-         [:section
-          [:h3 "Disclosure"]
-          [:p
-           "If you have found a vulnerability in CircleCi, please contact our security team by email at "
-           [:a {:href "mailto:security@circleci.com"} "security@circleci.com"] ". We will do everything in our power to respond and fix the problem immediately. If possible, please encrypt your message using "
-           [:a {:target "_blank", :href "/circleci-security.pub"}
-            "our security team's GPG key"]
-           " (ID: 0x4013DDA7, fingerprint: 3CD2 A48F 2071 61C0 B9B7  1AE2 6170 15B8 4013 DDA7)."]
-          [:p
-           "Upon discovering a vulnerability, we ask that you act in a way to protect our users' data:"]
-          [:ul
-           [:li "inform us as soon as possible,"]
-           [:li
-            "test against fake data and accounts, not our users' private data (please ask if you'd like a free account to work on this),"]
-           [:li
-            "work with us to close the vulnerability before disclosing it to others."]]
-          [:p
-           "We also maintain a "
-           [:a
-            {:href "/security/hall-of-fame"}
-            "Security Researcher Hall of Fame"]
-           " to thank individuals who have discovered vulnerabilities and worked with us to resolve them."]]
-         [:section
-          [:h3 "Partners with access to your source code"]
-          [:p
-           "Circle is built on Amazon EC2, and we check out your code onto Amazon's EC2 machines. If the EC2 service becomes vulnerable, your source code may also become vulnerable to accidental disclosure. "
-           [:a
-            {:href "http://aws.amazon.com/security/"}
-            "Amazon's Security Center"]
-           " discusses their security in great detail."]]
-         [:section
-          [:h3 "Other partners"]
-          [:p
-           "A small number of partners, who we choose not to enumerate for security reasons, have access to small amounts of our customer data. We constantly audit the data that is provided to them to ensure that this could not be used to gain access to your account or your code."]]
-         [:section
-          [:h3 "Feedback"]
-          [:p
-           "We take security incredibly seriously. If you have any suggestions for how we could improve our security, or improve this policy, please contact us at "
-           [:a {:href "mailto:security@circleci.com"} "security@circleci.com"] ". We will act immediately to deal with the issue."]]
-         [:h2 "Changelog"]
-         [:ul.privacy-changelog
-          [:li [:strong "Mar 17, 2014"] " Move the Security page to its own page"]
-          [:li [:strong "Mar 15, 2014"] " Add a Hall of Fame."]
-          [:li [:strong "Nov 5, 2013"] " Rotate GPG key."]
-          [:li [:strong "Mar 10, 2013"] " Clarify that if asked to, and given explicit permission, we will look at your code to answer your support request."]
-          [:li [:strong "Feb 8, 2013"] " Add disclosure section and GPG key."]
-          [:li [:strong "Dec 22, 2012"] " We now have employees."]
-          [:li [:strong "July 3, 2012"] " Clarified that only tested project are analyzed."]
-          [:li [:strong "April 11, 2012"] " We now only enable individual projects when selected by users."]
-          [:li [:strong "March 26, 2012"] " Initial version."]]
-         [:div.center-text
-          (shared/home-button {:source "security"} (om/get-shared owner [:comms :controls]))]]]))))
+       [:div.security
+        [:div.jumbotron
+         common/language-background-jumbotron
+         [:section.container
+          [:div.row
+           [:article.title.center-block
+            [:div.text-center
+             [:img.hero-logo {:src (utils/cdn-path "/img/outer/enterprise/logo-circleci.svg")}]]
+            [:h1.text-center "Security policy"]
+            [:h3.text-center "If we lose your code, we're out of business."]]]]]
+        [:div.outer-section
+         [:section.container
+          [:div.row
+           [:div.col-xs-10.col-xs-offset-1
+            [:section
+             [:h2 "Code security"]
+             [:p
+              "If Circle ever disclosed your code to an attacker, whether through our own error or through the error of one of our partners, we would very likely be out of business. So the security of your code base is not just important to us, it is essential to the survival of our company."]]
+            [:section
+             [:h3 "Circle staff doesn't read your code!"]
+             [:p
+              "In the normal course of events, Circle staff will never read your code! Occasionally, you might ask us for support, or to look into a problem you experience, in which it would be useful for our engineers to read your code. We will only do this if explicitly granted permission to do so as part of a support request, and will never do it otherwise. Outside of a support context, no human reads your code."]
+             [:p
+              "However, we occasionally do automated analysis of active projects to provide data over what features and services to provide next. We only analyze projects which are already being tested on Circle. For example, when looking at deployment, we ran scripts which told us the percentage of active projects which have "
+              [:em "Capfiles"]
+              " in their repositories."]
+             [:p
+              "Currently, only key employees have the ability to check out your code, including the founders and senior engineers. To reiterate, we would only do so in response to a support request, with explicit permission. Contractors will never be given access to customer code."]
+             [:p
+              "Note that this is a change from our early policies, when we believed that customers wanted our help in setting up their CI with Circle. Early feedback, however, was unanimous: never ever read customer code unless asked to. So that is our rule!"]]
+            [:section
+             [:h3 "Our security model"]
+             [:p
+              "When we run your tests, we run them in a sandbox, meaning you are unable to access another customer's code, and they are unable to access yours. We never ever run any customer code in any context which is not sandboxed, or which allows access to other customer code."]
+             [:p
+              "Each sandbox is firewalled, and it is not possible to access a sandbox from another sandbox, or from the internet at large."]
+             [:p
+              "Circle's founders and employees are well versed in full-stack security. Paul worked on "
+              [:a {:href "http://mozilla.org/"} "Mozilla's"]
+              " Javascript engine, where every bug is a potential security bug; and was a principal engineer at "
+              [:a {:href "http://mylookout.com"} "Lookout"] ", the premiere Android security company. Before that, he did his "
+              [:a {:href "http://paulbiggar.com/research/#phd-dissertation"} "PhD in static analysis"] ", which kept him well versed with the latest security research and vulnerabilities. Allen was a lead developer at "
+              [:a {:href "http://crossroads.com"} "Crossroads"] ", where he provided security audits for their full-stack SAN solution. His experience includes work on Storage Area Networks, Linux kernel drivers and medical imaging software, all of which have an extremely security-oriented focus."]
+             [:p
+              "We know what we're doing, and constantly question and audit our sensitive code, and solicit outside feedback about our security."]]
+            [:section
+             [:h3 "GitHub authorization"]
+             [:p
+              "To run your tests, we need to check out your code from GitHub. When you sign up for Circle, you tell GitHub that you are authorizing us to check out your private repositories. You may revoke this permission at any time through your "
+              [:a
+               {:href (str (gh-utils/http-endpoint) "/settings/applications")}
+               "GitHub application settings page"]
+              " and by removing Circle's " [:em "Deploy Keys"] " and " [:em "Service Hooks"] " from your repositories' " [:em "Admin"] " pages."]
+             [:p
+              "While Circle allows you to selectively test your projects, note that GitHub's permissions model is \"all or nothing\" — Circle gets permission to access all of a user's repositories or none of them. We have asked GitHub to provide finer-grained permissions, but they have indicated it will not be completed in the short term. Please "
+              [:a {:href "https://github.com/contact"} "contact GitHub"]
+              " if this is important to you."]]
+            [:section
+             [:h3 "Canceling your account"]
+             [:p
+              "We do not currently have a button to delete your account, but we will be adding one soon. If you need your account canceled and your data deleted, please contact us at "
+              [:a {:href "mailto:sayhi@circleci.com"} "sayhi@circleci.com"] ". To remove Circle's access to your GitHub account, you can remove it via your "
+              [:a {:href (str (gh-utils/http-endpoint) "/settings/applications")} "GitHub application settings page"] "."
+              " You should also remove Circle's " [:em "Deploy Keys"] " and " [:em "Service Hooks"] " from your repositories' " [:em "Admin"] " pages."]]
+            [:section
+             [:h3 "Disclosure"]
+             [:p
+              "If you have found a vulnerability in CircleCi, please contact our security team by email at "
+              [:a {:href "mailto:security@circleci.com"} "security@circleci.com"] ". We will do everything in our power to respond and fix the problem immediately. If possible, please encrypt your message using "
+              [:a {:target "_blank", :href "/circleci-security.pub"}
+               "our security team's GPG key"]
+              " (ID: 0x4013DDA7, fingerprint: 3CD2 A48F 2071 61C0 B9B7  1AE2 6170 15B8 4013 DDA7)."]
+             [:p
+              "Upon discovering a vulnerability, we ask that you act in a way to protect our users' data:"]
+             [:ul
+              [:li "inform us as soon as possible,"]
+              [:li
+               "test against fake data and accounts, not our users' private data (please ask if you'd like a free account to work on this),"]
+              [:li
+               "work with us to close the vulnerability before disclosing it to others."]]
+             [:p
+              "We also maintain a "
+              [:a
+               {:href "/security/hall-of-fame"}
+               "Security Researcher Hall of Fame"]
+              " to thank individuals who have discovered vulnerabilities and worked with us to resolve them."]]
+            [:section
+             [:h3 "Partners with access to your source code"]
+             [:p
+              "Circle is built on Amazon EC2, and we check out your code onto Amazon's EC2 machines. If the EC2 service becomes vulnerable, your source code may also become vulnerable to accidental disclosure. "
+              [:a
+               {:href "http://aws.amazon.com/security/"}
+               "Amazon's Security Center"]
+              " discusses their security in great detail."]]
+            [:section
+             [:h3 "Other partners"]
+             [:p
+              "A small number of partners, who we choose not to enumerate for security reasons, have access to small amounts of our customer data. We constantly audit the data that is provided to them to ensure that this could not be used to gain access to your account or your code."]]
+            [:section
+             [:h3 "Feedback"]
+             [:p
+              "We take security incredibly seriously. If you have any suggestions for how we could improve our security, or improve this policy, please contact us at "
+              [:a {:href "mailto:security@circleci.com"} "security@circleci.com"] ". We will act immediately to deal with the issue."]]]]]]
+        [:div.outer-section.outer-section-condensed
+         common/language-background
+         [:section.container
+          [:div.row
+           [:div.col-xs-8.col-xs-offset-2
+            (features/testimonial
+             {:company-name "Shopify"
+              :company-short "shopify"
+              :logo-src nil
+              :customer-quote "CircleCI lets us be more agile and ship product faster. We can focus on delivering value to our customers, not maintaining CI Infrastructure."
+              :employee-name "John Duff"
+              :employee-title "Director of Engineering"})]]]]]))))


rename language

rename language

--- src/sandbox/multithread.clj
+++ src/sandbox/multithread.clj
@@ -11,7 +11,7 @@
 (defn ps->is [processes]
   (mapcat p->i processes))

-(def r3-language
+(def language
 "S = INSTRS
   INSTRS = ((INSTR | LOCKED-INSTRS) <optional-whitespace>)*
   INSTR = HEAVY-OP | MEDIUM-OP | LIGHT-OP


The pin field should be masked

The pin field should be masked

--- src/freecoin/views/confirm_transaction_form.clj
+++ src/freecoin/views/confirm_transaction_form.clj
@@ -13,7 +13,7 @@
      :fields (if show-pin-entry
                [{:name :secret
                  :label (t/locale [:transaction :enter-pin])
-                 :type :number
+                 :type :password
                  :class "func--confirm-transaction-form--secret"}
                 submit]
                [submit])


[#1381] Change line agg for text types to match old behavior

--- backend/src/akvo/lumen/lib/aggregation/line.clj
+++ backend/src/akvo/lumen/lib/aggregation/line.clj
@@ -18,10 +18,12 @@
         column-x-name (get column-x "columnName")
         column-x-title (get column-x "title")
         column-y (utils/find-column columns (get query "metricColumnY"))
+        column-y-type (get column-y "type")
         column-y-name (get column-y "columnName")
         column-y-title (get column-y "title")
         max-points 2500
         aggregation-method (get query "metricAggregation")
+        aggregation-method  (if (= column-y-type "text") "count" aggregation-method)
         sql-aggregation-subquery (case aggregation-method
                                    nil ""
                                    ("min" "max" "count" "sum") (str aggregation-method  "(%2$s)")


CMR-2112 DIF10 Temporal Extent fix

CMR-2112 DIF10 Temporal Extent fix

--- umm-spec-lib/src/cmr/umm_spec/xml_to_umm_mappings/dif10.clj
+++ umm-spec-lib/src/cmr/umm_spec/xml_to_umm_mappings/dif10.clj
@@ -92,6 +92,39 @@
   [doc]
   (seq (remove nil? [(date/parse-date-type-from-xml doc "DIF/Metadata_Dates/Metadata_Creation" "CREATE")
                      (date/parse-date-type-from-xml doc "DIF/Metadata_Dates/Metadata_Last_Revision" "UPDATE")])))
+
+(defn- parse-temporal-extent
+  "Return a temporal extent from a DIF10 Temporal_Coverage. Remove empty maps which could occur
+  if only a Paleo Date Time is present."
+  [temporal]
+  (let [temporal-extent
+        (util/remove-map-keys empty?
+                              {:TemporalRangeType (value-of temporal "Temporal_Range_Type")
+                               :PrecisionOfSeconds (value-of temporal "Precision_Of_Seconds")
+                               :EndsAtPresentFlag (value-of temporal "Ends_At_Present_Flag")
+                               :RangeDateTimes (for [rdt (select temporal "Range_DateTime")]
+                                                 {:BeginningDateTime (value-of rdt "Beginning_Date_Time")
+                                                  :EndingDateTime (parse-dif-end-date (value-of rdt "Ending_Date_Time"))})
+                               :SingleDateTimes (values-at temporal "Single_DateTime")
+                               :PeriodicDateTimes (for [pdt (select temporal "Periodic_DateTime")]
+                                                    {:Name (value-of pdt "Name")
+                                                     :StartDate (value-of pdt "Start_Date")
+                                                     :EndDate (parse-dif-end-date (value-of pdt "End_Date"))
+                                                     :DurationUnit (value-of pdt "Duration_Unit")
+                                                     :DurationValue (value-of pdt "Duration_Value")
+                                                     :PeriodCycleDurationUnit (value-of pdt "Period_Cycle_Duration_Unit")
+                                                     :PeriodCycleDurationValue (value-of pdt "Period_Cycle_Duration_Value")})})]
+    (when (seq temporal-extent)
+      temporal-extent)))
+
+(defn- parse-temporal-extents
+  "Returns a list of temportal extents"
+  [doc apply-default?]
+  (if-let [temporal-extents
+           (seq (remove nil? (map parse-temporal-extent (select doc "/DIF/Temporal_Coverage"))))]
+    temporal-extents
+    (when apply-default?
+      u/not-provided-temporal-extents)))

 (defn parse-dif10-xml
   "Returns collection map from DIF10 collection XML document."
@@ -125,22 +158,7 @@
                  :Type (without-default-value-of platform "Type")
                  :Characteristics (parse-characteristics platform)
                  :Instruments (parse-instruments platform apply-default?)})
-   :TemporalExtents (for [temporal (select doc "/DIF/Temporal_Coverage")]
-                      {:TemporalRangeType (value-of temporal "Temporal_Range_Type")
-                       :PrecisionOfSeconds (value-of temporal "Precision_Of_Seconds")
-                       :EndsAtPresentFlag (value-of temporal "Ends_At_Present_Flag")
-                       :RangeDateTimes (for [rdt (select temporal "Range_DateTime")]
-                                         {:BeginningDateTime (value-of rdt "Beginning_Date_Time")
-                                          :EndingDateTime (parse-dif-end-date (value-of rdt "Ending_Date_Time"))})
-                       :SingleDateTimes (values-at temporal "Single_DateTime")
-                       :PeriodicDateTimes (for [pdt (select temporal "Periodic_DateTime")]
-                                            {:Name (value-of pdt "Name")
-                                             :StartDate (value-of pdt "Start_Date")
-                                             :EndDate (parse-dif-end-date (value-of pdt "End_Date"))
-                                             :DurationUnit (value-of pdt "Duration_Unit")
-                                             :DurationValue (value-of pdt "Duration_Value")
-                                             :PeriodCycleDurationUnit (value-of pdt "Period_Cycle_Duration_Unit")
-                                             :PeriodCycleDurationValue (value-of pdt "Period_Cycle_Duration_Value")})})
+   :TemporalExtents (parse-temporal-extents doc apply-default?)
    :PaleoTemporalCoverages (pt/parse-paleo-temporal doc)
    :SpatialExtent (spatial/parse-spatial doc)
    :TilingIdentificationSystems (spatial/parse-tiling doc)


Refactored menu

Refactored menu

--- src/statuses/views/main.clj
+++ src/statuses/views/main.clj
@@ -19,29 +19,14 @@
 (defn glyphicon [icon]
   [:i {:class (str "glyphicon glyphicon-" icon)}])

-(defn nav-link [{:keys [url title icon]}]
-  [:li (link-to url (glyphicon icon) (str " " title))])
-
 (defn nav-links [request]
-  (let [links ["Statuses" [{:url base :title "Everything"
-                            :icon "th-list"},
-                           {:url (str base "?query=@" (user request)) :title "Mentions"
-                            :icon "user"},
-                           {:url (str base "?author=" (user request)) :title "My posts"
-                            :icon "user"}],
-                  "Feeds"    [{:url (str base "?format=atom") :title "Feed for everything"
-                         :icon "fire"},
-                        {:url (str base "?format=atom&query=@" (user request)) :title "Feed for mentions"
-                         :icon "fire"}],
-                  "Support"  [{:url "/statuses/info" :title "Server info"
-                           :icon "info-sign"},
-                          {:url "https://github.com/innoq/statuses/issues" :title "Report issue"
-                           :icon "question-sign"}]]]
-
-    (map (fn [[header elements]]
-           [:li.nav-header header
-            (map nav-link elements)])
-      (partition 2 links))))
+  (list [:a {:class "navbar-brand", :href "/statuses/updates"} [:b "Statuses"]]
+        [:li [:a {:href base} [:i {:class "glyphicon glyphicon-th-list"}] "Everything"]]
+        [:li [:a {:href (str base "?query=@" (user request))} [:i {:class "glyphicon glyphicon-user"}] "Mentions"]]
+        [:li [:a {:href (str base "?format=atom")} [:i {:class "glyphicon glyphicon-fire hidden-xs"}] "Feed (all)"]]
+        [:li [:a {:href (str base "?format=atom&query=@" (user request))} [:i {:class "glyphicon glyphicon-fire hidden-xs"}] "Feed (mentions)"]]
+        [:li [:a {:href "/statuses/info"} [:i {:class "glyphicon glyphicon-info-sign"}] "Info"]]
+        [:li [:a {:href "https://github.com/innoq/statuses/issues"} [:i {:class "glyphicon glyphicon-question-sign"}] " Issue"]]))

 (defn format-time [time]
   [:time {:datetime (time/time-to-utc time)} (time/time-to-human time)])


[#3036] Fix tests

[#3036] Fix tests

--- backend/test/akvo/lumen/lib/import/clj_data_importer_test.clj
+++ backend/test/akvo/lumen/lib/import/clj_data_importer_test.clj
@@ -44,8 +44,8 @@
           expected-stored-data '((:rnum :c1 :c2) (:rnum :c1 :c2))]
       (is (= 1 (count data-groups)))
       (let [data-group (first data-groups)]
-        (is (= (:group_id data-group) "main"))
-        (is (= (:group_name data-group) "main"))
+        (is (= (:group-id data-group) "main"))
+        (is (= (:group-name data-group) "main"))
         (is (= (:repeatable data-group) false)))
       (is (= (map keys stored-data) expected-stored-data))
       (is (= (map keys data-groups-stored-data) expected-stored-data))))
@@ -81,8 +81,8 @@
                                  :identifier)]
       (is (= 3 (count data-groups)))
       (let [data-group (first data-groups)]
-        (is (= (:group_id data-group) "metadata"))
-        (is (= (:group_name data-group) "metadata"))
+        (is (= (:group-id data-group) "metadata"))
+        (is (= (:group-name data-group) "metadata"))
         (is (= (:repeatable data-group) false)))
       (is (= (set (keys (first stored-data))) (set (conj expected-stored-data :c1 :c2 :c3 :c4))))
       (is (= (keys (first (->> (first data-groups)


RP + RS | 167 | removed stackoverflow on create-app

--- src/stonecutter/handler.clj
+++ src/stonecutter/handler.clj
@@ -155,7 +155,7 @@

 (defn create-app
   ([config-m clock stores-m email-sender id-token-generator json-web-key-set]
-   (create-app config-m clock stores-m email-sender id-token-generator false))
+   (create-app config-m clock stores-m email-sender id-token-generator json-web-key-set false))
   ([config-m clock stores-m email-sender id-token-generator json-web-key-set prone-stacktraces?]
    (splitter (create-site-app clock config-m stores-m email-sender prone-stacktraces?)
              (create-api-app config-m stores-m id-token-generator json-web-key-set prone-stacktraces?))))


Hide transactions tab. Nice default state.

--- src/stuttaford/radiant.cljs
+++ src/stuttaford/radiant.cljs
@@ -15,7 +15,8 @@
 (def nav-items
   {:datalog      ["Datalog" datalog]
    :datoms       ["Datoms" datoms]
-   :transactions ["Transactions" transactions]})
+   ;;:transactions ["Transactions" transactions]
+   })

 (defcomponentk app-view [[:data view schema-visible? :as data] owner]
   (will-mount [_]
@@ -37,9 +38,10 @@
   [app-id state-id debug?]
   (common/start
     app-id state-id app-view
-    {:view                 :datalog
-     :query                "[:find ?tag ?title :in $ :where [?link-id :link/title ?title] [?link-id :link/tags ?tag-id] [?tag-id :tag/name ?tag]]"
-     :current-datoms-index :eavt
-     :schema-visible?      true
-     :shared               {:control-chan (chan)}}
+    {:view                      :datalog
+     :query                     "[:find ?tag ?title :in $ :where [?link-id :link/title ?title] [?link-id :link/tags ?tag-id] [?tag-id :tag/name ?tag]]"
+     :current-datoms-index      :avet
+     :current-datoms-components {:a ":link/title"}
+     :schema-visible?           false
+     :shared                    {:control-chan (chan)}}
     debug?))


named parameters for text layout function

--- src/cljs/infinitelives/pixi/pixelfont.cljs
+++ src/cljs/infinitelives/pixi/pixelfont.cljs
@@ -205,7 +205,12 @@
         n                 ;; no more words, doesn't fit in
         ))))

-(defn layout-text [font-key text x y right line-spacing justify charset]
+(defn layout-text [font-key text & {:keys [x y right line-spacing justify charset]
+                                    :or {x 0 y 0 right 999999
+                                         line-spacing 1
+                                         justify :justify
+                                         charset []}
+                                    :as options}]
   (assert (#{:justify :ragged} justify) "justify needs to be set correctly")
   (let [font (get-font font-key)
         height (:height font)
@@ -220,16 +225,15 @@
         more? (< num (count word-extents))
         padding (if more? (/ diff num-spaces) 0)
         line (make-char-sprite-set font-key section
-                                      :tint 0xffffff
-                                      :x 0 :y y
-                                      :space-padding (if (= :justify justify) padding 0))]
+                                   :tint 0xffffff
+                                   :x 0 :y y
+                                   :space-padding (if (= :justify justify) padding 0))]
     (if more?
-      (layout-text font-key (subs text (-> num word-extents first))
-                 x (+ y (* line-spacing height))
-                 right line-spacing justify
-                 (into charset line))
+      (apply layout-text font-key (subs text (-> num word-extents first))
+             (apply concat (assoc options
+                                  :y (+ y line-spacing height)
+                                  :charset (into charset line))))
       (into charset line))))
-

 (comment


handling removed tasks

handling removed tasks

--- src/cljs/swarmpit/component/task/info.cljs
+++ src/cljs/swarmpit/component/task/info.cljs
@@ -26,7 +26,9 @@
     (let [task (->> event
                     (filter #(= task-id (:id %)))
                     (first))]
-      (state/set-value task state/form-value-cursor))))
+      (if task
+        (state/set-value task state/form-value-cursor)
+        (state/update-value [:state] "removed" state/form-value-cursor)))))

 (defn- task-handler
   [route]
@@ -61,6 +63,7 @@
     "running" (label/green value)
     "shutdown" (label/grey value)
     "orphaned" (label/grey value)
+    "removed" (label/grey value)
     "rejected" (label/red value)
     "failed" (label/red value)))


task list fixed

task list fixed

--- src/cljs/swarmpit/component/task/list.cljs
+++ src/cljs/swarmpit/component/task/list.cljs
@@ -1,7 +1,5 @@
 (ns swarmpit.component.task.list
   (:require [material.icon :as icon]
-            [material.components :as comp]
-            [material.component.list.basic :as list]
             [material.component.list.util :as list-util]
             [material.component.label :as label]
             [swarmpit.component.state :as state]
@@ -47,19 +45,6 @@
     "rejected" (label/red value)
     "failed" (label/red value)))

-<<<<<<< HEAD
-(defn- render-percentage
-  [val]
-  (if (some? val)
-    (str (gstring/format "%.2f" val) "%")
-    "-"))
-
-(defn- render-capacity
-  [val]
-  (if (some? val)
-    (humanize/filesize val :binary true)
-    "-"))
-=======
 (defn- render-item-name [item]
   (html
     [:div
@@ -67,7 +52,6 @@
       [:span (:taskName item)]]
      [:div
       [:span.Swarmpit-list-image (get-in item [:repository :image])]]]))
->>>>>>> origin / issues/159

 (def render-metadata
   {:table {:summary [{:name      "Task"


Fix logging in with push state.

Fix logging in with push state.

--- src/cljs/wombats_web_client/utils/url.cljs
+++ src/cljs/wombats_web_client/utils/url.cljs
@@ -1,15 +1,8 @@
 (ns wombats-web-client.utils.url
-  (:require [cemerick.url :as url]
-            [wombats-web-client.constants.local-storage :refer [access-token]]))
+  (:require [pushy.core :as pushy]
+            [wombats-web-client.routes :refer [history]][wombats-web-client.routes :refer [history]]))

 (defn strip-access-token
   "removes access token from query"
   []
-  (let [url (-> js/window
-                .-location
-                .-href
-                url/url)
-        query (:query url)
-        location (merge url {:query (dissoc query access-token)})
-        state (or (.-state js/history) #js {})]
-    (.replaceState js/history state "" location)))
+  (pushy/replace-token! history "/"))


Add experimental disclaimer on network namespace

--- src/com/wsscode/pathom/fulcro/network.cljs
+++ src/com/wsscode/pathom/fulcro/network.cljs
@@ -14,6 +14,8 @@
             [om.next :as om])
   (:import [goog.net XhrIo EventType]))

+;; EXPERIMENTAL - all features here are experimental and subject to API changes and breakages
+
 ;; Local Network

 (defrecord LocalNetwork [parser]
@@ -32,6 +34,10 @@

 (defn local-network [parser]
   (map->LocalNetwork {:parser parser}))
+
+;; EDN Networking
+
+

 ;; GraphQL Networking


only upsert acquired unique keys if there are any

--- src/er_cassandra/model/alia/unique_key.clj
+++ src/er_cassandra/model/alia/unique_key.clj
@@ -1,5 +1,6 @@
 (ns er-cassandra.model.alia.unique-key
   (:require
+   [taoensso.timbre :refer [trace debug info warn error]]
    [clojure.set :as set]
    [cats.core :refer [mlet return]]
    [cats.context :refer [with-context]]
@@ -469,12 +470,20 @@
                             acquire-key-responses))

            ;; only update the cols relating to the unique keys
-           :let [ukcols (all-unique-key-cols entity)
+           :let [all-uk-cols (all-unique-key-cols entity)
+                 uberkey-cols (-> entity t/uber-key flatten set)
+
+                 ;; we will set these if they are provided
+                 set-cols (set/difference all-uk-cols uberkey-cols)
+
+                 ;; only proceed if we have some col vals to set
+                 set-vals (select-keys updated-record set-cols)
+
                  update-cols (into
-                              ukcols
-                              (flatten (t/uber-key entity)))]
-
-           upsert-response (if-not (empty? ukcols)
+                              all-uk-cols
+                              uberkey-cols)]
+
+           upsert-response (if-not (empty? set-vals)
                              (r/update
                               session
                               (get-in entity [:primary-table :name])


saving work

saving work

--- src-cljs/frontend/models/project.cljs
+++ src-cljs/frontend/models/project.cljs
@@ -150,3 +150,20 @@

 (defn feature-enabled? [project feature]
   (get-in project [:feature_flags feature]))
+
+(defn show-build-timing? [project plan]
+  (or (config/enterprise?)
+      (:oss project)
+      (> (:containers plan) 1)))
+
+(defn add-show-insights? [project plans]
+  (let [org-name (-> project
+                     (:vcs_url)
+                     (vcs-url/org-name))
+        plans (->> plans
+                   (filter #(-> %
+                                :org_name
+                                (= org-name))))]
+    (assoc project :show-insights? (or (config/enterprise?)
+                                       (:oss? project)
+                                       (> (:num_paid_containers org) 0)))))


Display correct image size in document view.

--- src-cljs/pepa/workflows/document.cljs
+++ src-cljs/pepa/workflows/document.cljs
@@ -75,6 +75,7 @@
       (.scrollIntoView el))))

 (defn ^:private page-cell [page owner opts]
+  (assert (:view opts))
   (reify
     om/IDidMount
     (did-mount [_]
@@ -89,7 +90,7 @@
              :on-click (fn [e]
                          (async/put! events (om/value page))
                          (.preventDefault e))}
-        (om/build page/thumbnail page {:opts opts})]))))
+        (om/build (:view opts) page {:opts opts})]))))

 (defn ^:private thumbnails [pages owner]
   (reify
@@ -107,7 +108,8 @@
                       {:key :id
                        :init-state {:events events}
                        :state {:current-page current-page}
-                       :opts {:enable-rotate? true}})]))))
+                       :opts {:enable-rotate? true
+                              :view page/thumbnail}})]))))

 (defn ^:private pages-pane-header [document]
   (om/component
@@ -128,7 +130,8 @@
         (om/build-all page-cell pages
                       {:key :id
                        :init-state {:events events}
-                       :state {:current-page current-page}})]))))
+                       :state {:current-page current-page}
+                       :opts {:view page/full}})]))))

 (defn ^:private meta-pane [document owner]
   (om/component


More cleanup, docstrings

More cleanup, docstrings

--- src/main/clojure/clojure/data/json_new.clj
+++ src/main/clojure/clojure/data/json_new.clj
@@ -12,13 +12,14 @@
   clojure.data.json-new
   (:require [clojure.pprint :as pprint])
   (:import (java.io PrintWriter PushbackReader StringWriter
-                    StringReader Reader EOFException)))
+                    StringReader EOFException)))

 ;;; JSON READER

 (def ^:dynamic ^:private *keywordize*)
-
-(declare do-parse)
+(def ^:dynamic ^:private *bigdec*)
+
+(declare -parse)

 (defmacro ^:private codepoint [c]
   (int c))
@@ -52,7 +53,7 @@
       \, (recur (.read stream) result)
       \] (persistent! result)
       (do (.unread stream c)
-          (let [element (do-parse stream true nil)]
+          (let [element (-parse stream true nil)]
             (recur (.read stream) (conj! result element)))))))

 (defn- parse-object [^PushbackReader stream]
@@ -74,7 +75,7 @@
              (throw (Exception. "JSON error (key missing value in object)")))

         (do (.unread stream c)
-            (let [element (do-parse stream true nil)]
+            (let [element (-parse stream true nil)]
               (if (nil? key)
                 (if (string? element)
                   (recur element result)
@@ -139,10 +140,12 @@
               (do (.unread stream c)
                   float?))))]
     (if floating-point?
-      (Double/valueOf (str buffer))
+      (if *bigdec*
+        (bigdec (str buffer))
+        (Double/valueOf (str buffer)))
       (Long/valueOf (str buffer)))))

-(defn- do-parse
+(defn- -parse
   [^PushbackReader stream eof-error? eof-value]
   (loop []
     (let [c (.read stream)]
@@ -193,17 +196,42 @@
           (throw (Exception.
                   (str "JSON error (unexpected character): " (char c)))))))))

-(defn parse [rdr & options]
-  (let [{:keys [keywordize eof-error? eof-value]
+(defn parse
+  "Parse a single item of JSON data from a java.io.Reader. Options are
+  key-value pairs, valid options are:
+
+     :keywordize boolean
+
+        If true (default) convert JSON properties from strings into
+        keywords.
+
+     :bigdec boolean
+
+        If true use BigDecimal for decimal numbers instead of Double.
+        Default is false.
+
+     :eof-error? boolean
+
+        If true (default) will throw exception if the stream is empty.
+
+     :eof-value Object
+
+        Object to return if the stream is empty and eof-error? is
+        true. Default is nil."
+  [reader & options]
+  (let [{:keys [keywordize eof-error? eof-value bigdec]
          :or {keywordize false
+              bigdec false
               eof-error? true}} options]
-    (binding [*keywordize* keywordize]
-      (do-parse rdr eof-error? eof-value))))
+    (binding [*keywordize* keywordize
+              *bigdec* bigdec]
+      (-parse reader eof-error? eof-value))))

 (defn parse-string
-  "Reads one JSON value from input String."
-  ([string & options]
-     (apply parse (PushbackReader. (StringReader. string)) options)))
+  "Reads one JSON value from input String. Options are the same as for
+  parse."
+  [string & options]
+  (apply parse (PushbackReader. (StringReader. string)) options))

 ;;; JSON WRITER

@@ -273,7 +301,7 @@
           (recur nxt)))))
   (.print out \]))

-(defn- write-json-bignum [x ^PrintWriter out escape-unicode]
+(defn- write-json-bignum [x ^PrintWriter out]
   (.print out (str x)))

 (defn- write-json-plain [x ^PrintWriter out]


PDOK-2292: as-gml: Filter out \n (in similar fashion as template::clean-up

--- src/main/clojure/pdok/featured/feature.clj
+++ src/main/clojure/pdok/featured/feature.clj
@@ -67,7 +67,8 @@
   (.write wkt-writer jts))

 (defmulti as-gml (fn [obj] lower-case (get obj "type")))
-(defmethod as-gml "gml" [obj] (when-let [gml (get obj "gml")](str/replace gml #"<\?[^\?]*\?>" "")))
+(defmethod as-gml "gml" [obj] (when-let [gml (get obj "gml")]
+                                (str/trim (reduce str (str/split-lines (str/trim-newline (str/replace gml #"<\?[^\?]*\?>" "")))))))
 (defmethod as-gml :default [obj] nil)

 (defmulti as-jts (fn [obj] lower-case (get obj "type")))


fix-output-file-tags utility

fix-output-file-tags utility

git-svn-id: 03a8048b5ee8463be5048a3801110fb50f378627@9990 d0ab736e-dc22-4aeb-8dc9-08def0aa14fd

--- buildscripts/buildcheck/src/buildcheck/core.clj
+++ buildscripts/buildcheck/src/buildcheck/core.clj
@@ -2,8 +2,8 @@
   (:import (java.io File)
            (java.text SimpleDateFormat)
            (java.util Calendar Date))
-  (:require [postal.core :as postal])
-  (:require [clojure.xml])
+  (:require [postal.core :as postal]
+            [clojure.xml])
   (:gen-class))

 (def micromanager (File. "../.."))
@@ -229,6 +229,21 @@
 (defn -main [mode]
   (make-full-report (get {"inc" :inc "full" :full} mode) true))

+;; other windows stuff (manual)
+
+(defn fix-output-file-tag
+  "Fix the dll output path specified in this vc proj."
+  [vcproj-file]
+  (spit vcproj-file
+        (-> vcproj-file
+            slurp
+            (clojure.string/replace #"\$\(OutDir\)/.+?\.dll"
+                                    "\\$(OutDir)/mmgr_dal_\\$(ProjectName).dll"))))
+
+(defn fix-output-file-tags
+  "Fix the dll output path in all vcproj files."
+  []
+  (dorun (map fix-output-file-tag (device-vcproj-files))))

 ;;;; checking mac stuff (manual)


update receive-signal to return true if signal was accepted, update sync-signal-vertex to only count successful signals

--- src/thi/ng/fabric/core.cljc
+++ src/thi/ng/fabric/core.cljc
@@ -91,8 +91,9 @@
         (if v
           (let [signal (f vertex opts)]
             (if-not (nil? signal)
-              (do (receive-signal v id signal)
-                  (recur (conj! active v) (next outs)))
+              (if (receive-signal v id signal)
+                (recur (conj! active v) (next outs))
+                (recur active (next outs)))
               (do (debug "signal fn for" (:id v) "returned nil, skipping...")
                   (recur active (next outs)))))
           (persistent! active))))))
@@ -153,12 +154,12 @@
   (receive-signal
     [_ src sig]
     (if-not (= sig ((::signal-map @state) src))
-      (swap! state
-             #(-> %
-                  (update ::uncollected conj sig)
-                  (assoc-in [::signal-map src] sig)))
-      (debug id " ignoring unchanged signal: " (pr-str sig)))
-    _))
+      (do (swap! state
+                 #(-> %
+                      (update ::uncollected conj sig)
+                      (assoc-in [::signal-map src] sig)))
+          true)
+      (debug id " ignoring unchanged signal: " (pr-str sig)))))

 #?(:clj
    (defmethod clojure.pprint/simple-dispatch Vertex


Remove useless println's.

Remove useless println's.

--- src/uxbox/data/history.cljs
+++ src/uxbox/data/history.cljs
@@ -64,7 +64,6 @@
 (defrecord FetchPageHistory [id since max]
   rs/WatchEvent
   (-apply-watch [this state s]
-    (println "FetchPageHistory" this)
     (letfn [(on-success [{history :payload}]
               (let [history (into [] history)]
                 (->PageHistoryFetched history (not (nil? since)))))
@@ -89,7 +88,6 @@
 (defrecord CleanPageHistory []
   rs/UpdateEvent
   (-apply-update [_ state]
-    (println "CleanPageHistory")
     (assoc-in state [:workspace :history] {})))

 (defn clean-page-history
@@ -105,7 +103,6 @@
 (defrecord WatchPageChanges []
   rs/WatchEvent
   (-apply-watch [_ state s]
-    (println "WatchPageChanges")
     (let [stoper (->> (rx/filter clean-page-history? s)
                       (rx/take 1))]
       (->> (rx/filter udp/page-synced? s)
@@ -142,7 +139,6 @@
 (defrecord ApplySelectedHistory [id]
   rs/UpdateEvent
   (-apply-update [_ state]
-    (println "ApplySelectedHistory" id)
     (-> state
         (update-in [:pages-by-id id] dissoc :history)
         (assoc-in [:workspace :history :selected] nil)))


more config options for :warnings-as-errors

takes a map to ignore warnings in certain namespaces.

  :warnings-as-errors {:ignore #{foo.* some.thing}}

symbols can use a * at the end to wildcard match or just simple
namespace symbols.

fixes #567

--- src/main/shadow/build/compiler.clj
+++ src/main/shadow/build/compiler.clj
@@ -340,6 +340,45 @@
               :ns (:name ast)
               :ns-info (dissoc ast :env)))))))

+(defn ns-wildcard-match? [pattern ns]
+  (let [s (cond
+            (symbol? pattern)
+            (str pattern)
+            (string? pattern)
+            pattern
+            :else
+            (throw (ex-info "invalid :ignore entry" {:pattern pattern})))]
+    (if (str/ends-with? s "*")
+      (str/starts-with? (str ns) (subs s 0 (-> s (count) (dec))))
+      (= s (str ns)))))
+
+(comment
+  (ns-wildcard-match? 'foo.* 'foo.bar))
+
+(defn should-warning-throw?
+  [state {:keys [ns] :as rc} {:keys [warning] :as warning-info}]
+  (let [wae (get-in state [:compiler-options :warnings-as-errors])]
+    (or (true? wae)
+        (and (set? wae) (contains? wae warning))
+        (and (map? wae)
+             (let [{:keys [ignore warning-types]} wae]
+               (if (and ns (seq ignore) (some #(ns-wildcard-match? % ns) ignore))
+                 false
+                 (or (not (seq warning-types))
+                     (contains? warning-types warning)
+                     )))))))
+
+(comment
+  (should-warning-throw?
+    {:compiler-options
+     {:warnings-as-errors
+      {:ignore #{'foo.*}
+       ;; :warning-types #{:undeclared-var}
+       }}}
+    {:ns 'foo.bar}
+    {:warning :undeclared-var}))
+
+
 (defn warning-collector [state warnings warning-type env extra]
   ;; FIXME: currently there is no way to turn off :infer-externs
   ;; the work is always done and the warning is always generated
@@ -373,10 +412,8 @@
            :msg msg
            :extra extra}]

-      (let [wae (get-in state [:compiler-options :warnings-as-errors])]
-        (when (or (true? wae)
-                  (and (set? wae) (contains? wae warning-type)))
-          (throw (ex-info msg warning-info))))
+      (when (should-warning-throw? state *current-resource* warning-info)
+        (throw (ex-info msg warning-info)))

       (swap! warnings conj warning-info))))


[#12667] Fix broken subscription on add bootnode screen

--- src/status_im/ui/screens/bootnodes_settings/edit_bootnode/views.cljs
+++ src/status_im/ui/screens/bootnodes_settings/edit_bootnode/views.cljs
@@ -22,7 +22,7 @@

 (views/defview edit-bootnode []
   (views/letsubs [manage-bootnode   [:get-manage-bootnode]
-                  validation-errors [:manage-bootnode-validation-errors]]
+                  validation-errors [:wakuv2-nodes/validation-errors]]
     (let [url          (get-in manage-bootnode [:url :value])
           id           (get-in manage-bootnode [:id :value])
           name         (get-in manage-bootnode [:name :value])


correct figwheel CLOSURE_IMPORT_SCRIPT function so it matches expected calling parameters and behavior

--- support/src/figwheel/client/file_reloading.cljs
+++ support/src/figwheel/client/file_reloading.cljs
@@ -305,14 +305,23 @@

 (defonce reloader-loop
   (go-loop []
-    (when-let [url (<! reload-chan)]
-      (let [file-msg (<! (blocking-load url))]
-        (if-let [callback (get @on-load-callbacks url)]
-          (callback file-msg)
-          (swap! dependencies-loaded conj file-msg))
-        (recur)))))
-
-(defn queued-file-reload [url] (put! reload-chan url))
+    (when-let [[url opt-source-text] (<! reload-chan)]
+      (cond
+        opt-source-text
+        (do
+          (js/console.log "Evaling!" opt-source-text)
+          (js/eval opt-source-text))
+        url
+        (let [file-msg (<! (blocking-load url))]
+          (js/console.log "Loading!" url)
+          (if-let [callback (get @on-load-callbacks url)]
+            (callback file-msg)
+            (swap! dependencies-loaded conj file-msg))))
+      (recur))))
+
+(defn queued-file-reload
+  ([url] (queued-file-reload url nil))
+  ([url opt-source-text] (put! reload-chan [url opt-source-text])))

 (defn require-with-callback [{:keys [namespace] :as file-msg} callback]
   (let [request-url (resolve-ns namespace)]


Rationalised some transformations.

Rationalised some transformations.

--- src/overtunes/songs/canone_alla_quarta.clj
+++ src/overtunes/songs/canone_alla_quarta.clj
@@ -12,16 +12,14 @@
        (-> % - downward-scale))
      (sum-n (cycle intervals) %)))

-(defn translate [point deltas] (map + point deltas))
+(def t 0)
+(def p 1)
 (defn map-in [m k f] (map #(update-in % [k] f) m))
-(defn transform [key f] #(update-in % [key] f))
-(defn transform-y [f] #(map-in % 1 f))
-(defn transform-x [f] #(map-in % 0 f))
+(defn transform [k f] #(map-in % k f))
+(defn add [offset] (partial + offset))

 (def major (scale [2 2 1 2 2 2 1]))
-(defn add [x] (partial + x))
 (def g-major (comp (add 74) major))
-

 (defn bpm [per-minute] #(-> % (/ per-minute) (* 60) (* 1000)))
 (defn run [a & bs]
@@ -54,17 +52,17 @@
     (->> notes (map play-at#) dorun)))

 (defn canone-alla-quarta# []
-  (let [in #(transform-y %)
-        after #(transform-x (add %))
+  (let [in #(transform p %)
+        after #(transform t (add %))
         from-now (after (now))
-        tempo #(transform-x %)
-        mirror (transform-y -)
-        transpose #(transform-y (add %))
+        tempo #(transform t %)
+        mirror (transform p -)
+        transpose #(transform p (add %))
         leader #(=> % (after 1/2) (in g-major) (tempo (bpm 120)) from-now)
         follower #(=> % mirror (transpose -3) (after 3) leader)
         bass (=> bassline (transpose -7) (in g-major) (tempo (bpm 120)) from-now)]
+    (=> bass play#)
     (=> melody leader play#)
-    (=> melody follower play#)
-    (=> bass play#)))
+    (=> melody follower play#)))

 (canone-alla-quarta#)


Upgrade to Cassandra 1.2.10

Upgrade to Cassandra 1.2.10

--- project.clj
+++ project.clj
@@ -14,7 +14,7 @@
                  [ring/ring-core "1.2.0"]
                  [http-kit "2.1.10"]
                  [org.apache.httpcomponents/httpclient "4.2.3"]
-                 [org.apache.cassandra/cassandra-all "1.2.8"]
+                 [org.apache.cassandra/cassandra-all "1.2.10"]
                  [org.elasticsearch/elasticsearch "0.90.5"]
                  [org.scala-lang/scala-library "2.9.2"]
                  [kafka/core-kafka_2.9.2 "0.7.2"]


Add lein-release

Add lein-release

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject eureka "0.2.0-SNAPSHOT"
+(defproject eureka "0.1.1-SNAPSHOT"

   :description "A Clojure library that wraps the Curator service discovery/registration API."

@@ -11,4 +11,8 @@

   :profiles {:dev {:dependencies [[zookem "0.1.0-SNAPSHOT"]
                                   [midje "1.5.1"]]
-                   :plugins [[lein-midje "3.0.1"]]}})
+                   :plugins [[lein-midje "3.0.1"]
+                             [lein-release "1.0.5"]]}}
+
+  :lein-release {:deploy-via :clojars
+                 :clojars-url "clojars@clojars.brislabs.com:"})


Prepare for next release cycle.

Prepare for next release cycle.

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject org.onyxplatform/onyx-metrics "0.8.0.4"
+(defproject org.onyxplatform/onyx-metrics "0.8.0.5-SNAPSHOT"
   :description "Instrument Onyx workflows"
   :url "https://github.com/MichaelDrogalis/onyx"
   :license {:name "Eclipse Public License"


Update Clojure version.

Update Clojure version.

--- project.clj
+++ project.clj
@@ -3,7 +3,7 @@
   :url "https://github.com/brunchboy/afterglow"
   :license {:name "Eclipse Public License"
             :url "http://www.eclipse.org/legal/epl-v10.html"}
-  :dependencies [[org.clojure/clojure "1.7.0-RC1"]
+  :dependencies [[org.clojure/clojure "1.7.0-RC2"]
                  [org.clojure/core.cache "0.6.4"]
                  [org.clojure/core.async "0.1.346.0-17112a-alpha"]
                  [org.clojure/math.numeric-tower "0.0.4"]


Version 2.15.2-1-SNAPSHOT [ci skip]

Version 2.15.2-1-SNAPSHOT [ci skip]

--- project.clj
+++ project.clj
@@ -1,5 +1,5 @@

-(defproject clojush "2.15.2"
+(defproject clojush "2.15.2-1-SNAPSHOT"
   :description "The Push programming language and the PushGP genetic programming
                 system implemented in Clojure.
                 See http://pushlanguage.com"


Don't pull in dev dependencies.

Don't pull in dev dependencies.

--- project.clj
+++ project.clj
@@ -8,46 +8,38 @@
             :url "http://www.eclipse.org/legal/epl-v10.html"}
   :dependencies [[org.clojure/clojure "1.5.1"]
                  [org.clojure/clojurescript "0.0-2127"]]
-  :profiles {:dev {:dependencies [[com.keminglabs/cljx "0.3.1"]
-                                  [crate "0.2.3" :scope "dev"]
+  :cljsbuild {:builds []}
+  :profiles {:dev {:dependencies [[crate "0.2.3" :scope "dev"]
                                   [prismatic/dommy "0.1.1"]]
-                   :plugins [[com.cemerick/austin "0.1.3"]]
-                   :repl-options {:nrepl-middleware [cljx.repl-middleware/wrap-cljx]}}}
-  :plugins [[com.cemerick/clojurescript.test "0.2.1"]
-            [com.keminglabs/cljx "0.3.1"]
-            [lein-cljsbuild "1.0.1"]]
-  :hooks [cljx.hooks leiningen.cljsbuild]
-  :cljx {:builds [{:source-paths ["src"]
-                   :output-path "target/classes"
-                   :rules :clj}
-                  {:source-paths ["src"]
-                   :output-path "target/classes"
-                   :rules :cljs}
-                  {:source-paths ["test"]
-                   :output-path "target/test-classes"
-                   :rules :clj}
-                  {:source-paths ["test"]
-                   :output-path "target/test-classes"
-                   :rules :cljs}]}
-  :cljsbuild {:builds [{:id "test"
-                        :source-paths ["test" "target/classes" "target/test-classes"]
-                        :compiler {:output-to "target/test/sablono.js"
-                                   :output-dir "target/test"
-                                   :optimizations :whitespace
-                                   :pretty-print true
-                                   :preamble ["jquery.js"
-                                              "phantomjs-shims.js"
-                                              "sablono/react-with-addons-0.8.0.min.js"]
-                                   :externs ["sablono/externs/react.js"]
-                                   :closure-warnings {:non-standard-jsdoc :off}}}
-                       {:id "dev"
-                        :source-paths ["test" "target/classes" "target/test-classes"]
-                        :compiler {:output-to "target/dev/sablono.js"
-                                   :output-dir "target/dev"
-                                   :optimizations :none
-                                   :pretty-print true
-                                   :source-map true
-                                   :externs ["sablono/externs/react.js"]
-                                   :closure-warnings {:non-standard-jsdoc :off}}}]
-              :test-commands {"phantom" ["phantomjs" :runner "target/test/sablono.js"]}}
-  :test-paths ["test" "target/test-classes"])
+                   :plugins [[com.cemerick/austin "0.1.3"]
+                             [com.cemerick/clojurescript.test "0.2.1"]
+                             [com.keminglabs/cljx "0.3.2"]
+                             [lein-cljsbuild "1.0.1"]]
+                   :hooks [cljx.hooks leiningen.cljsbuild]
+                   :cljx {:builds [{:source-paths ["src"]
+                                    :output-path "target/classes"
+                                    :rules :clj}
+                                   {:source-paths ["src"]
+                                    :output-path "target/classes"
+                                    :rules :cljs}
+                                   {:source-paths ["test"]
+                                    :output-path "target/test-classes"
+                                    :rules :clj}
+                                   {:source-paths ["test"]
+                                    :output-path "target/test-classes"
+                                    :rules :cljs}]}
+                   :cljsbuild {:builds [{:id "test"
+                                         :source-paths ["test" "target/classes" "target/test-classes"]
+                                         :compiler {:output-to "target/test/sablono.js"
+                                                    :output-dir "target/test"
+                                                    :optimizations :whitespace
+                                                    :pretty-print true
+                                                    :preamble ["jquery.js"
+                                                               "phantomjs-shims.js"
+                                                               "sablono/react-with-addons-0.8.0.min.js"]
+                                                    :externs ["sablono/externs/react.js"]
+                                                    :closure-warnings {:non-standard-jsdoc :off}}}]
+                               :test-commands {"phantom" ["phantomjs" :runner "target/test/sablono.js"]}}
+                   :repl-options {:nrepl-middleware [cljx.repl-middleware/wrap-cljx]}
+                   :source-paths ["target/classes"]
+                   :test-paths ["test" "target/test-classes"]}})


remove extraneous profile

remove extraneous profile

--- project.clj
+++ project.clj
@@ -5,7 +5,6 @@
             :url "https://github.com/pyr/cyanite/tree/master/LICENSE"}
   :maintainer {:email "pyr@spootnik.org"}
   :main so.grep.cyanite
-  :profiles {:dev {:eval-in-leiningen true}}
   :dependencies [[org.clojure/clojure       "1.5.1"]
                  [org.clojure/tools.logging "0.2.6"]
                  [org.clojure/tools.cli     "0.2.4"]


Version 0.5.6

Version 0.5.6

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject lambdacd "0.5.6-SNAPSHOT"
+(defproject lambdacd "0.5.6"
   :description "a library to create a continous delivery pipeline in code"
   :url "http://github.com/flosell/lambdacd"
   :license {:name "Apache License, version 2.0"


Update dependency.

Update dependency.

--- project.clj
+++ project.clj
@@ -27,7 +27,7 @@
     [com.apa512/rethinkdb "0.11.0"] ; RethinkDB client for Clojure https://github.com/apa512/clj-rethinkdb
     [prismatic/schema "1.0.4"] ; Data validation https://github.com/Prismatic/schema
     [environ "1.0.1"] ; Get environment settings from different sources https://github.com/weavejester/environ
-    [com.taoensso/timbre "4.1.4"] ; Logging https://github.com/ptaoussanis/timbre
+    [com.taoensso/timbre "4.2.0-alpha3"] ; Logging https://github.com/ptaoussanis/timbre
     [raven-clj "1.3.1"] ; Clojure interface to Sentry error reporting https://github.com/sethtrain/raven-clj
     [clj-http "2.0.0"] ; HTTP client https://github.com/dakrone/clj-http
     [org.clojure/tools.cli "0.3.3"] ; command-line parsing https://github.com/clojure/tools.cli


lein-release plugin: preparing 0.161 release

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


Dependency version update

Dependency version update

--- project.clj
+++ project.clj
@@ -4,7 +4,8 @@
   :license {:name "The MIT License (MIT)"
             :url "http://opensource.org/licenses/MIT"}
   :dependencies [[org.clojure/clojure "1.5.1"]
-                 [org.clojure/clojurescript "0.0-2134"]]
+                 [org.clojure/clojurescript "0.0-2138"]]
+  :scm {:url "git@github.com:rm-hull/inkspot.git"}
   :plugins [[lein-cljsbuild "1.0.1"]
             [com.birdseye-sw/lein-dalap "0.1.0"]]
   :hooks [leiningen.dalap]


lein-release plugin: bumped version from 0.4.0 to 0.4.1-SNAPSHOT for next development cycle

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject org.domaindrivenarchitecture/dda-backup-crate "0.4.0"
+(defproject org.domaindrivenarchitecture/dda-backup-crate "0.4.1-SNAPSHOT"
   :description "A crate to handle configuration, their dependencies, documentation and validation"
   :url "https://www.domaindrivenarchitecture.org"
   :license {:name "Apache License, Version 2.0"


it's sometimes handy

it's sometimes handy

--- project.clj
+++ project.clj
@@ -18,7 +18,6 @@
               :asset-path "../outs/out00"
               :main "didactic_waddle.sketch00"
               :optimizations :none
-              :source-map false
               :pretty-print true}},

             {:source-paths ["src"]
@@ -28,7 +27,6 @@
               :asset-path "../outs/out01"
               :main "didactic_waddle.sketch01"
               :optimizations :none
-              :source-map false
               :pretty-print true}},

             {:source-paths ["src"]
@@ -38,7 +36,6 @@
               :asset-path "../outs/out02"
               :main "didactic_waddle.sketch02"
               :optimizations :none
-              :source-map false
               :pretty-print true}},

             {:source-paths ["src"]
@@ -48,7 +45,6 @@
               :output-dir "outs/out03"
               :main "didactic_waddle.sketch03"
               :optimizations :none
-              :source-map false
               :pretty-print true}},

             {:source-paths ["src"]
@@ -58,6 +54,5 @@
               :asset-path "../outs/out04"
               :main "didactic_waddle.sketch04"
               :optimizations :none
-              :source-map false
               :pretty-print true}},
             ]})


Version 0.7.7-SNAPSHOT

Version 0.7.7-SNAPSHOT

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject grafter/grafter "0.7.6"
+(defproject grafter/grafter "0.7.7-SNAPSHOT"
   :description "Tools for the hard graft of data processing"
   :url "http://grafter.org/"
   :license {:name "Eclipse Public License - v1.0"


Release version 0.3.0.

Release version 0.3.0.

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject clj-json "0.3.0-SNAPSHOT"
+(defproject clj-json "0.3.0"
   :description "Fast JSON encoding and decoding for Clojure via the Jackson library."
   :url "http://github.com/mmcgrana/clj-json"
   :source-path "src/clj"


RR: upgrade clojurescript from 0.0-3126 to 0.0-3196

--- project.clj
+++ project.clj
@@ -2,7 +2,7 @@
   :description "A cljs dataview from your friends at Ona.io"
   :dependencies [;; CORE HATTI REQUIREMENTS
                  [org.clojure/clojure "1.6.0"]
-                 [org.clojure/clojurescript "0.0-3126"]
+                 [org.clojure/clojurescript "0.0-3196"]
                  [org.clojure/core.async "0.1.346.0-17112a-alpha"]
                  [sablono "0.3.1"]
                  [org.omcljs/om "0.8.8"]


Update dependencies using lein-ancient

Update dependencies using lein-ancient

--- project.clj
+++ project.clj
@@ -3,24 +3,25 @@
   :license {:name "Eclipse Public License"
             :url "http://www.eclipse.org/legal/epl-v10.html"}
   :url "https://github.com/verma/dakait"
-  :dependencies [[org.clojure/clojure "1.5.1"]
+  :dependencies [[org.clojure/clojure "1.6.0"]
                  [org.clojure/core.async "0.1.267.0-0d7780-alpha"]
                  [org.clojure/core.match "0.2.1"]
                  [compojure "1.1.6"]
                  [clj-ssh "0.5.7"]
                  [ring/ring-devel "1.2.2"]
                  [ring/ring-core "1.2.2"]
-                 [http-kit "2.1.16"]
-                 [org.clojure/clojurescript "0.0-2156"]
+                 [http-kit "2.1.18"]
+                 [org.clojure/clojurescript "0.0-2197"]
                  [org.clojure/data.json "0.2.4"]
                  [de.ubercode.clostache/clostache "1.3.1"]
                  [org.clojure/tools.logging "0.2.6"]
                  [javax.jmdns/jmdns "3.4.1"]
-                 [me.raynes/conch "0.5.0"]
+                 [me.raynes/conch "0.5.1"]
                  [reagent "0.4.2"]
                  [crate "0.2.5"]
                  [jayq "2.5.0"]]
-  :plugins [[lein-cljsbuild "1.0.1"]]
+  :plugins [[lein-cljsbuild "1.0.2"]
+            [lein-ancient "0.5.5"]]

   :main dakait.main


Update dependencies.

Update dependencies.

--- project.clj
+++ project.clj
@@ -5,20 +5,20 @@
   :jvm-opts ["-Dclojure.compiler.direct-linking=true"]

   :dependencies [[org.clojure/clojure "1.8.0" :scope "provided"]
-                 [org.clojure/clojurescript "1.7.228" :scope "provided"]
+                 [org.clojure/clojurescript "1.8.34" :scope "provided"]
                  [figwheel-sidecar "0.5.0-6" :scope "test"]

                  ;; runtime
                  [com.cognitect/transit-cljs "0.8.237"]
                  [rum "0.6.0" :exclusions [sablono]]
                  [sablono "0.6.2"]
-                 [cljsjs/react "15.0.0-rc.1-0"]
-                 [cljsjs/react-dom "15.0.0-rc.1-0"]
+                 [cljsjs/react "15.0.0-rc.2-0"]
+                 [cljsjs/react-dom "15.0.0-rc.2-0"]
                  [cljsjs/moment "2.10.6-3"]
                  [funcool/lentes "1.0.0"]
                  [funcool/httpurr "0.5.0-20160314.065111-4"]
-                 [funcool/promesa "1.1.0"]
-                 [funcool/beicon "1.0.3"]
+                 [funcool/promesa "1.1.1"]
+                 [funcool/beicon "1.1.0"]
                  [funcool/cuerdas "0.7.1"]
                  [funcool/hodgepodge "0.1.4"]
                  [bouncer "1.0.0"]


upgrade dependencies

upgrade dependencies

--- project.clj
+++ project.clj
@@ -13,7 +13,7 @@
   :java-source-paths ["java"]

   :dependencies [[org.clojure/clojure "1.8.0"]
-                 [org.zalando/swagger1st "0.22.0-beta2" :exclusions [org.apache.httpcomponents/httpcore]]
+                 [org.zalando/swagger1st "0.22.0" :exclusions [org.apache.httpcomponents/httpcore]]
                  [org.zalando.stups/txdemarcator "0.7.0"]
                  [com.stuartsierra/component "0.3.1"]
                  [digest "1.4.5"]
@@ -22,35 +22,35 @@
                  [amalloy/ring-gzip-middleware "0.1.3"]
                  [environ "1.1.0"]
                  [io.clj/logging "0.8.1"]
-                 [org.apache.logging.log4j/log4j-api "2.6.2"]
-                 [org.apache.logging.log4j/log4j-core "2.6.2"]
-                 [org.apache.logging.log4j/log4j-slf4j-impl "2.6.2"]
-                 [org.apache.logging.log4j/log4j-jcl "2.6.2"]
-                 [org.apache.logging.log4j/log4j-1.2-api "2.6.2"]
-                 [org.apache.logging.log4j/log4j-jul "2.6.2"]
+                 [org.apache.logging.log4j/log4j-api "2.7"]
+                 [org.apache.logging.log4j/log4j-core "2.7"]
+                 [org.apache.logging.log4j/log4j-slf4j-impl "2.7"]
+                 [org.apache.logging.log4j/log4j-jcl "2.7"]
+                 [org.apache.logging.log4j/log4j-1.2-api "2.7"]
+                 [org.apache.logging.log4j/log4j-jul "2.7"]
                  [com.jolbox/bonecp "0.8.0.RELEASE" :exclusions [com.google.guava/guava]]
                  [org.flywaydb/flyway-core "4.0.3"]
-                 [org.postgresql/postgresql "9.4.1210"]
-                 [amazonica "0.3.76" :exclusions [org.apache.httpcomponents/httpclient joda-time]]
+                 [org.postgresql/postgresql "9.4.1212"]
+                 [amazonica "0.3.77" :exclusions [org.apache.httpcomponents/httpclient joda-time]]
                  [org.clojure/data.codec "0.1.0"]
                  [overtone/at-at "1.2.0"]
                  [org.zalando.stups/tokens "0.9.9"]
-                 [com.netflix.hystrix/hystrix-clj "1.5.5"]
-                 [com.netflix.hystrix/hystrix-core "1.5.5"]
-                 [com.netflix.hystrix/hystrix-metrics-event-stream "1.5.5"]
+                 [com.netflix.hystrix/hystrix-clj "1.5.7"]
+                 [com.netflix.hystrix/hystrix-core "1.5.7"]
+                 [com.netflix.hystrix/hystrix-metrics-event-stream "1.5.7"]
                  [org.clojure/core.incubator "0.1.4"]
                  [metrics-clojure "2.7.0" :exclusions [io.dropwizard.metrics/metrics-core]]
                  [io.dropwizard.metrics/metrics-servlets "3.1.2"]
                  [org.slf4j/slf4j-api "1.7.21"]
-                 [com.fasterxml.jackson.core/jackson-core "2.8.2"]
-                 [com.fasterxml.jackson.core/jackson-databind "2.8.2"]
+                 [com.fasterxml.jackson.core/jackson-core "2.8.4"]
+                 [com.fasterxml.jackson.core/jackson-databind "2.8.4"]
                  [org.apache.httpcomponents/httpclient "4.5.2"]
                  [org.clojure/core.memoize "0.5.9"]
                  [commons-codec "1.10"]
-                 [com.newrelic.agent.java/newrelic-api "3.31.1"]]
+                 [com.newrelic.agent.java/newrelic-api "3.33.0"]]

-  :plugins [[lein-cloverage "1.0.7-SNAPSHOT"]
-            [lein-environ "1.0.2"]
+  :plugins [[lein-cloverage "1.0.9"]
+            [lein-environ "1.1.0"]
             [lein-marginalia "0.9.0"]]

   :pom-addition [:developers


adding the friend clojar to help with authentication and authorization


Update project URL to GitHub project page

--- project.clj
+++ project.clj
@@ -1,6 +1,6 @@
 (defproject io.aviso/rook "0.1.34"
             :description "Sane, smart, fast, Clojure web services"
-            :url "http://howardlewisship.com/io.aviso/documentation/rook"
+            :url "https://github.com/AvisoNovate/rook"
             :license {:name "Apache Sofware License 2.0"
                       :url  "http://www.apache.org/licenses/LICENSE-2.0.html"}
             :profiles {:dev


Upgrade all dependencies

Upgrade all dependencies

--- project.clj
+++ project.clj
@@ -2,15 +2,15 @@
   :description "Ansel, a self-hosted photo gallery"
   :url "http://example.com/FIXME"
   :dependencies [[org.clojure/clojure "1.5.1"]
-                 [org.clojure/math.numeric-tower "0.0.2"]
-                 [compojure "1.1.5"]
+                 [org.clojure/math.numeric-tower "0.0.3"]
+                 [compojure "1.1.6"]
                  [me.raynes/fs "1.4.5"]
-                 [com.taoensso/timbre "2.6.2"]
-                 [ring/ring-core "1.2.0"]
-                 [ring/ring-jetty-adapter "1.2.0"]
+                 [com.taoensso/timbre "2.7.1"]
+                 [ring/ring-core "1.2.1"]
+                 [ring/ring-jetty-adapter "1.2.1"]
                  [com.cemerick/friend "0.2.0"]
-                 [selmer "0.5.1"]
-                 [cheshire "5.2.0"]
+                 [selmer "0.5.7"]
+                 [cheshire "5.3.0"]
                  [org.mindrot/jbcrypt "0.3m"]
                  [org.apache.sanselan/sanselan "0.97-incubator"]
                  [image-resizer "0.1.6"]]