Skip to content

Instantly share code, notes, and snippets.

@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 / 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 / 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 / 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 / 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 / .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 / 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 / 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 / runtime-mixin.ts
Last active February 6, 2018 14:20
Typescript runtime mixins
// Inspired by:
// https://github.com/tc39/proposal-pipeline-operator/blob/37119110d40226476f7af302a778bc981f606cee/README.md#object-decorators
//
// Once pipe operator is implemented in TS, use this example to check if it
// survives type checking.
// Describe mixed in functionality
@hraban
hraban / get.ts
Last active February 28, 2018 16:17
Autonomous http(s) request lib for node, inspired by Tomas Dvorak
// copied from:
// https://www.tomas-dvorak.cz/posts/nodejs-request-without-dependencies/
// Licensed under: Attribution 4.0 International (CC BY 4.0)
// https://creativecommons.org/licenses/by/4.0/
// (note: there's some funky url parsing business which I didn't fully test; caveat emptor)
import * as http from "http";
import * as https from "https";
import * as url from "url";