Skip to content

Instantly share code, notes, and snippets.

Christophe Grand cgrand

Block or report user

Report or block cgrand

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
View Main.java
package doubetrouble;
import java.util.concurrent.Callable;
public class Main implements Callable<Object> {
private static class Constants {
final static Object constant;
static {
View _carry.md

Carry

Frequently I want to use reductions only to quickly realize that I'm not interested in the successive values of the state.

A simple example is to imagine one wants to increment a number represented by a sequence of its binary digits:

(inc '()) is (1)
(inc '(1)) is (0 1) ; yes the list is inversed, the lowest significant bit is the first item
(inc '(0 1)) is (1 1)
View maze-generation
(require '[clojure.string :as s])
;; Maze GENERATION
(defn north-of [[row col]] [(dec row) col])
(defn south-of [[row col]] [(inc row) col])
(defn west-of [[row col]] [row (dec col)])
(defn east-of [[row col]] [row (inc col)])
(defn neighbours [rows cols cell]
@cgrand
cgrand / heredoc.clj
Last active Jan 26, 2019
An ugly hacky heredoc for Clojure
View heredoc.clj
(defn heredoc []
(let [delim (.readLine *in*)]
(->> (repeatedly #(.readLine *in*))
(take-while #(not= delim %))
(interpose \newline)
(apply str))))
; The following lines are read (by the reader) as:
; "Look )(\"\\T\na here doc!\n"
#=(heredoc)"""
View avocado.md

Monotonic logic is eventually consistent. Eventual Consistency (https://www.voltdb.com/blog/2016/07/21/6265/) has clear limits. It doesn't matter while you are pure. It matters when you go impure (FP). So boundaries must be clear. Boundaries implies coordination. Impure snapshots are expensive.

Monotonicity is ~ relativity. Impure is ~ absolute

View lambda-sim.clj
(defn lambda-model
"Crude model. rps is requests per second, len is a function that returns the
execution length in seconds, until is the number of seconds to run the simulation,
spawn is a function returning the number of ping sub requests, duty is the max age
for a container, keep-alive is the number of seconds before decommissioning a
container.
Returns a map with: the number of user perceived cold starts and the number of
billable seconds."
[{:keys [rps len until spawn duty keep-alive]
:or {rps 10
View ssh-client.clj
(ns ssh-repl.client
(:require [clojure.java.io :as io]))
(defn connect
([user host repl-port {:as options
:keys [ssh-port repl-host key password]
:or {ssh-port 22
repl-host "localhost"}}]
(let [client (doto (org.apache.sshd.client.SshClient/setUpDefaultClient) .start)
session (-> client (.connect user host ssh-port) (doto .await) .getSession)]
@cgrand
cgrand / shootout.md
Created Nov 24, 2017
Pretty printers compared
View shootout.md

clojure.pprint

=> (binding [clojure.pprint/*print-right-margin* 30]
     (clojure.pprint/pprint {:a :b :c {:e :f :g :h :i :j :k :l} :m :n :o {:p {:q :r :s :t}}}))
{:a :b,
 :c
 {:e :f,
  :g :h,
  :i :j,
  :k :l},
View packed-kvs.clj
; with the setting that values are indented by two if they are at the start of a line
=> (doseq [w (range 20)]
(prn 'width w 'non-strict)
(render (best-layout (spans '{1 2 3 (a b) 5 6}) w))
(newline)
(prn 'width w 'strict)
(render (best-layout (spans '{1 2 3 (a b) 5 6}) w true))
(newline))
width 0 non-strict
{1
@cgrand
cgrand / packed-printer.clj
Created Nov 22, 2017
Experiment in compact pretty printing
View packed-printer.clj
=> (doseq [w (range 32)]
(prn 'width w)
(render (best-layout (spans '(1 2 3 4 (a b c) 5 6)) w))
(newline))
width 0
width 1
width 2
You can’t perform that action at this time.