Skip to content

Instantly share code, notes, and snippets.

@mikeananev
mikeananev / core.clj
Created October 19, 2021 18:27
Simple stack implementation in Clojure
(defn new-stack
[]
(atom []))
(defn pushv [*stack value]
(when (nil? value)
(throw (ex-info "nil is not allowed" {:value value})))
(swap! *stack conj value)
@*stack)
@mikeananev
mikeananev / core.clj
Created October 19, 2021 18:17
Simple queue
(defn new-queue []
(atom clojure.lang.PersistentQueue/EMPTY))
(defn put [queue value]
(when (nil? value)
(throw (ex-info "nil is not allowed" {:value value})))
(swap! queue conj value)
(vec (seq @queue)))
(defn take [queue]
@mikeananev
mikeananev / cli.clj
Created July 17, 2021 18:28
Tip from @borkdude: Fun way to get arg parsing without much boilerplate:
#!/usr/bin/env bb
(require '[selmer.parser :refer [<<]])
(let [[& {:strs [-a -b --long-opt]}] *command-line-args*]
(<< "Command line opts: a: {{-a}}, b: {{-b}}, long-opt: {{--long-opt}}"))
@mikeananev
mikeananev / gist:f278a18d990d1cb16de5930bdb580c30
Created June 30, 2021 04:44
Short stacktraces during the tests in Clojure
(defn short-stack [f]
(binding [clojure.test/*stack-trace-depth* 5]
(f)))
(use-fixtures :once short-stack)
@mikeananev
mikeananev / sha3-256.clj
Last active June 15, 2021 17:38
Calculate SHA3-256 sum using Clojure or Babashka
(defn digest-stream
"Calculate SHA3-256 digest for given streaming input.
Input may be: File, URI, URL, Socket, byte array, or filename as String which will be coerced to BufferedInputStream and auto closed after.
Returns digest as a byte array."
[input]
(with-open [in (clojure.java.io/input-stream input)]
(let [buf (byte-array 1024)
digest (java.security.MessageDigest/getInstance "SHA3-256")]
(loop [n (.read in buf)]
(if (<= n 0)
@mikeananev
mikeananev / scratch_2.txt
Created May 3, 2021 07:50
MacOS mc Midnight commander open jar file
# jar
shell/i/.jar
Open=%cd %p/uzip://
View=%view{ascii} /usr/local/Cellar/midnight-commander/4.8.26/libexec/mc/ext.d/archive.sh view zip
# jar
type/i/^jar\ archive
Open=%cd %p/uzip://
View=%view{ascii} /usr/local/Cellar/midnight-commander/4.8.26/libexec/mc/ext.d/archive.sh view zip
@mikeananev
mikeananev / bb.edn
Last active May 1, 2021 14:35
Babashka script example
{:deps {cprop/cprop {:mvn/version "0.1.17"}}
:tasks {:requires ([babashka.fs :as fs]
[cprop.core :refer [load-config]]
[cprop.source :refer [from-env]])
;; helpers and constants
:init (do
(def ansi-green "\u001B[32m") (def ansi-reset "\u001B[0m") (def ansi-yellow "\u001B[33m")
(def target-folder "target")
(defn current-date [] (let [date (java.time.LocalDateTime/now)
formatter (java.time.format.DateTimeFormatter/ofPattern "yyyy-MM-dd HH:mm:ss")]
@mikeananev
mikeananev / principles.adoc
Last active April 26, 2021 09:56
Soft Skills для инженеров

Soft Skills для инженеров

Данные принципы были выработаны мной в процессе общения с управленцами разного уровня. Эти очевидные истины не всегда понятны инженерам, но именно они, по моим наблюдениям, определяют карьерные возможности.

Профессионализм - ответственность.
Непрофессионал не несет ответственности за свою работу, принятые решения и исправляет его ошибки кто-то другой.
Профессионал несет ответственность за свою работу, принятые решения и исправляет свои ошибки сам.

Ошибки в работе будут всегда.

@mikeananev
mikeananev / scratch.txt
Created March 18, 2021 20:25
Publish asciidoc to Confluence
docker run --rm -e ROOT_CONFLUENCE_URL=https://confluence.url/wiki \
-e SKIP_SSL_VERIFICATION=true \
-e MAX_REQUESTS_PER_SECOND=300 \
-e USERNAME=$MAVEN_USR \
-e PASSWORD=$MAVEN_PSW \
-e SPACE_KEY=UPZ \
-e ANCESTOR_ID=4082143444 \
-e PAGE_TITLE_PREFIX="Спринт 16 (24.02 - 05.03)" \
-e PAGE_TITLE_SUFFIX="" \
@mikeananev
mikeananev / scratch.adoc
Created February 28, 2021 12:59
sample asciido presentation usin reveal.js

Title Slide