Skip to content

Instantly share code, notes, and snippets.

View davidwtbuxton's full-sized avatar

David Buxton davidwtbuxton

View GitHub Profile
@davidwtbuxton
davidwtbuxton / views.py
Created March 31, 2016 06:47
Serving Google Cloud Storage files from App Engine without having to read them
import mimetypes
from django.http import HttpResponse
from google.appengine.api import app_identity
from google.appengine.ext import blobstore
def serve_cloud_storage_file(request, object_name):
"""Serve a file from cloud storage by setting a header on the response.
The blobstore will serve it for you.
@davidwtbuxton
davidwtbuxton / angular.md
Created July 12, 2016 15:23
For future reference

If you want to make us angry you can do

<ng-class="{'ng-hidden': condition}">

instead of ng-hidden="condition"

or even better

@davidwtbuxton
davidwtbuxton / gist:ca843407f025e1b5b4585aa415885321
Last active October 12, 2016 18:22
Benchmarks for bencodepy.encode and buxtor.bencode.
# Speed comparison of bencodepy and buxtor.bencode
# bencodepy is consistently 0.3 - 0.5 seconds faster. Why?
# bencodepy: https://github.com/eweast/BencodePy/blob/master/bencodepy/encode.py
# 4914005 function calls (3618005 primitive calls) in 2.830 seconds
#
#
# buxtor.bencode: https://github.com/davidwtbuxton/buxtor/blob/master/buxtor/bencode.py
# 5592005 function calls (4548005 primitive calls) in 3.183 seconds
#!/usr/bin/env python2
import csv
import hashlib
import sys
# Calculate an MD5 checksum for every row in the first column of a CSV.
# Example:
# $ python digests.py < src.csv > dest.csv
@davidwtbuxton
davidwtbuxton / grouper.py
Last active August 10, 2017 23:27
Like itertools.grouper but the last group doesn't have padding
import itertools
def grouper(iterable, n):
"""Collect data into chunks.
This is different to the grouper recipe in itertools in that the final
chunk may be shorter.
>>> grouper('ABCDEF', 3)
@davidwtbuxton
davidwtbuxton / gist:d27c6d8f58e400ddac5e81974c39b0b5
Created November 9, 2017 16:46
Test output for djangae branch 958-computed-field-pagination
(djangae) $ git show
commit 0523c70eba0f7bc7b36933fbbf002e4611086720 (HEAD -> 958-computed-field-pagination, upstream/958-computed-field-pagination)
Merge: 010a6cd1 b96d2284
Author: Phil Tysoe <[email protected]>
Date: Thu Nov 9 16:05:51 2017 +0000
Merge branch 'master' into 958-computed-field-pagination
diff --cc CHANGELOG.md
index 4d961159,cb652b0c..0d7ae63e
@davidwtbuxton
davidwtbuxton / gist:5eb20ae04c33012b2452b4d225952888
Created November 9, 2017 17:33
More test output for 958-computed-field-pagination
(djangae) $ git log HEAD~1..
commit 74bee22fc276276af6dc82db9dc6b933a0d2e6b0 (HEAD -> 958-computed-field-pagination, upstream/958-computed-field-pagination)
Author: Phil Tysoe
Date: Thu Nov 9 17:11:29 2017 +0000
Fix 16 bit max signed int value
(djangae) $ ./runtests.sh
Not running install_deps. Pass --install_deps if you want to install dependencies.
Creating test database for alias 'default'...
@davidwtbuxton
davidwtbuxton / example.py
Created December 5, 2017 19:48
python 2 string formatting fun
$ python2.7
Python 2.7.14 (default, Sep 22 2017, 00:06:07)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> value = u'\u0141uk\u0105\u015b\u017a'
>>> '%s' % value
u'\u0141uk\u0105\u015b\u017a'
>>> '{}'.format(value)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
@davidwtbuxton
davidwtbuxton / memory_vs_disk.py
Last active December 7, 2017 19:50
Seeing how reading an image file from disk compares to constructing it in memory
import io
import os
import tempfile
import timeit
# A valid PNG file.
png_bytes = (
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08'
'\x06\x00\x00\x00\x1f\x15\xc4\x89\x00\x00\x00\nIDATx\x9cc\x00\x01\x00\x00'
@davidwtbuxton
davidwtbuxton / gist:9af0250ce66ccb64eee4214ab4ab070e
Last active December 14, 2017 18:50
Profiling different ways for testing if there's an empty string value
$ python -m timeit -s "a, b, c, d, e, f = 'abcdef'" "any(v for v in (a, b, c, d, e, f) if v == '')"
1000000 loops, best of 3: 1.51 usec per loop
$ python -m timeit -s "a, b, c, d, e, f = 'abcdef'" "'' in (a, b, c, d, e, f)"
1000000 loops, best of 3: 0.36 usec per loop
$ python -m timeit -s "a, b, c, d, e, f = ' bcdef'" "any(v for v in (a, b, c, d, e, f) if v == '')"
1000000 loops, best of 3: 1.52 usec per loop
$ python -m timeit -s "a, b, c, d, e, f = ' bcdef'" "'' in (a, b, c, d, e, f)"
1000000 loops, best of 3: 0.354 usec per loop
$ python -m timeit -s "a, b, c, d, e, f = 'abcde '" "any(v for v in (a, b, c, d, e, f) if v == '')"
1000000 loops, best of 3: 1.49 usec per loop