Skip to content

Instantly share code, notes, and snippets.

View mdwhatcott's full-sized avatar

Michael Whatcott mdwhatcott

View GitHub Profile
@mdwhatcott
mdwhatcott / s3_presign.py
Last active April 19, 2021 14:02
Generate a pre-signed S3 URL (valid for 20 years) with nothing but the standard library.
#!/usr/bin/env python
"""
Generates a pre-signed S3 URL using a valid key pair that lasts for 20 years.
Reference: http://forrst.com/posts/Python_method_for_creating_authenticated_s3_URLs-uUM
"""
import base64, hmac, os, sha, sys, time, urllib

Window Management (BetterSnapTool):

left half            ⌘+⌥+⌃+j
right half           ⌘+⌥+⌃+l
top half             ⌘+⌥+⌃+i
bottom half          ⌘+⌥+⌃+,
center               ⌘+⌥+⌃+k

top left             ⌘+⌥+⌃+u
top right ⌘+⌥+⌃+o
@mdwhatcott
mdwhatcott / gtd_next_actions.py
Created October 30, 2014 04:57
Gather all actions across all projects in a directory and group them according to their context. Helps with GTD.
"""
# Dependencies:
- https://github.com/russross/blackfriday-tool
- http://wkhtmltopdf.org/
TODO: this whole thing should be put under test.
TODO: it would be great to know how long a project (or task) is taking
"""
@mdwhatcott
mdwhatcott / exhaust_waitgroup_hack.go
Created February 24, 2015 05:45
Don't ever do this (but it works).
package main
import (
"fmt"
"strings"
"sync"
)
func main() {
var waiter sync.WaitGroup
package utils
// toInt is a port of the little endian path of the .Net BitConverter.ToInt32
// function. It does exactly what toIntReversed (below) does but it operates
// on a slice that is already in the expected order. If your slice is in
// reverse order, use toIntReversed (below) instead.
// For 4-byte integers the gist of this algorithm is:
// return int(b[0]) | int(b[1])<<8 | int(b[2])<<16 | int(b[3])<<24
// The for loop implementation allows byte slices of arbitrary length
// (up to 4 bytes because we return an int) to be converted to integer
@mdwhatcott
mdwhatcott / custom_json.go
Created July 29, 2015 17:15
Example of implementing MarshalJSON and UnmarshalJSON to serialize and deserialize custom types to JSON in Go. Playground: http://play.golang.org/p/7nk5ZEbVLw
package main
import (
"bytes"
"encoding/json"
"fmt"
"strconv"
)
func main() {
@mdwhatcott
mdwhatcott / traverse.go
Created July 29, 2015 21:06
Recursively find a value in a JSON object that can contain fields and values, as long as all values are only JSON objects with similarly defined objects with fields and values.
// traverse recursively finds a value in a JSON object that can contain fields and values,
// as long as all values are only JSON objects with similarly defined objects with fields and values.
// This works with structures like the US and International Street APIs.
// example: traverse(d, "components", "primary_number) // will return the primary number of the candidate)
func traverse(i interface{}, keys ...string) interface{} {
var (
found bool
object map[string]interface{}
)
object, found = i.(map[string]interface{})
@mdwhatcott
mdwhatcott / testing.go
Created August 13, 2015 17:29
golang testing package improvements
package something
import "testing"
type MyFixture struct {
*testing.T
sut Something // stuff under test
}
@mdwhatcott
mdwhatcott / echo_server.go
Created September 21, 2015 21:44
HTTP server that dumps the over-the-wire HTTP request it serves.
package main
import (
"fmt"
"log"
"net/http"
"net/http/httputil"
)
func main() {
@mdwhatcott
mdwhatcott / validate_struct.go
Last active November 4, 2015 23:05
One way to validate struct fields that are strings, and that have a struct tag with a regex.
package web
import (
"bytes"
"reflect"
"regexp"
"fmt"
"errors"
"strings"
)