I hereby claim:
- I am lachesis on github.
- I am aftbit (https://keybase.io/aftbit) on keybase.
- I have a public key whose fingerprint is 9E15 397E 4D53 7E3A 3A23 8F87 E620 C8A7 4BAF 5D09
To claim this, I am signing this object:
I hereby claim:
To claim this, I am signing this object:
--- a/Makefile 2010-08-23 08:46:24.000000000 -0700 | |
+++ b/Makefile 2015-05-06 21:20:20.177910661 -0700 | |
@@ -100,15 +100,15 @@ | |
################ | |
## CHANGE NAME OF ANSI COMPILER HERE | |
################ | |
-CC = | |
+CC = gcc | |
# Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata) | |
# SQLSERVER, SYBASE, ORACLE |
# How to use "acme.sh" to set up Lets Encrypt without root permissions | |
# See https://github.com/Neilpang/acme.sh for more | |
# This assumes that your website has a webroot at "/var/www/<domain>" | |
# I'll use the domain "EXAMPLE.com" as an example | |
# When this is done, there will be an "acme" user that handles issuing, | |
# updating, and installing certificates. This account will have the following | |
# (fairly minimal) permissions: | |
# - Host files at http://EXAMPLE.com/.well-known/acme-challenge |
I'm experiencing the weirdest internet issue. I use Comcast Xfinity in El Cerrito, CA. I have a new Arris SB6190 cable modem running firmware version 9.1.93N. A few days ago, I noticed that new tabs start taking a few seconds to load, and curl requests to example.com took ~5.1 seconds. However, if I specified -4 or -6 to curl, it resolved immediately. I immediately suspected DNS, but "host" resolved immediately as well.
So this was too weird to ignore. I set my resolv.conf to point to 8.8.8.8 (instead of my EdgeRouter X) and did:
time strace -f -T curl -s http://www.example.com > /dev/null 2> bad
time strace -f -T curl -4 -s http://www.example.com > /dev/null 2> good
Now if you look at the resulting logs, you'll see that curl starts a new thread to handle DNS resolution. In the good logs, the relevant bit looks like:
[pid 12438] socket(AF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3 <0.000005>
from __future__ import print_function, division, unicode_literals | |
import sys, time, re, struct, base64, hmac, hashlib | |
def get_hotp(secret, counter): | |
"""Return the HMAC-Based One-Time Password for the the given secret (base32 encoded) and the counter. | |
>>> [get_hotp('GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ', i) for i in xrange(10)] | |
[755224, 287082, 359152, 969429, 338314, 254676, 287922, 162583, 399871, 520489] | |
""" | |
secret = re.sub(r'\s*', '', secret) # remove whitespace | |
secret = secret.upper() # uppercase | |
if len(secret) % 8 != 0: |
#!/bin/bash | |
# Get last value of statsd gauge from grafana server | |
# Set env vars: | |
# GRAFANA_BASE="https://www.example.com" <-- your grafana base URL | |
# GRAFANA_API_KEY="eyJryJzd.....IxMj0F9" <-- your grafana API key | |
curl --compressed --silent \ | |
"$GRAFANA_BASE/api/datasources/proxy/1/render" \ | |
-H "Authorization: Bearer $GRAFANA_API_KEY" \ | |
--data-urlencode "target=summarize($1, "'"1h", "last")' \ |
#!/usr/bin/env python3 | |
# Subscribes contacts in a CSV file to a Close campaign | |
# Requires python3.7 or newer (f-strings) | |
# Prepare: save this script in close_sub.py and `pip3 install closeio` | |
# CSV should be two columns with email followed by exact Sequence name on Close | |
# Usage: KEY=api_yourcloseiokey LIVE=0 python3 close_sub.py leads.csv | |
import csv | |
import fileinput | |
import os | |
import re |
#!/usr/bin/python3 | |
# Prints current PM2.5 concentrations based on fire.airnow.gov map | |
# pip3 install requests pytz geobuf | |
# usage: LAT=37.9053745 LNG=-122.3048239 MAX_FEATURES=6 MAX_DIST=11 python3 airnow.py | |
# optional, for AQI instead of raw concentration (µg/m³): pip3 install python-aqi and pass AQI=1 | |
import collections | |
import datetime | |
import math | |
import os | |
import requests |
#!/usr/bin/env python3 | |
# Get duke energy hourly electricity usage | |
# before running: pip3 install requests | |
# use env vars to set username, password, and lookback days | |
# e.g. [email protected] DUKE_PASSWORD=hunter11 DUKE_DAYS_BACK=14 python dukeusage.py | |
import os | |
import datetime | |
import json | |
import re |
# License: Public Domain, use as you like, no warranty | |
import time | |
import threading | |
import pylru # from pip | |
class ExpiringLRUCache(object): | |
def __init__(self, size, exp=7200): | |
self.exp = exp | |
self.size = size | |
self.lru = pylru.lrucache(size) |