Skip to content

Instantly share code, notes, and snippets.

View pleasetrythisathome's full-sized avatar

Scarlet Dame pleasetrythisathome

View GitHub Profile
@pleasetrythisathome
pleasetrythisathome / silk.cljx
Created October 7, 2014 19:05
some code stripped out of a project showing use of silk for isomorphic routing
(ns router
#+cljs (:require-macros [cljs.core.match.macros :refer [match]])
(:require [domkm.silk :as silk]
[clojure.string :as str]
#+clj [content :as content]
#+clj [drivers.email :as email]
#+clj [clojure.core.match :refer [match]]
#+clj [compojure.core :as compojure :refer [defroutes GET POST PUT DELETE]]
#+clj [compojure.route :as route]
#+clj [com.stuartsierra.component :as component]
@pleasetrythisathome
pleasetrythisathome / poll.clj
Last active August 29, 2015 14:07
image polling
(defn read-images-from-disk []
;; return images or
[])
(defn save-images-to-disk [images]
;; delete the old ones
;; save the new ones
)
(defn fetch-images []
@pleasetrythisathome
pleasetrythisathome / debounce.clj
Last active August 29, 2015 14:08
async action debounce
(defn debounce-action
([period events-ch f]
(debounce-action period events-ch f []))
([period events-ch f & args]
(go-loop []
(let [[v c] (alts! [(timeout period) events-ch])]
(when v
(if (= c events-ch)
(recur)
(apply f args)))))))
@pleasetrythisathome
pleasetrythisathome / component-interpolator.cljs
Last active August 29, 2015 14:09
wrap component rendering in an interpolator for page transitions
(defcomponentk component-interpolator
[data
owner
[:opts
view-factory
{interpolator (fnk [{prev nil} next] ;; views are (partial contructor data)
(fn [t]
(next)))}
{duration 1000}
{ease (ease/ease :cubic-in-out)}]]
@pleasetrythisathome
pleasetrythisathome / nashorn.clj
Last active August 29, 2015 14:10
nashorn cljs rendering
(ns starlab.services.nashorn
(:require [clojure.tools.logging :as log]
[clojure.java.io :as io])
(:import [javax.script
Invocable
ScriptEngineManager])
(:use [plumbing.core :exclude [update]]))
(defn nashorn-env []
(doto (.getEngineByName (ScriptEngineManager.) "nashorn")
@pleasetrythisathome
pleasetrythisathome / sente-queue.cljs
Last active August 29, 2015 14:10
sente cljs send queuing. allows for server restart without dropping messages
(ns agencyrx.utils.chsk
(:require-macros
[cljs.core.async.macros :refer [go go-loop]])
(:require
[cljs.core.async :as async :refer (<! >! put! chan dropping-buffer)]
[taoensso.sente :as sente :refer (cb-success?)]))
(defn control-loop
"calls f on each value read from read-chan
returns a control channel that can :play, :pause, and :kill the read loop"
@pleasetrythisathome
pleasetrythisathome / clean.sh
Created December 2, 2014 20:45
bash clean filenames
# convert all spaces to underscores, remove characters like {}(),\! and convert the filename to lowercase.
ls | while read -r FILE
do
mv -v "$FILE" `echo $FILE | tr ' ' '_' | tr -d '[{}(),\!]' | tr -d "\'" | tr '[A-Z]' '[a-z]' | sed 's/_-_/_/g'`
done
# just spaces to underscores
ls | while read -r FILE
@pleasetrythisathome
pleasetrythisathome / kargs.clj
Created December 5, 2014 16:29
partial application is idempotent in keyword argument functions
(defn kargs [& {:as args}]
args)
;; idempotent
(= ((-> kargs
(partial :test 1)))
((-> kargs
(partial :test 1)
(partial :test 1))))
;; => true
@pleasetrythisathome
pleasetrythisathome / debounce.clj
Last active September 3, 2015 18:17
debounce an action on a channel for values that produce the same result of a key-fn
(defn debounce
"debounce an action on a channel for values that produce the same result of a key-fn"
([f input-ch wait] (debounce f input-ch wait identity))
([f input-ch wait key-fn]
;; keep a map of keys that have been triggered
(go-loop [debounced {}]
(let [[v c] (alts! (conj (vals debounced) input-ch))]
(if (= c input-ch)
(let [key (key-fn v)]
(if (get (into #{} (keys debounced)) key) ;; if our key is debounced
@pleasetrythisathome
pleasetrythisathome / transition.cljs
Created January 26, 2015 18:04
component transitions
(ns utils.transition
(:require-macros [cljs.core.async.macros :refer [go go-loop]])
(:require [cljs.core.async :as async :refer [<! put! chan sub timeout]]
[plumbing.core :refer [update map-vals] :refer-macros [defnk fnk fn->]]
[bardo.ease :as ease]
[bardo.interpolate :as intrpl]
[cljs-time.core :as t]
[cljs-time.coerce :as tc]
[om.core :as om :include-macros true]
[om-tools.core :refer-macros [defcomponentk]]