Skip to content

Instantly share code, notes, and snippets.

@guv
guv / fibtiming.pxi
Created January 27, 2015 15:57
Timing Fibonacci Calculation
(def time (ffi-fn libc "time" [] CInt))
(defmacro timing [& body]
`(let [start# (time),
result# (do ~@body),
end# (time)]
(printf (str "Elapsed time: " (- end# start#)))
result#))
@guv
guv / gist:2de22d4b09f9ccf4df9d
Created November 26, 2014 13:36
Specify allowed SSL protocols for Jetty
(defn use-only-tls
[^Server jetty]
(let [protocols (into-array String ["TLSv1.1" "TLSv1.2"])]
(doseq [con (->> jetty
.getConnectors
(filter #(instance? org.eclipse.jetty.server.ssl.SslSelectChannelConnector %)))]
(.setIncludeProtocols (.getSslContextFactory con) protocols))))
(jetty/run-jetty routes {... :configurator use-only-tls})
@guv
guv / gist:d91b39ea19c47bc8afed
Created November 17, 2014 16:54
Parallel testing with synchronous start
(let [signal (promise),
; create waiting threads
future-coll (vec
(for [some-val some-coll]
(future
(deref signal)
(do-something some-val))))]
; signal start to all threads
(deliver signal true)
; wait for all threads to finish
@guv
guv / require_once.clj
Last active August 29, 2015 14:07
Transactional require
(def ^:private resolve-symbol-lock (Object.))
(defn- ns-loaded?
[ns]
(get (loaded-libs) ns))
(defn- provide-ns
"Thread-safe version of (require ns)."
[ns]
(when-not (ns-loaded? ns)
@guv
guv / gist:4a9c447b00c3ebcb3993
Created September 29, 2014 13:15
ping port
(defn ping
([ip, port]
(ping ip, port, 1000))
([ip, port, timeout]
(try
(let [addr (java.net.InetSocketAddress. ^String ip, (int port))]
(with-open [s (java.net.Socket.)]
(if timeout
(.connect s, addr, (int timeout))
(.connect s, addr))))
@guv
guv / gist:5459364
Created April 25, 2013 12:34
Parallel let macro
(defmacro plet [bindings & body]
(let [bindings (partition-all 2 bindings)
destruct-exprs (map first bindings)
expressions (map second bindings)
vars (repeatedly (count bindings) gensym)]
`(let [~@(mapcat (fn [var expr] `[~var (future ~expr)]) vars expressions)
~@(mapcat (fn [destr var] `[~destr (deref ~var)]) destruct-exprs vars)]
~@body)))
@guv
guv / gist:5458038
Created April 25, 2013 07:10
invoke-primitive for higher order functions
(ns functions.primitive
(:require
[clojure.string :as string]))
(defn- print-warning
[form, s]
(binding [*out* *err*]
(println (format "Warning, invoke-primitive at %s:%s: %s" *file* (:line (meta form)) s))))
@guv
guv / gist:5445115
Last active December 16, 2015 13:58
Rebindable ThreadPoolExecutor
(ns rebindable-thread-pool
(:import (java.util.concurrent Executors ExecutorService ThreadPoolExecutor ArrayBlockingQueue TimeUnit)))
; fixed thread pool as default
(def ^{:dynamic true}
*thread-pool* (Executors/newFixedThreadPool (+ 2 (.availableProcessors (Runtime/getRuntime)))))
(defn future-call+