Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

View exogen's full-sized avatar

Brian Beck exogen

View GitHub Profile
import re
import itertools
key_re = re.compile(r'(.*?)(\d*)$')
def string_key(s):
name, number = key_re.match(s).groups()
return (name, number and int(number))
def group_key((i, (name, number))):
import inspect
class Meta(type):
def __init__(cls, name, bases, attrs):
for attr, value in attrs.items():
if inspect.isfunction(value):
setattr(cls, attr, decorate(value))
for base in bases:
for attr in dir(base):
value = getattr(base, attr)
@exogen
exogen / knockout.js
Created March 17, 2011 17:11
Basic Knockout functionality in 100 lines
ko = {};
ko.Observable = function(value) {
this.value = value;
this.subscribers = [];
};
ko.Observable.prototype.get = function() {
return this.value;
@exogen
exogen / watch
Created September 15, 2011 23:22
Generic file watcher script.
#!/bin/bash
#
# Author: Brian Beck <exogen@gmail.com>
# Usage: watch PATH COMMAND...
#
# This script watches PATH and runs COMMAND whenever PATH or a descendent
# of PATH is modified. COMMAND is everything after the first argument.
#
# If PATH is "-", then the list of paths comes from standard input.
#
@exogen
exogen / TemplateEngine.coffee
Created September 22, 2011 23:03
Milk (Mustache) template engine for Knockout
ko = require 'knockout'
Milk = require 'milk'
class Template
constructor: (@string) ->
render: (data, options) =>
# Knockout expects an Array-like object of Nodes.
# We could just use createElement and set innerHTML,
# but apparently jQuery's append does some kind of cleanup.
@exogen
exogen / test.coffee
Created September 23, 2011 17:46
Bug in coffee.vim
# Go to the #{lol} line and press 'o'.
rofl = """
#{lol}
"""
@exogen
exogen / rgb2hex
Created October 13, 2011 21:23
Convert RGB values to hex and copy the result to the clipboard (Mac)
#!/bin/bash
# rgb2hex -- Convert RGB values to hex and copy the result to the clipboard (Mac)
# usage: rgb2hex [r] [g] [b]
hex=$(python -c "print '#%02x%02x%02x' % (${1:-0}, ${2:-0}, ${3:-0})")
echo -n $hex | pbcopy
echo $hex
@exogen
exogen / drive
Last active August 29, 2015 13:57
#!/bin/bash -e
# Google Drive file selector by Brian Beck.
# Latest version: https://gist.github.com/exogen/9817479
command -v selecta >/dev/null 2>&1 || {
echo >&2 "This utility requires selecta to be installed:"
echo >&2
echo >&2 " https://github.com/garybernhardt/selecta"
echo >&2
// Default mixin settings
@spinner-default-color: #000;
@spinner-default-size: 16px;
// Opacity, spacing, speed
@spinner-opacity: 70%; // Opacity of the brightest dot
@spinner-decay: 0.7; // Opacity of each dot compared to the previous
@spinner-spacing: 1; // Distance multiplier between dots
@spinner-duration: 1s; // Time it takes for one revolution
@exogen
exogen / play
Last active August 29, 2015 14:13
Instantly play the first result from YouTube
#!/bin/bash
# Usage: play bizarre love triangle
# Arguments are joined so no quotes are needed.
# NOTE: $TMPDIR (on Mac at least) already ends in a slash.
youtube-dl --default-search "ytsearch" \
--restrict-filenames \
--output "${TMPDIR:-/tmp/}%(title)s-%(id)s.%(ext)s" \
--exec afplay "$*"