Skip to content

Instantly share code, notes, and snippets.

@hraban
hraban / index.css
Created November 21, 2019 10:52
halftone qr codes (backup of Lachlan Arthur's at http://jsfiddle.net/lachlan/r8qWV/ )
html, body {
height: 100%;
margin: 0;
}
body {
position: relative;
}
h1, h2 {
@hraban
hraban / leanxml.js
Last active October 7, 2019 14:26
Lean XML DOM builder compatible with TypeScript's jsxFactory for Reactless .tsx files
/**
* Leanxml Runtime: lean TS jsxFactory runner for creating XML doms.
*
* N.B.: Doesn’t work on tagnames with uppercase first letter!
*/
const xmldom = require('xmldom');
function leanxml(tagname, attrs, ...children) {
return function leanxmlBuilder(doc) {
@hraban
hraban / bash log
Last active August 9, 2019 10:40
Nice new Git feature: detect folder moves
$ cd /tmp
$ mkdir test
$ cd test
$ git init
Initialized empty Git repository in /private/tmp/test/.git/
$ git commit --allow-empty -m root
[master (root-commit) 6814cc9] root
$ mkdir foo
$ echo a > foo/a
$ git add foo
@hraban
hraban / interleave.js
Last active June 10, 2019 19:13
Interleaving two arrays in Javascript (using iterators & generators)
/**
* interleave([1,2], [8,7,6,5], [], 'abc')
* => [ 1, 8, 'a', 2, 7, 'b', 6, 'c', 5 ]
*/
function* interleave() {
const its = Array.from(arguments).map(x => x[Symbol.iterator]());
let done;
do {
done = true;
for (const it of its) {
@hraban
hraban / workspace.sh
Created January 6, 2019 00:17 — forked from dixson3/workspace.sh
Create and manage a case-sensitive disk-image on OSX. This is great when you have a need to work with case-sensitive repos on a mac.
#!/bin/bash
set -eu -o pipefail
${DEBUGSH+set -x}
# where to store the sparse-image
NAME=civol
SPARSELOC=~/Documents/$NAME.dmg
FSTYPE="APFS"
@hraban
hraban / main.js
Created November 22, 2018 17:26
child process interruption and signal control
const child_process = require('child_process');
const process = require('process');
process.on('SIGINT', () => console.log("ooh this is sigint"));
process.on('SIGUSR1', () => console.log("oh this is sigusr1!!"));
function block4ever() {
setTimeout(() => {} , 1000000);
}
@hraban
hraban / .nvmrc
Last active September 24, 2018 17:38
exploring signal handling in bash scripts, subshells and pipelines
8
@hraban
hraban / watch.js
Last active July 2, 2018 09:06
Simple cross-platform change watcher
// Simplistic directory watcher
//
// example usage:
//
// $ node watch.js | while read line ; do echo compiling ... ; ( while read -r -t 0; do read -r ; done ) ; rm -rf build ; npm run build ; echo done ; done
//
var fs = require('fs');
/* Open the .celtx file in an editor, look for the bit between <html> and </html>, put it in a new file (filename ending in .html), add this bit between one of the <style> and </style> tags. Open in a webbrowser, click print. */
body {
font-family: monospace;
font-size: 13pt;
line-height: 1.4em;
width: 190mm;
margin: 0;
padding: 1em;
@hraban
hraban / .bash_aliases
Last active June 12, 2018 22:37
bash aliases
#!/bin/bash
#### GIT STUFF
# gitlog only the specified revision(s), e.g. $ gitlog1 master some-feature-branch
alias gitlog1='git log --color --graph --format="format:%C(normal bold)%h%Creset %s%C(red)%d%Creset (%C(yellow)%aN%Creset, %C(green)%ar%Creset)"'
# Entire git commit history with tree and colors and branch names
alias gitlog='gitlog1 --all --branches=\* --remotes=\*'