Skip to content

Instantly share code, notes, and snippets.

View seancorfield's full-sized avatar

Sean Corfield seancorfield

View GitHub Profile
@seancorfield
seancorfield / sean.clj
Last active August 25, 2021 17:00
Polylith dependency checker
(ns sean
"Placeholder for any dev-specific code I want to write."
(:require [clojure.java.io :as io]
[clojure.set :as set]
[clojure.string :as str]
[clojure.tools.deps.alpha :as t]))
(set! *warn-on-reflection* true)
(defn- libs-from-deps
@seancorfield
seancorfield / deps.edn
Last active June 10, 2020 20:33
Debugging Reflection Warnings
;; 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"
"-XX:-OmitStackTraceInFastThrow"
"--illegal-access=warn"]
;; 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
seancorfield / stacktrace.txt
Created September 13, 2018 22:38
Stacktrace from Boot pod -- clearly dynapath does NOT have a syntax error!
Exception in thread "Thread-81" java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at clojure.lang.RT.classForName(RT.java:2204)
at clojure.lang.RT.classForName(RT.java:2213)
at clojure.lang.RT.loadClassForName(RT.java:2232)
at clojure.lang.RT.load(RT.java:450)
at clojure.lang.RT.load(RT.java:426)
at clojure.core$load$fn__6653.invoke(core.clj:6071)
at clojure.core$load.invokeStatic(core.clj:6070)
@seancorfield
seancorfield / stacktrace.txt
Created July 19, 2018 23:47
Stacktrace from Boot pod failure with Clojure 1.10.0-alpha6
java.lang.Thread.run Thread.java: 745
java.util.concurrent.ThreadPoolExecutor$Worker.run ThreadPoolExecutor.java: 617
java.util.concurrent.ThreadPoolExecutor.runWorker ThreadPoolExecutor.java: 1142
java.util.concurrent.FutureTask.run FutureTask.java: 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
seancorfield / README.md
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 
             {seancorfield/map-utils 
              {:git/url "https://gist.github.com/seancorfield/6e8dd10799e9cc7527da5510c739e52f"
               :sha "cfde3c2c83379e93ab1a49752611ae663008129f"}}}'

That starts a REPL:

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