Skip to content

Instantly share code, notes, and snippets.

View sebinsua's full-sized avatar
🐚

Seb Insua sebinsua

🐚
View GitHub Profile
@sebinsua
sebinsua / withSwr.ts
Last active April 16, 2025 00:05
withSwr.ts
// Sentinel values
const REVALIDATING = Symbol.for("@@withSwr/REVALIDATING");
const READ_ERROR = Symbol.for("@@withSwr/READ_ERROR");
const INITIAL_READ_ERROR = Symbol.for("@@withSwr/INITIAL_READ_ERROR");
// Control signals
const RESET_INITIAL_READ = Symbol.for("@@withSwr/RESET_INITIAL_READ");
const FINISH_INITIAL_READ = Symbol.for("@@withSwr/FINISH_INITIAL_READ");
const REVALIDATE = Symbol.for("@@withSwr/REVALIDATE");
const RESET = RESET_INITIAL_READ;
import React, { useEffect, useRef, useState } from 'react';
class VolumeGenerator {
public name: string;
private volume: number;
private delta: number;
constructor(name: string, initialVolume = 50) {
this.name = name;
this.volume = initialVolume;
@sebinsua
sebinsua / crossorigin.plugin.ts
Created September 18, 2024 09:07
crossorigin.plugin.ts
import type { Plugin, UserConfig } from 'vite';
type CrossOriginValue = 'anonymous' | 'use-credentials' | '';
interface CrossOriginPluginOptions {
/**
* The value to set for the crossorigin attribute.
* @default 'use-credentials'
*/
crossOriginValue?: CrossOriginValue;
@sebinsua
sebinsua / smooth-with-array.ts
Last active March 11, 2024 12:02
Smooth a stream of LLM tokens into a stream of characters while reducing jitter by stabilising output timing. Explorations of different approaches.
function sleep(ms: number) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
class AsyncQueue<T> {
queuedItems: (T | Error)[];
queuedProcessors: [(item: T) => void, (error: Error) => void][];
constructor() {
// Note: The FIFO `shift` operations we do on these arrays are `O(n)`.
@sebinsua
sebinsua / follow.py
Last active August 23, 2023 21:37
An implementation of a sequential generator called `follow` for traversing linked lists and other data structures in a fixed manner.
from operator import eq, attrgetter as attr
from typing import TypeVar, Callable, Iterator, Optional
eq_or_none = lambda x, y: y is None or eq(x, y)
T = TypeVar('T')
def follow(start: T, next_fn: Callable[[T], T], stop: Callable[[T, T], bool] = eq_or_none) -> Iterator[Optional[T]]:
yield start
type Slice = [lowIndex: number, highIndex: number];
function getRandomIntegerInRange([low, high]: Slice): number {
return Math.floor(Math.random() * (high - low + 1)) + low;
}
function createPartitionForSlice([lowIndex, highIndex]: Slice) {
return function partition(pivotIndex: number, items: number[]): number {
// Partitioning a slice works like so:
// - We get the pivot value from the pivot index (in our case, a random index
@sebinsua
sebinsua / interesting-trie.ts
Last active August 9, 2023 16:27
I experimented a little bit with tries.
export class TrieNode {
public children: Record<string, TrieNode> = {};
public isEndOfWord = false;
}
export class Trie {
private root: TrieNode;
constructor() {
this.root = new TrieNode();
class Solution:
def search(self, nums: List[int], target: int) -> int:
# Special case for lists with only one or two elements.
if len(nums) <= 2:
try:
return nums.index(target)
except:
return -1
# As the array has been sorted and then rotated, it's not actually
class Solution:
def findMin(self, nums: List[int]) -> int:
# Special case for lists with only two elements.
if len(nums) == 2:
return min(*nums)
# As the array has been sorted and then rotated, it's not actually correctly
# sorted and we can't use a binary search in the conventional way. However,
# because we're able to make definitive decisions on which side the minimum
# value will be found at on every iteration we're still able to use binary
type Zipped<A extends readonly (readonly any[])[]> = {
[RowIndex in keyof A[0]]: RowIndex extends "length" ? number : {
[ArrayIndex in keyof A]: A[ArrayIndex] extends readonly any[] ? A[ArrayIndex][RowIndex] : never;
};
};
type NumericRange<TotalLength extends number, TempRange extends any[] = []> =
TempRange['length'] extends TotalLength ? TempRange : NumericRange<TotalLength, [...TempRange, TempRange['length']]>;
type TupleFromKeys<T, K extends readonly (keyof T)[]> = {
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy