Skip to content

Instantly share code, notes, and snippets.

View seancorfield's full-sized avatar

Sean Corfield seancorfield

View GitHub Profile
seancorfield / sean.clj
Last active August 25, 2021 17:00
Polylith dependency checker
View sean.clj
(ns sean
"Placeholder for any dev-specific code I want to write."
(:require [ :as io]
[clojure.set :as set]
[clojure.string :as str]
[ :as t]))
(set! *warn-on-reflection* true)
(defn- libs-from-deps
seancorfield / deps.edn
Last active June 10, 2020 20:33
Debugging Reflection Warnings
View deps.edn
;; I use Clojure CLI / deps.edn and I have these JVM options in an alias
;; that use when starting my REPL for testing:
:jvm-opts ["-Dclojure.core.async.go-checking=true"
;; the last one is relevant to this particular piece of debugging so that
;; _all_ illegal reflective access warnings are shown, not just the last
;; the stacktrace option ensures the JVM doesn't optimize away stack traces
;; for commonly thrown exceptions (such as NPE)
seancorfield / stacktrace.txt
Created September 13, 2018 22:38
Stacktrace from Boot pod -- clearly dynapath does NOT have a syntax error!
View stacktrace.txt
Exception in thread "Thread-81" java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(
at clojure.lang.RT.classForName(
at clojure.lang.RT.classForName(
at clojure.lang.RT.loadClassForName(
at clojure.lang.RT.load(
at clojure.lang.RT.load(
at clojure.core$load$fn__6653.invoke(core.clj:6071)
at clojure.core$load.invokeStatic(core.clj:6070)
seancorfield / stacktrace.txt
Created July 19, 2018 23:47
Stacktrace from Boot pod failure with Clojure 1.10.0-alpha6
View stacktrace.txt 745
java.util.concurrent.ThreadPoolExecutor$ 617
java.util.concurrent.ThreadPoolExecutor.runWorker 1142 266
clojure.core/binding-conveyor-fn/fn core.clj: 2022
boot.core/boot/fn core.clj: 1031
boot.core/run-tasks core.clj: 1021
boot.user$eval1637$fn__1638$fn__1647$fn__1648.invoke : 663
seancorfield /
Last active October 28, 2022 04:11
map-vals and map-keys

NOTE: Clojure 1.11 Alpha 2 added update-keys and update-vals which provide similar functionality directly in clojure.core, but with the hash map first and the function second.

Running this code:

clj -Sdeps '{:deps 
              {:git/url ""
               :sha "cfde3c2c83379e93ab1a49752611ae663008129f"}}}'

That starts a REPL:

seancorfield / adam.clj
Created March 24, 2017 17:28
Example of closures in Clojure
View adam.clj
(defn do-it []
(let [a ["a" "b" "c"]
b ["x" "y" "z"]
counter (atom 0)]
(run! (fn [foo]
(reset! counter 0)
(run! (fn [bar]
(swap! counter inc)
(println {:counter @counter
:foo foo
seancorfield / async_pmap.clj
Created July 14, 2016 19:49
pmap using core.async
View async_pmap.clj
(ns async-example.core
(:require [clojure.core.async :refer [chan go >! <!!]])
(defn my-pmap [f col]
(let [chans (repeatedly (count col) chan)]
(doseq [[c e] (map vector chans col)]
(go (>! c (f e))))
(map <!! chans)))
View gist:8f62615233244820c8db
(ns example
(:require [reagent.core :as r :refer [atom]]
[reagent.cursor :as c]))
(defn input [prompt val]
[:input {:value @val
:on-change #(reset! val (.-target.value %))}]])
seancorfield / gist:8285619
Created January 6, 2014 16:45
replaceNoCase() failure example
View gist:8285619
<cfprocessingdirective pageencoding="utf-8">
#replaceNoCase("LİELİELİELİE....","E","a very long string to replace E","all")#
seancorfield / gist:8232204
Created January 3, 2014 03:30
Testing CFML's isClosure() and isCustomFunction() decision functions with function expressions as arguments.
View gist:8232204
writeOutput("closure? " & isClosure(function() { return "yes"; }));
writeOutput("function? " & isCustomFunction(function() { return "no"; }));