Skip to content

Instantly share code, notes, and snippets.

user=> (pprint/pprint (take-last 14 (sort-by :date *3)))
({:date 20200428,
:positiveIncrease 1567,
:totalTestResultsIncrease 24199,
:percent-positive 0.06475474193148477}
{:date 20200429,
:positiveIncrease 1469,
:totalTestResultsIncrease 25531,
:percent-positive 0.057537895107908035}
{:date 20200430,
bfabry@18723-bfabry ~/C/z/zcfn> cat ~/.gitconfig
[credential]
[core]
excludesfile = ~/.gitignore
editor = vim
[hub]
protocol = https

Keybase proof

I hereby claim:

  • I am bfabry on github.
  • I am bfabryzendesk (https://keybase.io/bfabryzendesk) on keybase.
  • I have a public key whose fingerprint is 2A45 6D06 1571 48C6 24ED 0818 4387 D162 16DE 2C6D

To claim this, I am signing this object:

(ns kafka
(:require [clojure.core.async :as async :refer [<!! >!! thread]]
[com.stuartsierra.component :as component]
[clojure.tools.logging :as log])
(:import (kafka.consumer ConsumerTimeoutException)
(org.I0Itec.zkclient.exception ZkTimeoutException)
(kafka.javaapi.consumer ZookeeperConsumerConnector)
(java.util Iterator)
(kafka.message MessageAndMetadata)))
(reduce
(fn [acc v]
(let [v' (dec v)]
(if-not (and (even? v') (> v' 2))
acc
(+ acc v'))))
0
[1 2 3 4 5 6 7])
=> 10
(defn run-handwritten [] (reduce
package clojure_dataflow;
import com.google.cloud.dataflow.sdk.transforms.DoFnWithContext;
import com.google.cloud.dataflow.sdk.transforms.windowing.BoundedWindow;
/**
* This class exists because DoFn relies on overriding abstract methods,
* but DoFnWithContext relies on overriding and annotating abstract methods,
* since annotating classmethods in clojure is a pain, we made this class.
* To use this class, extend it using `proxy` and override the abstract methods.
(def bq-service (doto (Bigquery$Builder. (GoogleNetHttpTransport/newTrustedTransport)
(JacksonFactory/getDefaultInstance)
cred)
(.setApplicationName "nfi")
.build))
(def ds (Dataset.))
(.setAccess ds [(doto (Dataset$Access.) (.setRole "OWNER") (.setUserByEmail "bfabry@zendesk.com"))])
(def built-bq-service (.build bq-service))
(defn filter-errors [v {:keys [^Aggregator bad-aggregator]]
(if (bad v)
(do
(.addValue bad-aggregator 1)
false)
true))
(df/df-map "filter-errors" filter-errors {:aggregators [:bad-aggregator]})
(sp/transform [(sp/filterer odd?) sp/LAST] inc [1 2 3 4])
=> [1 2 4 4]
(sp/select [(sp/filterer odd?) sp/LAST] [1 2 3 4])
java.lang.NullPointerException:
*e
=>
#error{:cause nil,
:via [{:type java.lang.NullPointerException, :message nil, :at [clojure.lang.Numbers ops "Numbers.java" 1013]}],
:trace [[clojure.lang.Numbers ops "Numbers.java" 1013]
[clojure.lang.Numbers add "Numbers.java" 128]
@bfabry
bfabry / specter.clj
Last active April 21, 2016 19:01
How to do stuff in specter
(def MAP-VALS (sp/comp-paths sp/ALL sp/LAST))
; increment the values for a list of keys
(sp/transform [(apply sp/multi-path [:foo])] inc {:foo 1 :bar 2}) => {:foo 2 :bar 2}
;; or
(sp/transform [(sp/submap [:foo]) MAP-VALS] inc {:foo 1 :bar 2})
;; play with submaps
(sp/select [(submap [:foo :baz])] {:foo 1 :bar 2})
=> [{:foo 1}]