Skip to content

Instantly share code, notes, and snippets.

View olivergeorge's full-sized avatar

Oliver George olivergeorge

  • Tasmania, Australia
  • 13:58 (UTC +10:00)
View GitHub Profile
@olivergeorge
olivergeorge / om-to-reagent.cljs
Created December 18, 2016 05:52
Aim: See if there's a way to avoid rewriting existing om views in move to re-frame. Method: 1. Workout what om api calls are needed. 2. Try and implement them using reagent. Results: Incomplete. Note: this code includes bad ideas.
(ns om.core
(:require [reagent.core :as r]))
(defn component? [x])
(defprotocol IInitState (init-state [_]))
(defprotocol IRender (render [this]))
(defprotocol IRenderState (render-state [this state]))
(defprotocol IDisplayName (display-name [this]))
(defprotocol IWillReceiveProps (will-receive-props [this next-props]))
(->> (for [{:keys [table_name]} (db-tables db {:schemaPattern "AFM"})]
[table_name (db-query db (str "select * from " table_name))])
(into {})
(spit "db.edn"))
@olivergeorge
olivergeorge / pmr_spec.clj
Last active March 29, 2019 12:39
generate simple api pull spec from clojure.spec forms
(ns serverless.pmr-spec
(:require [clojure.spec :as s]))
(s/def ::spec
(s/or ::table (s/cat :s #{`s/keys 's/keys} :pairs (s/* any?))
::many-rel (s/cat :s #{`s/every} :pred any? :opts (s/* any?))
::and (s/cat :s #{`s/and} :pred-forms (s/* any?))
::other any?))
@olivergeorge
olivergeorge / spec_walking_pred_collection.clj
Created October 12, 2016 23:29
little experiment around spec walking and transformation Goal here was picking out predicates which declare value attributes (e.g. string, max length...) but ignoring things which might confuse like inline functions...
(ns olivergeorge.spec-walking-pred-collection
(:require [clojure.spec :as s]
[clojure.core.match :refer [match]]))
(defn max-length [max])
(s/def ::inline-fn (s/cat ::op #{`fn} :rest (s/+ any?)))
(s/def ::fn-builder (s/cat :fn ifn? :args (s/* any?)))
(defn inline-fn? [x] (s/valid? ::inline-fn x))
(defn fn-builder? [x] (s/valid? ::fn-builder x))
@olivergeorge
olivergeorge / example.cljs
Last active October 28, 2016 09:29
reframe-vs-react-virtualized
(ns example.virtualized
(:require cljsjs.react-virtualized
cljsjs.react
[cljs.spec :as s]
[re-frame.core :as re-frame]))
(def ArrowKeyStepper* (js/React.createFactory js/ReactVirtualized.ArrowKeyStepper))
(def AutoSizer* (js/React.createFactory js/ReactVirtualized.AutoSizer))
(def Collection* (js/React.createFactory js/ReactVirtualized.Collection))
@olivergeorge
olivergeorge / spec_to_sql.clj
Last active April 8, 2018 20:14
Experiment to generate sql create table statements from clojure.spec definitions
(ns condense.spec->sql
(:require [clojure.spec :as s]))
(defn varchar [max]
#(and (string? %) (<= (count %) max)))
(defn lift-type
"Simple transformation of data. #{[t v1] [t v2]...} => [t #{v1 v2}]"
[typed-vals]
(let [types (map first typed-vals)
(ns condense.obj-lookup
"Extends js/Object to implement ILookup so we can destructure."
(:require [goog.object :as gobject]))
(extend-protocol ILookup
object
(-lookup
([o k] (gobject/get o k))
([o k not-found] (gobject/get o k not-found))))
(ns devcards-vs-clojure-spec.code-as-data
(:require [clojure.spec :as s]))
; detect the "pull-spec type" associated with a spec
(defmulti pull-type* first)
(defn pull-type [spec]
(when (seq? spec)
(pull-type* spec)))
@olivergeorge
olivergeorge / gauss-rand.cljs
Last active September 27, 2016 11:56
Generating samples from a normal distribution (in browser / javascript)
(defn mean [xs]
(/ (apply + xs)
(count xs)))
(defn variance [xs]
(let [m (mean xs)
square-error (fn [x]
(Math/pow (- x m) 2))]
(mean (map square-error xs))))
(ns labs.demo
(:require [clojure.spec :as s]
[clojure.test.check.generators :as generators]
[clojure.test.check.random :as random]
[clojure.test.check.rose-tree :as rose-tree]
[sablono.core :as sab :include-macros true]))
(defonce demo-db (atom {:seed 1 :size 5 :overrides {}}))
(defn add-override [k v]