Skip to content

Instantly share code, notes, and snippets.

View jsofra's full-sized avatar

James Sofra jsofra

  • Melbourne, Australia
View GitHub Profile
@jsofra
jsofra / optional-config.clj
Created October 17, 2011 23:10
Config using optional named parameters
(def ^:dynamic *config* nil)
(defn save [data & {:keys [config] :or {config *config*}}]
(println (format "Saved %s with %s" data config)))
;; => (save {:a 5 :b 6} :config {:some :config})
;; Saved {:a 5, :b 6} with {:some :config}
;; nil
;; => (binding [*config* {:some :config}] (save {:a 5 :b 6}))
;; Saved {:a 5, :b 6} with {:some :config}
@jsofra
jsofra / gist:5140234
Created March 12, 2013 03:59
An example of using a LazyDist in Python to create a computation graph
# the LazyDict implementation, callable values are evaluated before returning them
class LazyDict(dict):
def __getitem__(self, k):
val = dict.__getitem__(self, k)
if callable(val):
val = val()
self[k] = val
return val
# creates lambdas of all the dict entries
@jsofra
jsofra / db-fixture.clj
Created August 25, 2020 02:31
Demonstrating using testcontainers.org library from Clojure
(ns db-fixture
(:require [config :as config])
(:import (org.testcontainers.containers GenericContainer
BindMode)))
(defn create-db-container [{:keys [dbname user password]}]
(-> (GenericContainer. "postgres:12.2")
(.withExposedPorts (into-array Integer [(int 5432)]))
(.withEnv "POSTGRES_DB" dbname)
(.withEnv "POSTGRES_USER" user)