Skip to content

Instantly share code, notes, and snippets.

@ragnard
ragnard / redis.clj
Last active February 20, 2021 16:27
Using Redis for persistent memoization of Clojure functions
(ns util.redis
(:refer-clojure :exclude [memoize])
(:require [taoensso.carmine :as car]))
;; boilerplate stuff that is not in Carmine
(def ^:dynamic ^:private *pool*)
(def ^:dynamic ^:private *spec*)
(defmacro with-redis
@ragnard
ragnard / test.clj
Last active December 12, 2015 02:29
parsley
(def parse (p/parser parser-options
:start [:params? :line*]
:start :tag-line
:vspace #"[\n\r]+"
:params [:vspace :doctype]
@ragnard
ragnard / sql.clj
Last active December 12, 2015 05:39
(defn with-query-results-cursor
"Execute a query using a cursor to efficiently handle large data
sets. result-fn will be applied to a result set seq."
[[sql & params :as sql-params] fetch-size result-fn]
(sql/transaction
(with-open [stmt (.prepareStatement (sql/connection) sql)]
(doseq [[index value] (map vector (iterate inc 1) params)]
(.setObject stmt index value))
(.setFetchSize stmt fetch-size)
(with-open [rset (.executeQuery stmt)]
(ns groupon.joda-instant-reader
(:require [clojure.instant :as i])
(:import org.joda.time.DateTime))
(defmethod print-method org.joda.time.DateTime
[^org.joda.time.DateTime d ^java.io.Writer w]
(#'i/print-date (java.util.Date. (.getMillis d)) w))
(defmethod print-dup org.joda.time.DateTime
@ragnard
ragnard / gist:4738185
Created February 8, 2013 11:08 — forked from AlexBaranosky/gist:3898489
Fix macro.
(ns groupon.joda-instant-reader
(:require [clojure.instant :as i])
(:import org.joda.time.DateTime))
(defmethod print-method org.joda.time.DateTime
[^org.joda.time.DateTime d ^java.io.Writer w]
(#'i/print-date (java.util.Date. (.getMillis d)) w))
(defmethod print-dup org.joda.time.DateTime
@ragnard
ragnard / sym_quoting.clj
Created February 8, 2013 11:19
Various ways of quoting/syntax-quoting/unquoting symbols
(in-ns 'user)
`inst
;; => user/inst
`'inst
;; => (quote user/inst)
`'~'inst
;; => (quote inst)
@ragnard
ragnard / Exception
Last active December 14, 2015 18:09
kibit compilation issue
Caused by: java.lang.IllegalArgumentException: No matching ctor found for class kibit.rules.util$compile_rule$fn__2052
at clojure.lang.Reflector.invokeConstructor(Reflector.java:163)
at clojure.lang.LispReader$EvalReader.invoke(LispReader.java:1053)
at clojure.lang.LispReader$DispatchReader.invoke(LispReader.java:626)
at clojure.lang.LispReader.read(LispReader.java:185)
at clojure.lang.RT.readString(RT.java:1738)
at kibit.rules.arithmetic__init.__init0(Unknown Source)
at kibit.rules.arithmetic__init.<clinit>(Unknown Source)
... 138 more
@ragnard
ragnard / clojure.el
Created March 19, 2013 16:50
limit print length
;; specify the print length to be 100 to stop infinite sequences
;; killing things.
(defun nrepl-limit-print-length ()
(interactive)
(nrepl-send-string-sync "(set! *print-length* 100)" "clojure.core"))
(defun nrepl-unlimit-print-length ()
(interactive)
(nrepl-send-string-sync "(set! *print-length* nil)" "clojure.core"))
@ragnard
ragnard / collectd.conf
Created July 26, 2013 14:43
Riemann collectd
FQDNLookup true
Hostname "localhost"
Interval 5
LoadPlugin syslog
<Plugin syslog>
LogLevel info
</Plugin>
@ragnard
ragnard / debounce.cljs
Last active April 20, 2017 14:41
Exploring core.async, core.match and David Nolens async-tests repository.
(defn debounce
([source msecs edge]
(debounce (chan) source msecs edge))
([sink source msecs edge]
(go (loop [state ::init last nil chans [source]]
(let [[_ timer] chans
[v c] (alts! chans)]
(match [state c edge]
[::init source :leading] (do (>! sink v)
(recur ::debouncing nil (conj chans (timeout msecs))))