Skip to content

Instantly share code, notes, and snippets.

View fawkesley's full-sized avatar

Paul Fawkesley fawkesley

View GitHub Profile
@fawkesley
fawkesley / lets_encrypt_webroot_notes.md
Created December 11, 2017 09:41
Let's Encrypt / nginx / webroot notes

/etc/nginx/sites-enabled/www.paulfurley.com_HTTP :

server {                                                                        
  listen 80;                                                                    
  listen  [::]:80;                                                              
  server_name www.paulfurley.com;                                               
                                                                                
  location /.well-known/acme-challenge/ {                                       
    # For the letsencrypt "webroot" plugin                                      
@fawkesley
fawkesley / cron-wrap
Created December 18, 2017 21:16
cron-wrap
#!/bin/sh -u
LOG_FILE="${HOME}/log/$(date --iso-8601=seconds).log"
touch "${LOG_FILE}"
$1 "$@" >> ${LOG_FILE} 2>&1
EXIT_CODE=$?
@fawkesley
fawkesley / organise-cctv
Last active January 24, 2018 16:19
/etc/cron.hourly/organise-cctv on cctv-server
#!/bin/sh -eu
PATH=/bin:/usr/bin
DIR=/media/seagate_250gb/cameras/front
USER="camera-front"
cd_to_directory() {
cd "$DIR"
}
@fawkesley
fawkesley / mkdir_p.py
Created January 27, 2018 11:20
Python `mkdir -p` equivalent
import os
def mkdir_p(directory):
if not os.path.isdir(directory):
os.makedirs(directory)
return directory
@fawkesley
fawkesley / apt-key-add-from-fingerprint.md
Last active March 17, 2018 10:35
Safer `apt-key add` based on a key fingerprint

Apt-key add from key fingerprint

$ sudo apt-key adv --keyserver pool.sks-keyservers.net --recv-key 0xDBA36B5181D0C816F630E889D980A17457F6FB06
@fawkesley
fawkesley / google-analytics.html
Last active December 13, 2019 23:16
Google Analytics that respects Do-Not-Track header
<script>
var dnt = navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack;
if (dnt != "1" && dnt != "yes") {
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXXXXX-X', 'auto');
ga('set', 'anonymizeIp', true);
@fawkesley
fawkesley / Makefile
Last active April 11, 2020 17:58
Makefile for activating a virtualenv and installing requirements. Uses requirements-to-freeze.txt / requirements.txt pattern
# Put *unversioned* requirements in `requirements-to-freeze.txt` as described below.
# `requirements.txt` will be automatically generated from `pip freeze`
# https://www.kennethreitz.org/essays/a-better-pip-workflow
venv/bin/activate: requirements-to-freeze.txt
rm -rf venv/
test -f venv/bin/activate || virtualenv -p $(shell which python3) venv
. venv/bin/activate ;\
pip install -Ur requirements-to-freeze.txt ;\
pip freeze | sort > requirements.txt
@fawkesley
fawkesley / requests_wrapper.py
Last active May 30, 2018 11:58
Wrapper for python requests providing session and user agent
import requests
class RequestsWrapper():
def __init__(self, user_agent):
self._session = requests.Session()
self._user_agent = user_agent
def get(self, *args, **kwargs):
headers = requests.structures.CaseInsensitiveDict(
@fawkesley
fawkesley / expirybot notes.md
Last active September 15, 2018 17:47
Rebuild sks keyserver 1.1.6 on debian

keyserver-c.expirybot.com

  • AKA keyserver.paulfurley.com

  • running sks-1.1.6

  • running github.com/paulfurley/expirybot via cron

  • only recon port, no public PKS queries

  • peered with other keyservers & keyserver-b.expirybot.com

keyserver-b.expirybot.com

@fawkesley
fawkesley / yealink_t20.md
Last active March 16, 2022 15:59
Yealink T20 VoIP phone setup notes