Skip to content

Instantly share code, notes, and snippets.

View jonashaag's full-sized avatar

Jonas Haag jonashaag

View GitHub Profile
@jonashaag
jonashaag / enum_with_label.py
Last active February 4, 2026 15:53
Python Enum with label / verbose name / description
import enum
class EnumWithDisplayName(enum.Enum):
def __new__(cls, value, name=None):
if not hasattr(cls, "_value_to_display_name"):
cls._value_to_display_name = {}
cls._display_name_to_value = {}
if name is not None:
if value in cls._value_to_display_name:
@jonashaag
jonashaag / gist:34de48e1c465a7b7d4a6cc19cd22a27c
Created October 4, 2025 11:03
MinIO client copy from Scaleway to Hetzner
AWS_REGION=fr-par mc alias set src https://s3.fr-par.scw.cloud <key> <secret>
AWS_REGION=fsn1 mc alias set dst https://fsn1.your-objectstorage.com <key> <secret>
MINIO_REGION=fsn1 AWS_REGION=fr-par mc mirror src/<src-bucket> dst/<dst-bucket>
@jonashaag
jonashaag / gist:b92f443df9c78f218931cd636aa6fa6a
Created October 4, 2025 11:03
MinIO client copy from Scaleway to Hetzner
AWS_REGION=fr-par mc alias set src https://s3.fr-par.scw.cloud <key> <secret>
AWS_REGION=fsn1 mc alias set dst https://fsn1.your-objectstorage.com <key> <secret>
MINIO_REGION=fsn1 AWS_REGION=fr-par mc mirror src/<src-bucket> dst/<dst-bucket>
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@jonashaag
jonashaag / Use macOS OCR engine from Python.md
Last active June 13, 2025 12:22
Use macOS OCR engine from Python

macOS Live Text has a very good quality/speed tradeoff.

Compared to Tesseract, it has much higher quality and is up to 3x as fast.

@jonashaag
jonashaag / t.py
Created March 19, 2025 14:57
pydantic raise model_validator ValidationError on custom field
raise ValidationError.from_exception_data(
"test",
[
InitErrorDetails( type='value_error', loc=(field_name,), input=None, ctx={"error": "my message"})
]
)
import json
import sqlite3
repodata = json.load(open("497deca9.json"))
COLS = 'filename, build, build_number, depends, license, license_family, md5, name, sha256, size, subdir, timestamp, version'.split(', ')
db = sqlite3.connect("497deca9.sqlite")
db.execute("create table repodata ({}, primary key (filename))".format(','.join(COLS)))
@jonashaag
jonashaag / worksteal.py
Last active November 29, 2024 11:09
Python ThreadPoolExecutor Work Stealing
import concurrent.futures.thread as _thread_impl
import threading
import time
import weakref
from concurrent.futures import Future
class WorkStealThreadPoolExecutor(_thread_impl.ThreadPoolExecutor):
"""A ThreadPoolExecutor that supports work stealing.
@jonashaag
jonashaag / tesseract-finetune.md
Last active August 13, 2024 02:38
Tesseract LSTM fine-tuning how-to
  1. Download lots of fonts (eg., .ttf files)
  2. git clone https://github.com/tesseract-ocr/tesstrain/
  3. git clone https://github.com/tesseract-ocr/langdata_lstm
  4. Install Tesseract
  5. Generate training data:
    cd src
    python -m tesstrain \
      --langdata_dir /path/to/langdata_lstm \
      --linedata_only \
    
@jonashaag
jonashaag / realapp.py
Created December 7, 2010 14:03
WSGI middleware that automatically reloads the wrapped app if it changes
def app(env, start_response):
start_response('200 ok', [])
return 'hello\n'