Skip to content

Instantly share code, notes, and snippets.

@jafingerhut
jafingerhut / cljs-with-redefs-on-core-fn.cljs
Created August 9, 2019 13:33
Does with-redefs work for functions in cljs.core, e.g. like vector in this example?
;; Command to start ClojureScript REPL:
;; clj -Sdeps "{:deps {org.clojure/clojurescript {:mvn/version \"1.10.520\"}}}" -m cljs.main --repl-env node
(defn wrapme [wrapped-fn a another-fn]
(fn [& args]
(println "called wrapped fn")
(let [ret (apply wrapped-fn args)]
(apply another-fn a ret args)
ret)))
@jafingerhut
jafingerhut / cljs-repl-with-core.matrix-deps.edn
Last active October 2, 2019 19:44
Creating a cljs REPL from terminal using deps.edn and clj command
;; Save this file as deps.edn in some directory that doesn't already
;; have such a file.
;; You must have the following installed for the command below to have
;; a chance of working:
;; + A JDK, e.g. from AdoptOpenJDK web site: https://adoptopenjdk.net
;; + Clojure CLI tools. Install instructions here:
;; https://clojure.org/guides/getting_started
;; + Node.js JavaScript runtime environment. Some prepackaged ways to
@jafingerhut
jafingerhut / cljs-repl-with-core.matrix-deps.edn
Created October 2, 2019 18:42
Creating a cljs REPL from terminal using deps.edn and clj command
;; Save this file as deps.edn in some directory that doesn't already
;; have such a file.
;; You must have the following installed for the command below to have
;; a chance of working:
;; + A JDK, e.g. from AdoptOpenJDK web site: https://adoptopenjdk.net
;; + Clojure CLI tools. Install instructions here:
;; https://clojure.org/guides/getting_started
;; + Node.js JavaScript runtime environment. Some prepackaged ways to
@jafingerhut
jafingerhut / inputstream.clj
Created July 8, 2014 15:01
Example of reading java.io.InputStream in Clojure
(ns inputstream.core
(:require [clojure.java.io :as io]))
(defn read-is [^java.io.InputStream is]
(let [bufsize 8192
buf (byte-array bufsize)]
(loop [total-len 0]
(let [n (.read is buf)]
(cond
@jafingerhut
jafingerhut / project.clj
Created May 1, 2018 16:41
Locally modified version of Sophia-Gold/anaphora project.clj file I tried
(defproject anaphora "0.1.0-SNAPSHOT"
:url "https://medium.com/@sophiagoldnyc/anaphora"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.10.0-master-SNAPSHOT"]
[org.clojure/data.avl "0.0.17"]
[org.clojure/data.int-map "0.2.4"]
[org.clojure/math.combinatorics "0.1.4"]
[org.clojure/tools.analyzer "0.6.9"]
[org.clojure/tools.analyzer.jvm "0.7.2"]
@jafingerhut
jafingerhut / gist:8359201
Last active January 2, 2016 20:49
do's inside top level do's are 'flattened'
;; In a fresh Clojure 1.5.1 'lein repl'
;; clojure.edn is not loaded yet
user=> (clojure.edn/read-string "(5)")
ClassNotFoundException clojure.edn java.net.URLClassLoader$1.run (URLClassLoader.java:366)
;; trying to eval this form does not do it, because it fails to analyze as a whole
user=> (eval `(when true (require 'clojure.edn) (clojure.edn/read-string "(5)")))
@jafingerhut
jafingerhut / str-seq-reader.clj
Last active December 31, 2015 17:19
str-seq-reader - Take a sequence of strings and return a Java Reader that, when read, returns the contents of the concatenation of those strings. Only as much of the sequence as needed by the reader is consumed. Examples of use at the bottom.
(ns piper.core
(:require [clojure.java.io :as io]
[clojure.string :as str])
(:import (java.io Reader Writer BufferedReader)))
(defn str-seq-reader
"Return a java.io.Reader that returns the same sequence of
characters as are in the concatenation of the sequence of strings
given as an argument. Consumes only as much of the sequence as needed
for any given read operation."
@jafingerhut
jafingerhut / foo.java
Created November 9, 2012 16:40
AndroChef Java decompiler output of class file compiled from Cedric Greevey's Clojure code
package perf;
import clojure.lang.AFunction;
import clojure.lang.IFn;
import clojure.lang.Indexed;
import clojure.lang.Numbers;
import clojure.lang.RT;
import clojure.lang.Var;
import java.awt.image.BufferedImage;
import perf.core.foo.fn__14;
@jafingerhut
jafingerhut / apropos2.clj
Created February 7, 2012 05:27
apropos2 and unresolve
;; Example use of unresolve:
;; user=> (unresolve #'replace)
;; (replace clojure.core/replace)
;; user=> (use 'clojure.string)
;; WARNING: replace already refers to: #'clojure.core/replace in namespace: user, being replaced by: #'clojure.string/replace
;; WARNING: reverse already refers to: #'clojure.core/reverse in namespace: user, being replaced by: #'clojure.string/reverse
;; nil
;; user=> (unresolve #'replace)
;; (replace clojure.string/replace)
;; Latest tools.analyzer.jvm as of Jul 29 2015 commit.
;; Clojure 1.8.0-alpha2 behavior (and I think for many previous
;; Clojure versions)
user=> (require '[clojure.tools.analyzer.jvm :as taj])
nil
user=> (def x (taj/analyze '(defn foo [x] "Not a doc string" (* x x))))
#'user/x