Skip to content

Instantly share code, notes, and snippets.

View dmitry-tuzenkov's full-sized avatar
🇳🇱
Focusing

Dmitry Tuzenkov dmitry-tuzenkov

🇳🇱
Focusing
View GitHub Profile
@dmitry-tuzenkov
dmitry-tuzenkov / debounce-effect-hook.ts
Created April 2, 2024 08:04
useDebounceEffect examlpe
import { useCallback, useEffect } from 'react';
function useDebounceEffect(
effect: () => void,
delay: number | undefined,
deps: any[]
) {
const callback = useCallback(effect, deps);
useEffect(() => {
type JobFunction<T> = () => Promise<T>;
async function promiseAll<T>(
jobs: JobFunction<T>[],
concurrency: number = Infinity,
): Promise<T[]> {
const results: T[] = new Array(jobs.length).fill(0);
const queue = new Array(concurrency).fill(Promise.resolve());
// const queue = jobs.splice(0, concurrency).map((fn: JobFunction<T>) =>
// fn().then((result: T) => {
interface User {
id: number;
}
const storageCache = new Map<number, Promise<User>>();
function fetchUser(id: number): Promise<User> {
console.log('id', id)
return new Promise((res) => {
setTimeout(() => res({ id }), 2000);
const versions = [
"0.4",
"0.11",
"0.4.1",
"0.4",
"0.4.2",
"2.0.1",
"2",
"0.0.1",
"0.2.3",
@dmitry-tuzenkov
dmitry-tuzenkov / cli.txt
Created November 20, 2023 20:33
Memo Lesson
node ./none-memo && node ./memo
none_memo: 10.005s
memo: 989.782ms
node ./none-memo && node ./memo
none_memo: 9.897s
memo: 974.547ms
node ./none-memo && node ./memo
none_memo: 9.953s
// Here is our log file; essentially a list of tuples.
// Each tuple has two items: `(request_path, user_id)`
const logFile = [
["/", "user_1"],
["/about", "user_1"],
["/", "user_3"],
["/features", "user_1"],
["/about", "user_2"],
["/purchase", "user_2"],
["/purchase", "user_1"],
@dmitry-tuzenkov
dmitry-tuzenkov / utils.js
Created September 9, 2022 08:09
Number to XLSX Column Converter
const APLHA_MOD = 26;
const nt = (n = 0) => ((n % APLHA_MOD) + 10).toString(APLHA_MOD + 10);
const ct = (n = 0, acc = "") => {
if (n - APLHA_MOD > 0) {
return ct(n - APLHA_MOD, acc + nt(APLHA_MOD));
}
return acc + nt(n);
};
@dmitry-tuzenkov
dmitry-tuzenkov / common.js
Last active August 8, 2022 11:21
Filters Implementation
const _get = require('lodash.get')
const _isEmpty = require('lodash.isempty')
const _sumBy = require('lodash.sumby')
const _max = require('lodash.max')
const _flatten = require('lodash.flatten')
const _last = require('lodash.last')
const _size = require('lodash.size')
const _first = require('lodash.first')
const _map = (arr = [], fn) => Array.from(arr).map(fn)
@dmitry-tuzenkov
dmitry-tuzenkov / aws-sqs.js
Created December 29, 2021 15:56
Simple AWS SQS wrapper
const assert = require('assert')
const debug = require('debug')('app:aws-sqs')
const {
SQSClient,
DeleteMessageCommand,
SendMessageCommand,
ReceiveMessageCommand,
} = require('@aws-sdk/client-sqs')
const { pack } = require('./utils-data')
@dmitry-tuzenkov
dmitry-tuzenkov / utils.js
Last active November 18, 2021 10:57
Nodejs simple es6 'promisify' function
/* eslint-disable indent */
/**
* Create a promise wrapper for function(err, arg1, ...argN)
* @param {function} fn - Function that should be promisified
* @returns {function} - Promisified function fn wrapper
* @example <caption>Example usage of promisify.</caption>
* const asynFn = require(...) // asynFn((err, a, b) => { ... })
* const pMyFn = promisify(asynFn)
* console.log('asynFn result', await pMyfn(1, 2))