Skip to content

Instantly share code, notes, and snippets.

@w01fe
w01fe / solar_rad_graph.clj
Created May 1, 2013 18:11
Solar radiation graph
{:Ra (fnk [day-of-year lat] (solar-rad-et day-of-year lat))
:Rs (fnk [tmax tmin {kRs 0.16} Ra] (-> (- tmax tmin) Math/sqrt (* kRs Ra)))
:Rso (fnk [alt Ra] (-> (* 2e-5 alt) (+ 0.75) (* Ra)))
:Rns (fnk [{a 0.23} Rs] (-> (- 1 a) (* Rs)))
:tmaxK (fnk [tmax] (to-kelvin tmax))
:tminK (fnk [tmin] (to-kelvin tmin))
:ea (fnk [tmin] (sat-vapour-pressure tmin))
:term1 (fnk [tmaxK tminK {s 4.903e-9}]
(-> (Math/pow tmaxK 4) (+ (Math/pow tminK 4)) (* s) (/ 2)))
:term2 (fnk [ea] (-> (Math/sqrt ea) (* -0.14) (+ 0.34)))
@w01fe
w01fe / locals_clearing.clj
Created March 5, 2013 05:43
A bug in fine-grained locals clearing in Clojure 1.5?
(deftype FinalizeReporter [x]
Object
(finalize [this] (println "Finalizing" x))
clojure.lang.IDeref
(deref [this] x))
(defn leaker [n]
(with-open [_ (reify java.io.Closeable (close [this]))]
(let [s (map #(FinalizeReporter. %) (take 10 (iterate inc 0)))]
(when (> n -1)
@w01fe
w01fe / graphviz.clj
Created February 15, 2013 06:12
Graphviz for Graphs
;; Copyright Jason Wolfe and Prismatic, 2013.
;; Licensed under the EPL, same license as Clojure
(use 'plumbing.core)
(require '[clojure.java.shell :as shell]
'[clojure.string :as str])
(import '[java.util HashSet] '[java.io File])
(defn double-quote [s] (str "\"" s "\""))
(ns plumbing.graph-async
(:require
[plumbing.fnk.pfnk :as pfnk]
[plumbing.fnk.schema :as schema]
[plumbing.core :as plumbing]
[plumbing.graph :as graph]))
;; async function has ^:async metadata, callback required key.
;; TODO: redo with just promises/futures once they have callback options
;; TODO: make nicer way to specify async fnks?
@w01fe
w01fe / fnk_examples.clj
Created October 2, 2012 00:43 — forked from aria42/fnk_examples.clj
Bring on the fnk
(defnk foo [x y [s 1]]
(+ x (* y s)))
(foo {:x 2 :y 3 :s 2})
; ==> 8
;; 's' defaults to 1
(foo {:x 2 :y 3})
; ==> 5
@w01fe
w01fe / graph_monitoring.clj
Created October 1, 2012 02:53
Monitoring a Graph
(defn observe-graph [g record-node-time!]
(into {}
(for [[k f] g]
[k
(with-meta
(fn [m]
(let [t0 (System/nanoTime)
v (f m)
t1 (System/nanoTime)]
(record-node-time! k (- t1 t0))
@w01fe
w01fe / graph_fancy_compilation.clj
Created October 1, 2012 02:44
Fancier Graph compilation examples
(def lazy-stats (graph/lazy-compile stats-graph))
(:m (lazy-stats {:xs [1 2 3 6]}))
; ==> 3
; WIN: :m2 and :v are not computed.
(def par-stats (graph/parallel-compile stats-graph))
(:v (par-stats {:xs [1 2 3 6]}))
@w01fe
w01fe / graph_simple_compilation.clj
Created October 1, 2012 02:43
Simple graph compilation
;; Functionally identical to (defn stats ...) above
(def stats (graph/eager-compile stats-graph))
(stats {:xs [1 2 3 6]})
; ==> {:n 4
; :m 3
; :m2 12.5
; :v 3.5)
;; Result is error checked
@w01fe
w01fe / fnk_examples.clj
Created September 28, 2012 23:32
Bring on the fnk
(defnk foo [x y [s 1]]
(+ x (* y s)))
(foo {:x 2 :y 3 :s 2})
;; ==> 8
(foo {:x 2 :y 3})
;; ==> 5
(foo {:x 2})
@w01fe
w01fe / univariate_stats_graph.clj
Created September 28, 2012 23:28
Univariate stats as Graph
(def stats-graph
{:n (fnk [xs] (count xs))
:m (fnk [xs n] (/ (sum identity xs) n))
:m2 (fnk [xs n] (/ (sum #(* % %) xs) n))
:v (fnk [m m2] (- m2 (* m m)))})