Skip to content

Instantly share code, notes, and snippets.

View nitsanavni's full-sized avatar
🤔
Learning

Nitsan Avni nitsanavni

🤔
Learning
  • Málaga, Spain
  • 08:03 (UTC +01:00)
View GitHub Profile
@nitsanavni
nitsanavni / stack-the-boxes.html
Created July 7, 2026 19:51
Stack the boxes — Tim Ottinger's non-linear software development model, drawn to spec (after x.com/tottinge/status/2074425482523680995)
<title>Stack the boxes — it has always been thus</title>
<style>
/* Committed single visual world: a blackboard. Both viewer themes get the same board —
the toggle changes nothing because chalk needs a dark ground. */
@font-face {
font-family: 'Permanent Marker';
src: url(data:font/woff2;base64,d09GMgABAAAAAHN8AA4AAAABFIQAAHMhAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgngIAgmCYQqDthiCuCcLgzAAATYCJAOGXBPXKgQgBYQaB4NnDAcb6dI5yLyWC9ztAFWz93yTUZSq2mkzIyWnb/P/////n51MRty2dVur+u/54AFkcxczmeDkkamQRTAnL5ZrMI9Worcl13VIizCEjVXuKYws0Ul0aSUTzUQztZnewlkIZ+2+MFcO5nznPVWnqZvJp2qyKq7wlS7wV3inG/4dfdChGvJAGKoHeqenqsgFoahe6IWOJIE13/D7B7Ur2jdpA/nh/6EXAe70ECkyngdobt22WySLWzBqGxuRC6JdFL3BaJERJQajbaLMp0QxKQGbNOrBShCMfFC037feN1+mg32YcpCg2I/93r2HSsieXbtVQrRWiWTINp1EpJHlS/J2PFEHv3e752nYfE81zCJP0tyDsNb3XdOoASfvLOrptkNqhiT8hIlT/9x5M1DYiUkc2Xna/HwNqnbjseV96CkHuHdbAP/zuuXPv4x14EglQS7Y7yGpiJ98l1GHvctkb3f5UD2xAD851/+vrbYIvpjb936MRRfb2LRLC+2cCYDiXmFIKq5gCm/XXTZ+fd+B+b+altXX7uuH6i7P7iZp0IwCQNewIRntoJPng8MLTli6yteqJpGhW2iPPCOPJcNbLwA
@nitsanavni
nitsanavni / hackea-workflow.md
Last active October 7, 2024 11:55
Hackea Workflow
flowchart TD
    A(start) -- "my task" --> C["outline"]
    C -- "next" --> D["do task"]
    D --> E{"works?"}
    E -- "yes" --> C
    E -- "no (too large a piece)" --> G["break piece"] -- "add" --> C
    E -- "yes" --> I["working code library"]
    D -- "using" --> I
 C -- "done" --&gt; H["end"]
@nitsanavni
nitsanavni / shebang.jq
Created November 2, 2023 09:39
jq shebang
#!/usr/bin/env -S jq -nrf
"Hello world!"
@nitsanavni
nitsanavni / .bash_aliases
Last active December 1, 2022 19:13
run code from README.md
alias runmd="<README.md marked -t | jaq -r '.[]|select(.type==\"code\")|.text' | fzf | rush {}"
@nitsanavni
nitsanavni / sync-exercise.mjs
Created September 10, 2021 11:00
synchronization exercise
// helpers
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
const rand = (max) => Math.floor(Math.random() * max);
const times = (n, cb) => {
const ret = [];
for (let i = 0; i < n; i++) {
ret.push(cb());
}
@nitsanavni
nitsanavni / subgroups.spec.js
Last active May 21, 2019 19:27
subgroups exercise using bit ops
const _ = require("lodash");
function subgroups(elements) {
const bits = _.range(32);
const indices = (i) =>
_(bits)
.map((b) => (1 + b) * (0x1 & (i >> b)))
.compact() // only leave the `1`s
.map((b) => b - 1)
@nitsanavni
nitsanavni / subgroups.spec.js
Last active May 21, 2019 19:32
subgroups exercise using recursion
const _ = require("lodash");
function subgroups(elements) {
if (elements.length == 1) {
return [elements];
}
const drop = subgroups(_.drop(elements));
const first = _.take(elements);
const combined = [..._.map(drop, (i) => [...i, ...first]), ...[...drop, first]];
@nitsanavni
nitsanavni / StringUtil.groovy
Last active May 12, 2019 21:07
groovy String.isJson()
String.metaClass.isJson << { ->
def normalize = { it.replaceAll("\\s", "") }
try {
normalize(delegate) == normalize(JsonOutput.toJson(new JsonSlurper().parseText(delegate)))
} catch (e) {
false
}
}