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
/** | |
* 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]; |
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
/** 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 |
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: [] } |
#! /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 | |
;; |
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | |
<base href="https://www.timeanddate.com/date/workdays.html?d1=01&m1=05&y1=2018&d2=9&m2=7&y2=2018&"> | |
<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 = () => { |
/date-from.txt | |
/date-to.txt | |
/dates.txt | |
/export_dir.txt | |
/in-us.js | |
/json | |
/node_modules | |
/us.txt | |
/world.geo.json |
<!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 |