Skip to content

Instantly share code, notes, and snippets.

View Simsso's full-sized avatar

Timo Denk Simsso

View GitHub Profile
@Simsso
Simsso / string-compression.js
Created April 15, 2022 22:32
Experiments with string compression for storing maps of the game "Crusades" in the URL
const allowedChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=_"
const examples = [
"1010AAAAAAAAAAAAX_oX_oX_oX_oX_oFmUAAAaqQX_oZD4X_oTMgTMgJmQX_oZU8AAAEzIZD4OZYOZYTMgJmQFmUEzIX_oFVQEzIX_oEzIOZYTMgAAAEzIZgUZgUEzIZrsX_oaN0EzIAAAAAAEzIakkaCcEzIZJkEzIEzIJmQAAAOZYEzIX_oFmUEzIX_oX_oFVQJmQAAAOZYZU8a7UEzIAAATMgZD4TMgAAAAAAX_oX_oTMgEzIAAATMgX_oX_oAAAAAAZU8TMgTMgAAAAAAAAAFVQX_oX_oX_oX_oAAAAAAAAA",
"1010AAAAAAEzIEzIX_oX_oX_oX_oX_oAAAAAAZrsaN0X_oX_oJmQTMgFmUX_oAAAAAAZJkEzIEzITMgTMgJmQX_oX_oAAAAAAX_oEzIFVQTMgOZYEzIZU8EzIEzIAAAX_oaqQEzIOZYTMgEzIX_oZU8EzIAAAAAAX_oZD4JmQOZYTMgFmUX_oZU8EzIFVQEzIX_oOZYTMgTMgEzIX_oEzIEzIX_oZD4X_oOZYTMgEzIEzIakkFmUEzIZD4OZYOZYTMgTMgX_oZgUaCcEzIEzIOZYOZYTMgTMgJmQa7UEzIEzIEzI",
"2010AAAAAAAAAAAAAAAAAAAAAEzIEzIAAAAAAAAAEzIFmUAAAAAAEzIEzIAAAAAAAAAEzIFVQEzIAAAEzIEzIEzIFVQTMgTMgX_oX_oX_oX_oX_oZgUX_oEzIAAAAAAAAAEzIEzIEzIEzIEzIZD4X_oX_oX_oX_oTMgJmQX_oJmQEzIaCcEzIFmUAAAEzIEzIZD4ZD4X_oX_obMYOZYTMgTMgTMgJmQEzIZU8ZgUX_oakkEzIOZYAAAEzIaN0X_oEzIFVQZD4OZYOZYOZYTMgTMgEzIFmUEzIEzI
def synchronized(func):
"""Wraps a function with a threading lock."""
lock = threading.Lock()
def wrapper(*args, **kwargs):
with lock:
return func(*args, **kwargs)
return wrapper
@Simsso
Simsso / retry.py
Created May 14, 2024 22:47
Retry annotation for Python
import functools
import time
def retry(max_retries=3, delay_s=2):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
retries = max_retries
while retries > 0:
try: