Skip to content

Instantly share code, notes, and snippets.

View enaeseth's full-sized avatar

Eric Naeseth enaeseth

View GitHub Profile
@enaeseth
enaeseth / yaml_ordered_dict.py
Created February 25, 2011 19:54
Load YAML mappings as ordered dictionaries
import yaml
import yaml.constructor
try:
# included in standard lib from Python 2.7
from collections import OrderedDict
except ImportError:
# try importing the backported drop-in replacement
# it's available on PyPI
from ordereddict import OrderedDict
@enaeseth
enaeseth / objectid_to_uuid.py
Created June 12, 2013 19:29
Convert a MongoDB ObjectID to a valid, semantically similar UUID.
"""
Convert a MongoDB ObjectID to a version-1 UUID.
Python 2.7+ required for datetime.timedelta.total_seconds().
ObjectID:
- UNIX timestamp (32 bits)
- Machine identifier (24 bits)
- Process ID (16 bits)
- Counter (24 bits)
"""
Interruptible worker pattern
"""
import threading
class Worker(object):
def __init__(self):
self._running = False
self._wakeup = threading.Condition()
@enaeseth
enaeseth / build-python-rpm.sh
Created January 9, 2014 23:50
Build Python 3 on RHEL 5 or CentOS 5
#!/bin/bash
# Requires fpm (path configurable via $FPM) and a working
# build environment.
set -e
version=$1
vendor=$2
@enaeseth
enaeseth / known_hosts
Created January 22, 2014 02:47
GitHub public key
github.com,192.30.252.128 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
192.30.252.129 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
192.30.252.130 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/

Building a Python Service Stack

  • So, Yelp has grown a lot
    • 100 developers
    • 180,000 lines of code in their main repo
    • Taking longer and longer to release new features, even though the features themselves aren't getting more complex
    • How to deal with this? Break up the monolithic project into lots of little codebases, speaking to each other RESTfully over HTTP
  • Issues of the big codebase
@enaeseth
enaeseth / msas.json
Created December 6, 2012 20:41
US Metropolitan Statistical Area (MSA)'s, 1999
[
{
"code": 40,
"type": "MSA",
"is_msa": true,
"is_cmsa": false,
"cmsa_code": null,
"name": "Abilene, TX",
"friendly_name": "Abilene"
},
$_ = join("", <>); tr/XO.\n//cd; m/O(.{8}O){3}|O(.{7}O){3}|O(.{6}O){3}|OOOO/s and print "Winner: O\n" and exit(0); m/X(.{8}X){3}|X(.{7}X){3}|X(.{6}X){3}|XXXX/s and print "Winner: X\n" and exit(0); print "No winner\n"
import json
import re # Now I have two problems!
def munge(board):
num_rows = len(board)
rows = [''.join(row) for row in board]
cols = [''.join(col) for col in zip(*board)]
diag1 = [''.join(diag) for diag in
zip(*[' ' * offset + ''.join(row) for row, offset in
zip(board, range(num_rows))])]
#!/usr/bin/env python
from itertools import product, repeat
import json
import sys
PLAYERS = ['X', 'O']
RUN_LENGTH = 4
def value_at(board, coordinate):