Skip to content

Instantly share code, notes, and snippets.

Johan Sundström johan

View GitHub Profile
@johan
johan / editdistance
Last active Apr 29, 2020
list edit distances between all inputs of the same length, ascending order
View editdistance
#! /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');
View sentence-highlight-word-count-minor-mode.el
;; 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 / index.html
Last active Jan 16, 2020
Vacation Day Planner
View index.html
<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-b') || 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 Mar 22, 2018
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
View .gitignore
/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 Oct 5, 2017
People in congress sponsored by the NRA in the 2016 cycle
View index.html
<!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
View fb-friends-to-csv.sh
#! /bin/sh
# path to your unzipped Facebook html/friends.htm file
friends="$1"
year=$(
egrep -o '<div class="footer">Downloaded by .* on \w+, \d+ \w+ (\d+)' "$friends" \
| awk '{print $NF}'
)
@johan
johan / .gitconfig
Last active Jul 12, 2017
git swap - swaps top two commits; git drop [revision] - nukes that revision (or HEAD); git hoist <revision> - rebases that revision to be the most recent commit, so you can tweak it
View .gitconfig
[alias]
swap = "!GIT_SEQUENCE_EDITOR=\"sed -i '' -n 'h;1n;2p;g;p'\" git rebase -i HEAD~2"
drop = "!f() { GIT_SEQUENCE_EDITOR=\"sed -i '' '/^pick '$(git log -n 1 --pretty='%h' ${1:-HEAD})/d\" git rebase -i ${1:-HEAD}^^; }; f"
hoist = "!f() { GIT_SEQUENCE_EDITOR=\"git log -n 1 --pretty='pick %h' $1|~/bin/hoist-lines.pike\" git rebase -i $1^; }; f"
View _git_commit
_git_commit ()
{
case "$prev" in
(-c | -C) __gitcomp_nl "$(__git_refs)" "" "${cur}"
return ;;
(-m) __gitcomp "feat: fix: docs: style: refactor: test: chore:
" "" "${cur}"
return
;;
esac
View git-fold
#! /bin/sh
# git-fold (a k a "git fold") fetches the main branch upstream,
# and if your current branch has already been landed upstreams,
# then check out the master branch, delete the landed branch,
# and catch up master with origin
# optional reference branch to check folding against and move to - or master
master="${1:-master}"
@johan
johan / index.html
Created Apr 13, 2017
HTML5 drag/drop
View index.html
<html>
<head>
<title>HTML5 drag/drop files to console.log them</title>
</head>
<body>
<script>
// this should probably be a more interesting function in your case
function show(...files) {
console.log(...files);
You can’t perform that action at this time.