Skip to content

Instantly share code, notes, and snippets.

Avatar
🔍
(probably) pixel hunting

Nikita Prokopov tonsky

🔍
(probably) pixel hunting
View GitHub Profile
@tonsky
tonsky / xmas.clj
Created Dec 19, 2016
Xmas decoration with AnyBar and Clojure
View xmas.clj
(import '[java.net InetAddress DatagramPacket DatagramSocket])
(defonce socket (DatagramSocket.))
(defn send-message [text port]
(let [host (InetAddress/getLocalHost)
packet (DatagramPacket. (.getBytes text) (.length text) host port)]
(.send socket packet)))
View distinct_bench.clj
(require '[criterium.core :as c])
(defn format-time [estimate]
(let [mean (first estimate)
[factor unit] (c/scale-time mean)]
(c/format-value mean factor unit)))
(defmacro race [body1 body2]
`(let [_# (assert (= ~body1 ~body2))
View comparisons_bench.clj
(require '[criterium.core :as c])
(defn new_=
"Equality. Returns true if x equals y, false if not. Same as
Java x.equals(y) except it also works for nil, and compares
numbers and collections in a type-independent manner. Clojure's immutable data
structures define equals() (and thus =) as a value, not an identity,
comparison."
{:inline (fn [x y] `(. clojure.lang.Util equiv ~x ~y))
:inline-arities #{2}
@tonsky
tonsky / uploader.cljs
Last active Sep 16, 2016
Rum file uploader
View uploader.cljs
(ns uploader
(:require
[clojure.string :as str]
[goog.dom :as gdom]
[goog.userAgent :as ua]
[rum.core :as rum]))
(defonce supports-dragndrop?
(let [el (js/document.createElement "div")]
@tonsky
tonsky / user.keymap
Created Jun 4, 2014
LightTable keymap of Sublime shortcuts
View user.keymap
{ :+
{ :editor
{ "pmeta-/" [:toggle-comment-selection]
"ctrl-shift-up" [:editor.sublime.selectLinesUpward]
"ctrl-shift-down" [:editor.sublime.selectLinesDownward]
"pmeta-d" [:editor.sublime.selectNextOccurrence]
"ctrl-m" [:editor.sublime.goToBracket]
"ctrl-shift-m" [:editor.sublime.selectBetweenBrackets]
"shift-pmeta-space" [:editor.sublime.selectScope]
"ctrl-pmeta-up" [:editor.sublime.swapLineUp]
View gist:0e90dde5b1cea02c2de0dbf1377bb41c
[~/Dropbox/ws/rum] lein perf
--- Testing page1.html (1 kB) ---
Evaluation count : 4656 in 6 samples of 776 calls.
Execution time mean : 127.518354 µs
Execution time std-deviation : 3.729988 µs
Execution time lower quantile : 124.490218 µs ( 2.5%)
Execution time upper quantile : 132.649851 µs (97.5%)
Overhead used : 2.051537 ns
View react.cljs
(defn component [ref render-fn & {:keys [on-mount on-unmount]}]
(let [comp (React/createClass (clj->js
{ :render (fn [] (crate/html (render-fn @ref)))
:componentDidMount (or on-mount identity)
:componentWillUnmount (or on-unmount identity) }))]
(add-watch ref :react
(fn [_ _ old new]
(when (not= old new) (.forceUpdate comp))))
comp))
View config-parse.clj
(require '[clojure.string :as str])
(defn parse-line [line]
(let [line (str/replace line #"[\\]\s*(\n\s*|$)" "")]
(when-not (str/blank? line)
(let [[k v] (str/split line #"=" 2)]
[(str/trim k) (when-not (str/blank? v) (str/trim v))]))))
(defn parse [text]
(let [lines (str/split text #"(?<![\s\\])\s*\n")]
View read-chunks.clj
(def ^:dynamic chunk-size 17)
(defn next-chunk [rdr]
(let [buf (char-array chunk-size)
s (.read rdr buf)]
(when (pos? s)
(java.nio.CharBuffer/wrap buf 0 s))))
(defn chunk-seq [rdr]
(when-let [chunk (next-chunk rdr)]
View ini.clj
(ns ini
(require [clojure.string :as str]
[clojure.tools.logging :as log])
(use clojure.test))
(defn read [content]
(-> content
(str/replace #"\\\s*($|\n\s*)" "")
(str/split-lines)))