Skip to content

Instantly share code, notes, and snippets.

Avatar

Ezekiel Chentnik ezekielchentnik

View GitHub Profile
View server.js
const fastify = require('fastify');
const fastifyAutoPush = require('fastify-auto-push');
const fs = require('fs');
const path = require('path');
const {promisify} = require('util');
const fsReadFile = promisify(fs.readFile);
const STATIC_DIR = path.join(__dirname, 'static');
const CERTS_DIR = path.join(__dirname, 'certs');
@ezekielchentnik
ezekielchentnik / virtual-list.js
Created Aug 26, 2019
Virtualized (Windowed) List w/ React hooks
View virtual-list.js
/**
* VirtualList: a universal windowed list for large datasets
*
* @param {Array} data - array of rows to render
* @param {string} rowHeight - height of row container in pixels
* @param {function} renderRow - function to render a single homogenous row
* @param {number} overscanCount - number of extra rows to pre-render ahead/behind the window
* @param {Object} rest - additional props
*
* @example
View relativeize.js
function relativize(url, to) {
let [,base,origin] = to.match(/^(([a-z]+:\/\/[^\/]+)(\/.*?)?)(\/[^\/]*)?$/i)
url = String(url).replace(/^\/([^\/])/g, `${origin}/$1`);
if (!url.match(/^([a-z]+\:)\/\//i)) url = `${base}/${url}`;
return url;
}
View fps.js
const fps = {
sampleSize : 60,
value : 0,
_sample_ : [],
_index_ : 0,
_lastTick_: false,
tick : function(){
// if is first tick, just set tick timestamp and return
if( !this._lastTick_ ){
this._lastTick_ = performance.now();
View RingBuffer.js
export class RingBuffer {
constructor(capacity, data = []) {
this._capacity = capacity;
this._buffer = new Array(this._capacity);
this._writeIndex = 0;
this._readIndex = 0;
this._msgsReceived = 0;
this._lastMeasurement = performance.now();
this._msgsSinceLast = 0;
@ezekielchentnik
ezekielchentnik / use-stream.js
Last active Jan 6, 2021
react rxjs hook useStream
View use-stream.js
import React, { useState, useEffect, createContext, useContext } from "react";
import { render } from "react-dom";
import { BehaviorSubject, isObservable } from "rxjs";
const Context = createContext();
const Provider = Context.Provider;
const useStream = initialState => {
let source = isObservable(initialState)
? initialState
View gist:1c61ac71221e26860d27b9a10f782064
https://cdn.shopify.com/s/files/1/1338/7937/files/Bootstrap_Farmer_Ultimate_Microgreen_Cheatsheet_Printable.pdf?v=1604180053
View app.js
const app = require('express')();
const http = require('http').Server(app);
const io = require('./io.js')(http);
io.on('connection', socket =>{
console.log('someone connected');
socket.on('start', msg => {
io.emit('message', msg);
});
socket.on('disconnect', () => {
View ponyfills.js
// we augment the window.history instance so that it will dispatch an event when using push/replace
// this allows us to create event stream and listen to all history state changes
export const patchHistory = history => {
const wrap = m => (state, title, url) => {
m.call(history, state, title, url);
let e = new Event(m.name.toLowerCase());
e.state = state;
dispatchEvent(e);
};
@ezekielchentnik
ezekielchentnik / scheduler.js
Created Jul 27, 2019
Request Idle Callback Scheduler
View scheduler.js
// Wait at most one frame before processing events.
const BUDGET = 16.7;
let isRequestIdleCallbackScheduled = false;
const scheduleWork = () => {
// Only schedule the rIC if one has not already been set.
if (isRequestIdleCallbackScheduled) {
return;
}