Skip to content

Instantly share code, notes, and snippets.

View BigglesZX's full-sized avatar

James Tiplady BigglesZX

View GitHub Profile
@BigglesZX
BigglesZX / gifextract.py
Created November 5, 2012 10:31
Extract frames from an animated GIF, correctly handling palettes and frame update modes
import os
from PIL import Image
'''
I searched high and low for solutions to the "extract animated GIF frames in Python"
problem, and after much trial and error came up with the following solution based
on several partial examples around the web (mostly Stack Overflow).
There are two pitfalls that aren't often mentioned when dealing with animated GIFs -
@BigglesZX
BigglesZX / jQuery.Adjacent.Wrapping.htm
Created December 19, 2010 17:17
Wrap two adjacent elements in a containing div using jQuery
This is a useful trick if you want to wrap two sibling elements in a containing element, for example to fix stupid float bugs in IE7. I had a bit of a time figuring out how to select the right elements (wrapping is easy enough with one element, or one element's children), so I thought I'd share for the Greater Good.
From markup like this:
<div class='form-container'>
...
<div class='form-label'>Name (required)</div>
<div class='form-field'><input type="text" name="you-name" value="" class="textbox" size="30" maxlength="200" /></div>
<div class='form-label'>Email (required)</div>
@BigglesZX
BigglesZX / Useful.Regexes.php
Created June 20, 2010 10:43
Some handy regular expressions (and attendant PHP code) that I've come across in my travels.
<?php
//
// some useful regular expressions and sample usage
//
// convert Twitter usernames into profile links
// cred. Simon Granade (http://bit.ly/FihuS)
$text = preg_replace('/(^|\s)@(\w+)/',
'\1@<a href="http://twitter.com/\2">\2</a>', $text;
@BigglesZX
BigglesZX / nginx.sh
Created December 15, 2020 11:19
Show 100 top URLs producing 404s in nginx access log
cat access.log | grep 404 | awk '{print $7}' | sort | uniq -c | sort -nr | head -n 100
@BigglesZX
BigglesZX / s3.iam.md
Last active December 9, 2020 17:43
Amazon S3 IAM User Notes

Setting up S3-bucket-specific IAM users for new sites

This provides a new site with a unique IAM access key/secret that allows read/write access to a single S3 bucket, e.g. to allow a Django site to upload media files. This assumes the bucket itself has already been created.

Note: I originally created this gist as a note-to-self so conventions shown here are particular to my setup; YMMV.

  1. Log in to the AWS Console and head to the IAM section
  2. Click Users to access the IAM user list
  3. Click Add User
  4. Enter username in the format of sitename-s3 (replacing sitename)
@BigglesZX
BigglesZX / django.s3.media.settings.py
Created March 5, 2012 13:58
Django settings for S3-based media files
'''
We use S3 as our media backend on Heroku, so set that up
'''
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = "YOUR_AWS_KEY"
AWS_SECRET_ACCESS_KEY = "YOUR_AWS_SECRET"
AWS_STORAGE_BUCKET_NAME = "YOUR_S3_BUCKET_NAME"
'''
Adjust media URL to point directly to S3
@BigglesZX
BigglesZX / node_modules_inventory.sh
Created October 30, 2018 10:49
Find and sort node_modules folders by size, to aid pruning
find . -type d -name "node_modules" -prune -exec du -sh {} \; | sort -nrk1
# find directories matching the name `node_modules`
# prune out unnecessary entries from within top-level `node_modules` results
# run `du` against the results to calculate size
# pipe to sort, first column as key, reverse natural
@BigglesZX
BigglesZX / Dreamhost.Python.installation.textile
Created January 14, 2012 10:49
Installing a custom version of Python on Dreamhost

Dreamhost supplies a fairly old version of Python in their shared hosting environments. It recently became necessary for me to use a newer version, and since this involved a bit of juggling, and since I’m also likely to forget how I did it, I thought I’d detail the steps here. These instructions should work with any Dreamhost shared hosting user, but follow them at your own risk.

The end result of this process is being able to run a current version of Python from your shared hosting user’s shell. It requires compiling, installing and running Python from your home directory rather than the system bin directories.

1. Create a helpful working directory
I chose to install all Python-related stuff in a python/ directory under my user’s home directory.

$ mkdir ~/python
$ cd ~/python
@BigglesZX
BigglesZX / localstorage-userdata-polyfill.js
Created December 5, 2013 11:10
HTML5 LocalStorage polyfill for IE7 using the userData behaviour
// if localStorage isn't available but IE's userData API is, polyfill it
// polyfill pattern based on https://gist.github.com/juliocesar/926500
if (Modernizr && !Modernizr.localstorage) {
// set up storage element
var storageNamespace = 'localStoragePolyfill',
storage = document.createElement('div');
if (typeof storage.addBehavior !== 'undefined') {
storage.id = '_storage';
storage.style.display = 'none';
storage.style.behavior = 'url("#default#userData")';
@BigglesZX
BigglesZX / wsgi.py
Created September 6, 2014 22:01
Default Django 1.7 wsgi.py file
"""
WSGI config for myproject project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/
"""
import os