Skip to content

Instantly share code, notes, and snippets.

View branneman's full-sized avatar

Bran van der Meer branneman

View GitHub Profile
@branneman
branneman / executedBatched.js
Created November 1, 2016 12:05
executeBatched() – Run a list of async tasks as promises and wait after each batch
/**
* Run a list of async tasks as promises and wait after each batch
* @param {Number} batchSize - Number of tasks to run in parallel
* @param {Number} waitTime - Time to wait after each batch, in milliseconds
* @param {Array<Function>} tasks - Promise executor functions (not promise objects!)
* @return {Promise<Array<*>>}
*/
function executeBatched(batchSize, waitTime, tasks) {
tasks = tasks.slice();
@branneman
branneman / index.html
Created May 3, 2016 08:39
Asynchronously load fonts and cache them into localStorage
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Asynchronously load fonts and cache them into localStorage</title>
<script>
(function(d, w){
@branneman
branneman / prefixEventListener.js
Created February 10, 2017 10:23
Prefix EventListener
/**
* Capitalize
*/
const capitalize = string => {
return string.charAt(0).toUpperCase() + string.slice(1);
};
/**
* Prefix EventListener
*/
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Homepage</title>
<!-- If HTTP/1: Inline with <style>, remove this <link> -->
<!-- If HTTP/2: Server push this CSS file, and leave this <link> -->
<link rel="stylesheet" href="critical-homepage.css">
@branneman
branneman / howto.md
Last active October 1, 2017 16:16
macOS: Manage Multiple versions of Java

macOS: Manage Multiple versions of Java

Setup tooling

brew update
brew install jenv
brew tap caskroom/cask
brew tap caskroom/versions
mkdir ~/.jenv/versions
@branneman
branneman / implementation.js
Last active October 27, 2017 11:58
Object.assign, mergeObjectsShallow, mergeObjectsDeep
/**
* Shallow merge objects
*/
function mergeObjectsShallow(target, ...sources) {
for (let i = 0; i < sources.length; i++) {
const source = sources[i];
for (var prop in source) {
if (!source.hasOwnProperty(prop)) continue;
target[prop] = source[prop];
}
@branneman
branneman / app.js
Last active January 2, 2018 02:23
[FP playground] Generate diceware passwords with NodeJS. See also: https://www.rempe.us/diceware/
const map = fn => list => list.map(fn);
const filter = fn => list => list.filter(fn);
const compose = (...fns) => fns.reduce((f, g) => (...args) => f(g(...args)));
const tail = list => list.slice(1);
const fill = val => num => new Array(num).fill(val);
const getFileContents = file => require('fs').readFileSync(file, { encoding: 'utf8' });
const split = char => str => str.split(char);
const join = char => list => list.join(char);
/**
* @module GTMEventTracking
* @example
* <a
* data-module="event-tracking/GTMEventTracking"
* data-payload='{"event":"EventOpenGoogle"}'
* href="https://google.com/" target="_blank">
* Click me
* </a>
*/
@branneman
branneman / recursive-binary-search.js
Last active February 13, 2018 10:41
JavaScript: Recursive Binary Search algorithm
const indexOf = node => list => {
const guess = (min, max) => {
const index = Math.floor((max - min) / 2) + min
if (list[index] === node) {
return index
} else if (list[index] < node) {
min = index + 1
} else {
max = index - 1
}