Skip to content

Instantly share code, notes, and snippets.

View mfbx9da4's full-sized avatar

David Alberto Adler mfbx9da4

View GitHub Profile
@mfbx9da4
mfbx9da4 / debouncedChunkedQueue.ts
Last active September 19, 2023 08:01
An implementation of a debounced chunked async queue. An async function may be called many times over some period of time. We want to first debounce the calls to the function and batch up all those arguments into one argument. Secondly all executions of that async function should be serialized in a FIFO manner.
export const debouncedChunkedQueue = <T>(
fn: (items: T[]) => Promise<void> | void,
delay = 1000
) => {
let items: T[] = []
let started = false
const push = (item: T) => {
items.push(item)
if (!started) start()
}
@mfbx9da4
mfbx9da4 / fileLock.js
Created January 28, 2021 15:24
Acquire a lock across processes using the file system
const fs = require("fs");
const acquireLock = async (identifier, retries = 5, delay = 1000) => {
const pathname = `${identifier}.lock`;
const acquire = () => {
try {
fs.mkdirSync(pathname);
return true;
} catch {}
};
@mfbx9da4
mfbx9da4 / App.tsx
Last active March 7, 2022 10:12
Github issue realm-js flatlist + listener poll for transaction
import React, { useEffect, useLayoutEffect, useState } from 'react'
import { FlatList, SafeAreaView } from 'react-native'
import RNFS from 'react-native-fs'
import Realm from 'realm'
export function App() {
const r = useWaitForRealm()
const [initialized, setInitialized] = useState(false)
useEffect(() => {
@mfbx9da4
mfbx9da4 / App.tsx
Last active March 6, 2022 19:44
Github issue realm-js flatlist + listener
import React, { useEffect, useLayoutEffect, useState } from 'react'
import { FlatList, SafeAreaView } from 'react-native'
import RNFS from 'react-native-fs'
import Realm from 'realm'
export function App() {
const r = useWaitForRealm()
const [initialized, setInitialized] = useState(false)
/**
* The transformer signature is based on https://github.com/cevek/ttypescript#program
* Need to use https://github.com/microsoft/TypeScript/blob/bae0f508184280c59d2865a35efc63be362eacfa/src/compiler/factory/nodeFactory.ts
* The goal is to conver `a!.m()` to `if (!a) { throw new Error('Attempted to use nullish value "a"'} else { a.m() }`
* https://astexplorer.net/#/gist/9ec2af3e8c15fd2cde848941e14f566b/d9ddca954379374f98a4097d9bde4c346dac8567
*/
export default function (program) {
const checker = program.getTypeChecker()
return (context) => {
return (sourceFile) => {
@mfbx9da4
mfbx9da4 / BroadcastMethods.ts
Last active January 2, 2022 14:48
Remote procedure calls (RPCs) using BroadcastChannel in deno
// ---- START IMPORTS ----
export type AssertionExtra = (Record<string, unknown> & { name?: ErrorCode }) | ErrorCode
export function assert(predicate: any, message: string, extra: AssertionExtra = {}): asserts predicate {
if (!predicate) {
extra = typeof extra === 'string' ? { name: extra } : extra
if (!('name' in extra)) {
extra.name = ErrorCode.AssertionError
}
import { serve } from 'https://deno.land/std/http/server.ts'
// import { assert, ErrorCode } from './assert.ts'
export enum ErrorCode {
RaceNotFound = 'RaceNotFound',
RaceMemberNotFound = 'RaceMemberNotFound',
RaceAlreadyExists = 'RaceAlreadyExists',
RaceMemberAlreadyExists = 'RaceMemberAlreadyExists',
AssertionError = 'AssertionError',
}
const wrap = (obj, method) => {
const oldMethod = obj[method]
async function innerMethod(...args) {
const start = Date.now()
try {
const ret = await oldMethod.call(obj, ...args)
console.log(method, 'took', Date.now() - start, args[0])
return ret
} catch (error) {
console.log(method, 'took', Date.now() - start)
import AWS from 'aws-sdk'
import { uuid } from 'short-uuid'
import { yesno } from 'yesno-http'
yesno.spy()
const documentClient = new AWS.DynamoDB.DocumentClient({
apiVersion: 'latest',
})
function area(image) {
return image.width * image.height;
}
/** https://en.wikipedia.org/wiki/Halton_sequence */
function halton(index, base) {
let fraction = 1;
let result = 0;
while (index > 0) {
fraction /= base;