Skip to content

Instantly share code, notes, and snippets.

Avatar

Karan Lyons karanlyons

View GitHub Profile
@karanlyons
karanlyons / tail_call_decorator.py
Last active May 29, 2016
Tail Call Decorator for Python
View tail_call_decorator.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
try:
from sys import _getframe
except ImportError:
import sys
try:
@karanlyons
karanlyons / duct.py
Created May 28, 2012
duct(): Almost like dict(), but worse.
View duct.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import copy
class _DuctView(object):
"""
*Almost* like `DictView`, but worse.
"""
@karanlyons
karanlyons / gevent_fib.py
Created Jun 4, 2012
Node vs. Gevent (Sync and Async)
View gevent_fib.py
#!/usr/bin/env python
# encoding: utf-8
# $ brew install libev
# $ pip install http://gevent.googlecode.com/files/gevent-1.0b2.tar.gz
# $ chmod +x ./gevent_fib.py
# $ ./gevent_fib.py
import time
@karanlyons
karanlyons / tal_music.json
Last active Jun 28, 2017
Music played in This American Life episodes, scraped from their transcripts.
View tal_music.json
[
{
"music": [
{
"artist": "Dinah Washington",
"song": "Destination Moon",
"time": "00:05:40.49"
},
{
"artist": "Frank Sinatra",
@karanlyons
karanlyons / thesaurus.py
Last active Dec 14, 2015
For when a dictionary is too boring.
View thesaurus.py
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
from decimal import Decimal
from difflib import get_close_matches
class Thesaurus(dict):
'''
For when a dictionary is too boring.
@karanlyons
karanlyons / stupid_django_search.py
Last active Dec 24, 2015
Because setting up haystack would just be silly.
View stupid_django_search.py
# -*- coding: utf-8 -*-
from __future__ import division, absolute_import, print_function, unicode_literals
import operator
from django.contrib.admin.util import lookup_needs_distinct
from django.contrib import admin
from django.db.models import Q
@karanlyons
karanlyons / xpath.js
Last active Sep 6, 2018
Poor Man’s JS XPath (With support for wildcard globbing, regex matches, and array slice notation.)
View xpath.js
var slice_re = new RegExp(/^(.*?)\[(-?\d*?)(:?)(-?\d*?)(:?)(-?\d*?)\]$/);
function xpath(path, objects) {
var selectors, selector, is_array_selector, array_components, array_components_length, array_rules, j, i, is_regex_selector, tail_path, objects_length, heap, object, matches, key, matches_length, match, array_start, array_end, array_interval, _, k;
if (!Array.isArray(objects)) {
objects = [objects];
}
selectors = path.split('.');
View keybase.md

Keybase proof

I hereby claim:

  • I am karanlyons on github.
  • I am karanlyons (https://keybase.io/karanlyons) on keybase.
  • I have a public key whose fingerprint is 58E3 3A33 462A 60BC AB6E 8E86 69B3 9688 5CB5 219B

To claim this, I am signing this object:

@karanlyons
karanlyons / partial_object.py
Last active Aug 29, 2015
PartialObject (as functools.partial is to functions)
View partial_object.py
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
from __future__ import division, absolute_import, print_function, unicode_literals
import inspect
from collections import OrderedDict
class PartialManager(type):
@karanlyons
karanlyons / partial_range_update.sql
Last active May 19, 2020
Postgres: Update only portion of range, preserving other half and bounds.
View partial_range_update.sql
UPDATE <TABLE> SET
<COLUMN>=<RANGE_TYPE>(
lower(<COLUMN>), -- Swap out for actual value
upper(<COLUMN>), -- Swap out for actual value
concat(
CASE WHEN lower_inc(<COLUMN>) THEN '[' ELSE '(' END,
CASE WHEN upper_inc(<COLUMN>) THEN ']' ELSE ')' END
)
)
WHERE <CONDITION>;
You can’t perform that action at this time.