Skip to content

Instantly share code, notes, and snippets.

Hraban Luyat hraban

Block or report user

Report or block hraban

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@hraban
hraban / leanxml.js
Last active Oct 7, 2019
Lean XML DOM builder compatible with TypeScript's jsxFactory for Reactless .tsx files
View leanxml.js
/**
* 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 / pre-commit
Last active Aug 11, 2019
NOCOMMIT git hook — prevent accidentally committing debug code
View pre-commit
#!/bin/sh
# This pre-commit hook will prevent you from committing any line (or filename) containing
# the string NOCOMMIT. Use that tag in comments around source code you want to avoid
# accidentally committing, like temporary IP addresses or debug printfs.
#
# To add it to an existing repository, save it to .git/hooks/pre-commit (or append, if
# that file already exists). Remember to make executable (chmod +x ...)
#
# To automatically add this pre-commit hook to every repository you create or clone:
@hraban
hraban / bash log
Last active Aug 9, 2019
Nice new Git feature: detect folder moves
View bash log
$ 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 Jun 10, 2019
Interleaving two arrays in Javascript (using iterators & generators)
View interleave.js
/**
* 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 Jan 6, 2019 — 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.
View workspace.sh
#!/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 Nov 22, 2018
child process interruption and signal control
View main.js
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 Sep 24, 2018
exploring signal handling in bash scripts, subshells and pipelines
@hraban
hraban / watch.js
Last active Jul 2, 2018
Simple cross-platform change watcher
View watch.js
// 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');
View celtx-usletter-normal.css
/* 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 Jun 12, 2018
bash aliases
View .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=\*'
You can’t perform that action at this time.