Skip to content

Instantly share code, notes, and snippets.

View camsaul's full-sized avatar
💭
I am Cam

Cam Saul camsaul

💭
I am Cam
View GitHub Profile
@camsaul
camsaul / docker-cleanup.sh
Created May 15, 2019 00:12
Docker cleanup
docker system prune -a
@camsaul
camsaul / log_bindings.clj
Created May 17, 2019 20:00
Clojure macro to log bindings
(defmacro logged-binding {:style/indent 1} [[symb val] & body]
`(do
(let [val# ~val]
(println
(colorize.core/magenta
(format ~(format "[%s:%d] BOUND %s -> %%s" (ns-name *ns*) (:line (meta &form)) (str symb)) val#)))
(let [result# (binding [~symb val#]
~@body)]
(println
(colorize.core/red
@camsaul
camsaul / graph.edn
Last active May 29, 2019 21:31
Code used to profile performance improvements to ns-tracker transitive
{:dependencies
{metabase.query-processor
#{metabase.query-processor.middleware.expand-macros metabase.query-processor.middleware.bind-effective-timezone metabase.query-processor.middleware.resolve-joins
metabase.query-processor.middleware.driver-specific metabase.query-processor.middleware.catch-exceptions metabase.query-processor.middleware.splice-params-in-response schema.core
metabase.query-processor.middleware.async metabase.query-processor.middleware.format-rows metabase.query-processor.middleware.add-row-count-and-status
metabase.query-processor.middleware.add-implicit-joins metabase.query-processor.middleware.resolve-fields metabase.query-processor.middleware.normalize-query
metabase.query-processor.middleware.validate metabase.driver metabase.query-processor.middleware.resolve-source-table metabase.query-processor.middleware.annotate
metabase.query-processor.middleware.process-userland-query metabase.query-processor.middleware.reconcile-breakout-and-order-by-bucketing metabase.q
@camsaul
camsaul / util.clj
Created June 13, 2019 17:07
Mongo driver ideas
(defn- normalize-details [details]
(let [{:keys [dbname host port user pass ssl authdb tunnel-host tunnel-user tunnel-pass additional-options]
:or {port 27017, pass "", ssl false}} details
;; ignore empty :user and :pass strings
user (when (seq user)
user)
pass (when (seq pass)
pass)
authdb (if (seq authdb)
authdb
@camsaul
camsaul / multischema.clj
Created July 12, 2019 17:47
Multimethod schemas
(def Apple
{::type (s/eq :apple)
:color (s/enum :red :yellow :green)})
(def Orange
{::type (s/eq :orange)
:color (s/eq :orange)})
(def Fruit
(s/conditional
@camsaul
camsaul / notification.sh
Created October 1, 2019 01:26
macOS Notifications from command line
#! /usr/bin/env bash
sudo gem install terminal-notifier
terminal-notifier \
-message "WOW" \
-title "Title" \
-contentImage http://www.brittonbunch.com/WondersOfCreation/images/tucan.gif
@camsaul
camsaul / test.clj
Created January 22, 2020 20:40
Testing Redshift hanging transactions
(defn- x []
(mt/with-driver :redshift
(count (mt/rows (mt/run-mbql-query :venues)))
(print \.)
(flush)))
(defn- datasource ^javax.sql.DataSource []
(:datasource (sql-jdbc.conn/db->pooled-connection-spec (mt/with-driver :redshift (mt/db)))))
(defn- print-results [^java.sql.ResultSet rs]
@camsaul
camsaul / all_threads.clj
Created March 3, 2020 23:54
Print all threads grouped by pattern
(defn- all-threads []
(transduce
identity
(fn
([]
{})
([m]
(into (flatland.ordered.map/ordered-map)
(cons
@camsaul
camsaul / preview-markdown.el
Last active November 12, 2021 02:09
Markdown live previews source
;;; -*- lexical-binding: t; coding: utf-8; -*-
(defun cam/-scroll-percentage ()
(/ (float (line-number-at-pos (window-start)))
(float (line-number-at-pos (point-max)))))
(defun cam/-set-window-start-to-percentage (scroll-percentage)
(goto-char (point-min))
(let ((target-line-number (truncate (* (line-number-at-pos (point-max)) scroll-percentage))))
(forward-line (1- target-line-number)))
@camsaul
camsaul / try_plus.clj
Last active June 24, 2020 18:04
Cam's try+ macro
(defn all-ex-data
"Combined `ex-data` from all instances of `ExceptionInfo`. Prefers keys from lower-level Exceptions (e.g. the root
cause)."
[e]
(->> (iterate ex-cause e)
(take-while some?)
(map ex-data)
(reduce merge)))
(defn- catch-form? [x]