Skip to content

Instantly share code, notes, and snippets.

@nbardiuk
nbardiuk / core.clj
Created October 6, 2021 20:17
Concat JSON
(ns core
(:require
[clj-http.client :as http]
[cheshire.core :as json]
[ring.adapter.jetty :refer [run-jetty]]))
;; Clojure sequences can be chunked in batches of 32 items
;; for the test I want to emit items one at a time
;; https://stackoverflow.com/a/3409568/187261
(defn unchunk [s]
@nbardiuk
nbardiuk / aoc-stats-tree.user.js
Last active December 20, 2020 19:12
Render AoC stats as christmass tree
// ==UserScript==
// @name AoC stats tree
// @namespace http://tampermonkey.net/
// @version 0.2
// @description Render AoC stats as christmass tree
// @author nbardiuk
// @match https://adventofcode.com/*/stats
// @license MIT License
// @copyright Copyright (C) 2020, by Nazarii Bardiuk
// @grant none
@nbardiuk
nbardiuk / script.clj
Last active November 28, 2020 19:29
Clojure shebang wtih arguments
#!/usr/bin/env -S clj -Sdeps '{:deps {clj-http/clj-http {:mvn/version "3.11.0"} cheshire/cheshire {:mvn/version "5.10.0"}}}'
(require '[clj-http.client :as http])
(require '[cheshire.core :as json])
(require '[clojure.pprint :refer [pprint]])
(let [url (or (first *command-line-args*) "https://httpbin.org/get?q=a")
{:keys [body headers]} (http/get url)]
(pprint headers)
(pprint (json/decode body)))
@nbardiuk
nbardiuk / Makefile
Last active October 14, 2020 20:58
Clojure tdd (test watch) using headless lein and rep
.PHONY: tdd
tdd: .nrepl-port
watchexec --clear --no-shell rep '(repl/refresh)(doto "$(only)" (run-tests))'
.PHONY: kill-repl
kill-repl:
@if [ -f .nrepl-port ];\
then\
kill $$(lsof -ti ":$$(cat .nrepl-port)" -sTCP:LISTEN) ;\
fi
@nbardiuk
nbardiuk / moving-avarage.clj
Last active February 3, 2020 17:18
Moving avarage
(defn- slide [window x]
(-> window (subvec 1) (conj x)))
(defn- windows [n xs]
(let [first-window (vec (take n xs))
the-rest (drop n xs)]
(when (and (< 0 n) (= n (count first-window)))
(reductions slide first-window the-rest))))
(defn- avarage [xs]
@nbardiuk
nbardiuk / escape.vim
Last active January 30, 2020 21:09
Vim escape javascript string
" paste escaped java/javascript string
nmap <leader>jp :call setreg('e', json_encode(@+))\| normal "ep<CR>
xmap <leader>jp :<C-U>call setreg('e', json_encode(@+))\| normal gv"ep<CR>
nmap <leader>jP :call setreg('e', json_encode(@+))\| normal "eP<CR>
" yank unescaped java/javascript string
xmap <leader>jy :<C-U>execute 'normal! gv"ey'\| :call setreg('+', json_decode(@e))<CR>
@nbardiuk
nbardiuk / .vimrc
Created January 25, 2020 11:39
sexp element pair
" emulate text object for pair of elements
" i.e. key/value binding/expr test/expr
"
" pair forward
xmap <buffer> ip <Plug>(sexp_inner_element)<Plug>(sexp_move_to_next_element_tail)
omap <buffer> ip :<C-U>normal vip<CR>
" pair backward
xmap <buffer> iP <Plug>(sexp_inner_element)o<Plug>(sexp_move_to_prev_element_head)
omap <buffer> iP :<C-U>normal viP<CR>
import java.util.Arrays;
import java.util.function.BiFunction;
import java.util.function.Function;
class Scratch {
public static void main(String[] args) {
Monoid<Integer> sum = Monoid.of(0, Integer::sum);
Fold<String, Integer> sumStrings = Fold.of(Integer::parseInt, sum);
Integer result = sumStrings.fold(Arrays.asList("1", "2", "3"));
System.out.println(result);
@nbardiuk
nbardiuk / .cvimrc
Last active March 21, 2018 12:01
cvim options
let defaultengine="duckduckgo"
let smoothscroll="true"
let scrollduration="200"
map J nextTab
map K previousTab
@nbardiuk
nbardiuk / how-gpg.md
Created September 20, 2017 11:55 — forked from djspiewak/how-gpg.md

How to GPG as a Scala OSS Maintainer

tl;dr Generate a GPG key pair (exercising appropriate paranoia). Send it to key servers. Create a Keybase account with the public part of that key. Use your keypair to sign git tags and SBT artifacts.

GPG is probably one of the least understood day-to-day pieces of software in the modern developer's toolshed. It's certainly the least understood of the important pieces of software (literally no one cares that you can't remember grep's regex variant), and this is a testament to the mightily terrible user interface it exposes to its otherwise extremely simple functionality. It's almost like cryptographers think that part of the security comes from the fact that bad guys can't figure it out any more than the good guys can.

Anyway, GPG is important for open source in particular because of one specific feature of public/private key cryptography: signing. Any published software should be signed by the developer (or company) who published it. Ideally, consu