Skip to content

Instantly share code, notes, and snippets.

View jcf's full-sized avatar
❤️

James Conroy-Finn jcf

❤️
View GitHub Profile
@jcf
jcf / sbt-error.txt
Created September 14, 2015 14:17
sbt assembly error
java.lang.NoClassDefFoundError: scala/reflect/internal/Trees
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
@jcf
jcf / cider-nrepl-error.txt
Last active September 14, 2015 14:18
Error starting REPL via lein repl
Exception in thread "nREPL-worker-0" java.lang.IllegalArgumentException: Cannot write value of type class java.lang.Double
at clojure.tools.nrepl.bencode$eval46272$fn__46273.invoke(bencode.clj:326)
at clojure.lang.MultiFn.invoke(MultiFn.java:233)
at clojure.tools.nrepl.bencode$eval46307$fn__46308.invoke(bencode.clj:398)
at clojure.lang.MultiFn.invoke(MultiFn.java:233)
at clojure.tools.nrepl.bencode$eval46307$fn__46308.invoke(bencode.clj:398)
at clojure.lang.MultiFn.invoke(MultiFn.java:233)
at clojure.tools.nrepl.bencode$eval46297$fn__46298.invoke(bencode.clj:382)
at clojure.lang.MultiFn.invoke(MultiFn.java:233)
at clojure.tools.nrepl.bencode$eval46297$fn__46298.invoke(bencode.clj:382)
@jcf
jcf / reference.clj
Created June 10, 2015 15:12
Prismatic schema for reference-types (deferrable) like atoms and futures.
(defrecord Reference [schema]
s/Schema
(walker [_]
(let [sub-walker (s/subschema-walker schema)]
(fn [x] (sub-walker @x))))
(explain [_] (list 'reference (s/explain schema))))
(defn reference
[schema]
(Reference. schema))
@jcf
jcf / cors.clj
Created June 5, 2015 14:12
CORS interceptors (use `:io.pedestal.http/allowed-origins` instead)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; CORS
(def ^:const ^:private allowed-cors-headers
(str/join ", " #{"Authorization"
"Content-Type"
"If-Match"
"If-Modified-Since"
"If-None-Match"
"If-Unmodified-Since"
@jcf
jcf / retry.clj
Created May 27, 2015 13:13
core.async retry
(ns com.example.util
(:import [clojure.core.async.impl.channels ManyToManyChannel])
(:require [clojure.core.async :as async]))
(defn retry
[f & {:keys [out-ch retries delay]}]
{:pre [(and (integer? retries) (pos? retries))
(integer? delay)
(instance? ManyToManyChannel out-ch)]}
@jcf
jcf / uuid.clj
Created April 1, 2015 18:51
Generate deterministic type-4 UUIDs with Clojure's test.check
(require '[clojure.string :as str])
(require '[clojure.test.check.generators :as gen])
(def gen-hex-char
(gen/elements (concat (map char (range (int \a) (int \f)))
(range 0 9))))
(defn gen-hex-string [len]
(gen/fmap str/join (gen/vector gen-hex-char len len)))
@jcf
jcf / test.clj
Last active September 7, 2019 04:51
Measure slow clojure.test tests, and pretty print them
;; Make sure to require this file before you run your tests, and after any other
;; library that uses the same clojure.test hooks.
;;
;; NOTE: This doesn't work if you run your tests with `lein difftest`.
(ns example.test
(:require [clojure.pprint :refer [print-table]]
[clojure.test :refer [report with-test-out]]))
(def ^:private ^:const slow "in seconds"
0.1)
@jcf
jcf / date.clj
Last active August 29, 2015 14:16
clj-time: Parse datetime string with many formats, and original time zone intact
(require '[clj-time.core :as t])
(require '[clj-time.format :as f])
(defn parse-date [s]
(.. (f/formatter (t/default-time-zone)
"YYYY-MM-dd'T'HH:mm:ss.SSSZZ"
"YYYY-MM-dd'T'HH:mm:ssZZ"
"YYYY-MM-dd HH:mm:ss ZZ"
"EEE MMM dd YYYY HH:mm:ss zZ '('z')'")
withOffsetParsed
@jcf
jcf / javascript_date_string.clj
Created February 24, 2015 13:10
Parse stringified Javascript Date with Joda and clj-time
(require '[clj-time.format :as f])
(def javascript-date-string-formatter
(f/formatter "EEE MMM dd YYYY HH:mm:ss zZ '('z')'"))
(f/parse javascript-date-string-formatter "Tue Feb 24 2015 13:09:43 GMT+0000 (GMT)")
;; => #<DateTime 2015-02-24T13:09:43.000Z>
@jcf
jcf / delete.sh
Last active June 23, 2018 18:58
Delete merged remote branches
# Assumes you want origin branches, ignoring `master`.
# Don't forget to to update your list of remote branches.
git remote prune origin
git branch -r --merged | \
awk '/origin/ && ! /HEAD/ && !/master/ { split($0, x, "/"); print x[2] }' | \
xargs -I x git push origin --delete x