hardware & os
- dotfiles?
- terminal & shell
- editor
- env setup - dbs, etc
- how do you start you REPL?
- deps or leningen?
- new project template?
- tasks automation - babashka?
- how do you navigate in project?
(ns com.widdindustries.safe-subs) | |
(defn subs-safe | |
"like clojure.core/subs but more forgiving" | |
([^String s start] (subs-safe s start (count s))) | |
([^String s start end] | |
(when s | |
(let [end (if (> end (count s)) | |
(count s) |
; demonstrating that offset names such as EST, CEST etc are not always parsed properly into ZonedDateTime. | |
; EST, CEST are defined as fixed offsets from UTC so are not ambiguous in that respect, although apparently the same abbreviation | |
; is used more than once for the same thing in some cases! Ideally they could be parsed to OffsetDateTime, | |
; but I can't find a way to get that working. Comment if you know how ;-) | |
; old parse api | |
(-> | |
(SimpleDateFormat. "M/d/y, H:m z") | |
(.parse "3/26/2020, 14:00 EST")) |
(ns delete-on-close-fileinput-stream) | |
(defn create-fis [^java.io.File f] | |
(proxy [java.io.FileInputStream] [f] | |
(close [] | |
(try | |
(proxy-super close) | |
(finally | |
(.delete f)))))) | |
(ns com.widdindustries.reagent-interval | |
"functions to create reagent reactions (ie ratoms) whose value changes | |
as an argument function is called periodically" | |
(:require [reagent.ratom :as ratom] | |
[reagent.core :as r])) | |
(defn interval-async | |
"create ratom whose value will initially be initial-state, | |
and thereafter may change as f is called with the 'state' atom every delay-ms" | |
[f delay-ms initial-state] |
(slingshot.slingshot/try+ | |
(kaocha.plugin.cloverage/cloverage-main-hook (kaocha.repl/config)) | |
(catch :kaocha/early-exit m | |
(prn m))) |
(ns same-thread-executor | |
"handy in unit tests to have things happen straight away" | |
(:import (java.util.concurrent ExecutorService Future))) | |
(defn executor [] | |
(reify ExecutorService | |
(^Future submit [_ ^Callable f] | |
(let [r (f)] | |
(reify Future | |
(get [_] r)))))) |
#!/usr/bin/env bb | |
; run the script from any dir to serve its files | |
(require '[babashka.deps]) | |
(def deps '{:deps {io.github.babashka/http-server | |
{:git/sha "b38c1f16ad2c618adae2c3b102a5520c261a7dd3"}}}) | |
(babashka.deps/add-deps deps) |
#!/usr/local/bin/bb | |
(import '[java.io ByteArrayOutputStream]) | |
(import '[java.util Base64]) ; | |
(import '[java.util.zip Inflater]) ; | |
(defn uncompress [source-bytes] | |
(let [inflater (doto (Inflater.) | |
(.setInput source-bytes)) | |
outputStream (new ByteArrayOutputStream (count source-bytes)) |
hardware & os
(ns contiguous-spans | |
"takes pre-sorted dates and returns contiguous periods contained therein. | |
see comment block for demo | |
" | |
(:require [tick.core :as t])) | |
(defn contiguous-spans | |
"takes pre-sorted dates and returns contiguous periods contained. | |
dates a and b are contiguous if a plus span-length is equal to b " |