Skip to content

Instantly share code, notes, and snippets.

View snorfalorpagus's full-sized avatar

Joshua Arnott snorfalorpagus

View GitHub Profile
@snorfalorpagus
snorfalorpagus / viper.py
Created July 25, 2021 14:09
Witcher Viper Fangs
from dragn.dice import D6, D10
def explode() -> int:
roll = D10()
if roll == 10:
return roll + explode()
else:
return roll
def rolld10() -> int:
@snorfalorpagus
snorfalorpagus / aiohttp_threading.py
Created November 17, 2019 22:06
Running blocking tasks in a thread with aiohttp
import asyncio
from aiohttp import web
from concurrent.futures import ThreadPoolExecutor
import time
def blocking_func(seconds: int) -> int:
time.sleep(seconds)
return seconds
@snorfalorpagus
snorfalorpagus / main.py
Created November 14, 2019 18:35
aiohttp.ClientSession connection pooling within aiohttp.web.Application
import aiohttp
from aiohttp import web
from http import HTTPStatus
from typing import AsyncGenerator
from dataclasses import dataclass
@dataclass
class Config:
timeout: int
@snorfalorpagus
snorfalorpagus / Dockerfile
Created June 17, 2019 22:32
Docker + Pipenv + multi-stage builds
FROM alpine:3.9 AS build
WORKDIR /opt/app
# Install Python and external dependencies, including headers and GCC
RUN apk add --no-cache python3 python3-dev py3-pip libffi libffi-dev musl-dev gcc
# Install Pipenv
RUN pip3 install pipenv
# Create a virtual environment and activate it
@snorfalorpagus
snorfalorpagus / keybindings.json
Created April 23, 2019 15:54
vscode terminal focus
[
{ "key": "ctrl+`", "command": "workbench.action.focusActiveEditorGroup", "when": "terminalFocus" },
{ "key": "ctrl+`", "command": "workbench.action.terminal.focus", "when": "!terminalFocus" },
]
@snorfalorpagus
snorfalorpagus / katana.py
Created December 18, 2017 14:22
katana in qgis 2
"""
Split large polygons into smaller parts for faster intersections
https://snorfalorpagus.net/blog/2016/03/13/splitting-large-polygons-for-faster-intersections/
"""
##Input=vector
##Threshold=number 500.0
##Recursion=number 250
##Output=output vector
var fs = require("fs");
var d3 = require("d3");
var jsdom = require("jsdom/lib/old-api");
var svg2png = require("svg2png")
var width = 400;
var height = 300;
jsdom.env({
html:'',
import fiona
from shapely.geometry import shape, mapping
import multiprocessing
import time
import functools
import copy
def factory(f, chunksize=50):
def wrapped(features, **kwargs):
pool = kwargs.pop("pool", None)
@snorfalorpagus
snorfalorpagus / rotary.py
Created September 17, 2017 10:57
Rotary encoder on Raspberry Pi
import RPi.GPIO as GPIO
import threading
GPIO.setmode(GPIO.BCM)
class RotaryEncoder:
def __init__(self, pin_a, pin_b):
self.pin_a = pin_a
self.pin_b = pin_b
@snorfalorpagus
snorfalorpagus / upgrade_pywr.sh
Created May 5, 2017 13:41
EC2 helper script to install/upgrade Pywr master
#!/bin/bash
# quit immediately on error
set -e
# install miniconda
rm -rf /opt/miniconda3
mkdir -p /opt/miniconda3
ln -f -s /opt/miniconda3 ~/miniconda3
CONDA_SCRIPT="Miniconda3-latest-Linux-x86_64.sh"