Skip to content

Instantly share code, notes, and snippets.

View davidchambers's full-sized avatar

David Chambers davidchambers

View GitHub Profile
@davidchambers
davidchambers / hashify
Created October 13, 2011 06:29
Command line utility for publishing documents on hashify.me (and docco.hashify.me!)
#!/usr/bin/env ruby
# Publish documents on the internets!
# -----------------------------------
# Copyright (c) 2011, David Chambers.
# * * * * * * * * * * * * * * * * * *
require 'base64'
require 'net/http'
@davidchambers
davidchambers / to_hash.coffee
Created April 1, 2012 06:02
Dictionary comprehensions in CoffeeScript
to_hash = (pairs) ->
hash = {}
hash[key] = value for [key, value] in pairs
hash
# usage:
to_hash ([n, n * n] for n in [0..5]) # {0:0, 1:1, 2:4, 3:9, 4:16, 5:25}
escapeRegExpChars = (string) ->
# Copied from https://github.com/slevithan/XRegExp.
string.replace /[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'
deconstructRegExp = (regexp) ->
/// ^/(.+)[/]([gimy]*)$ ///.exec regexp
# Create a pattern like the one provided, but with a start of string
# anchor:
#
Action
------------------------------------
Release Publish Configure
Project name on GitHub on npm Travis CI
------------------------------------------------------------
airwaves (*) (*) (*)
an.hour.ago (*) (*) (*)
Base64.js (*) (*) (*)
CANON (*) (*) (*)
doctest (*) (*) ( )
@davidchambers
davidchambers / symlink
Created June 14, 2012 20:37
I get the arguments to `ln -s` round the wrong way at least half the time. This simple script makes this relatively common operation easy to get right.
@davidchambers
davidchambers / languages.coffee
Created July 1, 2012 20:58
Attach language codes to request object
(req, res) ->
# Attach language codes to request object.
h = req.headers['accept-language']
req.languages = h and (/[^\s;-]+/.exec(l)[0] for l in h.split ',') or []
@davidchambers
davidchambers / paths.coffee
Created September 18, 2012 03:33
Problem: Determine all the paths for a given node.
# Problem: Determine all the paths for a given node.
#
# A
# / \
# / \
# B C
# / \ \
# / \ \
# C D D
# \
@davidchambers
davidchambers / cli-tricks.md
Created October 2, 2012 00:23
Handy command-line combos

Apply a patch on the clipboard to the current Git/Hg repo:

pbpaste | patch -p1

Or, if the trailing "\n" is missing:

pbpaste | xargs -0 echo | patch -p1
@davidchambers
davidchambers / relative-timestamps.coffee
Created November 1, 2012 15:26
Relative timestamp formatting for jQuery.localize
{abs, floor, round} = Math
# > @localize = (timestamp) ->
# . $.localize.format (new Date timestamp), new Date "1 Mar 2012 00:30:45"
#
# > localize "30 Jan 2012 23:59:59"
# "2012-01-30"
# > localize "31 Jan 2012 00:00:00"
# "30 days ago"
# > localize "28 Feb 2012 23:59:59"
@davidchambers
davidchambers / stats
Created November 2, 2012 18:47
Visualize significant lines of code for a directory of source files
#!/usr/bin/env bash
echo
for filename in $(find $1); do
loc=$(sed /^\s*$/d $filename | wc -l)
printf %24s $(echo $filename | sed 's!.*/!!')
printf %8s $loc
echo -n ' '
indent=$(seq -s ' ' 36 | sed s/[0-9]//g)
seq -s '+' $loc | sed -e s/[0-9]//g -e "s/.\{100\}/&,$indent/g" | tr , '\n'