Add Db Connection String in dbmigrations

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

--- src/bookmarks/dbmigrations.clj
+++ src/bookmarks/dbmigrations.clj
@@ -0,0 +1,12 @@
+(ns bookmarks.dbmigrations
+  (:require [migratus.core :as migratus]))
+
+(def config {:store :database
+             :migration-dir "migrations/"
+             :db {:classname "org.postgresql.Driver"
+                  :subprotocol "postgresql"
+                  :subname "//localhost:5432/bookmarks"
+                  :user "postgres"
+                  :password "Design_20"}})
+
+


Stub for new module: schedule

Stub for new module: schedule

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

--- src/clj_mrazik/schedule.clj
+++ src/clj_mrazik/schedule.clj
@@ -0,0 +1,17 @@
+;
+;  (C) Copyright 2016  Pavel Tisnovsky
+;
+;  All rights reserved. This program and the accompanying materials
+;  are made available under the terms of the Eclipse Public License v1.0
+;  which accompanies this distribution, and is available at
+;  http://www.eclipse.org/legal/epl-v10.html
+;
+;  Contributors:
+;      Pavel Tisnovsky
+;
+
+(ns clj-mrazik.schedule
+  (:gen-class))
+
+(require '[clojure.pprint :as pprint])
+


Create process_lisp.clj

Create process_lisp.clj

error: pathspec 'src/iyye/bios/process_lisp.clj' did not match any file(s) known to git

--- src/iyye/bios/process_lisp.clj
+++ src/iyye/bios/process_lisp.clj
@@ -0,0 +1,36 @@
+; Iyye - AI agent
+; Copyright (C) 2016-2017  Sasha Yumzya
+
+; This program is free software: you can redistribute it and/or modify
+; it under the terms of the GNU Affero General Public License as
+; published by the Free Software Foundation, either version 3 of the
+; License, or (at your option) any later version.
+
+; This program is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+; GNU Affero General Public License for more details.
+
+; You should have received a copy of the GNU Affero General Public License
+; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+(ns iyye.bios.process-lisp
+   (:require [clojure.string :as str]
+             [iyye.bios.parse-lisp :as parse]
+             [iyye.bios.ioframes :as ioframes]))
+
+(defn process-lispy-ctrl-input [IO input]
+  (let [tree (parse/make-syntax-tree input)]
+    (future (Thread/sleep 1000) (ioframes/process-output IO "deal with a tree"))))
+
+(defn process-lispy-input [IO input]
+  (if (= \# (first input))
+    (process-lispy-ctrl-input IO (subs input 1))
+    (future (Thread/sleep 1000) (ioframes/process-output IO "parsing lispy sentences not implemented"))))
+
+(defn process-input [IO input]
+   (if (= input "What is answer to life, the universe and everything?")
+     (future (Thread/sleep 1000) ( ioframes/process-output IO "42" ))
+     (if (= \# (first input))
+       (process-lispy-input IO (subs input 1))
+       (future (Thread/sleep 1000) (ioframes/process-output IO "parsing sentences not implemented" )))))


Added missing word in comment for koan 11

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/croeder/clojure-koans-work.git/'


Update handlers.clj

Update handlers.clj

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/form-works.git/'


adding a wave table editor gui

adding a wave table editor gui

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

--- src/overtone/gui/wavetable.clj
+++ src/overtone/gui/wavetable.clj
@@ -0,0 +1,143 @@
+(ns overtone.gui.wavetable
+  (:use [overtone.sc server buffer]
+        [overtone.music time]
+        [seesaw core graphics color])
+  (:require [seesaw.bind :as bind]))
+
+
+(def WAVE-Y-PADDING 10)
+
+(defn- paint-wave-table
+  "Paint the dial widget group"
+  [buf c g]
+  (try
+    (let [w (width c)
+          h (height c)
+          line-style (style :foreground "#FFFFFF" :stroke 1.0 :cap :round :dash [10 10])
+          data (buffer-data @buf)
+          x-array (int-array w)
+          y-array (int-array w)
+          step (/ (:size @buf) w)
+          y-scale h] ;(- h (* 2 WAVE-Y-PADDING))]
+
+      ; draw the midpoint axis
+      (draw g (line 0 (/ h 2) w (/ h 2)) line-style)
+      ;(draw g (line (/ w 2) 0 (/ w 2) h) line-style)
+
+      (dotimes [i w]
+        (aset ^ints x-array i i)
+        (aset ^ints y-array i (int (* y-scale 0.5
+                                (+ 1.0 (* -1 (aget ^floats data (unchecked-multiply i step))))))))
+
+      (.setColor g (color 0 140 236))
+      (.setStroke g (stroke :width 2.0))
+      (.drawPolyline g x-array y-array w))
+    (catch Exception ex
+      (println (str "Error in paint-wave-table: " ex))
+      (.printStackTrace ex))))
+
+(defn wave-panel
+  [buf]
+  (border-panel :hgap 5 :vgap 5 :border 5
+                :center (canvas :id :wave-canvas
+                                :background "#000000"
+                                :paint (partial paint-wave-table buf))))
+
+
+(defn interpolate
+  [a b steps]
+  (let [shift (/ (- b a) (float (dec steps)))]
+    (concat (take (dec steps) (iterate #(+ shift %) a)) [b])))
+
+(defn- editor-drag-handler
+  [buf last-drag event]
+  (try
+    (let [buf @buf
+          source (.getComponent event)
+          w (width source)
+          h (height source)
+          cx (.getX event)
+          cy (.getY event)]
+      (when (and (>= cx 0) (< cx w) (>= cy 0) (< cy h))
+        (let [buf-size (:size buf)
+              step (/ buf-size (float w))
+              [last-x last-y] @last-drag
+
+              x1 (max 0 (min last-x cx))
+              x2 cx
+              x3 (min w (max last-x cx))
+
+              x1-idx (Math/round (* x1 step))
+              x2-idx (Math/round (* x2 step))
+              x3-idx (Math/round (* x3 step))
+
+              cy-val (* -1 (- (* 2 (* cy (/ 1.0 h))) 1))
+
+              buf-data (buffer-data buf)
+              [start-idx y-vals] (if (< x1 x2)
+                                   [x1-idx (interpolate (nth buf-data x1-idx) cy-val
+                                                        (inc (- x2-idx x1-idx)))]
+                                   [x2-idx [cy-val]])
+              y-vals (if (> x3-idx x2-idx)
+                       (concat y-vals (interpolate cy-val (nth buf-data x3-idx)
+                                                   (inc (- x3-idx x2-idx))))
+                       y-vals)]
+          (reset! last-drag [cx cy])
+          (buffer-write! buf start-idx y-vals)
+          (.repaint source))))
+        (catch Exception ex
+          (println (str "Error in drag-handler:" ex))
+          (.printStackTrace ex))))
+
+(defn- editor-press-handler
+  [last-drag event]
+  (reset! last-drag [(.getX event) (.getY event)]))
+
+(defn- add-behaviors
+  [buf f]
+  (let [canvas (select f [:#wave-canvas])
+        last-drag (atom nil)]
+    (listen canvas
+            :mouse-dragged (partial editor-drag-handler buf last-drag)
+            :mouse-pressed (partial editor-press-handler last-drag))))
+
+(defn wave-table-editor
+  [buf]
+  (invoke-now
+    (try
+      (let [buf-atom (atom buf)
+            wave-pane (wave-panel buf-atom)
+            f (frame :title "Wave Table"
+                     :content (wave-panel buf-atom)
+                     :width 1024 :height 760
+                     :minimum-size [640 :by 480])]
+        (add-behaviors buf-atom f)
+        (-> f pack! show!)
+        (with-meta
+          {:frame f :buf buf-atom}
+          {:type ::wave-table-editor}))
+      (catch Exception e
+        (.printStackTrace e)))))
+
+(defn set-wave-table!
+  [editor buf]
+  (reset! (:buf editor) buf))
+
+(defn fill-buffer
+  [b f]
+  (let [size (:size b)]
+    (buffer-write! b (map #(f (/ (* % 2 Math/PI) size)) (range 0 size)))
+    b))
+
+(comment
+  (use 'overtone.live)
+  (use :reload 'overtone.gui.wavetable)
+  (def b (buffer 1024))
+  (fill-buffer b #(Math/cos %))
+  (wave-table-editor b)
+
+  (defsynth table-player
+    [buf 0 freq 440]
+    (out 0 (* [0.8 0.8] (osc buf freq))))
+
+  )


Add `into-transducers-test-001`

Add `into-transducers-test-001`

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

--- test/com/nomistech/clojure_the_language/c_500_transducers/s_100_intro_to_transducers_test.clj
+++ test/com/nomistech/clojure_the_language/c_500_transducers/s_100_intro_to_transducers_test.clj
@@ -0,0 +1,7 @@
+(ns com.nomistech.clojure-the-language.c-500-transducers.s-100-intro-to-transducers-test
+  (:require
+   [clojure.test :refer [deftest is]]))
+
+(deftest into-transducers-test-001
+  (is (= [2 4 6]
+         (into [] (filter even?) [1 2 3 4 5 6]))))


swarmpit agent client #260

swarmpit agent client
#260

error: pathspec 'src/clj/swarmpit/agent/client.clj' did not match any file(s) known to git

--- src/clj/swarmpit/agent/client.clj
+++ src/clj/swarmpit/agent/client.clj
@@ -0,0 +1,31 @@
+(ns swarmpit.agent.client
+  (:require [swarmpit.http :refer :all]
+            [swarmpit.config :refer [config]]
+            [cheshire.core :refer [generate-string]]))
+
+(defn- execute
+  [{:keys [method url api options]}]
+  (let [agent-url (config :agent-url)]
+    (execute-in-scope {:method        method
+                       :url           (str (if agent-url agent-url url) api)
+                       :options       options
+                       :scope         "Agent"
+                       :error-handler #(or (:detail %) %)})))
+
+(defn info
+  [agent-url]
+  (-> (execute {:method :GET
+                :api    "/"
+                :url    agent-url})
+      :body))
+
+(defn logs
+  [agent-url container-id since]
+  (-> (execute {:method  :GET
+                :api     (str "/logs/" container-id)
+                :url     agent-url
+                :options {:query-params
+                          (merge {}
+                                 (when since
+                                   {:since since}))}})
+      :body))


[EN] Create a `start-event-handler!` function.

We need a way to consistently start (and stop) threads for processing
incoming events. This function takes a handler and a channel and loops
over messages on the channel, passing them to handler. There are two
ways to stop the thread. One is to close the channel. The other is to
call the :stop! function that is returned within the map.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/electorate-works.git/'


remove test

remove test

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/deril/hacknote.git/'


Bench: clean up a couple small things.

Bench: clean up a couple small things.

--- test/riemann/test/bench.clj
+++ test/riemann/test/bench.clj
@@ -7,7 +7,7 @@
   (:use [clojure.test])
   (:use [clojure.java.shell])
   (:use [clojure.string :only [trim-newline]])
-  (:use [incanter core stats charts]))
+  (:use [incanter core charts]))

 (defn git-version
   "Returns a human-readable version name for this commit."
@@ -116,7 +116,7 @@
       :servers servers
       :streams streams})))

-(deftest drop-tcp
+(deftest drop-tcp-events
          (let [{:keys [core]} (core-package)
                client (tcp-client)]
            (try


Logging tweaks

Logging tweaks

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/election-notification-works.git/'


Let's not retry a job if it breaks. Instead, just log the failure.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/couragelabs/coachbot.git/'


Add buffer-store implementation.

Add buffer-store implementation.

error: pathspec 'src/blocks/store/buffer.clj' did not match any file(s) known to git

--- src/blocks/store/buffer.clj
+++ src/blocks/store/buffer.clj
@@ -0,0 +1,60 @@
+(ns blocks.store.buffer
+  "Logical block storage which buffers new blocks being written to a backing
+  store. Reads return a unified view of the existing and buffered blocks. The
+  buffer can be _flushed_ to write all the new blocks to the backing store."
+  (:require
+    (blocks
+      [core :as block]
+      [util :as util])
+    [blocks.store.memory :refer [memory-store]]))
+
+
+(defrecord BufferStore
+  [buffer store]
+
+  block/BlockStore
+
+  (stat
+    [this id]
+    (or (block/stat buffer id)
+        (block/stat store  id)))
+
+
+  (-list
+    [this opts]
+    (util/merge-block-lists
+      (block/-list buffer opts)
+      (block/-list store  opts)))
+
+
+  (-get
+    [this id]
+    (or (block/-get buffer id)
+        (block/-get store  id)))
+
+
+  (put!
+    [this block]
+    (or (block/get store (:id block))
+        (block/put! buffer block)))
+
+
+  (delete!
+    [this id]
+    (let [buffered? (block/delete! buffer id)
+          stored?   (block/delete! store  id)]
+      (boolean (or buffered? stored?)))))
+
+
+(defn buffer-store
+  "Creates a new buffering block store. If no buffer store is given, defaults to
+  an in-memory store."
+  ([store]
+   (buffer-store store (memory-store)))
+  ([store buffer]
+   (BufferStore. store buffer)))
+
+
+;; Remove automatic constructor functions.
+(ns-unmap *ns* '->BufferStore)
+(ns-unmap *ns* 'map->BufferStore)


A different approach to restoring dotted SNAPSHOT support [#317]

This partially reverts the last commit, since it only shunted dotted
SNAPSHOT metadata uploads to the versioned route, not all versioned
metadata uploads. Instead, we continue to let all metadata uploads go
through the non-versioned route to allow all SNAPSHOT releases to work
the same, even though there are other issues (see #319).

--- src/clojars/routes/repo.clj
+++ src/clojars/routes/repo.clj
@@ -83,7 +83,7 @@
 ;; web handlers
 (defroutes routes
   (PUT ["/:group/:artifact/:file"
-        :group #"[^\.]+" :artifact #"[^/]+" :file #"maven-metadata\.xml[^/]*"]
+        :group #".+" :artifact #"[^/]+" :file #"maven-metadata\.xml[^/]*"]
        {body :body {:keys [group artifact file]} :params}
        (let [groupname (string/replace group "/" ".")]
          (put-req
@@ -93,7 +93,7 @@
             (try-save-to-file file body)))))
   (PUT ["/:group/:artifact/:version/:filename"
         :group #"[^\.]+" :artifact #"[^/]+" :version #"[^/]+"
-        :filename #"[^/]+(\.pom|\.jar|\.xml|\.sha1|\.md5|\.asc)$"]
+        :filename #"[^/]+(\.pom|\.jar|\.sha1|\.md5|\.asc)$"]
        {body :body {:keys [group artifact version filename]} :params}
        (let [groupname (string/replace group "/" ".")]
          (put-req


Fixes found from working with conv implementation

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/thinktopic/netlib-ccm.git/'


feat(schema): added a custom schema type for reference type

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

--- ccw.core/src/clj/ccw/schema/core.clj
+++ ccw.core/src/clj/ccw/schema/core.clj
@@ -0,0 +1,19 @@
+(ns ccw.schema.core
+  "Additional schema types"
+  (:require [schema.core :as s]
+            [schema.macros :refer (validation-error)]))
+
+(clojure.core/defrecord Reference [schema]
+  s/Schema
+  (walker [this]
+          (let [sub-walker (s/subschema-walker schema)]
+            (clojure.core/fn [x]
+              (if (instance? clojure.lang.IRef x)
+                (sub-walker @x)
+                (validation-error this x (list 'instance? clojure.lang.IRef x))))))
+  (s/explain [this] (list 'reference (s/explain schema))))
+
+(clojure.core/defn reference
+  "A value that must be a reference value (var, ref, atom, future, etc.)"
+  [schema]
+  (Reference. schema))


Re-enable println appender

Re-enable println appender

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/physion/ovation-webapi.git/'


chore(goroutine): change go-routine-start-execution-timeout default value to 50ms

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/B2W-BIT/restQL-server.git/'


Untested minimax draft

Untested minimax draft

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

--- src/singularity/ai.cljs
+++ src/singularity/ai.cljs
@@ -0,0 +1,67 @@
+(ns ^{:doc "Logic and query functions for A.I. opponent."}
+  singularity.ai
+  (:require [singularity.db :as db]
+            [singularity.game :as game]
+            [cljs.core.match :refer-macros [match]]))
+
+(defn nilmin
+  "Returns (min a b), except that `nil` is treated as positive infinity."
+  [a b]
+  (match [a b] [nil nil] nil [_ nil] a [nil _] b :else (min a b)))
+
+(defn- minimax
+  "A functional version of the minimax algorithm with alpha-beta pruning.
+   Returns a tuple [score, state] where 'state' is the winning move for the
+   turn, and 'score' is that state's minimax score. Eexpects to be passed an
+   'h' function (which should accept one node and return a number) as well as a
+   'gen-nodes' function which should accept a node and return a seq of nodes.
+   Other parameters are similar to those found in any other minimax implementation."
+  [h gen-nodes node depth alpha beta my-turn? past-nodes]
+  (let [child-nodes (gen-nodes node)]
+    ; if we reach our depth, use heuristic to estimate value of current state.
+    (if (or (= depth 0) (empty? child-nodes))
+      [(h node) (first past-nodes)]
+      ; otherwise, recursively examine each child turn. Note cmp-fn is conditionally
+      ; set based on my-turn?, which avoids branching and keeps code DRY as possible.
+      (let [cmp-fn (if my-turn? (partial max alpha) (partial nilmin beta))]
+        (loop [child-nodes child-nodes
+               result nil]
+          (let [score (first result)
+                alpha (if my-turn? (cmp-fn score) alpha)
+                beta (if my-turn? beta (cmp-fn score))]
+            ; if alpha >= beta, move is worse than some other possible move, so break
+            ; the loop and return the score. we use 'nil' instead of +/- infinity.
+            (if (and (some? alpha) (some? beta) (>= alpha beta))
+              result
+              (recur
+                (rest child-nodes)
+                (cmp-fn (minimax h gen-nodes
+                                 (first child-nodes)
+                                 (dec depth)
+                                 alpha beta
+                                 (not my-turn?)
+                                 (conj past-nodes (first child-nodes))))))))))))
+
+(defn move
+  "Returns a valid turn for the A.I. expressed as a coordinate tuple (from, to).
+   If there are no valid moves, or if it is not the A.I.s turn, returns nil."
+  []
+  (let [depth (db/get :ai-depth)
+        board (db/get :board) ; current board state is used as root node
+        them (db/get :me) ; since I am AI, the human player is "them"
+        me (case them :white :black :black :white)
+        space-score #(let [c (get-in % [1 :piece :color])]
+                      (*
+                        (cond (= c me) 1 (= c them) -1 true 0)
+                        (game/piece-scores (get-in % [1 :piece :type]))))
+        board-score #(reduce + (map space-score %))
+        next-moves #(map (partial apply (partial game/move %)) (game/available-moves % me))]
+    ; call into the implementation to get a turn.
+    (if (= (db/get :turn) me)
+      (print (board-score board))
+      (minimax board-score next-moves board depth nil nil true []))))
+
+(defn init!
+  "Initializes AI configuration settings."
+  []
+  (db/define :ai-depth 1))


cleanup cache stress test

cleanup cache stress test

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/michaelsbradleyjr/transwarp.git/'


More tests for net

More tests for net

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/terrancesnyder/engulf.git/'


actually start aurora

actually start aurora

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/jchli/jepsen-aurora.git/'


initial checkin of the MySQL temp DB test data loader

error: pathspec 'test/metabase/test/data/mysql.clj' did not match any file(s) known to git

--- test/metabase/test/data/mysql.clj
+++ test/metabase/test/data/mysql.clj
@@ -0,0 +1,101 @@
+(ns metabase.test.data.mysql
+  "Code for creating / destroying a MySQL database from a `DatabaseDefinition`."
+  (:require [clojure.java.jdbc :as jdbc]
+            [clojure.tools.logging :as log]
+            [environ.core :refer [env]]
+            (korma [core :as k]
+                   [db :as kdb])
+            (metabase.test.data [generic-sql :as generic]
+                                [interface :refer :all]))
+  (:import (metabase.test.data.interface DatabaseDefinition
+                                         FieldDefinition
+                                         TableDefinition)))
+
+(def ^:private ^:const field-base-type->sql-type ;; TODO
+  {:BigIntegerField "BIGINT"
+   :BooleanField    "BOOL"
+   :CharField       "VARCHAR(254)"
+   :DateField       "DATE"
+   :DateTimeField   "TIMESTAMP"
+   :DecimalField    "DECIMAL"
+   :FloatField      "FLOAT"
+   :IntegerField    "INTEGER"
+   :TextField       "TEXT"
+   :TimeField       "TIME"})
+
+(defn- mysql-connection-details [^DatabaseDefinition {:keys [short-lived?]}]
+  (merge {:host         "localhost"
+          :port         3306
+          :short-lived? short-lived?}
+         ;; HACK
+         (when (env :circleci)
+           {:user "ubuntu"})))
+
+(defn- db-connection-details [^DatabaseDefinition database-definition]
+  (assoc (mysql-connection-details database-definition)
+         :db (:database-name database-definition)))
+
+(defn- execute! [scope ^DatabaseDefinition database-definition & format-strings]
+  (jdbc/execute! (-> ((case scope
+                        :mysql mysql-connection-details
+                        :db    db-connection-details) database-definition)
+                     kdb/mysql
+                     (assoc :make-pool? false))
+                 [(apply format format-strings)]
+                 :transaction? false))
+
+
+(defrecord MySQLDatasetLoader []
+  generic/IGenericSQLDatasetLoader
+  (generic/execute-sql! [_ database-definition raw-sql]
+    (log/debug raw-sql)
+    (execute! :db database-definition raw-sql))
+
+  (generic/korma-entity [_ database-definition table-definition]
+    (-> (k/create-entity (:table-name table-definition))
+        (k/database (-> (db-connection-details database-definition)
+                        kdb/mysql
+                        (assoc :make-pool? false)
+                        kdb/create-db))))
+
+  (generic/pk-sql-type   [_] "MEDIUMINT NOT NULL AUTO_INCREMENT")
+  (generic/pk-field-name [_] "id")
+
+  (generic/field-base-type->sql-type [_ field-type]
+    (if (map? field-type) (:native field-type)
+        (field-base-type->sql-type field-type))))
+
+(extend-protocol IDatasetLoader
+  MySQLDatasetLoader
+  (engine [_]
+    :mysql)
+
+  (database->connection-details [_ database-definition]
+    (assoc (db-connection-details database-definition)
+           :timezone :America/Los_Angeles))
+
+  (drop-physical-db! [_ database-definition]
+    (execute! :mysql database-definition "DROP DATABASE IF EXISTS \"%s\";" (:database-name database-definition)))
+
+  (drop-physical-table! [this database-definition table-definition]
+    (generic/drop-physical-table! this database-definition table-definition))
+
+  (create-physical-table! [this database-definition table-definition]
+    (generic/create-physical-table! this database-definition table-definition))
+
+  (create-physical-db! [this {:keys [database-name], :as database-definition}]
+    (execute! :mysql database-definition "DROP DATABASE IF EXISTS \"%s\";" database-name)
+    (execute! :mysql database-definition "CREATE DATABASE \"%s\";" database-name)
+
+    ;; double check that we can connect to the newly created DB
+    (metabase.driver/can-connect-with-details? :mysql (db-connection-details database-definition) :rethrow-exceptions)
+
+    ;; call the generic implementation to create Tables + FKs
+    (generic/create-physical-db! this database-definition))
+
+  (load-table-data! [this database-definition table-definition]
+    (generic/load-table-data! this database-definition table-definition)))
+
+
+(defn dataset-loader []
+  (MySQLDatasetLoader.))


Fix failing test for bad path

Fix failing test for bad path


as macros instead??

as macros instead??

--- src/metabase/api/common.clj
+++ src/metabase/api/common.clj
@@ -182,18 +182,18 @@
                         (map first))]
     `(defroutes ~'routes ~@api-routes ~@additional-routes)))

-(defn read-check
+(defmacro read-check
   ([obj]
-   (let-404 [{:keys [can_read]} obj]
-     (check-403 @can_read)
-     obj))
+   `(let-404 [{:keys [~'can_read] :as obj#} ~obj]
+      (check-403 @~'can_read)
+      obj#))
   ([entity id]
-   (read-check (eval `(sel :one ~entity :id ~id)))))
+   `(read-check (sel :one ~entity :id ~id))))

-(defn write-check
+(defmacro write-check
   ([obj]
-   (let-404 [{:keys [can_write]} obj]
-     (check-403 @can_write)
-     obj))
+   `(let-404 [{:keys [~'can_write] :as obj#} ~obj]
+      (check-403 @~'can_write)
+      obj#))
   ([entity id]
-   (write-check (eval `(sel :one ~entity :id ~id)))))
+   `(write-check (sel :one ~entity :id ~id))))


Implement basic countdown system

Implement basic countdown system

Signed-off-by: Yen-Chin Lee <082d453d72dce940e12089a4ad48b97cfe1f3ec4@gmail.com>

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/coldnew/pomodo.git/'


fix prime test

fix prime test

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/tlight/project-euler.git/'


Prevented typesetting on <pre> tags

Prevented typesetting on <pre> tags

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/hudren/ebook-novel.git/'


Update formatting

Update formatting

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/lobodin/slack-translate.git/'


Fetish.

Fetish.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/mtravers/incidents.git/'


Add tests for the map-monoid context.

Add tests for the map-monoid context.

--- test/cats/builtin_spec.cljc
+++ test/cats/builtin_spec.cljc
@@ -18,6 +18,14 @@

   (t/testing "extract function"
     (t/is (= (p/extract nil) nil))))
+
+(t/deftest map-tests
+  (t/testing "Map as monoid"
+    (t/is (= (m/mempty b/map-monoid) {})))
+  (t/testing "Map as semigroup"
+    (t/is (= (m/mappend "1" "2") "12"))
+    (t/is (= (m/mappend (m/mempty b/map-monoid) "1") "1"))))
+

 (t/deftest vector-monad
   (t/testing "Forms a semigroup"


Add test file.

Add test file.

error: pathspec 'test/decimal/core_spec.cljs' did not match any file(s) known to git


MIDI player spike :ghost:

MIDI player spike :ghost:

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/jtbeckha/alda.git/'


add Accept and Origin to Access-Control-Allow-Headers

--- src/ruuvi_server/util.clj
+++ src/ruuvi_server/util.clj
@@ -100,7 +100,7 @@
                  {:headers
                   (merge (:headers response)
                          {"Access-Control-Allow-Origin" (or request-origin "*")
-                          "Access-Control-Allow-Headers" "X-Requested-With, Content-Type"
+                          "Access-Control-Allow-Headers" "X-Requested-With, Content-Type, Accept, Origin"
                           "Access-Control-Allow-Methods" options})})]
       cors-response
       )))


Initial cljs app dir+main file

Initial cljs app dir+main file

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


Comment.

Comment.


Add JAXB module in lein jvm-opts (#32)

Add JAXB module in lein jvm-opts (#32)

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Yleisradio/yle-api-template.git/'


initial commit of some diff stuff

initial commit of some diff stuff

error: pathspec 'src/metabase/models/diff.clj' did not match any file(s) known to git

--- src/metabase/models/diff.clj
+++ src/metabase/models/diff.clj
@@ -0,0 +1,54 @@
+(ns metabase.models.diff
+  (:require [clojure.core.match :refer [match]]
+            (clojure [data :as data]
+                     [string :as s])))
+
+(defn- diff-str* [t k v1 v2]
+  (match [t k v1 v2]
+    [_ :name _ _]
+    (format "renamed it from \"%s\" to \"%s\"" v1 v2)
+
+    [_ :private true false]
+    "made it public"
+
+    [_ :private false true]
+    "made it private"
+
+     [_ _ _ _]
+     (format "changed %s from \"%s\" to \"%s\"" (name k) v1 v2)))
+
+(defn- interpose-build-runon-sentence [parts]
+  (cond
+    (= (count parts) 1) (str (first parts) \.)
+    (= (count parts) 2) (format "%s and %s." (first parts) (second parts))
+    :else               (format "%s, %s" (first parts) (interpose-build-runon-sentence (rest parts)))))
+
+(defn diff-str
+  ([t o1 o2]
+   (let [[before after] (data/diff o1 o2)]
+     (when before
+       (let [ks (keys before)]
+         (-> (for [k ks]
+               (diff-str* t k (k before) (k after)))
+             interpose-build-runon-sentence
+           (s/replace-first #" it " (format " this %s " t)))))))
+  ([username t o1 o2]
+   (str username " " (diff-str t o1 o2))))
+
+(defn- y []
+  (diff-str "Cam Saul" "card" {:name "Tips by State", :private false} {:name "Spots by State", :private false}))
+;; Cam Saul renamed this card from "Tips by State" to "Spots by State".
+
+(defn z1 []
+  (diff-str "Cam Saul" "card" {:name "Spots by State", :private false} {:name "Spots by State", :private true}))
+;; Cam Saul made this card private.
+
+(defn- z []
+  (diff-str "Cam Saul" "card" {:name "Tips by State", :private false} {:name "Spots by State", :private true}))
+;; Cam Saul made this card private and renamed it from "Tips by State" to "Spots by State".
+
+(defn- x []
+  (diff-str "Cam Saul" "card"
+            {:name "Tips by State", :private false, :priority "Important"}
+            {:name "Spots by State", :private true, :priority "Regular"}))
+;; Cam Saul changed priority from "Important" to "Regular", made this card private and renamed it from "Tips by State" to "Spots by State".


Test dao/convert-entity-to-map pipeline

Test dao/convert-entity-to-map pipeline

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/physion/ovation-webapi.git/'


Removed unused deps.

Removed unused deps.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/acessocard/microscope.git/'


solved

solved

error: pathspec 'src/4clojure/word_sort.clj' did not match any file(s) known to git

--- src/4clojure/word_sort.clj
+++ src/4clojure/word_sort.clj
@@ -0,0 +1,45 @@
+;; Word Sorting
+;; http://www.4clojure.com/problem/70
+
+;; Difficulty:	Medium
+;; Topics:	sorting
+
+
+;; Write a function that splits a sentence up into a sorted list of words. Capitalization should not affect sort order and punctuation should be ignored.
+
+
+(defn __ [string]
+;;   (sort #(compare (.toLowerCase %1) (.toLowerCase %2)) (re-seq #"\w+" string)))
+  (sort-by #(.toLowerCase %) (re-seq #"\w+" string)))
+
+(re-seq #"\w+" "Have a nice day.")
+
+(compare (.toLowerCase "Have") (.toLowerCase "a"))
+
+
+(= (__  "Have a nice day.")
+   ["a" "day" "Have" "nice"])
+
+(= (__  "Clojure is a fun language!")
+   ["a" "Clojure" "fun" "is" "language"])
+
+(= (__  "Fools fall for foolish follies.")
+   ["fall" "follies" "foolish" "Fools" "for"])
+
+
+;; 4Clojure copy paste
+(fn [s] (sort #(compare (.toLowerCase %1) (.toLowerCase %2)) (re-seq #"\w+" s)))
+
+
+;; _artem_uv's solution:
+#(sort (fn [a1 a2] (compare (clojure.string/upper-case a1) (clojure.string/upper-case a2))) (seq (clojure.string/split (clojure.string/replace % #"[\.\!]" "") #" ")))
+
+;; _pcl's solution:
+(fn [x] (sort-by #(.toLowerCase %) (.split (.replaceAll x "[^a-zA-Z ]" "") " ")))
+
+;; aceeca1's solution:
+(comp (partial sort-by clojure.string/lower-case) #(clojure.string/split % #"[^A-Za-z]"))
+
+;; adereth's solution:
+(fn [sent]
+  (sort-by #(.toLowerCase %) (.split (->> sent butlast (apply str)) " ")))


fix up misspelling detection

fix up misspelling detection

--- sidecar/src/figwheel_sidecar/type_check.clj
+++ sidecar/src/figwheel_sidecar/type_check.clj
@@ -43,19 +43,24 @@
            (list?? x))
        (empty? (rest x))))

+
+(defn complex-value? [v]
+  (or (list?? v) (map?? v) (fn? v) (-> v meta :ref)))
+
+(def simple-value? (complement complex-value?))
+
 (defn prep-key [k]
   (if (fn? k)
     (keyword (str "pred-key_" (hash k)))
     k))

-(defn handle-key-type [orig-key predicate-key-name node t]
-  (if (fn? orig-key)
-    [[predicate-key-name :?- [node :> t]]
-     [predicate-key-name :k= orig-key]]
-    [[orig-key :- [node :> t]]]))
-
 (defn decompose [type-gen-fn node' s']
-  (letfn [(decomp [node s]
+  (letfn [(handle-key-type [orig-key predicate-key-name node t]
+            (if (fn? orig-key)
+              [[predicate-key-name :?- [node :> t]]
+               [predicate-key-name := orig-key]]
+              [[orig-key :- [node :> t]]]))
+          (decomp [node s]
             (if (nil? s)
               nil
               (let [[[k' v] & r] s
@@ -215,7 +220,7 @@

 (defn find-keyword-predicate [parent-type]
   (when-let [[pred-id _ [pt _ kt]] (first (*schema-rules* [:parent :?- parent-type]))]
-    (when-let [pred-func (last (first (*schema-rules* [:k= pred-id])))]
+    (when-let [pred-func (last (first (*schema-rules* [:= pred-id])))]
       [pred-func kt])))

 ;; this is what implements or
@@ -292,12 +297,18 @@
 (defn named? [x]
   (or (string? x) (instance? clojure.lang.Named x)))

+(defn string-or-symbol? [x]
+  (or (string? x) (symbol? x)))
+
 (defn boolean? [x] (or (true? x) (false? x)))

 (defn anything? [x] true)

 (defn key-distance [k other-key]
   (metrics/dice (name k) (name other-key)) )
+
+#_(metrics/levenshtein "fihgweel" "figwheel")
+#_(metrics/mra-comparison )

 (defn similar-key [thresh k other-key]
   (and (and (named? k)
@@ -489,6 +500,10 @@
 (defmethod predicate-explain integer? [_ value] "Integer")
 (defmethod predicate-explain string? [_ value] "String")
 (defmethod predicate-explain symbol? [_ value] "Symbol")
+(defmethod predicate-explain number? [_ value] "Number")
+
+(defmethod predicate-explain string-or-symbol? [_ value] "String or Symbol")
+
 (defmethod predicate-explain keyword? [_ value] "Keyword")

 (defmethod predicate-explain named? [_ value] "String, Keyword, or Symbol")
@@ -734,10 +749,10 @@
   (let [{:keys [ky] :as p} (docs-for parent-type k)]
     (if ky
       [:group
-       "Doc for key " (color (pr-str k) :bold)
+       "-- Docs for key " (color (pr-str k) :bold) " --"
        :break
-       [:nest 2 (color ky
-                       :underline)]
+       (color ky
+                       :underline)
        :break]
       "")))

@@ -752,6 +767,9 @@
       ))))

 (pprint-document (summerize-map {:asdf 4 :Asdf 5 :fdas 7}) {:width 10})
+
+(pprint-document [:align 10
+                  "asdfasdf\nasdfasdfasd\n"] {})

 (pprint-document (summerize-value #{1 2 }) {:width 40})


Seven Languages in Seven Weeks: Clojure day 1.

error: pathspec 'SevenLanguages/Clojure/day1.clj' did not match any file(s) known to git

--- SevenLanguages/Clojure/day1.clj
+++ SevenLanguages/Clojure/day1.clj
@@ -0,0 +1,9 @@
+(defn big [st n]
+    (> (count st) n))
+
+(defn collection-type [col]
+    (cond
+        (list? col) :list
+        (map? col) :map
+        (vector? col) :vector))
+


Fixups

Fixups


packaged

packaged

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/clojure-ml/cml.git/'


Allow any

Allow any


Allow null location and allow user_preference


Namespace elections/all-upcoming interceptor

Namespacing interceptor names is more important in this consolidated http-api gateway b/c common names are more likely to be re-used in different contexts.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/turbovote-http-api.git/'


Add test for whether messaging short circuiting works

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

--- test/onyx/peer/messaging_short_circuit_test.clj
+++ test/onyx/peer/messaging_short_circuit_test.clj
@@ -0,0 +1,103 @@
+(ns onyx.peer.messaging-short-circuit-test
+  (:require [clojure.core.async :refer [chan >!! <!! close! sliding-buffer]]
+            [midje.sweet :refer :all]
+            [onyx.plugin.core-async :refer [take-segments!]]
+            [onyx.test-helper :refer [load-config]]
+            [onyx.api]))
+
+(def id (java.util.UUID/randomUUID))
+
+(def config (load-config))
+
+(def env-config (assoc (:env-config config) :onyx/id id))
+
+(def peer-config (assoc (:peer-config config) :onyx/id id :onyx.messaging/allow-short-circuit? true))
+
+(def env (onyx.api/start-env env-config))
+
+(def peer-group (onyx.api/start-peer-group peer-config))
+
+(def n-messages 100)
+
+(def batch-size 20)
+
+(defn my-inc [{:keys [n] :as segment}]
+  (assoc segment :n (inc n)))
+
+(def catalog
+  [{:onyx/name :in
+    :onyx/plugin :onyx.plugin.core-async/input
+    :onyx/type :input
+    :onyx/medium :core.async
+    :onyx/batch-size batch-size
+    :onyx/max-peers 1
+    :onyx/doc "Reads segments from a core.async channel"}
+
+   {:onyx/name :inc
+    :onyx/fn :onyx.peer.messaging-short-circuit-test/my-inc
+    :onyx/type :function
+    :onyx/batch-size batch-size}
+
+   {:onyx/name :out
+    :onyx/plugin :onyx.plugin.core-async/output
+    :onyx/type :output
+    :onyx/medium :core.async
+    :onyx/batch-size batch-size
+    :onyx/max-peers 1
+    :onyx/doc "Writes segments to a core.async channel"}])
+
+(def workflow [[:in :inc] [:inc :out]])
+
+(def in-chan (chan (inc n-messages)))
+
+(def out-chan (chan (sliding-buffer (inc n-messages))))
+
+(defn inject-in-ch [event lifecycle]
+  {:core.async/chan in-chan})
+
+(defn inject-out-ch [event lifecycle]
+  {:core.async/chan out-chan})
+
+(def in-calls
+  {:lifecycle/before-task-start inject-in-ch})
+
+(def out-calls
+  {:lifecycle/before-task-start inject-out-ch})
+
+(def lifecycles
+  [{:lifecycle/task :in
+    :lifecycle/calls :onyx.peer.messaging-short-circuit-test/in-calls}
+   {:lifecycle/task :in
+    :lifecycle/calls :onyx.plugin.core-async/reader-calls}
+   {:lifecycle/task :out
+    :lifecycle/calls :onyx.peer.messaging-short-circuit-test/out-calls}
+   {:lifecycle/task :out
+    :lifecycle/calls :onyx.plugin.core-async/writer-calls}])
+
+(doseq [n (range n-messages)]
+  (>!! in-chan {:n n}))
+
+(>!! in-chan :done)
+(close! in-chan)
+
+(def v-peers (onyx.api/start-peers 3 peer-group))
+
+(onyx.api/submit-job
+ peer-config
+ {:catalog catalog
+  :workflow workflow
+  :lifecycles lifecycles
+  :task-scheduler :onyx.task-scheduler/balanced})
+
+(def results (take-segments! out-chan))
+
+(let [expected (set (map (fn [x] {:n (inc x)}) (range n-messages)))]
+  (fact (set (butlast results)) => expected)
+  (fact (last results) => :done))
+
+(doseq [v-peer v-peers]
+  (onyx.api/shutdown-peer v-peer))
+
+(onyx.api/shutdown-peer-group peer-group)
+
+(onyx.api/shutdown-env env)


Version 1.7.1

Version 1.7.1

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/starcity-properties/odin.git/'


clean up :jvm-opts

clean up :jvm-opts

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/michaelsbradleyjr/transwarp.git/'


clojurescript project definition

clojurescript project definition

error: pathspec 'project.clj' did not match any file(s) known to git

--- project.clj
+++ project.clj
@@ -0,0 +1,30 @@
+(defproject bigboat-agent-compose "0.1.0-SNAPSHOT"
+  :description "An agent implementation for Big Boat based on Docker Compose"
+  :url "http://example.com/FIXME"
+  :dependencies [[org.clojure/clojure "1.8.0"]
+                 [org.clojure/clojurescript "1.9.293"]]
+  :jvm-opts ^:replace ["-Xmx1g" "-server"]
+  :plugins [[lein-npm "0.6.1"]
+            [lein-cljsbuild "1.1.5"]]
+  :npm {:dependencies [[source-map-support "0.4.0"]
+                       [lodash "4.17.4"]]}
+  :source-paths ["clojure" "target/classes"]
+  :clean-targets ["out" "release"]
+  :target-path "target"
+
+  :cljsbuild
+  { :builds
+    [{:id "simple"
+      :source-paths ["clojure"]
+      :compiler
+      { :output-dir "out"
+        :optimizations :none
+        :cache-analysis true
+        :source-map true
+        :verbose true
+        :output-wrapper false
+        :target :nodejs
+        :modules
+        { :compose
+          { :output-to "out/compose/compose.js"
+            :entries #{"compose.compose"}}}}}]})


Version 162-SNAPSHOT

Version 162-SNAPSHOT

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/tobias/clojars-web.git/'


Version 143

Version 143


bump version to 3.5.0-SNAPSHOT

bump version to 3.5.0-SNAPSHOT

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/B2W-Digital/pdg-core.git/'


condp

condp


Version 0.17.2

Version 0.17.2

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject clojars-web "0.17.2-SNAPSHOT"
+(defproject clojars-web "0.17.2"
   :dependencies [[org.clojure/clojure "1.6.0"]
                  [org.clojure/tools.cli "0.2.1"]
                  [yeller-clojure-client "1.2.1"]


Version 43

Version 43

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject clojars-web "43-SNAPSHOT"
+(defproject clojars-web "43"
   :min-lein-version "2.0.0"
   :dependencies [[org.clojure/clojure "1.8.0"]
                  [org.clojure/tools.cli "0.2.1"]


Update dependencies

Update dependencies

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/election-authority-works.git/'


Use BaseEntity so that EntityUpdate doesn't allow links


Handle nil username/password for ES

Handle nil username/password for ES


add keywordized language query param to reg methods

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/voter-registration-http-api.git/'


adding tests for source map manipulation

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

--- test/text_stream/edits_test.clj
+++ test/text_stream/edits_test.clj
@@ -0,0 +1,121 @@
+(ns text-stream.edits-test
+  (:require [clojure.test :refer :all]
+            [text-stream.edits :refer :all]))
+
+(deftest source-map
+  (testing "initial-text"
+    (let [text "Hello, world!"
+          pos (count text)
+          source-map (initial-text text)]
+      (is (= (:text source-map) text))
+      (is (= (:pos source-map) pos)))))
+
+(deftest editing-functions
+  (testing "titled"
+    (let [title "This is our title!"
+          text "Hello, world!"
+          source-map (initial-text text)
+          titled-map ((titled title) source-map)]
+      (is (= (:title titled-map) title)
+          "Changing the title.")
+      (is (= (assoc source-map :title title) titled-map)
+          "Maintaining other keys.")))
+
+  (testing "cursor"
+    (let [title "Title"
+          text "Hello, world!"
+          source-map ((titled title) (initial-text text))
+          index (int (/ (count text) 2))
+          cursor-map ((cursor index) source-map)]
+      (is (= (:pos cursor-map) index)
+          "Changing cursor position.")
+      (is (= (assoc source-map :pos index) cursor-map)
+          "Maintaining other keys.")))
+
+  (testing "cursor-left"
+    (let [title "Title"
+          text "Hello, world!"
+          source-map ((titled title) (initial-text text))
+          cursor1-map ((cursor-left 1) source-map)
+          cursor-all-map ((cursor-left (count text)) source-map)]
+
+      (testing "left 1"
+        (is (= (:pos cursor1-map) (dec (count text)))
+            "Changing cursor position.")
+        (is (= cursor1-map (assoc source-map :pos (dec (count text))))
+            "Maintaining other keys."))
+
+      (testing "left all"
+        (is (= (:pos cursor-all-map) 0)
+            "Changing cursor position.")
+        (is (= cursor-all-map (assoc source-map :pos 0))
+            "Maintaining other keys."))))
+
+  (testing "cursor-right"
+    (let [title "Title"
+          text "Hello, world!"
+          source-map ((comp (cursor 0) (titled title)) (initial-text text))
+          cursor1-map ((cursor-right 1) source-map)
+          cursor-all-map ((cursor-right (count text)) source-map)]
+
+      (testing "right 1"
+        (is (= (:pos cursor1-map) 1)
+            "Changing cursor position.")
+        (is (= cursor1-map (assoc source-map :pos 1))
+            "Maintaining other keys."))
+
+      (testing "right all"
+        (is (= (:pos cursor-all-map) (count text))
+            "Changing cursor position.")
+        (is (= cursor-all-map (assoc source-map :pos (count text)))
+            "Maintaining other keys."))))
+
+  (testing "delete"
+    (let [text "Hello, world!"
+          source-map ((titled "Test") (initial-text text))
+          tests #(for [n (range %1)]
+                   (let [pos (- (:pos %2) n)]
+                     {:n n
+                      :result ((delete n) %2)
+                      :correct
+                      (merge %2
+                             {:pos pos
+                              :text (str
+                                     (subs text 0 pos)
+                                     (subs text (:pos %2)))})}))
+          end-tests (tests (inc (:pos source-map)) source-map)
+          middle-index (int (/ (count text) 2))
+          middle-tests (tests middle-index ((cursor middle-index) source-map))]
+
+      (testing "from end"
+        (for [t end-tests]
+          (is (= (:result t) (:correct t)))))
+
+      (testing "from middle"
+        (for [t end-tests]
+          (is (= (:result t) (:correct t)))))
+
+      (testing "out of bounds"
+        (is (thrown? StringIndexOutOfBoundsException
+                     ((delete (inc (count text))) source-map))))))
+
+  (testing "forward-delete"
+    (let [text "Hello, world!"
+          source-map ((titled "Test") (initial-text text))
+          beginning-map ((cursor 0) source-map)
+          middle-map ((cursor (int (/ (count text) 2))) source-map)]
+
+      (testing "from beginning"
+        (is (= ((forward-delete 1) beginning-map)
+               ((comp (delete 1) (cursor 1)) source-map))
+            "Deleting forwards 1 from :pos 0."))
+
+      (testing "from middle"
+        (is (= ((forward-delete 1) middle-map)
+               ((comp (delete 1) (cursor (inc (:pos middle-map))))
+                source-map))
+            "Deleting forwards 1 from the middle."))
+
+      (testing "out of bounds"
+        (is (thrown? StringIndexOutOfBoundsException
+                     ((forward-delete 1) source-map)))))))


Add special rule for bitbucket commit links

--- src-cljs/acha.cljs
+++ src-cljs/acha.cljs
@@ -151,7 +151,9 @@

 (defn- commit-web-url [clone-url sha1]
   (when-let [web-url (repo-web-url clone-url)]
-    (str web-url "/commit/" sha1)))
+    (condp re-find web-url
+      #"(?i)^https?://(www\.)?bitbucket\.org" (str web-url "/commits/" sha1)
+      (str web-url "/commit/" sha1))))

 (defn ach-details [ach]
   (str (get-in ach [:ach/user :user/name])


Refactor: move item-text-input into own component

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Reefersleep/sleepydo.git/'


moar time

moar time

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/election-notification-works.git/'


Use atoms instead of ConcurrentHashMap

Use atoms instead of ConcurrentHashMap

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/leif47/immutabledb-experimental.git/'


add answer

add answer

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/croeder/clojure-koans-work.git/'


Shen test suite embedded in clojure.test

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/michaelsbradleyjr/shen.clj.git/'


Added library to compile handlers into nested if statements

error: pathspec 'src/compojure/http/handlers.clj' did not match any file(s) known to git

--- src/compojure/http/handlers.clj
+++ src/compojure/http/handlers.clj
@@ -0,0 +1,48 @@
+;; Copyright (c) James Reeves. All rights reserved.
+;; The use and distribution terms for this software are covered by the Eclipse
+;; Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) which
+;; can be found in the file epl-v10.html at the root of this distribution. By
+;; using this software in any fashion, you are agreeing to be bound by the
+;; terms of this license. You must not remove this notice, or any other, from
+;; this software.
+
+;; compojure.http.handlers:
+;;
+;;
+
+(ns compojure.http.handlers
+  (:use compojure.http.routes)
+  (:import java.util.regex.Pattern))
+
+(defn- route-clause
+  "Generate a clause for matching the route method and path against a supplied
+  method and path."
+  [[s-method s-path] [r-method r-path _]]
+  (let [route `(compile-route ~r-path)]
+    (if (= r-method 'ANY)
+     `(match-route ~route ~s-path)
+     `(and (= ~s-method ~(name r-method))
+           (match-route ~route ~s-path)))))
+
+(defn- compile-handler
+  "Compile a handler into an if statement."
+  [method-and-path [method path & then] else]
+  `(let [~'route ~(route-clause method-and-path [method path])
+           resp#  (if ~'route (do ~@then) :next)]
+     (if (not= resp# :next)
+       resp#
+      ~else)))
+
+(defmacro handle-http
+  "Given a method and path variable, compile a list of handlers into a set of
+  nested if forms.
+  e.g.
+  (handle-http [method path]
+    (GET \"/\" \"Hello World\")
+    (ANY \"*\" [404 \"Not Found\"]))"
+  [method-and-path & handlers]
+  (if (seq handlers)
+    (compile-handler method-and-path
+      (first handlers)
+     `(handle-http ~method-and-path ~@(rest handlers)))
+    :next))


[WM] clean up service ns

[WM] clean up service ns

Removed some ballot-scout-isms that are more complex than we need in here and switched to using a 201 Created response on the POST /users handler.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/user-http-api.git/'


Add example suite1.clj

Add example suite1.clj

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

--- src/examples/clojure/suite1.clj
+++ src/examples/clojure/suite1.clj
@@ -0,0 +1,33 @@
+(ns suite1
+  (:use [com.stuartsierra.lazytest :only (deftest defsuite)]))
+
+(deftest even-odd []
+  (odd? 1)
+  (even? 2)
+  (odd? 3)
+  (even? 4))
+
+(deftest zero "Zero is even, not odd" []
+  (even? 0)
+  "Zero is not odd"
+  (odd? 0))
+
+(defsuite numbers "Simple number tests" []
+  even-odd zero)
+
+(deftest addition []
+  (= 2 (+ 1 1))
+  (= 3 (+ 2 1))
+  "Psychotic math"
+  (= 5 (+ 2 2)))
+
+(deftest subtraction []
+  (= 0 (- 1 1))
+  (= 1 (- 2 1))
+  (= 3 (- 5 2)))
+
+(defsuite arithmetic []
+  addition subtraction)
+
+(defsuite all-tests []
+  numbers arithmetic)


Promise wrappers in new util file

Promise wrappers in new util file


this displays all pages

this displays all pages

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

--- src/adder/pages.clj
+++ src/adder/pages.clj
@@ -0,0 +1,420 @@
+
+
+
+
+
+
+;I tried to add CSS, but I was not successfull:
+;http://stackoverflow.com/questions/2130448/getting-started-with-css-in-compojure
+(ns adder.pages
+  (:use compojure.core
+        [hiccup core form page element]
+        [adder.PageParser]
+        [adder.reorder]
+        [adder.dbManagement]
+        [adder.image-reader]
+		[adder.middleware])
+  (:require [compojure.handler :as handler])
+
+  (:import [java.io InputStream InputStreamReader BufferedReader]
+           [java.net URL HttpURLConnection])); add middleware for params
+
+(defn view-layout2 [& content]
+  (html5 [:body content]))
+
+(defn view-layout [& content]
+  (html5
+			[:head
+				[:title "Movie Helper"]
+    (include-css "/CSS_Style.css")
+	(include-js "http://code.jquery.com/jquery-2.1.1.min.js")
+				;;[:link {:href "src/resources/CSS_Style.css" :rel "stylesheet" :type "text/css"}]
+    ]
+			[:body content ;(include-css "/CSS_Style.css")
+    ]
+    ))
+
+
+
+
+(defn view-input []
+  (view-layout
+
+    [:h2 "Find your Movie"]
+	[:body {:style "font: 14pt/16pt helvetica; background-color: #F2FB78; padding-top:100px; text-align: center"  }
+    (form-to [:post "/"]
+
+      [:br]
+	  [:br]
+      (text-field {:placeholder "Enter movie name" } :a) [:br]
+      (submit-button "Search")
+      [:br]
+	  [:br]
+	  [:br]
+	  (str "
"
+
+           (str "
"
+		   "" ">>> Your Watchlist <<<" "	"
+		   "
"
+			"
"
+		   "" "" "Add a new film to your watchlist" "" "	"
+		   "
"
+		   "
"
+           "" "" "Add new movie-series to your watchlist" "" "	"
+           "
"
+         "
"))
+		 [:br]
+		 [:br]
+		 [:br]
+		 (str "
"
+
+           (str "
"
+		   "" ">>> Browse your movies here <<<" "	"
+		   "
"
+			"
"
+		   "" "" "View complete list of your movies" "" "	"
+		   "
"
+		   "
"
+           "" "" "View list of your movie series" "" "	"
+           "
"
+         "
"))
+
+		 )]
+		 ))
+
+
+(defn change-window []
+  (view-layout
+    [:h2 "You have successfully made changes to your Watchlist"]
+	[:body {:style "font: 14pt/16pt helvetica; background-color: #F2FB78; padding-top:100px; text-align: center"  }
+    (form-to [:post "/"]
+
+
+	  [:br]
+      [:br]
+	  [:br]
+	  (str "
"
+
+           (str "
"
+		   "" ">>> From here, you can: <<<" "	"
+		   "
"
+		   "
"
+           "" "" "View complete list of your movies" "" "	"
+           "
"
+		   "
"
+           "" "" "View list of your movie series" "" "	"
+           "
"
+			"
"
+		   "" "" "Add a new film to your watchlist" "" "	"
+		   "
"
+		   "
"
+           "" "" "Add new movie-series to your watchlist" "" "	"
+           "
"
+         "
"))
+		 )]
+		 ))
+
+
+
+
+
+(defn create-flick-url [a]
+  (str "http://www.rottentomatoes.com/search/?search=" a ""))
+
+
+(defn flick-vec [a]
+           (vec (let [flick-url (create-flick-url a)
+                     flick-names (print-flick-name-content flick-url)]
+                     (mapper-gen4 flick-names
+                     (get-image-content flick-url)
+
+					 (get-all-reading-links flick-url)
+					 (get-search-URLS flick-names)
+
+                      ))) )
+
+(defn view-output2 [a]
+  (view-layout
+
+    [:h2 "Search results"]
+	[:body {:style "font: 14pt/16pt helvetica; background-color: #F2FB78; padding-top:100px; text-align: center"  }
+    [:form {:method "post" :action "/"}
+      (interleave
+        (for [flick (flick-vec a)]
+        (label :flick_name (:name flick)))
+
+        (for [flick-name (flick-vec a)][:br])
+
+        (for [flick-image (flick-vec a)]
+           [:img {:id "img_movie" :src (:image flick-image)}])
+
+        (for [flick-read-link (flick-vec a)]
+          (link-to (:read-link flick-read-link) "Read it here!"))
+
+        (for [flick (flick-vec a)]
+        [:br]))]]))
+
+;series cruds
+
+(defn view-movie-series "view all available movie-series" []
+  (html5
+			[:head
+				[:title "movie-series film collection"]
+    ;(include-css "/css/CSS_Style.css")
+    ]
+			[:body {:style "font: 14pt/16pt helvetica; background-color: #F2FB78; padding-top:100px; text-align: center"}
+    (str "
"
+         ( apply str (seq (for [movie-series (list-series)]
+
+           (str "
"
+           ""(:series_production movie-series) "	"
+           ""(:series_name movie-series) "	"
+          ;"" (link-to (:read-link ) "See it here!") "	" ;
+           "" "" "See all saved movies from this movie-series" "" "	"
+           "" "" "Edit movie-series" "" "	"
+           "" "" "Delete movie-series" "" "	"
+           ;"" "" "Add new movie-series" "" "	"
+           "
"
+           )
+         )))
+         "
"
+           "" "" "Add new movie-series" "" "	"
+           "
"
+         "
")]))
+
+(defn save-movie-series []
+  (view-layout
+
+    [:h2 "Add new movie-series"]
+	[:body {:style "font: 14pt/16pt helvetica; background-color: #F2FB78; padding-top:100px; text-align: center"  }
+    (form-to [:post "/addnewmovie-series"]
+
+      (label "lblseriesName" "Movie-series title: ")
+      (text-field  :txtname) [:br]
+
+      (label "lblProducer" "Production name: ")
+      (text-field  :txtproname) [:br]
+
+      (submit-button "Save"))
+	  [:br]
+	  [:br]
+	  (str ""  ">> Return to Homepage <<" "")
+	  ]))
+
+(defn update-movie-series [sid]
+  (view-layout
+    [:h2 "Update movie-series"]
+	[:body {:style "font: 14pt/16pt helvetica; background-color: #F2FB78; padding-top:100px; text-align: center"  }
+    (form-to [:put (format "/editmovie-series/%s" sid)];editmovie-series
+
+      (label "lblseriesName" "Movie-series name: ")
+      (text-field  :txtname (first (map :series_name (list-one-series sid)))) [:br]
+
+      (label "lblProducer" "Production name: ")
+      (text-field  :txtproname (first (map :series_production (list-one-series sid)))) [:br]
+
+      (submit-button "Update"))
+	  [:br]
+	  [:br]
+	  (str ""  ">> Return to Homepage <<" "")
+	  ]))
+
+(defn delete-movie-series [sid]
+  (view-layout
+    [:h2 "Delete selected movie-series"]
+    (form-to [:delete (format "/deletemovie-series/%s" sid)];deletemovie-series
+            [:body {:style "font: 14pt/16pt helvetica; background-color: #F2FB78; padding-top:100px; text-align: center"}
+      (label "lblseriesName" "Movie-series name: ")
+      (text-field  :txtname (first (map :series_name (list-one-series sid)))) [:br]
+
+      (label "lblProducer" "Production name: ")
+      (text-field  :txtproname (first (map :series_production (list-one-series sid)))) [:br]
+
+      (submit-button "Delete")])))
+;end
+
+;;film CRUDS
+
+(defn view-movies "view all available movies" []
+  (html5
+			[:head
+				[:title "movie-series film collection"]
+    ;(include-css "/css/CSS_Style.css")
+    ]
+			[:body {:style "font: 14pt/16pt helvetica; background-color: #F2FB78; padding-top:100px; text-align: center"}
+    (str "
"
+         ( apply str (seq (for [film (list-movies)]
+           (str "
"
+           ""(:name film) "	"
+           ""(:duration film) "	"
+           ""(:Producer film) "	"
+           "" (str ""  "Check it here" "") "	"
+           "" (str ""  "Edit information" "") "	"
+           "" (str ""  "Delete movie" "") "	"
+           "
"))))
+         "
"
+         "" (str ""  "Add movie to your watchlist" "")
+         "	"
+         "
"
+         "
")]))
+
+
+(defn view-movies-from-one-movie-series "view all available movies from one movie-series" [sid]
+  (html5
+			[:head
+				[:title "movie-series film collection"]
+    ;(include-css "/css/CSS_Style.css")
+    ]
+			[:body {:style "font: 14pt/16pt helvetica; background-color: #F2FB78; padding-top:100px; text-align: center"}
+    (str "
"
+         ( apply str (seq (for [film (list-all-movies-from-serie sid)]
+           (str "
"
+           ""(:name film) "	"
+           ""(:duration film) "	"
+           ""(:Producer film) "	"
+           "" (str ""  "Check it here!" "") "	"
+           ;"" (str ""  "Add new here!" "") "	"
+           "" (str ""  "Update it here!" "") "	"
+           "" (str ""  "Delete it here!" "") "	"
+           "
")
+         ))) "
" "" (str ""  "Add new here!" "") "	" "
"
+         "
")]))
+
+(defn view-film-input-update [cid]
+  (view-layout
+    [:h2 "Update film"]
+    (form-to [:put (format "/addfilm/%s" cid)]
+            [:body {:style "font: 14pt/16pt helvetica; background-color: #F2FB78; padding-top:100px; text-align: center"}
+      (label "movname" "Film title: ")
+      (text-field  :txtname (first (map :name (list-one-film cid)))) [:br] ;(first (:name (list-one-film cid)))
+
+      (label "proname" "Producer name: ")
+      (text-field  :txtproname (first (map :producer (list-one-film cid)))) [:br]
+      (label "lbllocation" "File location: ")
+      (text-field :txtlocation (first (map :location (list-one-film cid))))[:br]
+
+      (label "duration" "Duration(minutes): ")
+      (text-field  :txtduration  (first (map :duration (list-one-film cid))))
+      [:br]
+      (submit-button "Update")])))
+
+(defn view-film-input-delete [cid]
+  (view-layout
+    [:h2 "Delete film"]
+    (form-to [:delete (format "/deletefilm/%s" cid)]
+            [:body {:style "font: 14pt/16pt helvetica; background-color: #F2FB78; padding-top:100px; text-align: center"}
+      (label "movname" "Film title: ")
+      (text-field  :txtname (first (map :name (list-one-film cid)))) [:br]
+
+      (label "proname" "Producer name: ")
+      (text-field  :txtproname (first (map :Producer (list-one-film cid)))) [:br]
+      (label "location" "File location: ")
+      (text-field :txtlocation (first (map :location (list-one-film cid))))[:br]
+      (label "duration" "Duration(minutes): ")
+      (text-field  :txtduration  (first (map :duration (list-one-film cid))))
+      [:br]
+      (submit-button "Delete")])))
+
+(defn view-film-input []
+  (view-layout
+  [:body {:style "font: 14pt/16pt helvetica; background-color: #F2FB78; padding-top:100px; text-align: center"}
+    [:h2 "Add new film"]
+    (form-to [:post "/addfilm" ]
+
+      (label "movname" "Film title: ")
+      (text-field  :txtname) [:br]
+
+      (label "proname" "Producer name: ")
+      (text-field  :txtproname) [:br]
+      (label "location" "File location: ")
+      (text-field :txtlocation)[:br]
+
+      (label "duration" "Duration(minutes): ")
+      (text-field  :txtduration)[:br]
+      (submit-button "Save"))
+	  [:br]
+	  [:br]
+	  (str ""  ">> Return to Homepage <<" "")
+	  ]))
+
+
+(defn view-film-input-in-movie-series [sid]
+  (view-layout
+  [:body {:style "font: 14pt/16pt helvetica; background-color: #F2FB78; padding-top:100px; text-align: center"}
+    [:h2 "Add new film"]
+    (form-to [:post (format "/addnewfilmtofran/%s" sid)]
+
+      (label "movname" "Film title: ")
+      (text-field  :txtname) [:br]
+
+      (label "proname" "Producer name: ")
+      (text-field  :txtproname) [:br]
+      (label "location" "File location: ")
+      (text-field :txtlocation)[:br]
+
+      (label "duration" "Duration(minutes): ")
+      (text-field  :txtduration)[:br]
+      (submit-button "Save"))]))
+;;end
+
+(defn view-image [loc] "Open film as an image"
+  (html5 [:head
+				[:title "Manage selected movie-series"]]
+         [:body] (str (open-image2 loc))))
+
+(defroutes main-routes
+   (GET "/" []
+      (view-input))
+
+  (POST "/" [a]
+	(do
+       (println "A" a )
+  (view-output2 a)))
+
+
+
+  (GET "/listmovies" []
+        (view-movies))
+
+  (GET "/addfilm/:cid" [cid] (view-film-input-update cid))
+  (PUT "/addfilm/:cid" [cid txtname txtproname txtlocation txtduration] (update-flick (read-string cid) {:name txtname :Producer txtproname :location txtlocation :duration txtduration}) (change-window))
+
+  (GET "/addnewfilmtofran/:sid" [sid] (view-film-input-in-movie-series sid))
+  (POST "/addnewfilmtofran/:sid" [sid txtname txtproname txtlocation txtduration]
+        (insert-flick txtname txtproname txtlocation txtduration (read-string sid))(change-window))
+
+  (GET "/addfilm" [] (view-film-input))
+  (POST "/addfilm" [txtname txtproname txtlocation txtduration]
+        (insert-flick txtname txtproname txtlocation txtduration 90) (change-window))
+
+  (GET "/deletefilm/:cid" [cid] (view-film-input-delete cid))
+  (DELETE "/deletefilm/:cid" [cid] (delete-flick cid)(change-window))
+
+  (GET "/listmoviesfran/:sid" [sid]
+        (view-movies-from-one-movie-series sid))
+  ;;end
+
+  ;;movie-series
+  (GET "/listseries" []
+        (view-movie-series))
+
+  (GET "/addnewmovie-series" [] (save-movie-series))
+  (POST "/addnewmovie-series" [txtname txtproname] (insert-serie txtname txtproname)(change-window))
+
+  (GET "/editmovie-series/:sid" [sid] (update-movie-series sid));editmovie-series
+  (PUT "/editmovie-series/:sid" [sid txtname txtproname] (update-serie (read-string sid) {:series_name txtname :series_production txtproname})(change-window))
+
+  (GET "/deletemovie-series/:sid" [sid] (delete-movie-series sid))
+  (DELETE "/deletemovie-series/:sid" [sid] (delete-series sid)(change-window))
+  ;;end
+
+  (GET "/viewimage/:cid" [cid] (view-image (load-image-path cid)));
+
+
+
+
+
+  )
+
+
+(def app (handler/site main-routes)) ; wrap the params to allow destructuring to work


get rid of map predicate for values of get-keylike

--- sidecar/src/figwheel_sidecar/utils/fuzzy.clj
+++ sidecar/src/figwheel_sidecar/utils/fuzzy.clj
@@ -81,7 +81,6 @@
                      (filter
                       #(first %)
                       (map (fn [[k v]] [(and (similar-key 0 k ky)
-                                             (map? v)
                                              (ky-distance k ky))
                                         [k v]]) mp))))]
       (-> res first second))))


Add testing arity to delete-subscription-by-phone


Fix indentation in electorate entity

Fix indentation in electorate entity

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/electorate-works.git/'


Use utils/promote-to-body in partners handler

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/turbovote-http-api.git/'


fix fulfilled on date when fulfilling+processing

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/starcity-properties/odin.git/'


Add rhythmize function, which pads or trims sequence/vector depending on given required subdivision/length

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/blackwood/tabbr.git/'


Consolidate descriptions of required-key shorthand

error: pathspec 'test/structural_typing/type_variants/f_required_key_shorthand.clj' did not match any file(s) known to git

--- test/structural_typing/type_variants/f_required_key_shorthand.clj
+++ test/structural_typing/type_variants/f_required_key_shorthand.clj
@@ -0,0 +1,63 @@
+(ns structural-typing.type-variants.f-required-key-shorthand
+  (:use structural-typing.type
+        structural-typing.global-type)
+  (:use midje.sweet structural-typing.assist.testutil))
+
+(start-over!)
+
+(fact "keys standing alone"
+  (type! :X :x :y)
+  (is-checked :X {:x 1, :y 1}) => true
+  (check-for-explanations :X {}) => (just (err:required :x)
+                                                  (err:required :y)))
+
+(fact "a vector of keys"
+  (type! :X [:x :y] [:z])
+  (is-checked :X {:x 1, :y 1, :z 1}) => true
+  (check-for-explanations :X {:z 1}) => (just (err:required :x)
+                                                      (err:required :y))
+  (check-for-explanations :X {:x 1, :y 2}) => (just (err:required :z)))
+
+(fact "required paths"
+  (type! :X [:x [:a :b]])
+  (is-checked :X {:x 1, :a {:b 1}}) => true
+  (check-for-explanations :X {:a {:b 2}}) => (just (err:required :x))
+  (check-for-explanations :X {:x 1 :a 1 :b 2}) => (just (err:required [:a :b]))
+  (check-for-explanations :X {:x 1 :a {:c 2}}) => (just (err:required [:a :b])))
+
+(fact "alternate notation for required"
+  (type! :X (requires :x [:a :b]))
+  (is-checked :X {:x 1, :a {:b 1}}) => true
+  (check-for-explanations :X {:x 1 :a 1 :b 2}) => (just (err:required [:a :b])))
+
+(fact "forks inside of paths"
+  (fact "simple case"
+    (type! :X (requires [:a (forks :b :c) :d]))
+    (is-checked :X {:x 1, :a {:b {:d 1}
+                              :c {:d 2}}}) => true
+    (check-for-explanations :X {:a {:b {:d 1}}}) => (just (err:required [:a :c :d]))
+    (check-for-explanations  :X {:x 1, :a {:b {:d 1}
+                                           :c {:e 2}}}) => (just (err:required [:a :c :d]))
+    (description :X) => '{[:a :b :d] [required-key], [:a :c :d] [required-key]})
+
+  (future-fact "forks that are paths themselves"
+    (type! :Y (requires [:a (forks [:b1 :c1] [:b2 :c2]) :d]))
+    (description :Y) => '{[:a :b1 :c1 :d] [required-key],
+                          [:a :b2 :c2 :d] [required-key]}
+    ;; todo try a few cases
+    )
+
+  (future-fact "forks within forks"))
+
+
+(future-fact "paths-of"
+  (type! :Point {:x integer?, :y integer?})
+  (type! :X (requires (paths-of :Point)))
+  (type! :X (requires [:point (paths-of :Point)])))
+
+(future-fact "paths-of applied to map"
+  "should canonicalize"
+  "can have more path appended to the end?")
+
+
+(start-over!)


[WM] use shorter deadline dates in SMS msgs


Add hoplon mw (under construction)

Add hoplon mw (under construction)

error: pathspec 'src/tailrecursion/boot/middleware/hoplon.clj' did not match any file(s) known to git

--- src/tailrecursion/boot/middleware/hoplon.clj
+++ src/tailrecursion/boot/middleware/hoplon.clj
@@ -0,0 +1,37 @@
+(ns tailrecursion.boot.middleware.hoplon
+  (:require
+    [tailrecursion.boot.deps                :refer [deps]]
+    [tailrecursion.boot.tmpregistry         :refer [mk mkdir exists? unmk]]
+    [tailrecursion.hoplon.compiler.compiler :refer [install-deps compile-dir]]
+    )
+  )
+
+(def dfl-opts
+  {:source-dir  "src/html"
+   :html-out    nil
+   :cljs-out    nil
+   :flib-out    nil
+   :lib-out     nil
+   :ext-out     nil
+   :inc-out     nil})
+
+(defn hoplon [handler]
+  (fn [spec]
+    (let [hspec (merge-with
+                  (comp (partial some identity) vector)
+                  (merge dfl-opts (:hoplon spec))
+                  {:html-out  (mkdir ::html)
+                   :cljs-out  (mkdir ::cljs)
+                   :flib-out  (mkdir ::flib)
+                   :lib-out   (mkdir ::lib)
+                   :ext-out   (mkdir ::ext)
+                   :inc-out   (mkdir ::inc)})]
+      (apply install-deps (deps) ((juxt :inc-out :ext-out :lib-out :flib-out) hspec))
+      (apply compile-dir ((juxt :source-dir :cljs-out :html-out) hspec))
+      (let [ret (handler (assoc spec :hoplon hspec))
+
+            ]
+
+        )
+
+      )))


deblog macro for debugging

deblog macro for debugging

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/wilkerlucio/youtube-looper.git/'


Starting caverphone

Starting caverphone

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


statechart source stub

statechart source stub

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/michaelsbradleyjr/ply.git/'


adds confirm dialog to service deletion UI


repeat, is tests, WIP

repeat, is tests, WIP

error: pathspec 'test/is/repeat.cljs' did not match any file(s) known to git

--- test/is/repeat.cljs
+++ test/is/repeat.cljs
@@ -0,0 +1,5 @@
+
+(println "repeat tests")
+
+(is (= (take 5 (repeat "x")) ("x" "x" "x" "x" "x")))
+(is (= (repeat 5 "x") ("x" "x" "x" "x" "x")))


when creating random test users use the same value for :first_name as :password so that if the caller wants to they can know the password and use their newly created user to login.

--- test/metabase/test_data/create.clj
+++ test/metabase/test_data/create.clj
@@ -13,6 +13,6 @@
         defaults {:first_name first-name
                   :last_name (random-name)
                   :email (.toLowerCase ^String (str first-name "@metabase.com"))
-                  :password (random-name)}]
+                  :password first-name}]
     (->> (merge defaults kwargs)
          (medley/mapply ins User))))


Take an advisory lock before performing migrations

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/scheduled-message-works.git/'


Update ns-tracker dependency to 0.3.0

Update ns-tracker dependency to 0.3.0

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/meowcakes/ring.git/'


Added some thoughts on unbounded question types to notebook

error: pathspec 'worksheets/unbounded-qtypes.clj' did not match any file(s) known to git

--- worksheets/unbounded-qtypes.clj
+++ worksheets/unbounded-qtypes.clj
@@ -0,0 +1,62 @@
+;; gorilla-repl.fileformat = 1
+
+;; **
+;;; # Thoughts on unbounded numerical variables as custom question tpyes, as relates to Polis
+;;;
+;;; Say we take a distribution @@X@@ with mean and variance @@\mu_X@@ and @@v_X@@, respectively.
+;;; We would like to determine the most natural/normalized logistic transformation for this distribution into some fixed interval @@[a, -a]@@, such that these tranformed values are appropriate for analysis with typical Polis binary question data for PCA and clustering.
+;;; Naturally, the logistic should be centered on @@\mu_X@@, giving
+;;;
+;;; $$ f(x) = \frac{1}{1+e^{\mu_X - x}}$$
+;;;
+;;; Additionally, we would like the limits to be @@[-a, a]@@, giving
+;;;
+;;; $$ f(x) = \frac{2a}{1+e^{\mu_X - x}} - a$$
+;;;
+;;; Lastly, we'll want to adjust things so that we datasets with different @@\mu@@ roughly on the same footing.
+;;; Thus we introduce one more parameter, @@k@@, such that
+;;;
+;;; $$ f(x) = \frac{2a}{1+ke^{\mu_X - x}} - a$$
+;;;
+;;; This gives us something to start with.
+;;; The most straight forward thing to do is set @@k = e^{-v_X}@@.
+;;; This will have the effect of normalizing the part in the exponent to the mean value to be found therein.
+;;; This won't completely normalize variances across data sets, but it should be relatively fair, and is simple.
+;;;
+;;; ## Pontification on adjustusting the variance of the output distribution
+;;;
+;;; > Future Self: I thought I might be able to do this analytically, but I don't think I can, so I'm just leaving the scratchings of what I managed to figure out here in case I feel like picking it up later.
+;;;
+;;; Naturally, it would be good if we also had the variances of different distributions going in somewhat normalized.
+;;; Let's see if we can figure out what the variance of the transformed distribution will be analytically:
+;;;
+;;; $$ Var(X') = E[(X' - \mu_{X'})^2] $$
+;;; $$         = E[(X')^2] $$
+;;; $$         = E[(f(X))^2] $$
+;;;
+;;; Well...
+;;;
+;;; This is getting messy. I'm thinking we cut our losses here. But here's what I've come up with.
+;;;
+;;; We basically want to add a scaling factor
+;;;
+;;; Letting @@g(x)=\frac{1}{1+ke^{\mu_X - x}}@@, we can obtain from the above
+;;;
+;;; $$ Var(X') = a^2 ( 4 E[g(x)^2] - 2 E[g(x)] + 1 )$$
+;;;
+;;; Thus if we could analytically determine the value of @@E[g(x)]@@ and @@E[g(x)^2]@@, we could ensure we always have the same variance.
+;;;
+;;;
+;; **
+
+;; @@
+(ns unbounded-qtypes
+  (:require [gorilla-plot.core :as plot]))
+;; @@
+;; =>
+;;; {"type":"html","content":"nil","value":"nil"}
+;; <=
+
+;; **
+;;; Say we take a
+;; **


add missing comma glyph and set space as default

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/clojurecup/cc2014-frontend.git/'


Add missing source file

Add missing source file

error: pathspec 'examples/blog/src/io/perun/example/paginate.clj' did not match any file(s) known to git

--- examples/blog/src/io/perun/example/paginate.clj
+++ examples/blog/src/io/perun/example/paginate.clj
@@ -0,0 +1,15 @@
+(ns io.perun.example.paginate
+  (:require [hiccup.page :refer [html5]]))
+
+(defn render [{global-meta :meta posts :entries entry :entry}]
+  (html5 {:lang "en" :itemtype "http://schema.org/Blog"}
+    [:head
+      [:title (str (:site-title global-meta) "|" (:tag entry))]
+      [:meta {:charset "utf-8"}]
+      [:meta {:http-equiv "X-UA-Compatible" :content "IE=edge,chrome=1"}]
+      [:meta {:name "viewport" :content "width=device-width, initial-scale=1.0, user-scalable=no"}]]
+    [:body
+     [:h1 (str "Page " (:page entry))]
+     [:ul.items.columns.small-12
+      (for [post posts]
+        [:li (:title post)])]]))


Add frontend api path namespace

Add frontend api path namespace

   This namespace contains helper paths for the frontend api.
        * Add gh/bb `settings-path`
        * Add gh/bb `settings-plan`

error: pathspec 'src-cljs/frontend/api/path.cljs' did not match any file(s) known to git

--- src-cljs/frontend/api/path.cljs
+++ src-cljs/frontend/api/path.cljs
@@ -0,0 +1,20 @@
+(ns frontend.api.path
+            (:require [goog.string :as gstring]))
+
+(defn settings-path [project]
+  (case (:vcs_type project)
+    "bitbucket" (gstring/format
+                  "/api/dangerzone/project/%s/%s/%s/settings"
+                  (:vcs_type project) (:org project) (:repo project))
+    "github" (gstring/format
+               "/api/v1/project/%s/%s/settings"
+               (:org project) (:repo project))))
+
+(defn settings-plan [project]
+  (case (:vcs_type project)
+    "bitbucket" (gstring/format
+                  "/api/dangerzone/project/%s/%s/%s/plan"
+                  (:vcs_type project) (:org project) (:repo project))
+    "github" (gstring/format
+               "/api/v1/project/%s/%s/plan"
+               (:org project) (:repo project))))


Don't automatically create brokers from consumers

This was causing race conditions between the broker shutting down and
consumers starting, trying to bring up their own brokers.

--- src/com/puppetlabs/puppetdb/cli/services.clj
+++ src/com/puppetlabs/puppetdb/cli/services.clj
@@ -69,7 +69,7 @@
 ;; PuppetDB components.

 (def configuration nil)
-(def mq-addr "vm://localhost?jms.prefetchPolicy.all=1")
+(def mq-addr "vm://localhost?jms.prefetchPolicy.all=1&create=false")
 (def mq-endpoint "com.puppetlabs.puppetdb.commands")

 (defn load-from-mq


Add console runner.

Add console runner.

error: pathspec 'src/main/clojure/lazytest/runner/console.clj' did not match any file(s) known to git

--- src/main/clojure/lazytest/runner/console.clj
+++ src/main/clojure/lazytest/runner/console.clj
@@ -0,0 +1,39 @@
+(ns lazytest.runner.console
+  (:use lazytest.find
+	lazytest.suite
+	lazytest.test-case
+	lazytest.report.color
+	lazytest.focus
+	lazytest.wrap
+	[clojure.stacktrace :only (print-cause-trace)])
+  (:import lazytest.ExpectationFailed))
+
+(defn run-test-case [tc]
+  (do-before tc)
+  (let [result (try-test-case tc)]
+    (if (:pass? result)
+      (print (colorize "." :green))
+      (print (colorize "F" :red)))
+    (flush)
+    (do-after tc)
+    result))
+
+(defn run-suite [ste]
+  (let [ste-seq (ste)]
+    (do-before ste-seq)
+    (let [results (doall (map (fn [x]
+				(cond (suite? x) (run-suite x)
+				      (test-case? x) (run-test-case x)
+				      :else (throw (IllegalArgumentException.
+						    "Non-test given to run-suite."))))
+			      ste-seq))]
+      (do-after ste-seq)
+      (suite-result ste-seq results))))
+
+(defn run-tests
+  "Runs tests defined in the given namespaces, with colored green dots
+  indicating passing tests and red 'F's indicating falied tests."
+  [& namespaces]
+  (let [nns (if (seq namespaces) namespaces (all-ns))
+	stes (remove nil? (map find-tests namespaces))]
+    (doall (map run-suite stes))))


add res file

add res file

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

--- app/src/cljs/app/res.cljs
+++ app/src/cljs/app/res.cljs
@@ -0,0 +1,4 @@
+(ns app.res)
+
+(def resume
+  {:profile "Martin Haesler is a former sales man for plumbing and heating projects, who after 17 years of working in this line of work, decided it was time for a change, see something of the world, and try for a completely different career path. Having always been interested in computer technology, an avid Linux user for many years, he decided on programming as a new career.\nMartin Haesler is quick to learn new things, self motivated and eager to improve."})


-reset! method for ICache protocol

-reset! method for ICache protocol

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/michaelsbradleyjr/transwarp.git/'


Add missing file, RVM actions

Add missing file, RVM actions

error: pathspec 'backend/src/circle/backend/action/rvm.clj' did not match any file(s) known to git

--- backend/src/circle/backend/action/rvm.clj
+++ backend/src/circle/backend/action/rvm.clj
@@ -0,0 +1,13 @@
+(ns circle.backend.action.rvm
+  "actions for dealing with RVM during builds"
+  (:require [circle.backend.action :as action])
+  (:use [circle.backend.build :only (checkout-dir)])
+  (:require [circle.sh :as sh])
+  (:use [circle.backend.action.bash :only (remote-bash-build bash)]))
+
+(defn trust []
+  (action/action
+   :name "rvm trust"
+   :act-fn (fn [build]
+             (let [dir (checkout-dir build)]
+               (remote-bash-build build (sh/q (rvm rvmrc trust ~dir)))))))


cleanup long casting

cleanup long casting

--- storm-core/src/clj/backtype/storm/timer.clj
+++ storm-core/src/clj/backtype/storm/timer.clj
@@ -67,7 +67,7 @@
   (let [id (uuid)
         ^PriorityQueue queue (:queue timer)]
     (locking (:lock timer)
-      (.add queue [(+ (current-time-millis) (long (* 1000 delay-secs))) afn id])
+      (.add queue [(+ (current-time-millis) (* 1000 (long delay-secs))) afn id])
       )))

 (defn schedule-recurring [timer delay-secs recur-secs afn]


Added make-arith-question.

Added make-arith-question.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/inchingforward/eon.git/'


Introduce functions to manipulate the action bar

error: pathspec 'src/clojure/neko/action_bar.clj' did not match any file(s) known to git

--- src/clojure/neko/action_bar.clj
+++ src/clojure/neko/action_bar.clj
@@ -0,0 +1,80 @@
+(ns neko.action-bar
+  (:require neko.ui)
+  (:use [neko.ui.mapping :only [defelement]]
+        [neko.ui.traits :only [deftrait]]
+        [neko.-utils :only [call-if-nnil]])
+  (:import [android.app ActionBar ActionBar$Tab ActionBar$TabListener]
+           android.app.Activity android.app.Fragment android.R$id))
+
+;; ## Listener helpers
+
+(defn tab-listener
+  "Creates a TabListener from the provided functions for selected,
+  unselected and reselected events."
+  [{:keys [on-tab-selected on-tab-unselected on-tab-reselected]}]
+  (reify ActionBar$TabListener
+    (onTabSelected [this tab ft]
+      (call-if-nnil on-tab-selected tab ft))
+    (onTabUnselected [this tab ft]
+      (call-if-nnil on-tab-unselected tab ft))
+    (onTabReselected [this tab ft]
+      (call-if-nnil on-tab-reselected tab ft))))
+
+(defn simple-tab-listener
+  "Creates a TabListener that shows the specified fragment on
+  selecting and hides it on deselecting."
+  [tag, ^Fragment fragment]
+  (reify ActionBar$TabListener
+    (onTabReselected [this tab ft])
+    (onTabUnselected [this tab ft]
+      (when (.isAdded fragment)
+        (.detach ft fragment)))
+    (onTabSelected [this tab ft]
+      (if (.isDetached fragment)
+        (.attach ft fragment)
+        (.add ft R$id/content fragment tag)))))
+
+;; ## Functions for declarative definition
+
+(defelement :action-bar
+  :classname android.app.ActionBar
+  :inherits nil
+  :traits [:tabs]
+  :values {:standard ActionBar/NAVIGATION_MODE_STANDARD
+           :list ActionBar/NAVIGATION_MODE_LIST
+           :tabs ActionBar/NAVIGATION_MODE_TABS})
+
+(defelement :action-bar-tab
+  :classname android.app.ActionBar$Tab
+  :inherits nil
+  :traits [:tab-listener])
+
+(deftrait :tabs
+  "Takes `:tabs` attribute which should be a sequence of tab
+  definitions. Each tab definition is itself a sequence of `:tab`
+  keyword and an attribute map. Creates tabs for the definitions and
+  adds the tabs to the action bar."
+  [^ActionBar action-bar, {:keys [tabs]} _]
+  (doseq [[_ tab-attributes] tabs
+          :let [tab (.newTab action-bar)]]
+    (neko.ui/apply-attributes :action-bar-tab tab tab-attributes {})
+    (.addTab action-bar tab)))
+
+(deftrait :tab-listener
+  "Takes `:tab-listener` attribute which should be TabListener object
+  and sets it to the tab. Attribute could also be a fragment, in which
+  case a listener would be created that shows and hides the fragment
+  on tab selection and deselection respectively."
+  [^ActionBar$Tab tab, {:keys [tab-listener]} _]
+  (let [listener (if (instance? Fragment tab-listener)
+                   (simple-tab-listener (str tab-listener) tab-listener)
+                   tab-listener)]
+    (.setTabListener tab listener)))
+
+(defn setup-action-bar
+  "Configures activity's action bar according to the attributes
+  provided in key-value fashion. For more information,
+  see `(describe :action-bar)`."
+  [^Activity activity & {:as attributes}]
+  (let [action-bar (.getActionBar activity)]
+    (neko.ui/apply-attributes :action-bar action-bar attributes {})))


fix wrong result of systray-supported? in launching from cui.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/runoshun/syncat.git/'


Removed link macro

Removed link macro

This is in preparation for factoring out the core chain

--- src/yada/core.clj
+++ src/yada/core.clj
@@ -124,8 +124,8 @@
                 (ex-info "Method Not Allowed"
                          {:status 405
                           :headers {"allow" (str/join ", " (map (comp (memfn toUpperCase) name) (:allowed-methods http-resource)))}
-                          ::http-response true})))
-             ctx)
+                          ::http-response true}))
+               ctx))

            ;; Malformed? (parameters)
            (fn [ctx]
@@ -319,17 +319,17 @@
                      (d/error-deferred
                       (ex-info "Precondition failed"
                                {:status 412
-                                ::http-response true})))
-
-                   ;; Otherwise, let's use the etag we've just
-                   ;; computed. Note, this might yet be
-                   ;; overridden by the (unsafe) method returning
-                   ;; a modified response. But if the method
-                   ;; chooses not to reset the etag (perhaps the
-                   ;; resource state didn't change), then this
-                   ;; etag will do for the response.
-                   (assoc-in ctx [:response :etag]
-                             (get etags (:representation ctx)))))
+                                ::http-response true}))
+
+                     ;; Otherwise, let's use the etag we've just
+                     ;; computed. Note, this might yet be
+                     ;; overridden by the (unsafe) method returning
+                     ;; a modified response. But if the method
+                     ;; chooses not to reset the etag (perhaps the
+                     ;; resource state didn't change), then this
+                     ;; etag will do for the response.
+                     (assoc-in ctx [:response :etag]
+                               (get etags (:representation ctx))))))
                ctx
                ))


Notes on weak validators

Notes on weak validators

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/delitescere/yada.git/'