Skip to content

Instantly share code, notes, and snippets.

View perry-mitchell's full-sized avatar

Perry Mitchell perry-mitchell

View GitHub Profile
@perry-mitchell
perry-mitchell / element-offset.js
Created December 8, 2017 08:59
True element offset (from document) calculation with debouncing/memoization
import mem from "mem";
const ELEMENT_STYLE_CACHE_TIME = 3000;
let __memoizedGetElementStyle;
export function getElementOffset(target) {
__memoizedGetElementStyle = __memoizedGetElementStyle || mem(getElementStyle, { maxAge: ELEMENT_STYLE_CACHE_TIME });
const boundingRect = target.getBoundingClientRect();
const bodyStyle = __memoizedGetElementStyle(document.body);
@perry-mitchell
perry-mitchell / miner.js
Last active January 9, 2018 10:35
ZEC/Flypool Mining monitor
const fetch = require("node-fetch");
const chalk = require("chalk");
const prettyMs = require("pretty-ms");
const VError = require("verror");
const pruddy = require("pruddy-error");
const API = "https://api-zcash.flypool.org";
const DELAY = 60;
const MINER = "t1R21Uq3HQRiyj6ff1kFQcPusqPXiBaAc2U";
//const PAYOUT_MIN = 0.03;
@perry-mitchell
perry-mitchell / vulpes-setup.js
Last active March 28, 2019 07:31
Task automation blog post - 2019-03-28
const { Service } = require("vulpes");
// Create a new service
const service = new Service(); // Service takes an optional storage parameter
// Initialise the service
await service.initialise();
@perry-mitchell
perry-mitchell / background.js
Last active April 15, 2019 10:23
Redux browser state sync background
import { applyMiddleware, createStore } from "redux";
import { createSyncMiddleware, syncStore } from "redux-browser-extension-sync/background";
import rootReducer from "../reducers/index.js";
const syncMiddleware = createSyncMiddleware();
const store = syncStore(createStore(
rootReducer,
applyMiddleware(syncMiddleware)
));
@perry-mitchell
perry-mitchell / component.js
Created April 15, 2019 10:23
Redux browser state sync component
import { applyMiddleware, createStore } from "redux";
import { createSyncMiddleware, syncStore } from "redux-browser-extension-sync";
import rootReducer from "../reducers/index.js";
const syncMiddleware = createSyncMiddleware();
const store = syncStore(createStore(
rootReducer,
applyMiddleware(syncMiddleware)
));
@perry-mitchell
perry-mitchell / log.js
Created May 2, 2019 16:02
Basic styled console.log
console.log(
"%c Excellent ",
[
"background-color: #663dff",
"background-image: linear-gradient(319deg, #663dff 0%, #aa00ff 37%, #cc4499 100%)",
"padding: 8px",
"font-weight: bold",
"color: #FFF",
"font-family: Arial",
"font-size: 28px",
@perry-mitchell
perry-mitchell / log.js
Created May 2, 2019 16:19
Basic styled console.log 2
console.log(
"%cabc%cdef",
"background-color: #000; color: #99F; font-weight: bold; padding: 2px",
"background-color: #99F; color: #000; font-style: italic; padding: 2px"
);
@perry-mitchell
perry-mitchell / derive.js
Last active August 20, 2019 16:27
Key derivation in NodeJS
const { pbkdf2: deriveKey } = require("pbkdf2");
const HMAC_KEY_SIZE = 32;
const PASSWORD_KEY_SIZE = 32;
function pbkdf2(password, salt, rounds, bits) {
return new Promise((resolve, reject) => {
deriveKey(password, salt, rounds, bits / 8, "sha256", (err, key) => {
if (err) {
return reject(err);
@perry-mitchell
perry-mitchell / ads.txt
Last active August 8, 2019 06:37
RFC: Ads.txt chaining
# Sample publisher ads.txt
somenetwork.com, 1234, DIRECT
another.org, 4455abc, RESELLER
# !include https://managednetwork.com/managed.ads.txt.php?id=123
@perry-mitchell
perry-mitchell / encrypt.js
Last active August 20, 2019 16:38
Encryption (minus derivation) in NodeJS
const crypto = require("crypto");
const DERIVATION_ROUNDS = 200000;
function constantTimeCompare(val1, val2) {
let sentinel;
if (val1.length !== val2.length) {
return false;
}
for (let i = 0; i <= val1.length - 1; i += 1) {