Skip to content

Instantly share code, notes, and snippets.

View kotarak's full-sized avatar

Meikel Brandmeyer kotarak

View GitHub Profile
@kotarak
kotarak / rest_returns_seqables.clj
Last active August 29, 2015 14:12
rest returns seqables
(defn repeat-x
[x]
(reify clojure.lang.Seqable
(seq [this]
(reify clojure.lang.ISeq
(first [this] x)
(next [this] (seq (repeat-x x)))
(more [this] (next this))))))
@kotarak
kotarak / benchmarks.txt
Last active August 29, 2015 14:12
Transmuter benchmarking
(def v (vec (concat (range 1000) (range 1000))))
(into [] …)
seq / transducer / transmuter
(distinct v): 969µs / 489µs / 331µs
(interpose nil v): 458µs / 43µs / 102µs
(take 1000 v): 114µs / 34µs / 28µs
(drop 1000 v): 41µs / 51µs / 43µs
(map inc v): 68µs / 43µs / 56µs
(filter even? v): 51µs / 29µs / 45µs
(require '[transmuter.core :as t])
(require '[transmuter.async :as at])
; Not a dependency of transmuters. Must be provided
; separately by the application!
(require '[clojure.core.async :as async])
(def input (range 1000000))
; Pipeline definitions are vectors of pipes.
@kotarak
kotarak / mutabots.clj
Last active August 29, 2015 14:07 — forked from cgrand/mutabots.clj
(ns mutabots
"Reimplementation of transducers, in terms of processing functions instead
of reducing functions.
tl;dr: reducing-fn based transducers are a special case, influenced by reducers,
of processing-fn based transducers.
In Clojure 1.7.0-alpha2, transducers are expressed in terms of the existing
concept of reducing functions.
To sum it up, a transducer has currently the signature :
@kotarak
kotarak / meikel-q.clj
Last active January 3, 2016 13:39 — forked from cgrand/meikel-q.clj
(defn queue-process-uncontrolled
[input output stats]
(async/go
(loop [q clojure.lang.PersistentQueue/EMPTY]
(let [[val-to-q ch] (async/alts!
(if-let [v (peek q)]
[input [output v]]
[input]))]
(swap! stats update-stats-as-you-see-fit q)
(cond
user=> (ns foo.bar (:refer-clojure :exclude [map]))
nil
foo.bar=> (def map :my-map)
#'foo.bar/map
foo.bar=> map
:my-map
foo.bar=> (in-ns 'user)
#<Namespace user>
user=> (ns foo.bar)
nil
@kotarak
kotarak / lispy_AST_transform.groovy
Created August 7, 2013 11:29
You can write Lisp in any language.
def loadMethod = ZweigBuilder.toNode([
method: "load",
modifier: ["public", "static"],
returnType: ClassHelper.VOID_TYPE,
body: [
[if: [not: flagField],
then: [on: mutexField,
synchronize: [
[if: [not: flagField],
then: [do: [
@kotarak
kotarak / build.gradle
Created November 20, 2012 21:01
Immutant deployment failing on me
buildscript {
repositories {
maven { url 'http://127.0.0.1:7080/archiva/repository/internal' }
}
dependencies {
classpath 'clojuresque:clojuresque:1.5.2'
}
}