Skip to content

Instantly share code, notes, and snippets.

View pleasetrythisathome's full-sized avatar

Scarlet Dame pleasetrythisathome

View GitHub Profile
@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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / browser.cljs
Created October 7, 2014 19:00
clojurescript browser utils
(ns browser
(:require-macros [cljs.core.async.macros :refer [go go-loop]])
(:require [goog.events :as events]
[clojure.string :as str]
[cljs.core.async :refer [put! <! chan]])
(:import goog.History
goog.history.Html5History
goog.history.Html5History.TokenTransformer
goog.history.EventType))
@pleasetrythisathome
pleasetrythisathome / control_loop.clj
Last active August 29, 2015 14:06
play, pause, kill a go-loop
(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"
([f read-chan] (control-loop f read-chan (chan)))
([f read-chan control]
(go-loop [action :play]
(let [[v c] (alts! (condp = action
:play [read-chan control]
:pause [control]))]
(when-not (nil? v)