Skip to content

Instantly share code, notes, and snippets.

@bsolomon1124
bsolomon1124 / ratemgr.py
Created September 25, 2018 14:13
Exponential backoff
def backoff(
url: str,
waitfor: Optional[datetime.timedelta] = None,
waituntil: Optional[datetime.datetime] = None,
base: int = 2,
method: str = 'GET',
bad_status_codes: Optional[Sequence] = None,
session: Optional[requests.Session] = None,
begin_timeout: int = 10,
_now=datetime.datetime.now,
@bsolomon1124
bsolomon1124 / counter.go
Created September 4, 2018 02:41
Mimic Python's collection.Counter in Go - attempt 2
package counter
import (
"fmt"
"sort"
)
type kv struct {
Key int
Value int
package variadic
// Platform-dependent largest and smallest values that int may take on
const (
LargestInt = int(^uint(0) >> 1)
SmallestInt = -1 * int(^uint(0) >> 1) - 1
)
func Min(a ...int) int {
min := LargestInt
@bsolomon1124
bsolomon1124 / counter.go
Last active September 3, 2018 23:29
Mimic Python's collection.Counter in Go
package counter
import "container/heap"
// Implement the maxheap used in ic.MostCommon()
// KeyValueHeap is a nested slice that implements the heap interface
// It roughly resembles an ordered mapping where each element is a
// length-2 slice with keys as the 0th element and values as the 1st
// See https://golang.org/pkg/container/heap/ IntHeap example
@bsolomon1124
bsolomon1124 / ratemgr.py
Last active August 23, 2018 01:03
Rate limit manager via Redis/Python
#!/usr/bin/env python3
# NOTE: No Python 2 compat. Redis
"""Mixin class for managing rate limiting of API keys via Redis."""
__all__ = ['RateLimitManagerMixin']
import datetime
import redis
@bsolomon1124
bsolomon1124 / rolling.pyx
Last active August 7, 2018 20:29
Rolling window stats with frequency offset and centered window
# cython: profile=False
from cython cimport boundscheck, wraparound
# Py_ssize_t is the proper C type for Python array indices.
from cython cimport Py_ssize_t
import numpy as np
cimport numpy as cnp
from numpy cimport ndarray, double_t, int64_t
@bsolomon1124
bsolomon1124 / basic.py
Created July 11, 2018 15:49
Demonstrates different LogRecord attributes (formatters)
"""Demonstrates different LogRecord attributes (formatters).
https://docs.python.org/3/library/logging.html#logrecord-attributes
"""
import logging
# Notes
# -----
# pathname: this is relative!
# created: time in seconds since the epoch as a float
@bsolomon1124
bsolomon1124 / urlsafe.py
Created June 28, 2018 14:45
Demonstration of `secrets.token_urlsafe()`
import binascii
import math
import os
# binascii.b2a_base64(data, *, newline=True)
# Convert binary data to a line of ASCII characters in base64 coding.
# The return value is the converted line, including a newline char if
# newline is true. The output of this function conforms to RFC 3548.
@bsolomon1124
bsolomon1124 / bytes_to_int.py
Last active June 26, 2018 14:10
Demonstration of `int.from_bytes()`
# Demonstration of how `int.from_bytes()` converts a Python bytes obj to int.
# Used in random module's `SystemRandom.random()` to generate a float in [0.0, 1.0) from `os.urandom()`
# https://github.com/python/cpython/blob/c6040638aa1537709add895d24cdbbb9ee310fde/Lib/random.py#L676
#
# An example: the number 1984 can be "decomposed" in the decimal system (base 10)
# as (1 * 10 ** 3)
# + (9 * 10 ** 2)
# + (8 * 10 ** 1)
# + (4 * 10 ** 0)
#
@bsolomon1124
bsolomon1124 / mapto.py
Created June 22, 2018 16:21
`os.urandom()` maps to ints in [0, 255]
# Informal proof
from math import inf
mn, mx = inf, -1 * inf
for _ in range(100000):
b = os.urandom(10)
new_min = min(b)
new_max = max(b)