Skip to content

Instantly share code, notes, and snippets.

@schabluk
schabluk / ConnectedIntlProvider.jsx
Created October 28, 2019 19:59
IntlProvider & Redux StoreProvider
import React from 'react'
import { IntlProvider } from 'react-intl'
import { Provider as StoreProvider, connect } from 'react-redux'
import { createStore } from 'redux'
import { appStore } from './store'
import messages_de from './translations/de.json'
import messages_en from './translations/en.json'
import messages_pl from './translations/pl.json'
@schabluk
schabluk / redis-pipe.md
Created July 16, 2019 11:08 — forked from abtrout/redis-pipe.md
Bash script to prepare Redis commands for mass insertion via `redis-cli --pipe`

Redis supports mass insert via redis-cli --pipe, but commands need to be written in redis protocol. For more details, check out the Redis mass insertion page. This script takes care of converting ordinary redis commands to redis protocol.

#!/usr/bin/env bash

while read CMD; do
  # each command begins with *{number arguments in command}\r\n
  XS=($CMD); printf "*${#XS[@]}\r\n"
  # for each argument, we append ${length}\r\n{argument}\r\n
 for X in $CMD; do printf "\$${#X}\r\n$X\r\n"; done
@schabluk
schabluk / Promises.js
Last active May 20, 2021 10:56
Array / Object Tools
// Delaying response
let delay = time => result => new Promise(resolve => setTimeout(() => resolve(result), time))
const result = await fetch(endpoint).then(delay(1000)).then(data => data.json())
// Mocking Fetch
window.fetch = function () {
const body = { hello: "world" }
const blob = new Blob([JSON.stringify(body, null, 2)], { type : 'application/json' })
@schabluk
schabluk / PandasMSTModel.js
Created March 28, 2019 15:36
MST Model to handle JSON data returned from Pandas
const DataModel = types
.model('DataModel', {
columns: types.optional(types.array(types.string), ['columnA', 'columnB']),
data: types.optional(types.array(types.array(types.string)), []),
})
.views(self => ({
get mergedData() {
const [keyA, keyB] = self.columns
return self.data.map(([valA, valB]) => ({ [keyA]: valA, [keyB]: valB }))
@schabluk
schabluk / GridSpace.js
Created March 25, 2019 19:42
Collapsible CSS Grid
const GridSpace = styled.section`
height: 100%;
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: auto fit-content(100%);
grid-template-areas:
'c c c c'
't t t t';
`
@schabluk
schabluk / useLocalStorage.js
Created March 23, 2019 07:25
useLocalStorage hook
const useLocalStorage = (key, initial) => {
let local;
try {
local = JSON.parse(localStorage.getItem(key));
} catch (err) {
//
}
if (!local) {
localStorage.setItem(key, JSON.stringify(initial));
local = initial;
@schabluk
schabluk / StorageEstimate.js
Created March 21, 2019 18:05
Estimate Browser Storage capacity
import { types } from 'mobx-state-tree'
import bytes from 'bytes'
/*
* See: https://developers.google.com/web/updates/2016/06/persistent-storage
* See: https://developers.google.com/web/updates/2017/08/estimating-available-storage-space
*/
const StorageEstimate = types
.model('StorageEstimate', {
usage: types.maybe(types.number),
@schabluk
schabluk / alnumseq.js
Created February 9, 2019 14:05
Alphanumeric Sequences
const f = (a, b) => [].concat(...a.map(d => b.map(e => [].concat(d, e))))
const cartesian = (a, b, ...c) => (b ? cartesian(f(a, b), ...c) : a)
const letters = Array.from({ length: 26 }, (k, v) => String.fromCharCode(v + 65))
const numbers = Array.from({ length: 9 }, (k, v) => v)
console.log(cartesian(letters, numbers))
@schabluk
schabluk / useRefTypeScript.js
Created February 6, 2019 18:58
useRef on HTML element with TypeScript
function DraftEditor({ metaData, readOnly = false, decorators = [] }: IDraftEditor) {
const editorRef = useRef<HTMLDivElement>(null)
const handleFocusClick = () => {
const { current: editor } = editorRef
if (editor) { editor.focus() }
}
return (
<div ref={editorRef} onClick={handleFocusClick} />
@schabluk
schabluk / index.js
Created September 10, 2018 19:36 — forked from benoitv-code/index.js
d3, jsdom, node.js: server-side rendering
// Instructions:
// npm install --save d3 jsdom
const fs = require('fs');
const d3 = require('d3');
const jsdom = require('jsdom');
const { JSDOM } = jsdom;
const fakeDom = new JSDOM('<!DOCTYPE html><html><body></body></html>');