Skip to content

Instantly share code, notes, and snippets.

@Suor
Suor / fuzzy.js
Created December 20, 2012 03:48
fuzzy matching try
var q = query.replace(/\s+/, ' '),
re = new RegExp('^(.*?)' + q.split('').join('(.*?)'));
function score(junk) {
if (!junk) return Infinity;
return junk.slice(1).reduce(function (len, item) {return len + item.length}, 0);
}
return list.reduce(function (best, item) {
var junk = item.title.match(re),
@Suor
Suor / activate_app.py
Created December 14, 2012 14:38
Switch to an app named (start it if needed) or toggle between its windows. Could be assigned to hotkey. Got it here - http://somanov.wordpress.com/2009/12/02/window-shortcuts-for-linux-desktops/
#!/usr/bin/env python
import os
import sys
import commands
program_name = sys.argv[1] # the program to be focused
# get all windows which contain "program_name" from wmcontrol
candidates = sorted([x.strip() for x in commands.getoutput(""" wmctrl -l -x | awk -v win="%s" 'tolower($0) ~ win {print $1;}' """ % (program_name, )).split("\n") if x !=''])
@Suor
Suor / 0_usage.py
Created November 18, 2012 07:43
Classes as namespaces in python
class checks(namespace):
immutable = lambda old_value, new_value: old_value == new_value
def gte(other):
if callable(other):
return lambda value: value >= other()
else:
return lambda value: value >= other
@Suor
Suor / trust-proxy.js
Created November 8, 2012 08:51
A connect middleware, broken yet
module.exports = function (ip) {
ip = ip || '127.0.0.1';
// Function to test whether or not the request is coming through the trusted reverse proxy.
var trust = function (req) {
return req.connection.remoteAddress === ip;
};
// Function to fetch the remote address from the browser that connected to the reverse proxy.
var remoteAddress = function (req) {
@Suor
Suor / seqmaker.py
Created October 30, 2012 02:19
Sequence maker
from itertools import groupby
inc = lambda x: x + 1
dec = lambda x: x - 1
def partition_by(f, coll):
for _, group in groupby(coll, key=f):
yield list(group)
@Suor
Suor / diffs.py
Created October 7, 2012 01:34
A dicts diff and patch utilities
def diff(old, new):
"""
diff(a, b) = b - a
a + diff(a, b) == b
"""
return strip_dict(map_dicts(diff_atom, old, new))
def diff_atom(old, new):
return None if old == new else (old, new)
@Suor
Suor / model_command.py
Created September 7, 2012 06:15
django ModelCommand
import re
from django.core.management.base import LabelCommand, CommandError
from django.db.models.loading import get_model
class ModelCommand(LabelCommand):
args = 'model+'
def handle_label(self, label, **options):
if not re.search(r'^\w+\.\w+$', label):
@Suor
Suor / cmdline_opts.pl
Created July 11, 2012 10:00
Parse command line options with kind of pattern matching
given (\@ARGV) {
when ([]) {
make_all();
}
when ([qr/first|second|third/]) {
make_source(@ARGV);
}
when ([qr/first|second|third/, qr/\d\d\d\d-\d\d-\d\d/]) {
make_source_day(@ARGV);
}
@Suor
Suor / README.md
Created June 7, 2012 07:33
Примеры использования AOP

Задача: нужно при активации услуги продлять жизнь объявления. Как не писать одинаковый код в каждом обработчике активации? Примеры возможного аспектно-ориентированного кода на разных языках. Код на перле рабочий с библиотекой Aspect, на остальных языках просто возможные варианты.

Первый вариант использует простые обёртки - перед вызовом AdvertService.activate() навешивает обёртку на метод .save() отдельного объявления, которая уже его продляет. Второй вариант комбинирует два среза: вызов AbstractAdvert.save() и нахождение в потоке управления AdvertService.activate(), и накладывает обработчик на комбинированный срез.

Интересно как недостаточный синтаксис и семантика разных языков делают подобные операции неуклюжими.

P.S. Другой вариант - использование событий, но он более многословный.

@Suor
Suor / gist:2049656
Created March 16, 2012 11:22
Redis rate limiting
FUNCTION LIMIT_API_CALL(ip)
ts = CURRENT_UNIX_TIME()
_, current, _ = MULTI
SETNX(ip, ts * 10)
INCR(ip, 1)
EXPIRE(ip, 1)
EXEC
IF current - ts * 10 > 10 THEN
ERROR "too many requests per second"
ELSE