{{ message }}

Instantly share code, notes, and snippets.

# Richard Scarrott richardscarrott

Last active Nov 26, 2015
weightedRandom
View weightedRandom.js
 function weightedRandom(ar) { var ar = ar.sort(x => x.w); var sum = ar.reduce((p, c) => p + c.w, 0); // normalise var soFar = 0; ar.map(o => { o.w = o.w / sum; o.w += soFar; soFar += o.w; });
Created Jan 8, 2012
Jasmine reporter to find slow running tests
View gist:1577413
 SlowDescribeReporter.prototype = { threshold: 400, reportRunnerStarting: function(runner){ var i, len, suites = runner.suites_, self = this; this.topLevels = {}; for(i = 0, len = suites.length; i < len; i++){ (function(exec){
Created Aug 23, 2017
Heyting Algebra Validation
View heyting-validation.js
 const all = (...preds) => (obj) => preds.map(f => f(obj)).reduce((a, b) => a && b, true) const any = (...preds) => (obj) => preds.map(f => f(obj)).reduce((a, b) => a || b, false) const oneOf = (...preds) => (obj) => preds.map(f => f(obj)).reduce((a, b) => a ? !b : b, false) const has = (prop) => (obj) => obj[prop] !== undefined const not = (pred) => (obj) => !pred(obj) const equals = (prop, val) => (obj) => obj[prop] === val const implies = (f, g) => (obj) => !f(obj) || g(obj); const validate = all(implies(has('selectedIndex'), equals('isOpen', true)))
Last active Jan 3, 2018
React shallow render lifecycle breakdown

React introduced shallow rendering in 0.13. This is an excellent feature that I wish was included earlier in React. It aims to solve the problem of unit testing components without going through a real, or jsdom mocked, DOM. I couldn't find any info online about what lifecycle events it actually fires. So I did some testing of my own. To reproduce, put `component.js` and `test.js` into a folder and run `node test.js`.

TLDR; shallow rendering only invokes the following lifecycle hooks (in order):

1. `getDefaultProps`
2. `getInitialState`
3. `componentWillMount` stops here until re-render
4. `componentWillReceiveProps`
5. `shouldComponentUpdate`
6. `componentWillUpdate`
Last active Sep 28, 2018
 type BatchLoadFn = (keys: Array) => Promise>; type LoadAllFn = () => Promise>; type Options = { batch?: boolean, cache?: boolean, cacheMap?: CacheMap>, cacheKeyFn?: (key: any) => any };
Last active Apr 11, 2020 — forked from ctolsen/curl_to_ab.py
"Copy to cURL" in Chrome to Apache Bench command -- Script for Python3
View curl_to_ab.py
 #!/usr/bin/env python3 import sys import os def curl_to_ab(curl_cmd: list, num: int=200, cur: int=4) -> str: """ Translate a cURL command created by Chrome's developer tools into a command for ``ab``, the ApacheBench HTTP benchmarking tool.
Last active Jan 19, 2021
Demo: Coordinating async React with non-React views
View coordinating-async-react.md

# Demo: Coordinating async React with non-React views

tl;dr I built a demo illustrating what it might look like to add async rendering to Facebook's commenting interface, while ensuring it appears on the screen simultaneous to the server-rendered story.

A key benefit of async rendering is that large updates don't block the main thread; instead, the work is spread out and performed during idle periods using cooperative scheduling.

But once you make something async, you introduce the possibility that things may appear on the screen at separate times. Especially when you're dealing with multiple UI frameworks, as is often the case at Facebook.

How do we solve this with React?

Last active Feb 22, 2021
Generate secret key in NodeJS
View generate.js
 require('crypto').randomBytes(48, function(err, buffer) { var token = buffer.toString('hex'); console.log(token); });
Last active Feb 23, 2021
immutable version of lodash/set
View setIn.js
 // https://github.com/lodash/lodash/issues/1696 import {clone, setWith, curry} from 'lodash/fp'; // export const setIn = curry((path, value, obj) => // setWith(clone, path, value, clone(obj)), // ); export const setIn = curry((obj, path, value) => setWith(clone, path, value, clone(obj)), );
Last active Mar 30, 2021
"Copy to cURL" in Chrome to Apache Bench command
View curl_to_ab.py
 #!/usr/bin/env python3 import sys import os def curl_to_ab(curl_cmd: list, num: int=200, cur: int=4) -> str: """ Translate a cURL command created by Chrome's developer tools into a command for ``ab``, the ApacheBench HTTP benchmarking tool.