Skip to content

Instantly share code, notes, and snippets.


Kevin Downey hiredman

View GitHub Profile
View gist:05af7cef14991cfea802cf83fb82d178
user=> (require '[clojure.core.async :as async])
user=> (def ^ s nil)
user=> (defn f [] (async/go (.getOutputStream s)))
user=> (defn f [] (async/go (try (.getOutputStream s) (catch Exception e nil))))
View cml.js
var cml = {
Buffer:function (n) {
var buf = [];
this.full=function() {
return !(buf.length < n);
View ws.clj
(import '(java.nio ByteBuffer)
'( InetSocketAddress)
'(java.util.concurrent LinkedBlockingQueue)
'(java.nio.channels SelectionKey
'( Closeable)
'(clojure.lang PersistentQueue)
View jgroups.clj
;; clj -J-Xmx32m -Sdeps '{:deps {org.jgroups/jgroups {:mvn/version "4.0.12.Final"}}}'
(defn server []
(let [channel (org.jgroups.JChannel.)
_ (.connect channel "clojure-eval")
_ (.setReceiver
(proxy [org.jgroups.ReceiverAdapter] []
(receive [msg-batch]
(doseq [msg (.array msg-batch)
hiredman / foo.clj
Created Feb 2, 2019
reflection boxing
View foo.clj
(as-> clojure.lang.RT %
(.getDeclaredField % "checkSpecAsserts")
(doto % (.setAccessible true))
(.get % nil)
(doto % prn)
(if % :a :b))
hiredman / boot.cljs
Created Mar 15, 2013
clojurescript drag and drop
View boot.cljs
(defn handle-file-select [evt]
(.stopPropagation evt)
(.preventDefault evt)
(let [files (.-files (.-dataTransfer evt))]
(dotimes [i (.-length files)]
(let [rdr (js/FileReader.)
the-file (aget files i)]
(set! (.-onload rdr)
(fn [e]
(let [file-content (.-result (.-target e))
View substitution model.clj
(defn inc-more [nums]
(if (first nums)
(cons (inc (first nums))
(inc-more (rest nums)))
(inc-more [1 2])
(if (first [1 2])
(cons (inc (first [1 2]))
hiredman / tco.txt
Created Jul 19, 2018
irc log about tail calls in clojure
View tco.txt
2018:Jun:01:23:25:15< hiredman> the tail is the same in clojure and in scheme, but in scheme because tail calls look no
different from regular calls, and most of the time when testing you won't be using inputs large enough to exhaust your stack, you can easily be mistaken about when and where tco is happening
2018:Jun:01:23:26:03< hiredman> that function is not tail recursive, so no tco
2018:Jun:01:23:27:48< jaawerth> jjman: to clarify, for that to be a tail call, the add1* would have to wrap the other stuff rather than the other way around
2018:Jun:01:23:27:57< jjman> so how does racket does it if it is no tco? it let you grows your stack to all your available memory?
2018:Jun:01:23:28:11< hiredman> or until you hit some limit
2018:Jun:01:23:28:42< hiredman> I wouldn't be surprised if dr racket had some fancy gizmo to hilight non-tail recursive calls
2018:Jun:01:23:29:23< loli> racket has proper tail calls
2018:Jun:01:23:29:40< hiredman> no one said it didn't
2018:Jun:01:23:29:41< loli> often one builds a c
View foo.clj
(defn optionFourWorkOut []
(println "Enter user name")
(let [use-input (read-line)
user-name-id (first
(for [x (range @customer-size)
:while (= (compare user-input (get (get customer-list x) 1)) 0)]
(get (get customer-list x) 0)))
user-product-id-and-quantity (vec (for [y (range @sales-size)
:while (= (compare user-name-id (get (get sales-list y) 1)) 0)]
View foo.scm
(define (add1* l)
(let ((x (empty? l)))
(if x
(let ((m (first l))
(y (add1 m))
(n (rest l))
(z (add1* n)))
(cons y z)))))
You can’t perform that action at this time.