Skip to content

Instantly share code, notes, and snippets.

View johan's full-sized avatar

Johan Sundström johan

View GitHub Profile
/**
* Given any object type T, produce a type that requires you to set ONE
* of its properties, while forbidding any of the others to also be set.
*/
export type RequiresEitherProperty<T extends {}, K extends keyof T = keyof T> = {
[P in K]: Record<P, T[P]> &
Partial<{
[Y in Exclude<K, P>]: never;
}>;
}[K];

2023 Mission Statement:

HAI Global (HAI) empowers individuals to be potent, loving, contributing human beings.

HAI promotes personal growth and social change by replacing ignorance , shame, and fear with awareness

@johan
johan / selectArg.ts
Created August 1, 2023 03:11
Some ts utilities handy for well-typed reselect createSelector input functions.
/** Constructs a new function type from `F`, instead returning `R` */
export type Returns<F, R> = F extends (...args: any[]) => infer _
? (...args: Parameters<F>) => R
: never;
/**
* Given a (zero-indexed) positional argument number `n`
* and a function call signature generic type `F`,
* produce a well-typed function that selects that `n`th arg.
* @example
@johan
johan / README.md
Last active November 6, 2024 16:26
splunk country code unicode emoji flags
… | eval flag = printf("%c%c", 127452 + tonumber(substr(countrycode,1,1), 36), 127452 + tonumber(substr(countrycode,2,1), 36)),
         country=countrycode+" ("+percent+"%) "+flag

country code pie chart in splunk

const units = [["ms", 1000], ["s", 60], ["m", 60], ["h", 24], ["d", 7], ["w", 52.142857142858986], ["y", Infinity]];
const duration = (ms) => units.reduce(
({ left, s }, [u, o]) => {
const n = left % o;
left -= n;
n && s.unshift(`${~~n}${u}`);
return { left: ~~(left / o), s };
},
{ left: ms, s: [] }
@johan
johan / editdistance
Last active April 29, 2020 02:29
list edit distances between all inputs of the same length, ascending order
#! /usr/bin/env node
// for a JSON array of strings, or an array of lines on stdin,
// shows edit distances between all the inputs, ascending
const fs = require('fs');
const ed = require('edit-distance');
// read all strings from stdin:
let names = fs.readFileSync(0, 'utf-8');
;; A minor mode inspired by Gary Provost's notes on making sentence length music
;; via https://www.aerogrammestudio.com/2014/08/05/this-sentence-has-five-words/
;;
;; The sentence at point gains its colour from how many words it has:
;; yellow - one or two words
;; pink - three or four words
;; red - five words
;; green - medium sentences
;; blue - long sentences
;;
@johan
johan / dec-2022.html
Last active December 19, 2022 15:08
Vacation Day Planner
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<base href="https://www.timeanddate.com/date/workdays.html?d1=01&amp;m1=05&amp;y1=2018&amp;d2=9&amp;m2=7&amp;y2=2018&amp;">
<title>Vacation Day Planner</title>
<script>
const sumUp = (td) => { const t = td.parentNode.parentNode, r = t.rows[t.rows.length-1], c = r.cells[r.cells.length-1]; c.textContent = Array.from(t.querySelectorAll('td')).filter(c => c.classList.contains('hl')).length; c.style.color = '#000'; }
document.onclick = (e) => { if (e.target.nodeName === 'TD') { const t = e.target, cl = t.classList; cl.contains('hl-b') || cl.contains('hl') ? cl.remove('hl-b', 'hl') : cl.add('hl'); sumUp(t); } };
const pad = (n) => (n < 10 ? '0' : '') + n;
const date = (t) => t.getFullYear() + '-' + pad(t.getMonth() + 1) + '-' + pad(t.getDate());
const ONE_DAY = 864e5;
const ghostThePast = () => {
@johan
johan / .gitignore
Last active March 22, 2018 10:34
Dig up dates in/out of [the continental] US from your http://www.moves-export.com/ logs; handy for taking stock of your visa type travel history
/date-from.txt
/date-to.txt
/dates.txt
/export_dir.txt
/in-us.js
/json
/node_modules
/us.txt
/world.geo.json
@johan
johan / index.html
Last active October 5, 2017 13:45
People in congress sponsored by the NRA in the 2016 cycle
<!DOCTYPE html>
<html><head>
<meta charset="utf-8">
<base href="https://ballotpedia.org/">
<title>NRA Sponsored US Members of Congress</title>
</head><body>
<h1>NRA Sponsored US Members of Congress</h1>
Sources: these tables were compiled on October 4, 2017 from the