Skip to content

Instantly share code, notes, and snippets.

@hraban
hraban / carthesian.ts
Last active November 16, 2017 18:42
carthesian product in TypeScript
function carthesian<T>(columns: T[][], f: (x: T[]) => void, stackOut: T[] = []): void {
if (columns.length === 0) {
f(stackOut)
} else {
const column = columns.shift()!;
column.forEach(entry => {
stackOut.push(entry);
carthesian(columns, f, stackOut);
stackOut.pop();
});
@hraban
hraban / output.txt
Last active August 23, 2017 10:48
(bash) Comparing $* and $@
$ /tmp/test.sh
$*: []
"$*": ['']
$@: []
"$@": []
$ /tmp/test.sh a b "c d"
$*: ['a', 'b', 'c', 'd']
@hraban
hraban / .travis.yml
Created May 24, 2017 16:33 — forked from hc2p/.travis.yml
This is a prove of concept for leveraging the travis directory caching for speeding up docker builds. It works by configuring the docker deamon to use a folder under current user's (travis) control. That way you have the privileges to use the caching feature of travis ci.
sudo: false
services:
- docker
before_script:
- sudo service docker stop
- if [ "$(ls -A /home/travis/docker)" ]; then echo "/home/travis/docker already set"; else sudo mv /var/lib/docker /home/travis/docker; fi
- sudo bash -c "echo 'DOCKER_OPTS=\"-H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock -g /home/travis/docker\"' > /etc/default/docker"
- sudo service docker start
@hraban
hraban / potential_json.go
Last active January 7, 2017 23:26
safe, human readable nested JSON encoding in Go
package main
import (
"encoding/json"
)
// PotentialJSON acts as a JSON encoding wrapper for []byte. The encoding is
// tentative:
//
// * if the contents already happen to be valid JSON, then it is represented
@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');
@hraban
hraban / ensure-subset-type.ts
Last active March 24, 2017 03:19
Checked subset typing in TypeScript
// Imagine you want to explicitly define which members of a public API
// interface your implementation actually uses. Example: you implement
// a web extension, but only use a few of the members on the argument
// to the onHeadersReceived handler. Explicitly typing this is useful
// when creating mocks in your unit tests.
//
// Here's now you could do it:
@hraban
hraban / vectorized-arrays.js
Last active November 10, 2016 15:12
Vectorized .all method on arrays to transparently access all members
Object.defineProperty(Array.prototype, 'all', {
get: function () {
return new Proxy(this, {
get: function(target, name, receiver) {
return target.map(x => x[name]);
},
set: function (target, name, value) {
target.forEach(x => x[name] = value);
},
// ... call:, etc.
@hraban
hraban / a.sh-session
Last active August 16, 2016 13:07
code snippets for Ravelin blog post
/tmp $ git clone -q github.com/unravelin/tomono
/tmp $ cat sub-repositories.txt
https://github.com/outr/scalarelational.git scalarelational
https://github.com/realph/gulp-zero.git zero
https://github.com/reaxis/mu µ
/tmp $ cat sub-repositories.txt | ./tomono/tomono.sh
… crunch crunch crunch
/tmp $ cd core
/tmp/core $ git branch
2.0.0
@hraban
hraban / import-finder.py
Created February 11, 2016 16:41
Find the full import chain from one go package to another
#!/usr/bin/env python3
'''
Find the full import chain from one go package to another.
Usage:
import-finder.py source_package target_package
This is useful in large codebases to figure out why, for example, the testing package is
included in a resulting binary.
@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=\*'