Indentation fixes

Indentation fixes

--- src/terraboot/vpc.clj
+++ src/terraboot/vpc.clj
@@ -47,12 +47,12 @@
     (apply merge-in
            (map
             (apply comp
-                       (map #(partial (fn [type resource] (update-in resource [:resource type] (fn [spec] (add-to-every-value-map spec :vpc_id vpc-id)))) %)
-                           ["aws_security_group"
-                            "aws_internet_gateway"
-                            "aws_subnet"
-                            "aws_route_table"]))
-                resources))))
+                   (map #(partial (fn [type resource] (update-in resource [:resource type] (fn [spec] (add-to-every-value-map spec :vpc_id vpc-id)))) %)
+                        ["aws_security_group"
+                         "aws_internet_gateway"
+                         "aws_subnet"
+                         "aws_route_table"]))
+            resources))))

 (defn vpn-user-data [vars]
   (cloud-config {:package_update true
@@ -94,107 +94,107 @@

 (def vpc-vpn-infra
   (merge-in
-            (resource "aws_vpc" vpc-name
-                      {:tags {:Name vpc-name}
-                       :cidr_block vpc-cidr-block})
-
-
-            (in-vpc vpc-name
-                    (aws-instance "vpn" {
-                                         :user_data (vpn-user-data {:range-start (cidr-start vpc-cidr-block)
-                                                                    :fallback-dns (fallback-dns vpc-cidr-block)})
-                                         :subnet_id (id-of "aws_subnet" "public-b")
-                                         :ami "ami-bc5b48d0"
-                                         :vpc_security_group_ids [(id-of "aws_security_group" "vpn")
-                                                                  (id-of "aws_security_group" "allow_outbound")
-                                                                  ]
-                                         :associate_public_ip_address true
-                                         })
-                    (security-group "allow_outbound" {}
-                                    {:type "egress"
-                                     :from_port 0
-                                     :to_port 0
-                                     :protocol -1
-                                     :cidr_blocks [all-external]
-                                     })
-
-                    (security-group "allow_external_http_https" {}
-                                    {:from_port 80
-                                     :to_port 80
-                                     :cidr_blocks [all-external]
-                                     }
-                                    {:from_port 443
-                                     :to_port 443
-                                     :cidr_blocks [all-external]})
-
-                    (security-group "vpn" {}
-                                    {:from_port 22
-                                     :to_port 22
-                                     :cidr_blocks [all-external]}
-                                    {:from_port 1194
-                                     :to_port 1194
-                                     :protocol "udp"
-                                     :cidr_blocks [all-external]})
-
-                    (security-group "allow-all-tcp-within-public-subnet" {}
-                                    {:from_port 0
-                                     :to_port 65535
-                                     :cidr_blocks (vals (:public cidr-block))})
-
-                    (security-group "allow-all-udp-within-public-subnet" {}
-                                    {:from_port 0
-                                     :to_port 65535
-                                     :protocol "udp"
-                                     :cidr_blocks (vals (:public cidr-block))})
-
-                    (security-group "allow-icmp-within-public-subnet" {}
-                                    {:from_port 0
-                                     :to_port 65535
-                                     :protocol "udp"
-                                     :cidr_blocks (vals (:public cidr-block))})
-
-                    (resource "aws_internet_gateway" vpc-name
-                              {:tags {:Name "main"}})
-
-                    (resource "aws_route_table" "public" {:tags { :Name "public"}
-                                                          :route { :cidr_block all-external
-                                                                  :gateway_id (id-of "aws_internet_gateway" vpc-name)}
-                                                          :vpc_id (id-of "aws_vpc" vpc-name)})
-
-                    ;; Public Subnets
-                    (resource-seq
-                     (apply concat
-                            (for [az azs]
-                              (let [subnet-name (stringify "public" "-" az)
-                                    nat-eip (stringify subnet-name "-nat")]
-                                [["aws_subnet" subnet-name {:tags {:Name subnet-name}
-                                                            :cidr_block (get-in cidr-block [:public az])
-                                                            :availability_zone (stringify region az)
-                                                            }]
-                                 ["aws_route_table_association" subnet-name {:route_table_id (id-of "aws_route_table" "public")
-                                                                             :subnet_id (id-of "aws_subnet" subnet-name)
-                                                                             }]
-                                 ["aws_nat_gateway" subnet-name {:allocation_id (id-of "aws_eip" nat-eip)
-                                                                 :subnet_id  (id-of "aws_subnet" subnet-name)}]
-
-                                 ["aws_eip" nat-eip {:vpc true}]])
-                              )))
-                    ;; Private Subnets
-
-                    (resource-seq
-                     (apply concat
-                            (for [az azs]
-                              (let [subnet-name (stringify "private-" az)
-                                    public-subnet-name (stringify "public-" az)]
-                                [["aws_subnet" subnet-name {:tags {:Name subnet-name}
-                                                            :cidr_block (get-in cidr-block [:private az])
-                                                            :availability_zone (stringify region az)
-                                                            }]
-                                 ["aws_route_table" subnet-name {:tags {:Name subnet-name}
-                                                                 :route {:cidr_block all-external
-                                                                         :nat_gateway_id (id-of "aws_nat_gateway" public-subnet-name)}}
-
-                                  ]
-                                 ["aws_route_table_association" subnet-name {:route_table_id (id-of "aws_route_table" subnet-name)
-                                                                             :subnet_id (id-of "aws_subnet" subnet-name)
-                                                                             }]])))))))
+   (resource "aws_vpc" vpc-name
+             {:tags {:Name vpc-name}
+              :cidr_block vpc-cidr-block})
+
+
+   (in-vpc vpc-name
+           (aws-instance "vpn" {
+                                :user_data (vpn-user-data {:range-start (cidr-start vpc-cidr-block)
+                                                           :fallback-dns (fallback-dns vpc-cidr-block)})
+                                :subnet_id (id-of "aws_subnet" "public-b")
+                                :ami "ami-bc5b48d0"
+                                :vpc_security_group_ids [(id-of "aws_security_group" "vpn")
+                                                         (id-of "aws_security_group" "allow_outbound")
+                                                         ]
+                                :associate_public_ip_address true
+                                })
+           (security-group "allow_outbound" {}
+                           {:type "egress"
+                            :from_port 0
+                            :to_port 0
+                            :protocol -1
+                            :cidr_blocks [all-external]
+                            })
+
+           (security-group "allow_external_http_https" {}
+                           {:from_port 80
+                            :to_port 80
+                            :cidr_blocks [all-external]
+                            }
+                           {:from_port 443
+                            :to_port 443
+                            :cidr_blocks [all-external]})
+
+           (security-group "vpn" {}
+                           {:from_port 22
+                            :to_port 22
+                            :cidr_blocks [all-external]}
+                           {:from_port 1194
+                            :to_port 1194
+                            :protocol "udp"
+                            :cidr_blocks [all-external]})
+
+           (security-group "allow-all-tcp-within-public-subnet" {}
+                           {:from_port 0
+                            :to_port 65535
+                            :cidr_blocks (vals (:public cidr-block))})
+
+           (security-group "allow-all-udp-within-public-subnet" {}
+                           {:from_port 0
+                            :to_port 65535
+                            :protocol "udp"
+                            :cidr_blocks (vals (:public cidr-block))})
+
+           (security-group "allow-icmp-within-public-subnet" {}
+                           {:from_port 0
+                            :to_port 65535
+                            :protocol "udp"
+                            :cidr_blocks (vals (:public cidr-block))})
+
+           (resource "aws_internet_gateway" vpc-name
+                     {:tags {:Name "main"}})
+
+           (resource "aws_route_table" "public" {:tags { :Name "public"}
+                                                 :route { :cidr_block all-external
+                                                         :gateway_id (id-of "aws_internet_gateway" vpc-name)}
+                                                 :vpc_id (id-of "aws_vpc" vpc-name)})
+
+           ;; Public Subnets
+           (resource-seq
+            (apply concat
+                   (for [az azs]
+                     (let [subnet-name (stringify "public" "-" az)
+                           nat-eip (stringify subnet-name "-nat")]
+                       [["aws_subnet" subnet-name {:tags {:Name subnet-name}
+                                                   :cidr_block (get-in cidr-block [:public az])
+                                                   :availability_zone (stringify region az)
+                                                   }]
+                        ["aws_route_table_association" subnet-name {:route_table_id (id-of "aws_route_table" "public")
+                                                                    :subnet_id (id-of "aws_subnet" subnet-name)
+                                                                    }]
+                        ["aws_nat_gateway" subnet-name {:allocation_id (id-of "aws_eip" nat-eip)
+                                                        :subnet_id  (id-of "aws_subnet" subnet-name)}]
+
+                        ["aws_eip" nat-eip {:vpc true}]])
+                     )))
+           ;; Private Subnets
+
+           (resource-seq
+            (apply concat
+                   (for [az azs]
+                     (let [subnet-name (stringify "private-" az)
+                           public-subnet-name (stringify "public-" az)]
+                       [["aws_subnet" subnet-name {:tags {:Name subnet-name}
+                                                   :cidr_block (get-in cidr-block [:private az])
+                                                   :availability_zone (stringify region az)
+                                                   }]
+                        ["aws_route_table" subnet-name {:tags {:Name subnet-name}
+                                                        :route {:cidr_block all-external
+                                                                :nat_gateway_id (id-of "aws_nat_gateway" public-subnet-name)}}
+
+                         ]
+                        ["aws_route_table_association" subnet-name {:route_table_id (id-of "aws_route_table" subnet-name)
+                                                                    :subnet_id (id-of "aws_subnet" subnet-name)
+                                                                    }]])))))))


bump it

bump it


Fix issue found by tests

Fix issue found by tests

--- src/useful/string.clj
+++ src/useful/string.clj
@@ -39,4 +39,4 @@
     (let [idx (.lastIndexOf s delim)]
       (if (neg? idx)
         s ;; no match
-        (subs s (inc idx))))))
+        (subs s (+ (.length delim) idx))))))


Implemented 'subtract 1' and general subtraction.

--- SICP/ex_2_6.clj
+++ SICP/ex_2_6.clj
@@ -4,20 +4,37 @@

 (def zero (fn [f] (fn [x] x)))

-(defn add-1 [n]
-    (fn [f] (fn [x] (f ((n f) x)))))
+; increment by one
+(def add-1
+    (fn [n] (fn [f] (fn [x] (f ((n f) x))))))

-(defn one [f] (fn [x] (f x)))
+; equivalent to (add-1 zero)
+(def one (fn [f] (fn [x] (f x))))

-(defn two [f] (fn [x] (f (f x))))
+; equivalent to (add-1 (add-1 zero))
+(def two (fn [f] (fn [x] (f (f x)))))

-(defn add [a b]
-    (fn [f] (fn [x] ((a f) ((b f) x)))))
+; direct addition, without use of add-1
+(def add (fn [a b] (fn [f] (fn [x] ((a f) ((b f) x))))))

+; decrement by one (not part of the exercise)
+(def dec-1
+    (fn [n] (fn [f] (fn [x] (((n (fn [g] (fn [h] (h (g f))))) (fn [u] x)) (fn [u] u))))))
+
+; subtraction (not part of the exercise)
+(def sub (fn [a b] ((b dec-1) a)))
+
+; Convenience to convert to normal primitive integer
+(defn to-int [n] ((n inc) 0))
+
+; Some tests
 (println
-    (((add-1 (add-1 (add-1 (add-1 zero)))) inc) 0)
-    ((one inc) 0)
-    ((two inc) 0)
-    (((add one two) inc) 0)
-    (((add (add-1 (add-1 (add-1 zero))) (add-1 (add-1 zero))) inc) 0))
+    (to-int (add-1 (add-1 (add-1 (add-1 zero))))) ; 4
+    (to-int one) ; 1
+    (to-int two) ; 2
+    (to-int (dec-1 two)) ; 1
+    (to-int (add one two)) ; 3
+    (to-int (add (add-1 (add-1 (add-1 zero))) (add-1 (add-1 zero)))) ; 5
+    (to-int (sub (add-1 (add-1 (add-1 (add-1 zero)))) (add-1 (add-1 zero)))) ; 2
+)


Add button to resend API call

Add button to resend API call

--- src/discuss/debug.cljs
+++ src/discuss/debug.cljs
@@ -10,6 +10,9 @@
       (dom/div nil
                (dom/h4 nil "Last API call")
                (dom/pre nil (get-in data [:debug :last-api]))
+               (dom/button #js {:className "btn btn-default"
+                                :onClick #(discuss.communication/ajax-get (get-in data [:debug :last-api]))}
+                           "Resend API Call")

                (dom/h4 nil "Last response")
                (dom/pre nil


Make functions mutually recursive

Make functions mutually recursive

--- src/expound/paths.cljc
+++ src/expound/paths.cljc
@@ -187,6 +187,8 @@
                        :in' in'}))
       res)))

+(declare compare-paths)
+
 (defn compare-path-segment [x y]
   (cond
     (and (int? x) (kvps? y))
@@ -202,9 +204,7 @@
     1

     (and (vector? x) (vector? y))
-    (->> (map compare-path-segment x y)
-         (remove #{0})
-         first)
+    (compare-paths x y)

     :else
     (compare x y)))


[PDOK-1949] created a j/prepare-statement with a j/get-connection that has .setAutoCommit false (j = clojure.hava.jdbc). Now cursors are created by the postgresql and the data is collected in batches.

--- src/main/clojure/pdok/featured/timeline.clj
+++ src/main/clojure/pdok/featured/timeline.clj
@@ -105,7 +105,8 @@

 (defn- execute-query-result-on-channel [timeline query rc]
   (try (j/with-db-connection [c (:db timeline)]
-         (j/query c [query] :row-fn (partial feature-on-channel rc))
+         (let [statement (j/prepare-statement (doto (j/get-connection c) (.setAutoCommit false)) query :fetch-size *batch-size-read*)]
+           (j/query c [statement] :row-fn (partial feature-on-channel rc)) )
          (close! rc))
        (catch java.sql.SQLException e
           (log/with-logs ['pdok.featured.timeline :error :error] (j/print-sql-exception-chain e)))))


Measuring linux-historical over time still leads to cyclic dates

--- src/atom_finder/questions/code_age.clj
+++ src/atom_finder/questions/code_age.clj
@@ -134,14 +134,14 @@
 ;(def code-age-repo linux-historical-repo)

 '((-<>>
- ;["981a2edd1922c00e747680f30734ea50c86af28d"
- ; "747aead34de65c25765da79825ce2c08d8257b10"
- ; "1737992523930995ae7ee67cc9da87952c01aebc"
- ; "9b75471204ab8339eee7156e8f93959b9cfb0347"]
- ;(map (partial rev-walk-from linux-historical-repo))
- ;(apply concat)
- "476ea17a1752df3ca32ae996e3c88f42f00ecc3a"
- (rev-walk-from code-age-repo)
+ ["981a2edd1922c00e747680f30734ea50c86af28d"
+  "747aead34de65c25765da79825ce2c08d8257b10"
+  "1737992523930995ae7ee67cc9da87952c01aebc"
+  "9b75471204ab8339eee7156e8f93959b9cfb0347"]
+ (map (partial rev-walk-from code-age-repo)) ;; linux-historical repo
+ (apply concat)
+ ;"476ea17a1752df3ca32ae996e3c88f42f00ecc3a"
+ ;(rev-walk-from code-age-repo) ; gcc-repo
  (partition-by (fn [rc] (-> rc year-month (update-in [1] #(int (/ (dec %) 3))))))
  (map last)
  (monotize-by (comp (partial < 0) compare) year-month)
@@ -157,7 +157,7 @@
  ;(take 3)
  (map prn)
  dorun
- (log-to "tmp/code-age_gcc_2017-11-05_01_no-macro-exps.edn")
+ (log-to "tmp/code-age_linux-historical_2017-11-07_01_no-macro-exps.edn")
  time-mins
  ))


Add wondering comment

Add wondering comment

--- src/braid/client/ui/styles/thread.cljs
+++ src/braid/client/ui/styles/thread.cljs
@@ -133,6 +133,7 @@
     {:content "\"\""
      :flex-grow 1}]

+   ;; XXX: does this class actually apply to anything?
    [:&.archived :&.limbo :&.private
     [:>.head::before
      {:content "\"\""


Bumped logging version

Bumped logging version


bump version to 3.3.0 (#155)

bump version to 3.3.0 (#155)


lein-release plugin: preparing 0.14 release


Update tools.reader

Update tools.reader


Updated dependencies for the administrative console.

--- project.clj
+++ project.clj
@@ -4,12 +4,19 @@
                  "snapshots" "https://github.com/gcv/maven-repository/raw/master/snapshots/"}
   :dependencies [[org.clojure/clojure "1.2.0"]
                  [ring/ring-core "0.3.5"]
+                 [org.apache.commons/commons-exec "1.1"]
+                 ;; App Engine supporting essentials
                  [javax.servlet/servlet-api "2.5"]
                  [commons-io "1.4"]
                  [commons-codec "1.4"]
                  [commons-fileupload "1.2.1"]
+                 ;; App Engine administrative interface support
+                 [tomcat/jasper-runtime "5.0.28"]
+                 [org.apache.geronimo.specs/geronimo-jsp_2.1_spec "1.0.1"]
+                 [jstl "1.1.2"] ; repackaged-appengine-jakarta-jstl-1.1.2.jar
+                 [taglibs/standard "1.1.2"] ; repackaged-appengine-jakarta-standard-1.1.2.jar
                  [commons-el "1.0"]
-                 [org.apache.commons/commons-exec "1.1"]
+                 ;; main App Engine libraries
                  [com.google.appengine/appengine-api-1.0-sdk "1.3.8"]
                  [com.google.appengine/appengine-api-labs "1.3.8"]
                  [com.google.appengine/appengine-api-stubs "1.3.8"]


Figwheel config bug

Figwheel config bug

--- project.clj
+++ project.clj
@@ -52,7 +52,7 @@
               :cljsbuild
               {:builds
                {:create-group
-                {:figwheel true
+                {:figwheel {:on-jsload "skuld.create-group.app/init"}
                  :compiler {:main skuld.create-group.app
                             :optimizations :none}}
                 :groups


Version 0.4.12

Version 0.4.12

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject kixi/terraboot "0.4.12-SNAPSHOT"
+(defproject kixi/terraboot "0.4.12"
   :description "Terraform modules for kixi framework"
   :url "http://example.com/FIXME"
   :license {:name "Eclipse Public License"


Update JavaMail 1.6.2

Update JavaMail 1.6.2

--- project.clj
+++ project.clj
@@ -7,8 +7,8 @@
             :comments "Use at your own risk"}
   :deploy-repositories [["releases" :clojars]]
   :dependencies [[commons-codec "1.9"]
-                 [com.sun.mail/javax.mail "1.5.5"]
-                 [javax.mail/javax.mail-api "1.5.5"]]
+                 [com.sun.mail/javax.mail "1.6.2"]
+                 [javax.mail/javax.mail-api "1.6.2"]]
   :global-vars {*warn-on-reflection* true}
   :profiles {:dev {:dependencies []}
              :1.7 {:dependencies [[org.clojure/clojure "1.7.0"]]}


Added Travis tests

Added Travis tests

--- project.clj
+++ project.clj
@@ -1,13 +1,13 @@
-(defproject om-semantic "0.1.2-SNAPSHOT"
+(defproject om-semantic "0.1.3-SNAPSHOT"
   :description "A collection of om-components with the css from Semantic UI"
   :url "https://github.com/vikeri/om-semantic"
   :license {:name "Eclipse Public License"
             :url "http://www.eclipse.org/legal/epl-v10.html"}

-  :dependencies [[org.clojure/clojure "1.7.0-RC2"]
+  :dependencies [[org.clojure/clojure "1.7.0"]
                  [org.clojure/clojurescript "0.0-3308"]
                  [org.clojure/core.async "0.1.346.0-17112a-alpha"]
-                 [cljs-react-test "0.1.1-SNAPSHOT"]
+                 [cljs-react-test "0.1.2-SNAPSHOT"]
                  [org.omcljs/om "0.8.8" :exclusions [cljsjs/react]]]

   :plugins [[lein-cljsbuild "1.0.5"]


Update dependency.

Update dependency.

--- project.clj
+++ project.clj
@@ -24,7 +24,7 @@
                  [com.climate/claypoole "1.1.0"]
                  [org.clojars.brunchboy/protobuf "0.8.3"]
                  [ola-clojure "0.1.2"]
-                 [selmer "0.9.4"]
+                 [selmer "0.9.5"]
                  [com.evocomputing/colors "1.0.3"]
                  [environ "1.0.1"]
                  [camel-snake-kebab "0.3.2"]


Bump 2.2.10

Bump 2.2.10


working on 1.1.4

working on 1.1.4


bump to 0.3.3-SNAPSHOT

bump to 0.3.3-SNAPSHOT

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject yieldbot/flambo "0.3.2"
+(defproject yieldbot/flambo "0.3.3-SNAPSHOT"
   :description "A Clojure DSL for Apache Spark"
   :url "https://github.com/yieldbot/flambo"
   :license {:name "Eclipse Public License"


Bump version to 3.11.0-SNAPSHOT

Bump version to 3.11.0-SNAPSHOT

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject clj-http "3.10.4-SNAPSHOT"
+(defproject clj-http "3.11.0-SNAPSHOT"
   :description "A Clojure HTTP library wrapping the Apache HttpComponents client."
   :url "https://github.com/dakrone/clj-http/"
   :license {:name "The MIT License"


Version 0.1.0

Version 0.1.0

--- project.clj
+++ project.clj
@@ -6,7 +6,7 @@
                        "Using empty encryption key."))
          "00000000000000000000000000000000")))

-(defproject foreclojure-android/foreclojure-android "0.1.0-SNAPSHOT"
+(defproject foreclojure-android/foreclojure-android "0.1.0"
   :description "Android client for 4clojure.com"
   :url "https://github.com/alexander-yakushev/foreclojure-android"
   :license {:name "Eclipse Public License"


Fixes uberjar profile

Fixes uberjar profile


return-tagspace-fix

return-tagspace-fix

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject lspector/clojush "1.2.29"
+(defproject lspector/clojush "1.2.30"
             :description "The Push programming language and the PushGP genetic programming
                           system implemented in Clojure.
                           See http://hampshire.edu/lspector/push.html"


set version

set version


supress checkouts errors

supress checkouts errors

--- project.clj
+++ project.clj
@@ -64,12 +64,10 @@
               {:client
                {:source-paths ["src/dat/sys/client"
                                "dev"
-
-                               ;; If you want to develop another dat* lib download the lib into checkouts as described in the README and uncomment:
-                               ;;"checkouts/datview/src"
-                               ;;"checkouts/datsync/src"
-                               ;;"checkouts/datreactor/src"
-                               ;;"checkouts/datspec/src"
+                               "checkouts/datview/src"
+                               "checkouts/datsync/src"
+                               "checkouts/datreactor/src"
+                               "checkouts/datspec/src"
                                ]
                 :figwheel {:on-jsload "dat.sys.dev.start/on-js-reload"}


Prepare for 0.5.5

Prepare for 0.5.5

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject reiddraper/simple-check "0.5.4"
+(defproject reiddraper/simple-check "0.5.5-SNAPSHOT"
   :description "A QuickCheck inspired property-based testing library."
   :url "http://github.com/reiddraper/simple-check"
   :license {:name "Eclipse Public License"


adjusting nimbus version

adjusting nimbus version


Version 0.1.2-SNAPSHOT

Version 0.1.2-SNAPSHOT

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject lambdacd-git "0.1.1"
+(defproject lambdacd-git "0.1.2-SNAPSHOT"
   :description "Git support for LambdaCD"
   :url "https://github.com/flosell/lambdacd-git"
   :license {:name "Apache License, version 2.0"


use simple optimizations to make sure event bindings for typeahead arent optimized away | fs | #39

--- project.clj
+++ project.clj
@@ -114,5 +114,7 @@
                                    :builds {:app
                                              {:source-paths ["env/prod/cljs"]
                                               :compiler
-                                              {:optimizations :advanced
+                                              {; don't use advanced optimizations here without checking that jumping to search results still works (#39),
+                                               ; apparently agressive optimizations optimize bindings for typeahead:select away as dead code
+                                               :optimizations :simple
                                                :pretty-print false}}}}}})


Promote to release version.

Promote to release version.

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject reforms "0.3.0-SNAPSHOT"
+(defproject reforms "0.3.0"
             :description "Form helpers for React-based Clojurescript libraries."
             :url "http://bilus.github.io/reforms/"
             :license {:name "Eclipse Public License"


going to release

going to release

--- project.clj
+++ project.clj
@@ -6,7 +6,7 @@
   :dependencies [[dda/dda-pallet "2.2.2"]
                  [dda/dda-serverspec-crate "1.2.2"]
                  [dda/dda-user-crate "1.0.5"]
-                 [dda/dda-git-crate "2.1.1"]
+                 [dda/dda-git-crate "2.1.3"]
                  [dda/dda-backup-crate "1.0.5"]]
   :source-paths ["main/src"]
   :resource-paths ["main/resources"]


Version 2.0.46 [ci skip]

Version 2.0.46 [ci skip]

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject clojush "2.0.46-SNAPSHOT"
+(defproject clojush "2.0.46"
   :description "The Push programming language and the PushGP genetic programming
                 system implemented in Clojure.
                 See http://hampshire.edu/lspector/push.html"


Version 0.2.0

Version 0.2.0


Bump to 0.4.2-SNAPSHOT

Bump to 0.4.2-SNAPSHOT

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


Upgrade to 0.10.0-beta4.

Upgrade to 0.10.0-beta4.

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


Next development version

Next development version

--- project.clj
+++ project.clj
@@ -1,6 +1,6 @@
 ;; Copyright © 2016, JUXT LTD.

-(defproject tick "0.3.0"
+(defproject tick "0.3.1-SNAPSHOT"
   :description "A Clojure library that deals with time"
   :url "https://github.com/juxt/tick"
   :license {:name "The MIT License"


Version 0.3.8

Version 0.3.8

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


Upgrade dependencies

Upgrade dependencies

--- project.clj
+++ project.clj
@@ -7,13 +7,13 @@
                  [buddy/buddy-core "1.10.413"]
                  [buddy/buddy-hashers "1.8.158"]
                  [buddy/buddy-sign "3.4.333"]
-                 [ch.qos.logback/logback-classic "1.2.11"]
+                 [ch.qos.logback/logback-classic "1.4.0"]
                  [cljs-ajax "0.8.4"]
                  [clojure.java-time "0.3.3"]
                  [com.cognitect/transit-clj "1.0.329"]
-                 [com.cognitect/transit-cljs "0.8.269"]
+                 [com.cognitect/transit-cljs "0.8.280"]
                  [com.google.javascript/closure-compiler-unshaded "v20220502"]
-                 [com.google.protobuf/protobuf-java "3.8.0"]
+                 [com.google.protobuf/protobuf-java "3.21.5"]
                  [conman "0.9.4"]
                  [cprop "0.1.19"]
                  [day8.re-frame/http-fx "0.2.4"]
@@ -27,10 +27,10 @@
                  [markdown-clj "1.11.1"]
                  [medley "1.4.0"]
                  [metosin/muuntaja "0.6.8"]
-                 [metosin/reitit "0.5.15"]
+                 [metosin/reitit "0.5.18"]
                  [metosin/ring-http-response "0.9.3"]
                  [mount "0.1.16"]
-                 [mysql/mysql-connector-java "8.0.29"]
+                 [mysql/mysql-connector-java "8.0.30"]
                  [nrepl "0.9.0"]
                  [org.clojure/clojure "1.11.1"]
                  [org.clojure/clojurescript "1.11.51" :scope "provided"]
@@ -39,19 +39,19 @@
                  [org.clojure/tools.logging "1.2.4"]
                  [org.webjars.npm/bulma "0.9.4"]
                  [org.webjars.npm/material-icons "1.10.8"]
-                 [org.webjars/webjars-locator "0.42"]
+                 [org.webjars/webjars-locator "0.45"]
                  [org.webjars/webjars-locator-jboss-vfs "0.1.0"]
                  [re-frame "1.2.0"]
                  [reagent "1.1.1"]
                  [ring-webjars "0.2.0"]
                  [ring/ring-core "1.9.5"]
                  [ring/ring-defaults "0.3.3"]
-                 [selmer "1.12.52"]
+                 [selmer "1.12.53"]
                  [thheller/shadow-cljs "2.19.0" :scope "provided"]
                  [com.thaiopensource/jing "20091111" :exclusions [xml-apis]]
                  [com.taoensso/tempura "1.3.0"]
                  [org.clojure/data.xml "0.2.0-alpha6"]
-                 [babashka/fs "0.1.6"]
+                 [babashka/fs "0.1.11"]
                  [pandect "1.0.2"]
                  [org.clojure/data.zip "1.0.0"]
                  [com.novemberain/pantomime "2.11.0" :exclusions [com.google.guava/guava]]


Version 0.0.6-SNAPSHOT

Version 0.0.6-SNAPSHOT

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject pe-core-utils "0.0.5"
+(defproject pe-core-utils "0.0.6-SNAPSHOT"
   :description "A Clojure library providing a set of helper functions."
   :url "https://github.com/evanspa/pe-core-utils"
   :license {:name "MIT"


Version 1.7.2

Version 1.7.2

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


(maint) Bump to 7.3.0-SNAPSHOT to prep for Y release

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(def ps-version "7.2.2-SNAPSHOT")
+(def ps-version "7.3.0-SNAPSHOT")

 (defn deploy-info
   [url]


Load user-init file earlier so aliases may be set.

--- src/leiningen/core.clj
+++ src/leiningen/core.clj
@@ -115,7 +115,7 @@
            (println "Warning: problem requiring hooks:" (.getMessage e))
            (println "...continuing without hooks completely loaded.")))))

-(defn user-init [project]
+(defn user-init []
   (let [init-file (File. (home-dir) "init.clj")]
     (when (.exists init-file)
       (load-file (.getAbsolutePath init-file)))))
@@ -202,12 +202,12 @@

 (defn -main
   ([& [task-name & args]]
+     (user-init)
      (let [task-name (or (@aliases task-name) task-name "help")
            project (if (.exists (File. "project.clj")) (read-project))
            compile-path (:compile-path project)]
        (when (:min-lein-version project)
          (verify-min-version project))
-       (user-init project)
        (when compile-path (.mkdirs (File. compile-path)))
        (binding [*compile-path* compile-path]
          (when project


initial work on handing the :figwheel config for a build

--- sidecar/src/figwheel_sidecar/config.clj
+++ sidecar/src/figwheel_sidecar/config.clj
@@ -159,12 +159,63 @@
   (mapv ensure-output-dirs* builds)
   builds)

+(defn figwheel-client-options [{:keys [figwheel]}]
+  (if figwheel
+    (if-not (map? figwheel) {} figwheel)
+    {}))
+
+(comment
+  (figwheel-client-options {:figwheel {:hey 1}})
+
+  (figwheel-client-options {:figwheel true})
+
+  )
+
+(defn fix-figwheel-symbol-keys [figwheel]
+  (into {} (map (fn [[k v]] [k (if (symbol? v) (name v) v)]) figwheel)))
+
+(defn append-build-id [figwheel build]
+  (if (:id build)
+    (assoc figwheel :build-id (:id build))
+    figwheel))
+
+(defn prep-build-for-figwheel-client [{:keys [figwheel] :as build}]
+  (if figwheel
+    (assoc build :figwheel
+           (-> (figwheel-client-options build)
+             (append-build-id build)
+             (fix-figwheel-symbol-keys)))
+    build))
+
+(defn prep-builds-for-figwheel-client [builds]
+  (mapv prep-build-for-figwheel-client builds))
+
+(comment
+  (fix-figwheel-symbol-keys {:on-jsload 'asdfasdf
+                             :hey 5})
+
+  (prep-build-for-figwheel-client {})
+
+  (prep-build-for-figwheel-client { :figwheel true})
+
+  (prep-build-for-figwheel-client { :id "hey" :figwheel true})
+
+  (prep-build-for-figwheel-client { :id "hey" :figwheel {:on-jsload 'heyhey.there :hey 5}})
+
+)
+
 (defn prep-builds [builds]
   (-> builds
       map-to-vec-builds
       fix-builds
+      prep-builds-for-figwheel-client
       ensure-output-dirs
       no-seqs))
+
+#_(defn prep-build-for-figwheel-client [build]
+
+  )
+

 (defn prep-options
   "Normalize various configuration input."


converted client.clj to unix file endings

--- src/clj_ldap/client.clj
+++ src/clj_ldap/client.clj
@@ -1,47 +1,47 @@
 (ns clj-ldap.client
   "LDAP client"
-  (:refer-clojure :exclude [get])
-  (:require [clojure.string :as string])
-  (:import [com.unboundid.ldap.sdk
-            LDAPResult
-            LDAPConnectionOptions
-            LDAPConnection
-            ResultCode
-            LDAPConnectionPool
-            LDAPException
-            Attribute
-            Entry
-            ModificationType
-            ModifyRequest
-            Modification
-            DeleteRequest
-            SimpleBindRequest
-            RoundRobinServerSet
-            SearchRequest
-            LDAPEntrySource
-            EntrySourceException
-            SearchScope
-            DereferencePolicy])
-  (:import [com.unboundid.ldap.sdk.extensions
-            PasswordModifyExtendedRequest
-            PasswordModifyExtendedResult])
-  (:import [com.unboundid.ldap.sdk.controls
-            PreReadRequestControl
-            PostReadRequestControl
-            PreReadResponseControl
-            PostReadResponseControl
-            SimplePagedResultsControl])
-  (:import [com.unboundid.util
-            Base64])
-  (:import [com.unboundid.util.ssl
-            SSLUtil
-            TrustAllTrustManager
+  (:refer-clojure :exclude [get])
+  (:require [clojure.string :as string])
+  (:import [com.unboundid.ldap.sdk
+            LDAPResult
+            LDAPConnectionOptions
+            LDAPConnection
+            ResultCode
+            LDAPConnectionPool
+            LDAPException
+            Attribute
+            Entry
+            ModificationType
+            ModifyRequest
+            Modification
+            DeleteRequest
+            SimpleBindRequest
+            RoundRobinServerSet
+            SearchRequest
+            LDAPEntrySource
+            EntrySourceException
+            SearchScope
+            DereferencePolicy])
+  (:import [com.unboundid.ldap.sdk.extensions
+            PasswordModifyExtendedRequest
+            PasswordModifyExtendedResult])
+  (:import [com.unboundid.ldap.sdk.controls
+            PreReadRequestControl
+            PostReadRequestControl
+            PreReadResponseControl
+            PostReadResponseControl
+            SimplePagedResultsControl])
+  (:import [com.unboundid.util
+            Base64])
+  (:import [com.unboundid.util.ssl
+            SSLUtil
+            TrustAllTrustManager
             TrustStoreTrustManager]))

 ;;======== Helper functions ====================================================

-(def not-nil? (complement nil?))
-
+(def not-nil? (complement nil?))
+
 (defn encode [attr]
   (if (.needsBase64Encoding attr)
     (Base64/encode (.getValueByteArray attr))
@@ -251,33 +251,33 @@
   (if-let [n (.nextEntry source)]
     (cons n (lazy-seq (entry-seq source)))))

-;; Extended version of search-results function using a
-;; SearchRequest that uses a SimplePagedResultsControl.
-;; Allows us to read arbitrarily large result sets.
-;; TODO make this lazy
-(defn- search-all-results
-  "Returns a sequence of search results via paging so we don't run into
-   size limits with the number of results."
-  [connection {:keys [base scope filter attributes]}]
-  (let [sizeLimit 500
-        timeLimit 60
-        cookie nil
-        req (SearchRequest. base scope filter attributes)]
-    (loop [results []
-           cookie nil]
-      (.setControls req (list (SimplePagedResultsControl. sizeLimit cookie)))
-      (let [res (.search connection req)
-            control (SimplePagedResultsControl/get res)
-            newres (->> (.getSearchEntries res)
-                     (map entry-as-map)
-                     (remove empty?)
-                     (into results))]
-        (if (and
-              (not-nil? control)
-              (> (.getValueLength (.getCookie control)) 0))
-          (recur newres (.getCookie control))
-          (seq newres))))))
-
+;; Extended version of search-results function using a
+;; SearchRequest that uses a SimplePagedResultsControl.
+;; Allows us to read arbitrarily large result sets.
+;; TODO make this lazy
+(defn- search-all-results
+  "Returns a sequence of search results via paging so we don't run into
+   size limits with the number of results."
+  [connection {:keys [base scope filter attributes]}]
+  (let [sizeLimit 500
+        timeLimit 60
+        cookie nil
+        req (SearchRequest. base scope filter attributes)]
+    (loop [results []
+           cookie nil]
+      (.setControls req (list (SimplePagedResultsControl. sizeLimit cookie)))
+      (let [res (.search connection req)
+            control (SimplePagedResultsControl/get res)
+            newres (->> (.getSearchEntries res)
+                     (map entry-as-map)
+                     (remove empty?)
+                     (into results))]
+        (if (and
+              (not-nil? control)
+              (> (.getValueLength (.getCookie control)) 0))
+          (recur newres (.getCookie control))
+          (seq newres))))))
+
 (defn- search-results
   "Returns a sequence of search results for the given search criteria."
   [connection {:keys [base scope filter attributes]}]
@@ -462,21 +462,21 @@
        (ldap-result
         (.delete connection delete-obj)))))

-(defn search-all
-  "Runs a search on the connected ldap server, reads all the results into
-   memory and returns the results as a sequence of maps.
-
-   Options is a map with the following optional entries:
-      :scope       The search scope, can be :base :one or :sub,
-                   defaults to :sub
-      :filter      A string describing the search filter,
-                   defaults to \"(objectclass=*)\"
-      :attributes  A collection of the attributes to return,
-                   defaults to all user attributes"
-  ([connection base]
-     (search-all connection base nil))
-  ([connection base options]
-     (search-all-results connection (search-criteria base options))))
+(defn search-all
+  "Runs a search on the connected ldap server, reads all the results into
+   memory and returns the results as a sequence of maps.
+
+   Options is a map with the following optional entries:
+      :scope       The search scope, can be :base :one or :sub,
+                   defaults to :sub
+      :filter      A string describing the search filter,
+                   defaults to \"(objectclass=*)\"
+      :attributes  A collection of the attributes to return,
+                   defaults to all user attributes"
+  ([connection base]
+     (search-all connection base nil))
+  ([connection base options]
+     (search-all-results connection (search-criteria base options))))

 (defn search
   "Runs a search on the connected ldap server, reads all the results into


goto-random, complex-flake, scenery

goto-random, complex-flake, scenery

--- src/clj_turtle/core.clj
+++ src/clj_turtle/core.clj
@@ -8,7 +8,7 @@
   [len]
   [:fwd len :left 180 :fwd len])

-(defn- arrow
+(defn- arrow-start
   [len]
   (let [fifth (/ len 5)
         tenth (/ len 10)]
@@ -33,12 +33,16 @@
      :left angle-c :fwd sector-len
      :right angle-d :fwd len]))

+(defn- arrow
+  [len]
+  (concat
+   (arrow-start len)
+   [:fwd (* len 7/10)
+    :right (* 2 base-angle)]))
+
 (defn simple-flake
   [len]
-  (let [single-arrow (concat
-                      (arrow len)
-                      [:fwd (* len 7/10)
-                       :right (* 2 base-angle)])
+  (let [single-arrow (arrow len)
         cycle-len (* 6 (count single-arrow))]
     (take cycle-len (cycle single-arrow))))

@@ -46,13 +50,41 @@
   [len star-len angle]
   (let [star-gap (- len star-len (* len 3/10))
         single-part (concat
-                     (arrow len)
+                     (arrow-start len)
                      [:fwd star-gap]
                      (sector angle star-len)
                      [:right base-angle])
         cycle-len (* 6 (count single-part))]
     (take cycle-len (cycle single-part))))

+(defn complex-flake
+  [len star-len angle]
+  (let [flake (flake len star-len angle)
+        small-arrow (arrow (* len 2/3))
+        cycle-len (* 6 (count small-arrow))
+        extra-arrows (take cycle-len (cycle small-arrow))]
+    (concat flake
+            [:right (/ base-angle 2)]
+            extra-arrows)))
+
+
+(defn goto-random
+  [min-distance max-distance]
+  (let [distance (+ min-distance (rand-int (- max-distance min-distance)))
+        angle (rand-int 360)]
+    [:pen :up
+     :right angle
+     :fwd distance
+     :pen :down]))
+
+(defn scenery
+  []
+  (concat
+   [:color :blue :right (rand-int 360)]
+   (flake 500 280 30)
+   (goto-random 600 1500)
+   (simple-flake 150)))
+
 (defn draw-svg [filename commands]
   (spit filename (draw! ->svg commands [200 200])))


Added rem mod and quot and tests. Refs. #83


initial support for loading dependencies

--- src/cljs/lumo/repl.cljs
+++ src/cljs/lumo/repl.cljs
@@ -8,11 +8,21 @@
             [clojure.string :as string]
             [cognitect.transit :as transit]))

+;; =============================================================================
+;; Globals

 (defonce ^:private st (cljs/empty-state))

 (defonce ^:private current-ns (volatile! 'cljs.user))

+(def ^:private ^:const could-not-eval-regex #"Could not eval")
+
+(def out-dir "target")
+
+(def src-paths [out-dir])
+
+(def fs (js/require "fs"))
+(def vm (js/require "vm"))

 ;; =============================================================================
 ;; Analysis cache
@@ -39,9 +49,188 @@
   (load-core-analysis-cache 'cljs.core "cljs/core.cljs.cache.aot.")
   (load-core-analysis-cache 'cljs.core$macros "cljs/core$macros.cljc.cache."))

+;; =============================================================================
+;; Dependency loading
+
+(defn- read-file-sync
+  [filename]
+  (try
+    (.readFileSync fs filename "utf8")
+    (catch :default _)))
+
+(defn- filename->lang
+  "Converts a filename to a lang keyword by inspecting the file
+  extension."
+  [filename]
+  (if (string/ends-with? filename ".js")
+    :js
+    :clj))
+
+(defn replace-extension
+  "Replaces the extension on a file."
+  [filename new-extension]
+  (string/replace filename #".clj[sc]?$" new-extension))
+
+(defn parse-edn
+  "Parses edn source to Clojure data."
+  [edn-source]
+  (reader/read-string edn-source))
+
+(defn filenames-to-try
+  "Produces a sequence of filenames to try reading, in the
+  order they should be tried."
+  [src-paths macros path]
+  (let [extensions (if macros
+                     [".clj" ".cljc"]
+                     [".cljs" ".cljc" ".js"])]
+    (for [extension extensions]
+      (str path extension))))
+
+(defn load-goog
+  "Loads a Google Closure implementation source file. `goog` namespaces are
+   actually already included in the bundle because we compile with simple
+   optimizations."
+  [name cb]
+  (cb {:source ""
+       :lang   :js}))
+
+(defn- skip-load-js?
+  "Indicates namespaces for which JS code is already loaded, but for which
+   we might need to load the corresponding analysis cache."
+  [name macros]
+  (and (not macros)
+    (#{'cljs.analyzer
+       'cljs.analyzer.api
+       'cljs.compiler
+       'cljs.env
+       'cljs.js
+       'cljs.reader
+       'cljs.source-map
+       'cljs.source-map.base64
+       'cljs.source-map.base64-vlq
+       'cljs.spec
+       'cljs.tagged-literals
+       'cljs.test
+       'cljs.tools.reader
+       'cljs.tools.reader.reader-types
+       'cljs.tools.reader.impl.commons
+       'cljs.tools.reader.impl.utils
+       'clojure.core.reducers
+       'clojure.string
+       'clojure.set
+       'clojure.zip
+       'clojure.walk
+       'cognitect.transit} name)))
+
+(defn- skip-load?
+  [name macros?]
+  ((if macros?
+     '#{cljs.core
+        cljs.js
+        cljs.pprint
+        cljs.env.macros
+        cljs.analyzer.macros
+        cljs.compiler.macros
+        cljs.tools.reader.reader-types}
+     '#{cljs.core
+        cljs.pprint})
+   name))
+
+(defn- load-bundled [path cb]
+  (when-let [cache-json (js/LUMO_LOAD (str path ".cache.json"))]
+    (cb {:source ""
+         :lang :js
+         :cache (transit-json->cljs cache-json)})
+    :loaded))
+
+(defn- load-external
+  "Reads the first filename in a sequence of supplied filenames,
+  using a supplied read-file-fn, calling back upon first successful
+  read, otherwise calling back with nil. Before calling back, first
+  attempts to read AOT artifacts (JavaScript and cache edn)."
+  [filename cb]
+  (let [filename (str out-dir "/" filename)]
+    (when-let [source (read-file-sync filename)]
+      (let [ret {:lang   (filename->lang filename)
+                 :file   filename
+                 :source source}]
+        (if (or (string/ends-with? filename ".cljs")
+                (string/ends-with? filename ".cljc"))
+          (if-let [javascript-source (read-file-sync (replace-extension filename ".js"))]
+            (if-let [cache-edn (read-file-sync (str filename ".cache.edn"))]
+              (cb {:lang   :js
+                   :source javascript-source
+                   :cache  (parse-edn cache-edn)})
+              (cb ret))
+            (cb ret))
+          (cb ret)))
+      :loaded)))
+
+(defn- load-and-cb!
+  [name path macros? cb]
+  (cond
+    (skip-load-js? name macros?)
+    (load-bundled path cb)
+
+    :else
+    (load-external path cb)))
+
+(defn- load-other [{:keys [name path macros file]} cb]
+  (loop [paths (filenames-to-try src-paths macros path)]
+    (if-let [path (first paths)]
+      (let [cb-res (load-and-cb! name path macros cb)]
+        (when-not cb-res
+            (recur (next paths))))
+      (cb nil))))
+
+(defn- load [{:keys [name macros path file] :as m} cb]
+  (cond
+    (skip-load? name macros)
+    (cb {:source ""
+         :lang :js})
+
+    (re-matches #"^goog/.*" path)
+    (load-goog name cb)
+
+    :else (load-other m cb)))
+
+(defn node-eval
+  "Evaluates JavaScript in node."
+  [{:keys [name source]}]
+  (if-not js/COMPILED
+    (.runInThisContext vm source (str (munge name) ".js"))
+    (js/eval source)))
+
+(defn- ^:boolean could-not-eval? [msg]
+  (boolean (re-find could-not-eval-regex msg)))
+
+(defn- handle-repl-error [error]
+  (let [message (ex-message error)
+        cause (ex-cause error)]
+    (cond
+      (could-not-eval? message)
+      (let [message (ex-message cause)
+            {:keys [column]} (ex-data cause)
+            column-indicator-str (str (apply str
+                                        (take (+ (count (name @current-ns)) 3 column)
+                                          (repeat " ")))
+                                   "⬆")]
+        (println column-indicator-str)
+        (println message))
+      (= message "ERROR")
+      (println (str cause))
+
+      :else
+      (println error))))
+
 (defn ^:export read-eval-print-str
   [source-str]
-  (binding [cljs/*eval-fn* cljs/js-eval]
+  (binding [cljs/*eval-fn* node-eval
+            cljs/*load-fn* load
+            ana/*cljs-ns* @current-ns
+            *ns* (create-ns @current-ns)
+            env/*compiler* st
+            r/resolve-symbol ana/resolve-symbol]
       (cljs/eval-str
         st
         source-str
@@ -49,34 +238,18 @@
         {:ns            @current-ns
          :verbose       true
          :static-fns    false
-        ; :source-map    true
          :context       :expr
          :def-emits-var true}
         (fn [{:keys [ns value error] :as ret}]
           (if-not error
             (do
-              (println value)
-              (vreset! current-ns ns)))
-          (when error
-            (println "ERROR:" error)))))
+              (println (pr-str value))
+              (vreset! current-ns ns))
+            (handle-repl-error error)))))
   nil)

 (defn ^:export get-current-ns []
   @current-ns)

-#_(defn- eval
-  ([form]
-   (eval form (.-name *ns*)))
-  ([form ns]
-   (let [result (atom nil)]
-     (cljs/eval st form
-       {:ns            ns
-        :context       :expr
-        :def-emits-var true}
-       (fn [{:keys [value error]}]
-         (if error
-           (handle-error error true)
-           (reset! result value))))
-     @result)))
 (defn init! []
   (load-core-analysis-caches))


Display group name for deps.edn

Display group name for deps.edn

deps.edn no longer supports the short style, and requires that the group
name always be provided.

--- src/clojars/web/jar.clj
+++ src/clojars/web/jar.clj
@@ -116,17 +116,17 @@
       [:span.string " \""
        (:version jar) "\""] (tag "]")]]))

-(defn clojure-cli-coordinates [jar]
+(defn clojure-cli-coordinates [{:keys [group_name jar_name version]}]
   (list
     [:h2 "Clojure CLI/deps.edn"]
     [:div#deps-coordinates.package-config-example
      {:onClick "selectText('deps-coordinates');"}
      [:pre
-      (jar-name jar)
+      (str group_name "/" jar_name)
       \space
       (tag "{")
       ":mvn/version "
-      [:span.string \" (:version jar) \"]
+      [:span.string \" version \"]
       (tag "}")]]))

 (defn gradle-coordinates [{:keys [group_name jar_name version]}]


Fixed issue #62: Informative messages should be printed in case of (any) exception.

--- src/clouseau/server.clj
+++ src/clouseau/server.clj
@@ -67,6 +67,9 @@
         (catch Exception e
             ; print error message in case of any DB-related exception
             (println-and-flush "read-description(): error accessing database '" (:subname (second product)) "'!")
+            (println-and-flush e)
+            (.printStackTrace e)
+            (println "***********" package)
             nil)))  ; special value that will be handled later

 (defn read-changes-statistic
@@ -77,7 +80,7 @@
         (catch Exception e
             ; print error message in case of any DB-related exception
             (println-and-flush "read-changes-statistic(): Error accessing database 'css_descriptions.db'!")
-            (println e)
+            (println-and-flush e)
             nil)))  ; special value that will be handled later

 (defn read-changes
@@ -88,7 +91,7 @@
         (catch Exception e
             ; print error message in case of any DB-related exception
             (println-and-flush "read-changes(): Error accessing database 'css_descriptions.db'!")
-            (println e)
+            (println-and-flush e)
             nil)))  ; special value that will be handled later

 (defn read-changes-for-user
@@ -99,7 +102,7 @@
         (catch Exception e
             ; print error message in case of any DB-related exception
             (println-and-flush "read-changes-for-user(): Error accessing database 'css_descriptions.db'!")
-            (println e)
+            (println-and-flush e)
             nil)))  ; special value that will be handled later

 (defn read-package-descriptions
@@ -120,6 +123,7 @@
                 desc)) ; (.replaceAll desc "\n" "<br />"))))
         (catch Exception e
             (println-and-flush "read-ccs-description(): Error accessing database 'css_descriptions.db'!")
+            (println-and-flush e)
             nil)))     ; special value that will be handled later

 (defn read-all-descriptions


Fixed issue #66: Changes are stored under improper name in case the package name is not properly specified (upper/lowercase)

--- src/clouseau/server.clj
+++ src/clouseau/server.clj
@@ -269,7 +269,8 @@
     (let [trimmed-package-name (if package (clojure.string/trim package) nil)]
         (if (and (not-empty-parameter? package) (not-empty-parameter? new-description))
             (try
-                (store-ccs-description trimmed-package-name new-description)
+                ; we need to use lowercase package name to avoid issue #66
+                (store-ccs-description (clojure.string/lower-case trimmed-package-name) new-description)
                 (generate-response trimmed-package-name new-description output-format new-user-name old-user-name)
                 (catch Exception e
                     (println "Error writing into database 'ccs_descriptions.db':" e)


Added comments

Added comments

--- src/clouseau/server.clj
+++ src/clouseau/server.clj
@@ -81,13 +81,14 @@
     })

 (defn println-and-flush
-    "Original (println) has problem with syncing when it's called from more threads. This function is a bit better."
+    "Original (println) has problem with syncing when it's called from more threads.
+     This function is a bit better because it flushes all output immediatelly."
     [& more]
     (.write *out* (str (clojure.string/join " " more) "\n"))
     (flush))

 (defn get-calendar
-    "Gets a calendar using the default time zone and locale."
+    "Gets a calendar using the default time zone and default locale."
     []
     (java.util.Calendar/getInstance))

@@ -103,6 +104,7 @@
     (format-date-using-desired-format calendar "yyyy-MM-dd HH:mm:ss"))

 (defn read-description
+    "Read description from the database for specified product and package."
     [product package]
     (try
         (let [result (jdbc/query (second product) (str "select description from packages where name='" package "';"))
@@ -485,6 +487,7 @@
 )))

 (defn perform-normal-processing
+    "Generates Clouseau main page."
     [request]
     (log-request-information request)
     (let [params              (request :params)
@@ -501,7 +504,7 @@
           )))

 (defn render-all-descriptions
-    "Create page containing all descriptions made by CCS users."
+    "Create page containing all descriptions made by CCS users in Clouseau database."
     [request]
     (let [descriptions (read-all-descriptions)
           user-name    (get (get (request :cookies) "user-name") :value)]
@@ -519,6 +522,8 @@
             (http-response/content-type "text/html"))))

 (defn return-file
+    "Creates HTTP response containing content of specified file.
+     Special value nil / HTTP response 404 is returned in case of any I/O error."
     [file-name content-type]
     (let [file (new java.io.File "www" file-name)]
         (println-and-flush "Returning file " (.getAbsolutePath file))


added TODO

added TODO

--- src/main/untangled/components/ui/forms.cljs
+++ src/main/untangled/components/ui/forms.cljs
@@ -166,7 +166,7 @@
   used to `swap!` on app state atom). Will **not** add forms where there is not already an entity in the database."
   [app-state form-class form-ident]
   (if-let [form (get-in app-state form-ident)]
-    (if (initialized? form)
+    (if (initialized? form) ; TODO: Not quite right. I need to stop the recursion by tracking visited nodes, or I will not be able to "fill in" new subforms
       app-state
       (let [elements (form-elements form-class)
             subforms (filter :input/is-form? elements)


Extract user name from list.

Extract user name from list.

--- src/cmr/authz/token.clj
+++ src/cmr/authz/token.clj
@@ -51,7 +51,9 @@
   "Parse the XML that is returned when querying the CMR Access Control API for
   the username associated with the token."
   [xml-str]
-  (find-xml xml-str [:token_info :user_name]))
+  (-> xml-str
+      (find-xml [:token_info :user_name])
+      first))

 (defn get-token-info
   "Query the CMR Access Control API for information assocated with the given


Only applies CSS for the current skin

Only applies CSS for the current skin

--- src/lt/objs/style.cljs
+++ src/lt/objs/style.cljs
@@ -81,7 +81,8 @@

 (defn inject-skin [skin]
   (when (:skin @styles)
-    (dom/remove-class (dom/$ :body) (str "skin-" (:skin @styles))))
+    (dom/remove-class (dom/$ :body) (str "skin-" (:skin @styles)))
+    (dom/remove (dom/$ (str "#skin-" (:skin @styles)))))
   (object/merge! styles {:skin skin})
   (dom/add-class (dom/$ :body) (str "skin-" skin))
   (when-not (dom/$ (str "#skin-" skin))


add visible styles to the devcards examples Foo component

--- src/devcards/om_css/devcards/core.cljs
+++ src/devcards/om_css/devcards/core.cljs
@@ -13,7 +13,7 @@
 (defui Foo
   static oc/Style
   (style [_]
-    [[:.root {:color "#FFFFF"}]
+    [[:.root {:background-color "tomato"}]
      [:.section (merge {} ;;style-1
                   {:background-color :green})]])
   Object
@@ -21,7 +21,8 @@
     (dom/div {:id "ns-test"}
       (dom/div {:class :root} "div with class :root"
         (dom/section {:class :section} "section with class :section"
-          (dom/p {:className "preserved"} "paragraph with class \"preserved\""))))))
+          (dom/p {:className "preserved"
+                  :style {:background-color "turquoise"}} "paragraph with class \"preserved\""))))))

 (defcard-om-next foo-card
   Foo)


enhance transaction test again

enhance transaction test again


Increase time delta in tests.

Increase time delta in tests.


Style fixes

Style fixes


Combine default and server hecuba.edn files.

--- src/kixi/hecuba/application/system.clj
+++ src/kixi/hecuba/application/system.clj
@@ -31,12 +31,31 @@
    [clojure.tools.reader.reader-types :refer (indexing-push-back-reader source-logging-push-back-reader)]
    [clojure.java.io :as io]))

+(defn combine
+  "Merge maps, recursively merging nested maps whose keys collide."
+  ([] {})
+  ([m] m)
+  ([m1 m2]
+    (reduce (fn [m1 [k2 v2]]
+              (if-let [v1 (get m1 k2)]
+                (if (and (map? v1) (map? v2))
+                  (assoc m1 k2 (combine v1 v2))
+                  (assoc m1 k2 v2))
+                (assoc m1 k2 v2)))
+            m1 m2))
+  ([m1 m2 & more]
+    (apply combine (combine m1 m2) more)))
+
 (defn config []
   (let [f (io/file (System/getProperty "user.home") ".hecuba.edn")]
     (when (.exists f)
-      (clojure.tools.reader/read
-       (indexing-push-back-reader
-        (java.io.PushbackReader. (io/reader f)))))))
+      (combine
+       (clojure.tools.reader/read
+        (indexing-push-back-reader
+         (java.io.PushbackReader. (io/reader "resources/default.hecuba.edn")))) ;; TODO change path once we deploy from jar
+       (clojure.tools.reader/read
+        (indexing-push-back-reader
+         (java.io.PushbackReader. (io/reader f))))))))

 (defn define-modules [state]


Update re-com dependency to 2.4.0

Update re-com dependency to 2.4.0

Also remove transitive dependencies on cljs-time and core.async.

--- src/leiningen/new/re_frame/project.clj
+++ src/leiningen/new/re_frame/project.clj
@@ -3,9 +3,7 @@
                  [org.clojure/clojurescript "1.10.520"]
                  [reagent "0.8.1"]
                  [re-frame "0.10.6"]{{#re-com?}}
-                 [com.andrewmcveigh/cljs-time "0.5.2"]
-                 [org.clojure/core.async "0.2.391"]
-                 [re-com "2.1.0"]{{/re-com?}}{{#routes?}}
+                 [re-com "2.4.0"]{{/re-com?}}{{#routes?}}
                  [secretary "1.2.3"]{{/routes?}}{{#garden?}}
                  [garden "1.3.5"]
                  [ns-tracker "0.3.1"]{{/garden?}}{{#handler?}}


Remove redundant lifecycle schemas

Remove redundant lifecycle schemas

--- src/onyx/tasks/sql.clj
+++ src/onyx/tasks/sql.clj
@@ -28,8 +28,7 @@
                             opts)
            :lifecycles [{:lifecycle/task task-name
                          :lifecycle/calls :onyx.plugin.sql/partition-keys-calls}]}
-    :schema {:task-map SqlPartitionKeysTaskMap
-             :lifecycles [os/Lifecycle]}})
+    :schema {:task-map SqlPartitionKeysTaskMap}})
   ([task-name :- s/Keyword
     classname :- s/Str
     subprotocol :- s/Str
@@ -60,8 +59,7 @@
                             opts)
            :lifecycles [{:lifecycle/task task-name
                          :lifecycle/calls :onyx.plugin.sql/partition-uuid-calls}]}
-    :schema {:task-map SqlPartitionKeysTaskMap
-             :lifecycles [os/Lifecycle]}})
+    :schema {:task-map SqlPartitionKeysTaskMap}})
   ([task-name :- s/Keyword
     classname :- s/Str
     subprotocol :- s/Str
@@ -103,8 +101,7 @@
                             opts)
            :lifecycles [{:lifecycle/task task-name
                          :lifecycle/calls :onyx.plugin.sql/read-rows-calls}]}
-    :schema {:task-map SqlReadRowsTaskMap
-             :lifecycles [os/Lifecycle]}})
+    :schema {:task-map SqlReadRowsTaskMap}})
   ([task-name :- s/Keyword
     classname :- s/Str
     subprotocol :- s/Str
@@ -142,8 +139,7 @@
                             opts)
            :lifecycles [{:lifecycle/task task-name
                          :lifecycle/calls :onyx.plugin.sql/write-rows-calls}]}
-    :schema {:task-map SqlWriteRowsTaskMap
-             :lifecycles [os/Lifecycle]}})
+    :schema {:task-map SqlWriteRowsTaskMap}})
   ([task-name :- s/Keyword
     classname :- s/Str
     subprotocol :- s/Str
@@ -179,8 +175,7 @@
                             opts)
            :lifecycles [{:lifecycle/task task-name
                          :lifecycle/calls :onyx.plugin.sql/upsert-rows-calls}]}
-    :schema {:task-map SqlUpsertRowsTaskMap
-             :lifecycles [os/Lifecycle]}})
+    :schema {:task-map SqlUpsertRowsTaskMap}})
   ([task-name :- s/Keyword
     classname :- s/Str
     subprotocol :- s/Str


Fixed regexps for irc commands

Fixed regexps for irc commands

--- src/demogorgon/core.clj
+++ src/demogorgon/core.clj
@@ -46,17 +46,17 @@
      (swank/start-repl 4006)
      (nh-start *nh*)

-     (irc-hooks/add-message-hook *connection* #"\.rng (.+)" #'rand-hook)
-     (irc-hooks/add-message-hook *connection* #"\.rnd (.+)" #'rand-hook)
-     (irc-hooks/add-message-hook *connection* #"\.random (.+)" #'rand-hook)
+     (irc-hooks/add-message-hook *connection* #"^\.rng (.+)" #'rand-hook)
+     (irc-hooks/add-message-hook *connection* #"^\.rnd (.+)" #'rand-hook)
+     (irc-hooks/add-message-hook *connection* #"^\.random (.+)" #'rand-hook)
      (irc-hooks/add-message-hook *connection* ".debug" (fn [& rest] (get-memory-info)))
      (irc-hooks/add-message-hook *connection* ".gc" (fn [& rest] (.gc (Runtime/getRuntime))))
-     (irc-hooks/add-message-hook *connection* #"\.u ?(.*)?" #'unicode-hook)
+     (irc-hooks/add-message-hook *connection* #"^\.u ?(.*)?" #'unicode-hook)
      (irc-hooks/add-message-hook *connection* ".cur" #'online-players-hook)
      (irc-hooks/add-message-hook *connection* ".online" #'online-players-hook)
-     (irc-hooks/add-message-hook *connection* #"\.last ?(.*)?" #'last-dump-hook)
-     (irc-hooks/add-message-hook *connection* #"\.lastdump ?(.*)?" #'last-dump-hook)
-     (irc-hooks/add-message-hook *connection* #"\.lasturl ?(.*)?" #'last-dump-hook)
+     (irc-hooks/add-message-hook *connection* #"^\.last ?(.*)?" #'last-dump-hook)
+     (irc-hooks/add-message-hook *connection* #"^\.lastdump ?(.*)?" #'last-dump-hook)
+     (irc-hooks/add-message-hook *connection* #"^\.lasturl ?(.*)?" #'last-dump-hook)
      (irc/connect *connection*)
      (dosync
       (ref-set *web* (start-web))))


PDOK-1599 extract-channel toegevoegd om extract-request te verwerken

--- src/main/clojure/pdok/featured/api.clj
+++ src/main/clojure/pdok/featured/api.clj
@@ -39,6 +39,15 @@
    :file URI
    (s/optional-key :callback) URI})

+(def ExtractRequest
+  "A schema for a JSON extract request"
+  {:dataset s/Str
+   :collection s/Str
+   :extractType s/Str
+   :extractVersion s/Str
+   (s/optional-key :callback) URI})
+
+
 (defn- callbacker [uri run-stats]
   (http/post uri {:body (json/generate-string run-stats) :headers {"Content-Type" "application/json"}}))

@@ -66,31 +75,37 @@
                (go (>! callback-chan [(:callback request) error-stats])))))))
   )

-(defn- process [process-chan http-req]
+(defn- extract* [callback-chan request]
+  (log/info "Processing extract: " request))
+
+(defn- process-request [schema request-chan http-req]
   (let [request (:body http-req)
-        invalid (s/check ProcessRequest request)]
+        invalid (s/check schema request)]
     (if invalid
       (r/status (r/response invalid) 400)
-      (do (go (>! process-chan request)) (r/response {:result :ok})))))
+      (do (go (>! request-chan request)) (r/response {:result :ok})))))

-(defn api-routes [process-chan callback-chan stats]
+(defn api-routes [process-chan extract-chan callback-chan stats]
   (defroutes api-routes
     (context "/api" []
              (GET "/ping" [] (r/response {:pong (tl/local-now)}))
              (POST "/ping" [] (fn [r] (println "!ping pong!" (:body r)) (r/response {:pong (tl/local-now)})))
              (GET "/stats" [] (r/response @stats))
-             (POST "/process" [] (partial process process-chan) ))
+             (POST "/process" [] (partial process-request ProcessRequest process-chan))
+             (POST "/extract" [] (partial process-request ExtractRequest extract-chan )))
     (route/not-found "NOT FOUND")))

 (defn rest-handler [& more]
   (let [pc (chan)
+        ec (chan)
         cc (chan 10)
         stats (atom {:processing nil
                      :processed []
                      :errored []})]
     (go (while true (process* stats cc (<! pc))))
+    (go (while true (extract* cc (<! ec))))
     (go (while true (apply callbacker (<! cc))))
-    (-> (api-routes pc cc stats)
+    (-> (api-routes pc ec cc stats)
         (wrap-json-body {:keywords? true :bigdecimals? true})
         (wrap-json-response)
         (wrap-defaults api-defaults))))


Remove dummy request handlers

Remove dummy request handlers

--- src/main/clojure/pdok/featured/api.clj
+++ src/main/clojure/pdok/featured/api.clj
@@ -158,8 +158,6 @@
              (POST "/ping" [] (fn [r] (log/info "!ping pong!" (:body r)) (r/response {:pong (tl/local-now)})))
              (GET "/stats" [] (r/response @stats))
              (POST "/process" [] (partial process-request stats ProcessRequest :queued process-chan))
-             (POST "/extract/flush-changelog" [] (r/response {:status 200, :body "Not implemented, but who cares"}))
-             (POST "/template" [] (r/response {:status 200, :body "Not implemented, but who cares"}))
              (GET "/changelogs/:changelog" [changelog] (serve-changelog (config/filestore) changelog)))
     (route/not-found "NOT FOUND")))


Fix reader

Fix reader

--- src-shared/cljs/cljs_webrepl/repl_thread.cljs
+++ src-shared/cljs/cljs_webrepl/repl_thread.cljs
@@ -27,7 +27,7 @@
     (debugf "Deserialize: Transit:")
     (js/console.log transit)
     (debugf "Deserialize: %s %s" (worker-type) transit)
-    (t/read transit)))
+    (t/read reader transit)))

 (defn- serialize [writer msg]
   (debugf "Serialize: %s %s" (worker-type) msg)


code completion: added \? and \! as triggers for auto-completion

--- ccw.core/src/clj/ccw/editors/clojure/clojure_proposal_processor.clj
+++ ccw.core/src/clj/ccw/editors/clojure/clojure_proposal_processor.clj
@@ -365,7 +365,7 @@
                (concat
                  (range (int \a) (inc (int \z)))
                  (range (int \A) (inc (int \Z)))))
-          [\. \-]))
+          [\. \- \? \!]))

 (def viewer (atom nil))
 (def offset (atom nil))


go-ifying plumbing.

go-ifying plumbing.

--- src/fowles/plumbing.clj
+++ src/fowles/plumbing.clj
@@ -1,5 +1,5 @@
 (ns fowles.plumbing
-  (:require [clojure.core.async :refer [alts!! chan]]
+  (:require [clojure.core.async :refer [go-loop alts! chan]]
             [fowles
              [requester :as requester]
              [gatherer :as gatherer]]))
@@ -10,10 +10,10 @@
   [bodies-ch output-fn]
   ;; We do loop-recur instead of while
   ;; because maybe the channel will be closed.
-  (loop []
-    (let [[body c] (alts!! [bodies-ch])]
+  (go-loop []
+    (let [[body c] (alts! [bodies-ch])]
       (if (nil? body)
-        (println "Plumbing thread exiting.")
+        (println "Plumbing go-thread exiting.")
         (do
           (output-fn body)
           (recur))))))
@@ -65,4 +65,4 @@
                                       batch-size
                                       interval-ms
                                       sleep-ms)]
-    (.start (Thread. #(dequeue bodies-ch output-fn)))))
+    (dequeue bodies-ch output-fn)))


Add elevio integration

Add elevio integration

--- src/frontend/stefon.clj
+++ src/frontend/stefon.clj
@@ -3,7 +3,9 @@
 (def hosted-scripts [{:path "js/hosted/intercom2.js"
                       :url "https://widget.intercom.io/widget/vnk4oztr"}
                      {:path "js/hosted/pusher.min.js"
-                      :url "https://js.pusher.com/2.2/pusher.min.js"}])
+                      :url "https://js.pusher.com/2.2/pusher.min.js"}
+                     {:path "js/hosted/elevio.js"
+                      :url "https://static.elev.io/js/v3.js"}])

 (def asset-roots ["resources/assets"])


Don't call finished yet.

Don't call finished yet.

--- backend/src/circle/backend/build/run.clj
+++ backend/src/circle/backend/build/run.clj
@@ -55,7 +55,7 @@
       (throw e))
     (finally
      (log-result b)
-     (finished b)
+     ;;(finished b)
      (when (and (-> @b :failed?) cleanup-on-failure)
        (cleanup-nodes b)))))


remove inspect

remove inspect

--- src-cljs/frontend/components/aside.cljs
+++ src-cljs/frontend/components/aside.cljs
@@ -57,7 +57,7 @@
           [:div.chat-messages {:ref "chat-messages"}
            (for [chat (sort-by :server/timestamp (concat chats [dummy-chat]))
                  :let [id (apply str (take 6 (str (:session/uuid chat))))
-                       name (or (:chat/cust-name (utils/inspect chat))
+                       name (or (:chat/cust-name chat)
                                 (if (= (str (:session/uuid chat))
                                        client-uuid)
                                   "You"


Bind names to tete's variations to remove redundancy.

--- src/african_polyphony_and_polyrhythm/talk.clj
+++ src/african_polyphony_and_polyrhythm/talk.clj
@@ -72,11 +72,12 @@
   ((apply juxt identity variations) model))

 (def tete
-  (part
-    (phrase [8/4 3/4 5/4] (repeat 0))
-    (split 0 1/4)
-    (comp (split 1/4 1/4) (split 0 1/4))
-    (comp (accent 2/4) (split 2/4 1/4) (split 1/4 1/4) (split 0 1/4))))
+  (let [model (phrase [8/4 3/4 5/4] (repeat 0))
+        a (split 0 1/4)
+        b (comp (split 1/4 1/4) a)
+        c (comp (accent 2/4) (split 2/4 1/4) b)
+        d (comp (omit 0/4) c)]
+    (part model a b c d)))

 (def ta
   (part
@@ -122,7 +123,6 @@
         (big tete) (big ta) (big ha) (big tulule) (big bongo)
         (big (big tete)) (big (big ta)) (big (big ha)) (big (big tulule)) (big (big bongo))
         (big (big (big tete))) (big (big (big ta))) (big (big (big ha)))]
-       (take 1)
        (map rand-variations)
        (map after (range 0 (* 8 18) 8))
        ;(map first)


Don't have to exclude isa anymore

Don't have to exclude isa anymore

--- src/grimoire/things.clj
+++ src/grimoire/things.clj
@@ -10,7 +10,7 @@
   Platform  ::= Record[Parent: Version,   Name: String];
   Namespace ::= Record[Parent: Platform,  Name: String];
   Def       ::= Record[Parent: Namespace, Name: String];"
-  (:refer-clojure :exclude [isa? def namespace])
+  (:refer-clojure :exclude [def namespace])
   (:require [clojure.string :as string]
             [grimoire.util :as u]
             [detritus.variants :as v]))


node info refresh rule

node info refresh rule

--- src/clj/swarmpit/event/rules/subscription.clj
+++ src/clj/swarmpit/event/rules/subscription.clj
@@ -4,12 +4,27 @@
             [swarmpit.docker.utils :as du]
             [swarmpit.event.rules.predicate :refer :all]))

+(defn- service-id
+  [service-event-message]
+  (or (get-in service-event-message [:Actor :Attributes :com.docker.swarm.service.id])
+      (get-in service-event-message [:Actor :ID])))
+
+(defn- service-name
+  [service-event-message]
+  (or (get-in service-event-message [:Actor :Attributes :com.docker.swarm.service.name])
+      (get-in service-event-message [:Actor :Attributes :name])))
+
+(defn- node-id
+  [node-event-message]
+  (or (get-in node-event-message [:Actor :Attributes :com.docker.swarm.node.id])
+      (get-in node-event-message [:Actor :ID])))
+
 ;; Subscribed Data

 (defn- service-info-data
   [service-event-message]
-  (let [service-id (or (get-in service-event-message [:Actor :Attributes :com.docker.swarm.service.id])
-                       (get-in service-event-message [:Actor :ID]))
+  (let [service-id (or (service-id service-event-message)
+                       (service-name service-event-message))
         service (api/service service-id)
         tasks (api/service-tasks service-id)
         networks (api/service-networks service-id)]
@@ -17,10 +32,17 @@
      :tasks    tasks
      :networks networks}))

+(defn- node-info-data
+  [node-event-message]
+  (let [node-id (node-id node-event-message)
+        node (api/node node-id)
+        tasks (api/node-tasks node-id)]
+    {:node  node
+     :tasks tasks}))
+
 (defn- stack-info-data
   [service-event-message]
-  (let [service-name (or (get-in service-event-message [:Actor :Attributes :com.docker.swarm.service.name])
-                         (get-in service-event-message [:Actor :Attributes :name]))
+  (let [service-name (service-name service-event-message)
         stack-name (du/hypothetical-stack service-name)]
     (api/stack stack-name)))

@@ -50,10 +72,8 @@
            (or (service-event? message)
                (service-task-event? message))))
     (subscription [_ message]
-      (let [service-name (or (get-in message [:Actor :Attributes :com.docker.swarm.service.name])
-                             (get-in message [:Actor :Attributes :name]))]
-        {:handler :service-info
-         :params  {:id service-name}}))
+      {:handler :service-info
+       :params  {:id (service-name message)}})
     (subscribed-data [_ message]
       (service-info-data message))))

@@ -64,10 +84,8 @@
            (or (service-event? message)
                (service-task-event? message))))
     (subscription [_ message]
-      (let [service-id (or (get-in message [:Actor :Attributes :com.docker.swarm.service.id])
-                           (get-in message [:Actor :ID]))]
-        {:handler :service-info
-         :params  {:id service-id}}))
+      {:handler :service-info
+       :params  {:id (service-id message)}})
     (subscribed-data [_ message]
       (service-info-data message))))

@@ -81,6 +99,17 @@
        :params  nil})
     (subscribed-data [_ message]
       (api/tasks-memo))))
+
+(def refresh-node-info
+  (reify Rule
+    (match? [_ type message]
+      (and (event? type)
+           (node-event? message)))
+    (subscription [_ message]
+      {:handler :node-info
+       :params  {:id (node-id message)}})
+    (subscribed-data [_ message]
+      (node-info-data message))))

 (def refresh-node-list
   (reify Rule
@@ -111,8 +140,7 @@
            (or (service-event? message)
                (service-task-event? message))))
     (subscription [_ message]
-      (let [service-name (or (get-in message [:Actor :Attributes :com.docker.swarm.service.name])
-                             (get-in message [:Actor :Attributes :name]))
+      (let [service-name (service-name message)
             stack-name (du/hypothetical-stack service-name)]
         {:handler :stack-info
          :params  {:name stack-name}}))
@@ -124,5 +152,6 @@
            refresh-service-info-by-id
            refresh-task-list
            refresh-node-list
+           refresh-node-info
            refresh-stack-list
            refresh-stack-info])


added woken up

added woken up

--- src/babel/english/lexicon-verbcoach.clj
+++ src/babel/english/lexicon-verbcoach.clj
@@ -2379,7 +2379,8 @@
                :subcat {:2 '()}}
       :english {:participle "waking up"
                 :present {:3sing "wakes up"}
-                :past "woke up"}})
+                :past "woke up"
+                :past-participle "woken up"}})

    "walk" {:synsem {:cat :verb
                 :sem {:pred :walk}}}


[#105] Port some more functions to clojure.core

--- priv/clojure/core.clj
+++ priv/clojure/core.clj
@@ -5837,12 +5837,10 @@
   If any levels do not exist, hash-maps will be created."
   {:added "1.0"
    :static true}
-  [m ks v]
-  (let [k  (first ks)
-        ks (rest ks)]
-    (if ks
-      (assoc m k (assoc-in (get m k) ks v))
-      (assoc m k v))))
+  [m [k & ks] v]
+  (if ks
+    (assoc m k (assoc-in (get m k) ks v))
+    (assoc m k v)))

 (defn update-in
   "'Updates' a value in a nested associative structure, where ks is a
@@ -5852,12 +5850,10 @@
   created."
   {:added "1.0"
    :static true}
-  ([m ks f & args]
-   (let [k  (first ks)
-         ks (rest ks)]
-     (if ks
-       (assoc m k (apply update-in (get m k) ks f args))
-       (assoc m k (apply f (get m k) args))))))
+  ([m [k & ks] f & args]
+   (if ks
+     (assoc m k (apply update-in (get m k) ks f args))
+     (assoc m k (apply f (get m k) args)))))

 (defn update
   "'Updates' a value in an associative structure, where k is a
@@ -5908,7 +5904,8 @@
   "Returns true if x implements Fn, i.e. is an object created via fn."
   {:added "1.0"
    :static true}
-  [x] (extends? :clojerl.erlang.Fn x))
+  [x] (erlang/is_function.e x))
+

 (defn associative?
  "Returns true if coll implements Associative"
@@ -5971,9 +5968,12 @@
   {:added "1.0"
    :static true}
   ([f]
-   (throw "unimplemented trampoline, not needed"))
+     (let [ret (f)]
+       (if (fn? ret)
+         (recur ret)
+         ret)))
   ([f & args]
-   (throw "unimplemented trampoline, not needed")))
+     (trampoline #(apply f args))))

 (defn intern
   "Finds or creates a var named by the symbol name in the namespace
@@ -6066,10 +6066,231 @@

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; var documentation ;;;;;;;;;;;;;;;;;;;;;;;;;;

+;;(alter-meta! #'*agent* assoc :added "1.0")
+;;(alter-meta! #'in-ns assoc :added "1.0")
+;;(alter-meta! #'load-file assoc :added "1.0")
+
+(defmacro add-doc-and-meta {:private true} [name docstring meta]
+  nil
+  #_`(alter-meta! (var ~name) merge (assoc ~meta :doc ~docstring)))
+
+(add-doc-and-meta *file*
+  "The path of the file being evaluated, as a String.
+
+  When there is no file, e.g. in the REPL, the value is not defined."
+  {:added "1.0"})
+
+(add-doc-and-meta *command-line-args*
+  "A sequence of the supplied command line arguments, or nil if
+  none were supplied"
+  {:added "1.0"})
+
+(add-doc-and-meta *warn-on-reflection*
+  "When set to true, the compiler will emit warnings when reflection is
+  needed to resolve Java method calls or field accesses.
+
+  Defaults to false."
+  {:added "1.0"})
+
+(add-doc-and-meta *compile-path*
+  "Specifies the directory where 'compile' will write out .class
+  files. This directory must be in the classpath for 'compile' to
+  work.
+
+  Defaults to \"classes\""
+  {:added "1.0"})
+
+(add-doc-and-meta *compile-files*
+  "Set to true when compiling files, false otherwise."
+  {:added "1.0"})
+
+(add-doc-and-meta *unchecked-math*
+  "While bound to true, compilations of +, -, *, inc, dec and the
+  coercions will be done without overflow checks. While bound
+  to :warn-on-boxed, same behavior as true, and a warning is emitted
+  when compilation uses boxed math. Default: false."
+  {:added "1.3"})
+
+(add-doc-and-meta *compiler-options*
+  "A map of keys to options.
+  Note, when binding dynamically make sure to merge with previous value.
+  Supported options:
+  :elide-meta - a collection of metadata keys to elide during compilation.
+  :disable-locals-clearing - set to true to disable clearing, useful for using a debugger
+  Alpha, subject to change."
+  {:added "1.4"})
+
+(add-doc-and-meta *ns*
+  "A clojure.lang.Namespace object representing the current namespace."
+  {:added "1.0"})
+
+(add-doc-and-meta *in*
+  "A java.io.Reader object representing standard input for read operations.
+
+  Defaults to System/in, wrapped in a LineNumberingPushbackReader"
+  {:added "1.0"})
+
+(add-doc-and-meta *out*
+  "A java.io.Writer object representing standard output for print operations.
+
+  Defaults to System/out, wrapped in an OutputStreamWriter"
+  {:added "1.0"})
+
+(add-doc-and-meta *err*
+  "A java.io.Writer object representing standard error for print operations.
+
+  Defaults to System/err, wrapped in a PrintWriter"
+  {:added "1.0"})
+
+(add-doc-and-meta *flush-on-newline*
+  "When set to true, output will be flushed whenever a newline is printed.
+
+  Defaults to true."
+  {:added "1.0"})
+
+(add-doc-and-meta *print-meta*
+  "If set to logical true, when printing an object, its metadata will also
+  be printed in a form that can be read back by the reader.
+
+  Defaults to false."
+  {:added "1.0"})
+
+(add-doc-and-meta *print-dup*
+  "When set to logical true, objects will be printed in a way that preserves
+  their type when read in later.
+
+  Defaults to false."
+  {:added "1.0"})
+
+(add-doc-and-meta *print-readably*
+  "When set to logical false, strings and characters will be printed with
+  non-alphanumeric characters converted to the appropriate escape sequences.
+
+  Defaults to true"
+  {:added "1.0"})
+
+(add-doc-and-meta *read-eval*
+ "Defaults to true (or value specified by system property, see below)
+  ***This setting implies that the full power of the reader is in play,
+  including syntax that can cause code to execute. It should never be
+  used with untrusted sources. See also: clojure.edn/read.***
+
+  When set to logical false in the thread-local binding,
+  the eval reader (#=) and record/type literal syntax are disabled in read/load.
+  Example (will fail): (binding [*read-eval* false] (read-string \"#=(* 2 21)\"))
+
+  The default binding can be controlled by the system property
+  'clojure.read.eval' System properties can be set on the command line
+  like this:
+
+  java -Dclojure.read.eval=false ...
+
+  The system property can also be set to 'unknown' via
+  -Dclojure.read.eval=unknown, in which case the default binding
+  is :unknown and all reads will fail in contexts where *read-eval*
+  has not been explicitly bound to either true or false. This setting
+  can be a useful diagnostic tool to ensure that all of your reads
+  occur in considered contexts. You can also accomplish this in a
+  particular scope by binding *read-eval* to :unknown
+  "
+  {:added "1.0"})
+
+(defmacro letfn
+  "fnspec ==> (fname [params*] exprs) or (fname ([params*] exprs)+)
+
+  Takes a vector of function specs and a body, and generates a set of
+  bindings of functions to their names. All of the names are available
+  in all of the definitions of the functions, as well as the body."
+  {:added "1.0", :forms '[(letfn [fnspecs*] exprs*)],
+   :special-form true, :url nil}
+  [fnspecs & body]
+  `(letfn* ~(vec (interleave (map first fnspecs)
+                             (map #(cons `fn %) fnspecs)))
+           ~@body))
+
+(defn fnil
+  "Takes a function f, and returns a function that calls f, replacing
+  a nil first argument to f with the supplied value x. Higher arity
+  versions can replace arguments in the second and third
+  positions (y, z). Note that the function f can take any number of
+  arguments, not just the one(s) being nil-patched."
+  {:added "1.2"
+   :static true}
+  ([f x]
+   (fn
+     ([a] (f (if (nil? a) x a)))
+     ([a b] (f (if (nil? a) x a) b))
+     ([a b c] (f (if (nil? a) x a) b c))
+     ([a b c & ds] (apply f (if (nil? a) x a) b c ds))))
+  ([f x y]
+   (fn
+     ([a b] (f (if (nil? a) x a) (if (nil? b) y b)))
+     ([a b c] (f (if (nil? a) x a) (if (nil? b) y b) c))
+     ([a b c & ds] (apply f (if (nil? a) x a) (if (nil? b) y b) c ds))))
+  ([f x y z]
+   (fn
+     ([a b] (f (if (nil? a) x a) (if (nil? b) y b)))
+     ([a b c] (f (if (nil? a) x a) (if (nil? b) y b) (if (nil? c) z c)))
+     ([a b c & ds] (apply f (if (nil? a) x a) (if (nil? b) y b) (if (nil? c) z c) ds)))))
+
+;;;;;;; case ;;;;;;;;;;;;;
+
+(defmacro case
+  "Takes an expression, and a set of clauses.
+
+  Each clause can take the form of either:
+
+  test-constant result-expr
+
+  (test-constant1 ... test-constantN)  result-expr
+
+  The test-constants are not evaluated. They must be compile-time
+  literals, and need not be quoted.  If the expression is equal to a
+  test-constant, the corresponding result-expr is returned. A single
+  default expression can follow the clauses, and its value will be
+  returned if no clause matches. If no default expression is provided
+  and no clause matches, an IllegalArgumentException is thrown.
+
+  Unlike cond and condp, case does a constant-time dispatch, the
+  clauses are not considered sequentially.  All manner of constant
+  expressions are acceptable in case, including numbers, strings,
+  symbols, keywords, and (Clojure) composites thereof. Note that since
+  lists are used to group multiple constants that map to the same
+  expression, a vector can be used to match a list if needed. The
+  test-constants need not be all of the same type."
+  {:added "1.2"}
+
+  [e & clauses]
+  `(case* e ~@clauses))
+
+;; redefine reduce with internal-reduce
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; helper files ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(load "core_print")
+
+#_(defn reduce
+  "f should be a function of 2 arguments. If val is not supplied,
+  returns the result of applying f to the first 2 items in coll, then
+  applying f to that result and the 3rd item, etc. If coll contains no
+  items, f must accept no arguments as well, and reduce returns the
+  result of calling f with no arguments.  If coll has only 1 item, it
+  is returned and f is not called.  If val is supplied, returns the
+  result of applying f to val and the first item in coll, then
+  applying f to that result and the 2nd item, etc. If coll contains no
+  items, returns val and f is not called."
+  {:added "1.0"}
+  ([f coll]
+     (if (instance? clojure.lang.IReduce coll)
+       (.reduce ^clojure.lang.IReduce coll f)
+       (clojure.core.protocols/coll-reduce coll f)))
+  ([f val coll]
+     (if (instance? clojure.lang.IReduceInit coll)
+       (.reduce ^clojure.lang.IReduceInit coll f val)
+       (clojure.core.protocols/coll-reduce coll f val))))
+
 ;;------------------------------------------------------------------------------
 ;;------------------------------------------------------------------------------
-
-(load "core_print")

 (defmacro simple-benchmark
   "Runs expr iterations times in the context of a let expression with


bugfix

bugfix

--- src/cljs/infinitelives/pixi/canvas.cljs
+++ src/cljs/infinitelives/pixi/canvas.cljs
@@ -119,7 +119,7 @@

   ;(.log js/console (str layers))
   (let [
-        stage (js/PIXI.Container. background)
+        stage (js/PIXI.Container.)
         containers (map #(js/PIXI.Container.) layers)
         ;; _ (doall (map #(.addChild stage %) containers))
         ]


cleanup lex.clj

cleanup lex.clj

--- src/clojure/org/mobileink/antlr/lex.clj
+++ src/clojure/org/mobileink/antlr/lex.clj
@@ -1,6 +1,9 @@
 (ns org.mobileink.antlr.lex
-  (:require [criterium.core :as crit])
-  (:import [org.antlr.v4.runtime
+  (:require [criterium.core :as crit]
+            [byte-streams :as bs])
+  (:import [java.nio.ByteBuffer]
+           [java.net URL URLClassLoader]
+           [org.antlr.v4.runtime
             ANTLRInputStream
             ANTLRFileStream
             CharStream
@@ -13,36 +16,28 @@
             TokenStream]
            [org.antlr.v4.runtime.atn PredictionMode]
            [org.antlr.v4.runtime.tree ParseTree ParseTreeWalker]
-           [org.antlr.v4.runtime.misc TestRig]))
+           [org.antlr.v4.runtime.misc TestRig]
+           [clojure.lang DynamicClassLoader]))

-;; ANTLR Lexer Javadoc: http://www.antlr.org/api/Java-master/org/antlr/v4/runtime/Lexer.html
+;; ANTLR Lexer Javadoc:
+;; http://www.antlr.org/api/Java-master/org/antlr/v4/runtime/Lexer.html

 (defn lex-file
   [^String grammar ;; e.g. "org.mobileink.antlr.sym"
    ^String file ;; file to parse
-;;   rule ;; grammar rule symbol
    ]
   (let [
         lexname (str grammar "Lexer")
         infile (ANTLRFileStream. file)
         lxr (eval `(new ~(Class/forName lexname) nil))
-        x (.setInputStream lxr infile)
-        ;; we can get tokens directly from lexer:
-        ;; tokens (do (.reset lxr) (.getAllTokens lxr))
-        ;; but they don't have token index
-        ;; token streams keep track of token indices:
-        tokens (CommonTokenStream. lxr)
-        ;; ;; parsername (str grammar "Parser")
-        ;; ;; parsens (import-by-name parsername)
-        ;; parser (do
-        ;;          (println "getting parser")
-        ;;          (ClojureParser. tokens))
+        devnull (.setInputStream lxr infile)
+        ;; tokens (.getAllTokens lxr)) ;; list of all toks except EOF
+        tokstream (CommonTokenStream. lxr) ;; indexed list of tokens
         ]
     (do
-      (.fill tokens)
-;      (println "tokens: " (class tokens))
+      (.fill tokstream)
       (let
-          [seqtoks (iterator-seq (.iterator (.getTokens tokens)))]
+          [seqtoks (iterator-seq (.iterator (.getTokens tokstream)))]
         (do
           (doall (map (fn [t] (print (format "%s\n" (.toString t))))
                       seqtoks))
@@ -51,23 +46,13 @@

 (defn lex-string
   [^String grammar ;; e.g. "org.mobileink.antlr.sym"
-   ^String the-string ;; file to parse
-   ;; rule ;; grammar rule symbol
+   ^String the-string ;; file to scan
    ]
-
-  ;; TODO:  proxy <grammar>Lexer
-
-  (let [
-        lexname (str grammar "Lexer")
+  (let [lexname (str grammar "Lexer")
         strinput (ANTLRInputStream. the-string)
         lxr (eval `(new ~(Class/forName lexname) nil))
-        foo (.setInputStream lxr strinput)
-        ;; tokens (do (.reset lxr) (.getAllTokens lxr))
-        tokens (CommonTokenStream. lxr)
-        ;; parsername (str grammar "Parser")
-        ;; parsens (import-by-name parsername)
-        ;;lex (.setInputStream (symbol (new (str grammar "Lexer"))) input)
-        ]
+        devnull (.setInputStream lxr strinput)
+        tokens (CommonTokenStream. lxr)]
     (do
       (.fill tokens)
       (let
@@ -77,3 +62,4 @@
                       seqtoks))
           ))))
   nil)
+


more info for null message exceptions

more info for null message exceptions

--- src/clojure/zensols/actioncli/parse.clj
+++ src/clojure/zensols/actioncli/parse.clj
@@ -2,6 +2,7 @@
       :author "Paul Landes"}
     zensols.actioncli.parse
   (:require [clojure.string :as str]
+            [clojure.tools.logging :as log]
             [clojure.tools.cli :refer [parse-opts summarize]])
   (:require [zensols.actioncli.dynamic :refer (defa-)]))

@@ -47,15 +48,17 @@
 (defn handle-exception
   "Handle exceptions thrown from CLI commands."
   [e]
-  (if (instance? java.io.FileNotFoundException e)
-    (binding [*out* *err*]
-      (println (format "%s: io error: %s" (program-name) (.getMessage e))))
-    (binding [*out* *err*]
-      (println (format "%s: error: %s"
-                       (program-name)
-                       (if ex-data
-                         (.getMessage e)
-                         (.toString e))))))
+  (let [msg (.getMessage e)]
+    (log/error e "command line parse error")
+    (if (instance? java.io.FileNotFoundException e)
+      (binding [*out* *err*]
+        (println (format "%s: io error: %s" (program-name) msg)))
+      (binding [*out* *err*]
+        (println (format "%s: error: %s"
+                         (program-name)
+                         (if ex-data
+                           (.getMessage e)
+                           (.toString e)))))))
   (if *dump-jvm-on-error*
     (System/exit 1)
     (throw e)))


method no longer mandatory on requests

method no longer mandatory on requests

--- src/engulf/formulas/http_benchmark_runner.clj
+++ src/engulf/formulas/http_benchmark_runner.clj
@@ -24,10 +24,10 @@
 (defn clean-params [str-params]
   (let [params (keywordize-keys str-params)]
     ;; Ensure required keys
-    (let [diff (cset/difference #{:url :method :concurrency :timeout :limit} params)]
+    (let [diff (cset/difference #{:url :concurrency :timeout :limit} params)]
       (when (not (empty? diff))
         (throw (Exception. (str "Invalid parameters! Missing keys: " diff ". Got: " str-params)))))
-    (let [method (keyword (lower-case (:method params)))]
+    (let [method (keyword (lower-case (or (:method params) "get")))]
       ;; Ensure only valid methods are used
       (when (not (method valid-methods))
         (throw (Exception. (str "Invalid method: " method " expected one of " valid-methods))))


CMR-3210 Adds additional test case

CMR-3210 Adds additional test case

--- common-lib/test/cmr/common/test/util.clj
+++ common-lib/test/cmr/common/test/util.clj
@@ -135,12 +135,12 @@
            (fn [v] (or (nil? v) (and (string? v) (str/blank? v))))
            {:a true :b nil :c "value" :d false :e "" :f " "}))))

-
 (deftest remove-empty-maps-test
   (are [x y]
     (= x (util/remove-empty-maps y))
     nil {:x {:y {:z nil :foo nil}}}
-    {:x {:y {:z 1}}} {:x {:y {:z 1 :a {:b nil}}}}))
+    {:x {:y {:z 1}}} {:x {:y {:z 1 :a {:b nil}}}}
+    [{:x 1} {:y 2}] [{} {:x 1} {:a nil :b {:c nil}} {:y 2}]))

 (deftest rename-keys-with-test
   (testing "basic rename key tests"


Added functions to remove nodes.

Added functions to remove nodes.

--- src/me/lomin/alive.cljc
+++ src/me/lomin/alive.cljc
@@ -117,6 +117,14 @@
   ([content node]
    (conj node content)))

+(def NIL specter/NONE)
+
+(defn none
+  ([] (none (constantly true)))
+  ([selector] #(none selector %))
+  ([selector node]
+   (specter/setval (alive-core/each selector) NIL node)))
+
 (defn content
   ([c] #(content c %))
   ([c node]


Produce deprecation warnings rather than errors.  Dispense with warnings on earlier alpha changes.

--- src/re_frame/core.cljc
+++ src/re_frame/core.cljc
@@ -101,14 +101,11 @@
 ;; Assisting the v0.0.7 ->  v0.0.8 tranistion.  Remove in v0.0.9
 (defn register-handler
   [& args]
-  (console :error  "re-frame:  \"register-handler\" has been renamed \"reg-event\""))
+  (console :warn  "re-frame:  \"register-handler\" has been renamed \"reg-event\"")
+  (apply reg-event args))

 (defn register-sub
   [& args]
-  (console :error  "re-frame:  \"register-sub\" has been renamed \"reg-sub-raw\"."))
+  (console :error  "re-frame:  \"register-sub\" is deprecated. Use \"reg-sub-raw\".")
+  (apply reg-sub-raw args))

-;; v0.0.8 alpha2 -> alpha3
-(defn def-fx    [& args]  (console :error  "re-frame:  in v0.0.8-alpha3 \"def-fx\" was renamed \"reg-fx\"."))
-(defn def-event [& args]  (console :error  "re-frame:  in v0.0.8-alpha3 \"def-event\" was renamed \"reg-event\"."))
-(defn def-sub   [& args]  (console :error  "re-frame:  in v0.0.8-alpha3 \"def-sub\" was renamed \"reg-sub\"."))
-


Cleanup.

Cleanup.

--- src/appengine_magic/core_local.clj
+++ src/appengine_magic/core_local.clj
@@ -1,11 +1,10 @@
 (in-ns 'appengine-magic.core)

+(use 'appengine-magic.local-env-helpers
+     '[ring.middleware.file :only [wrap-file]]
+     '[ring.util.servlet :only [servlet]])

-(use 'appengine-magic.local-env-helpers
-     '(ring.middleware.file :only [wrap-file])
-     '(ring.util.servlet :only [servlet]))
-
-(require '(appengine-magic.jetty :as jetty))
+(require '[appengine-magic.jetty :as jetty])

 (defn wrap-war-static [app #^String war-root]