Skip to content

Instantly share code, notes, and snippets.

View jeroenvandijk's full-sized avatar

Jeroen van Dijk jeroenvandijk

View GitHub Profile
@jeroenvandijk
jeroenvandijk / heredoc.clj
Created February 12, 2020 08:47 — forked from cgrand/heredoc.clj
An ugly hacky heredoc for Clojure
(defn heredoc []
(let [delim (.readLine *in*)]
(->> (repeatedly #(.readLine *in*))
(take-while #(not= delim %))
(interpose \newline)
(apply str))))
; The following lines are read (by the reader) as:
; "Look )(\"\\T\na here doc!\n"
#=(heredoc)"""
@jeroenvandijk
jeroenvandijk / clojure_watch_refs.md
Last active May 15, 2019 08:45
Weird watch behaviour

I am observing this weird behaviour of watching a clojure ref. It seems to behave wrong/delayed when not wrapped in a let block:

(let []
  (def ^{:flag 1} v 1))

(def ^{:flag 2} v 2)

(add-watch #'v ::listener (fn [_key _ref old-value new-value]
                            (println "old " old-value ", new" new-value "new-meta " _ref (select-keys (meta _ref) [:flag]))))
@jeroenvandijk
jeroenvandijk / clojure_js.clj
Created April 17, 2019 12:16
(GraalVM) clojure -> js
(ns clojure_js
(:gen-class)
(:import [javax.script
ScriptEngineManager
ScriptException
SimpleBindings]))
;; GraalVM doesn't like reflections
(set! *warn-on-reflection* true)
@jeroenvandijk
jeroenvandijk / git.zsh.clj
Last active August 29, 2019 17:16
bash to closh porting examples (https://github.com/dundalek/closh)
(defcmd git [& [dispatch :as args]]
(if (= dispatch "browse")
(let [{:keys [code stderr]
remote-url :stdout} (sh-value "git" "remote" "get-url" "origin")]
(if (zero? code)
(do (println "Opening" remote-url)
(sh "open" (clojure.string/trim remote-url)))
(println stderr)))
(eval `(sh "git" ~@args))))
@jeroenvandijk
jeroenvandijk / .closhrc.cljc
Created April 8, 2019 14:03
First experiment with closhrc
(defcmd git [& [dispatch :as args]]
(if (= dispatch "browse")
(let [{:keys [code stderr]
remote-url :stdout} (sh-value "git" "remote" "get-url" "origin")]
(if (zero? code)
(do (println "Opening" remote-url)
(sh "open" (clojure.string/trim remote-url)))
(println stderr)))
(eval `(sh "git" ~@args))))
@jeroenvandijk
jeroenvandijk / README.md
Last active January 17, 2019 11:14
boot-clj + rebl
@jeroenvandijk
jeroenvandijk / closhrc.clj
Created October 16, 2018 09:01
Example ~/.closhrc file
;; See https://github.com/dundalek/closh/
(defn eval-string [s]
(eval (clojure.edn/read-string
(str "(do" s ")"))))
(defn closhrc []
(slurp (str (getenv "HOME") "/.closhrc")))
(defn eclosh []
@jeroenvandijk
jeroenvandijk / repl_compile.clj
Last active October 4, 2018 12:48
Repl compiling Clojure
(defn compile-inline [ns-name code]
(let [tmp-dir *compile-path*
sanitized-ns-name (.replace (str ns-name) "-" "_")
clj-file (clojure.java.io/file (str tmp-dir "/" (clojure.string/join "/" (clojure.string/split sanitized-ns-name #"\.")) ".clj"))]
(clojure.java.io/make-parents clj-file)
(with-open [file (clojure.java.io/writer clj-file)]
(binding [*out* file]
@jeroenvandijk
jeroenvandijk / eugene_and_jeroen.clj
Last active May 16, 2018 19:32 — forked from skuro/README.md
Dutch Clojure Meetup #102
(ns clojure-dojo.core)
(import '[javax.imageio ImageIO]
'[java.awt.image BufferedImage])
(def img (let [f "resources/image.png"]
(ImageIO/read (clojure.java.io/file f))))
@jeroenvandijk
jeroenvandijk / strict_keys_spec.clj
Last active August 22, 2018 15:45
clojure.spec being strict on superfluous keys
;; If you want to fail before your old https://github.com/plumatic/schema
;; function fails the strict-keys macros below will help you find it.
(require '[clojure.spec.alpha :as s]
'[clojure.set])
(defn allowed-keys? [ks]
(fn [m]
(empty? (clojure.set/difference (set (keys m)) ks))))