Skip to content

Instantly share code, notes, and snippets.

View ghadishayban's full-sized avatar

Ghadi Shayban ghadishayban

View GitHub Profile
docker@boot2docker:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere 172.17.0.3 tcp dpt:smtp
ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:smtp
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
@ghadishayban
ghadishayban / flow_control.clj
Last active August 29, 2015 14:04
"turnstile" for flow-control
(ns flow-control
(:require [clojure.core.async :as async :refer :all
:exclude (map merge partition-by partition unique take into reduce split)]))
;; flow control through a "turnstile"
;; kind of like an extensible circuit breaker
;; Overview --
;; Your program's processes are like people entering a subway,
;; but the central authority only allows certain tickets in.
@ghadishayban
ghadishayban / weighted_rand.clj
Last active September 23, 2022 08:15
Vose's alias method for weighted randoms
(ns weighted-rand
(:import clojure.lang.PersistentQueue))
(defprotocol Rand
(nextr [_ rng]))
;; Vose's alias method
;; http://www.keithschwarz.com/darts-dice-coins/
(deftype Vose [n ^ints alias ^doubles prob]
@ghadishayban
ghadishayban / resultset.clj
Created September 8, 2014 18:10
result sets
(defn result-set
[^ResultSet rs & {:keys [identifiers]
:or {identifiers str/lower-case}}]
(reify clojure.lang.IReduce
(reduce [this f]
(reduce [this f (f)]))
(reduce [this f init]
(let [rsmeta (.getMetaData rs)
idxs (range 1 (inc (.getColumnCount rsmeta)))
@ghadishayban
ghadishayban / doseq.clj
Last active August 29, 2015 14:06
doseq expansion
(let*
[c__6072__auto__
(clojure.core.async/chan 1)
captured-bindings__6073__auto__
(clojure.lang.Var/getThreadBindingFrame)]
(clojure.core.async.impl.dispatch/run
(clojure.core/fn
[]
(clojure.core/let
[f__6074__auto__
@ghadishayban
ghadishayban / XFIterator.java
Created November 6, 2014 03:38
Transducers <3 Iterators
import clojure.lang.RT;
import clojure.lang.IFn;
import clojure.lang.AFn;
import java.util.Iterator;
import java.util.ArrayList;
import java.util.NoSuchElementException;
public class XFIterator implements Iterator {
@ghadishayban
ghadishayban / poolboy.clj
Created March 15, 2015 17:23
Interruptible Channels (Needs JDK8)
(ns poolboy.chanfut
(:import [java.util.concurrent CompletableFuture Callable Future]
[java.util.function BiConsumer]
[java.util.concurrent Executor ExecutorService])
(:require [clojure.core.async :as async]
[clojure.core.async.impl.protocols :as async-impl]))
(def async-executor clojure.core.async.impl.exec.threadpool/the-executor)
(defprotocol Interruptible
@ghadishayban
ghadishayban / json.clj
Created October 1, 2015 19:30
Pex JSON grammar
(def JSON '{json [whitespace value EOI]
value (/ string number object array jtrue jfalse jnull)
object [(:ws "{")
(:join [string (:ws ":") value] ",")
(:ws "}")
(action capture-object)]
@ghadishayban
ghadishayban / docker_tag_paginate.clj
Last active December 21, 2016 03:48
unfold example
(ns docker-tag-paginate
(:require [clj-http.lite.client :as client]
[cheshire.core :as json]
[clojure.pprint :refer [print-table]]))
(def base-url "https://registry.hub.docker.com/v2")
;; (progression pos? dec 15)
(defn progression
@ghadishayban
ghadishayban / doseq.clj
Created April 24, 2016 05:19
doseq that doesn't blow up with too much bytecode, and w/o (fn []) thunks
(defmacro doseqs
[seq-exprs & body]
(let [stk (gensym "stack__")
level (gensym "level__")
seq-exprs (partition 2 seq-exprs)
bindings (vec (map first seq-exprs))
init-exprs (vec (map second seq-exprs))
nbinds (count init-exprs)