Skip to content

Instantly share code, notes, and snippets.

@keturn
keturn / test_handler.py
Created June 16, 2011 23:47
another "Am I doing this wrong?" case of unit tests for a web controller
# test case using fudge 0.9.x for fakes.
class TestUploadList(TestCase):
@with_fakes
def test_upload(self):
"""Upload is converted and JSON returned.
"""
self.req = Fake("Request").has_attr(variables={})
content = "UPLOADED STUFF"
@keturn
keturn / README.markdown
Created May 25, 2011 22:51
playing with canvas and sierpinski

Canvas Experiment: Sierpinski Triangles

This is just a little doodle for me to get a feel for how the HTML5 canvas element can be used. The canvas is a pixel-based sort of thing, and so maybe not well suited to applications that want scalable elements or independent moving parts; there SVG might be a better choice. But for uses where you want to fiddle with a lot of pixels, where it'd be undesirable to make a new object for every point you manipulate, canvas fits the bill.

@keturn
keturn / ngplans.htm
Created April 8, 2011 19:04
trying to use angular
<!doctype html>
<html xmlns:ng="http://angularjs.org">
<head>
<title>all plans</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="icon" href="/s/plans/images/plans-icon.png?68f34ebf0f" />
<link rel="stylesheet" href="/s/jquery-ui-css/jquery-ui-1.8.9.css?9f6e6ea563" type="text/css" charset="utf-8"/>
<link rel="stylesheet" href="/s/jquery-ui-css/jquery-ui-1.8.9.custom.css?7ea76fa98c" type="text/css" charset="utf-8"/>
<link rel="stylesheet" type="text/css" href="/s/plans/css/plans.css?9fbd065898">
<link rel="stylesheet" type="text/css" href="/s/plans/css/datatables.css?396b174e7a" />
@keturn
keturn / loopback-latency.sh
Created August 20, 2010 22:35
use netem to add latency to loopback network traffic
#!/bin/bash
#
# Add latency to all outgoing traffic on $DEV on tcp/udp $PORT,
# in the amount of $DELAY.
#
# This is matching on both source port and destination port, which
# may hit you twice if you're accessing a local resource.
#
# To see what's currently in effect,
# tc -s qdisc show dev lo
@keturn
keturn / closure-compiler
Created August 4, 2010 23:47
convenience wrapper for closure-compiler/compiler.jar
#!/bin/bash
java -jar ~/src/closure-compiler/compiler.jar ${@/#/--js }
@keturn
keturn / selenium-ajax.py
Created July 8, 2010 23:38
getAjaxResult for python selenium
def getAjaxResult(self, func, *args):
sel = self.selenium
self.js('''\
ajaxSeleniumResult = (function (func, args) {
var result = [], funcArgs;
function storeSeleniumResult() {
result.push(window.jQuery.makeArray(arguments));
}
// assume function's last argument is a callback
args.push(storeSeleniumResult);
@keturn
keturn / warppointer.py
Created July 4, 2010 06:07
xwarppointer python script
#!/usr/bin/env python
"""Make the X cursor wrap-around.
Adapted from http://appdb.winehq.org/objectManager.php?sClass=version&iId=12599
to work around lack of relative mouse movement http://wiki.winehq.org/Bug6971
for Thief: Dark Shadows (and possibly others)
This version is a little kinder to your CPU than the shell script with
the busy-loop that starts a new process for every pointer query.
"""
@keturn
keturn / binding_methods.py
Created April 15, 2010 06:29
method or function? why explicit self
class A(object):
# method
def foo(self, x):
print self, x
# function -- defined after A is closed.
def bar(self, y):
print self, y
A.bar = bar
from django.db import models
class Top(models.Model):
_counter = 0
def __init__(self, arg):
Top._counter += 1
print "Top(%s)#__init__(<%x>, %s) called %d times" % (
self.__class__.__name__, id(self), arg, Top._counter)
@keturn
keturn / myOpenID-delegation
Created March 11, 2010 02:27
yahoo openid delegation fail
at http://openidenabled.com/python-openid/trunk/examples/consumer/finish/:
openid <http://specs.openid.net/auth/2.0>
mode = id_res
identity = http://keturn.myopenid.com/
claimed_id = http://keturn.net/
assoc_handle = {HMAC-SHA1}{4b9852bd}{CDlRdQ==}
op_endpoint = http://www.myopenid.com/server
response_nonce = 2010-03-11T02:32:02ZUpcemj
return_to = http://openidenabled.com/python-openid/trunk/examples/consumer/finish/?janrain_nonce=2010-03-11T02%3A27%3A41ZbQoFal
sig = dJMjI3wsbpnhvgfCIl2J2dBCaNY=