Skip to content

Instantly share code, notes, and snippets.

View steinnes's full-sized avatar

Steinn Eldjárn Sigurðarson steinnes

View GitHub Profile
@steinnes
steinnes / usage.md
Last active November 2, 2018 00:12
A shellscript which hangs for up to 30 seconds while waiting for a port to become accessible.

A simple way to test this is to run wait_for_port.sh against localhost on a random unused port:

$ .ci/wait_for_port.sh localhost 12345
.....

Then in another shell, listen on that port:

$ nc -l 12345
import sys
UTF8Writer = codecs.getwriter('utf8')
class SafeStdoutWriter(UTF8Writer):
""" A safe stdout writer class which expects to output only unicode string objects
but if it encounters a decoding error (because the given string is not unicode but
a normal 'str') it will attempt to convert it to unicode and try again. If that
conversion fails we fall back to decoding iso-8859-1 which is the default codec
the CSVOutput writer uses.

Keybase proof

I hereby claim:

  • I am steinnes on github.
  • I am steinnes (https://keybase.io/steinnes) on keybase.
  • I have a public key ASBhjE9xWeYPkNk07XoFpdyknK8dxarE3VhcJ6VQbFwQjQo

To claim this, I am signing this object:

@steinnes
steinnes / circle-ci-env-variables.txt
Created February 9, 2017 00:12
Circle CI environment variables
# This is a list of Circle CI environment variables, pulled on Feb 9th 2017 @ 00:10
# This can be useful for example when running tests inside a docker and you wish to
# pass environment variables into the docker via docker-compose. That's why I made
# this list by starting a build with SSH enabled, and executing:
#
# ubuntu@box103:~$ env|grep ^CI|cut -d\= -f1|sort -u
CI
CI_PULL_REQUEST
CI_PULL_REQUESTS
@steinnes
steinnes / nginx.conf
Created December 30, 2016 13:11
nginx config to listen on IPv6 and proxy
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
@steinnes
steinnes / synchronize.py
Created May 15, 2016 12:23
python threading lock example
import threading
import time
from functools import wraps
FN_LOCKS = {}
class Lock(object):
def __init__(self, func_id):
global FN_LOCKS
import time
timings = (
(1, 'up'),
(2, 'down'),
(7, 'up'),
(8, 'down'),
(13, 'up'),
(14, 'down'),
(19, 'up'),
@steinnes
steinnes / 01_setup_swap.config
Last active October 30, 2019 17:32
EB config file which executes setup_swap.sh
container_commands:
01setup_swap:
command: "bash .ebextensions/setup_swap.sh"
@steinnes
steinnes / setup_swap.sh
Created March 15, 2016 02:01
swapfile setup script
#!/bin/bash
SWAPFILE=/var/swapfile
SWAP_MEGABYTES=2048
if [ -f $SWAPFILE ]; then
echo "Swapfile $SWAPFILE found, assuming already setup"
exit;
fi
def human_time_string(delta):
'''
Return a nice human readable "X days[, Y hours [and Y minutes]]" string
for a given datetime.timedelta
'''
minutes = delta.seconds // 60
hours = delta.seconds // 3600
minutes -= hours * 60 # subtract hours
days = delta.days