Skip to content

Instantly share code, notes, and snippets.

View jhurliman's full-sized avatar
🐨

John Hurliman jhurliman

🐨
View GitHub Profile
@jhurliman
jhurliman / .prompt
Created October 12, 2015 17:16
Bash prompt with git support
# source /usr/local/etc/bash_completion.d/git-prompt.sh
PROMPT_COMMAND=__generate_prompt
__generate_prompt() {
# Undocumented function that updates OS X Terminal\'s knowledge of
# the current
# working directory. Required for Cmd + T to open a new tab in the same
# directory.
#
# See '/etc/bashrc' on an OS X box for details.
@jhurliman
jhurliman / crosswalk2014-excerpt.tsv
Created September 21, 2015 16:31
crosswalk2014-excerpt.tsv
00100300 Faulkner University Faulkner University Yes [YCY] 101189
00100301 Faulkner University Faulkner University - Birmingham Center Yes [YCY] 101189
00100303 Faulkner University Faulkner University - Huntsville Center Yes [YCY] 101189
00100304 Faulkner University Faulkner University - Mobile Center Yes [YCY] 101189
00100305 Faulkner University Faulkner University - No [NNN] 101189
00100306 Faulkner University Faulkner University - No [NNN] 101189
00100307 Faulkner University Faulkner University - No [NNN] 101189
00100308 Faulkner University Faulkner University - No [NNN] 101189
00100309 Faulkner University Faulkner University - No [NNN] 101189
00100310 Faulkner University Faulkner University - No [NNN] 101189
@jhurliman
jhurliman / returnError.js
Created September 14, 2015 01:26
Difference between "return new Error()" and "throw new Error" in bluebird
var P = require('bluebird');
P.resolve().then(function () {
// Change this to throw new Error to get the expected behavior
if (true) return new Error('Returned error');
return { key: { subKey: 'test' } };
}).then(function (obj) {
// This will crash if return new Error is used since the Error is not caught by bluebird
console.log('obj.key.subKey = %s', obj.key.subKey);
}).catch(function (err) {
@jhurliman
jhurliman / getopts.sh
Created August 25, 2015 22:44
Parse command line options in pure bash
# Parse command line arguments
while [[ $# > 1 ]]; do
local key="$1"
case $key in
-g|--github-token)
GITHUB_TOKEN="$2"
shift
;;
# Catch-all
*)
@jhurliman
jhurliman / keybase.md
Created July 31, 2015 20:52
keybase.md

Keybase proof

I hereby claim:

  • I am jhurliman on github.
  • I am jhurliman (https://keybase.io/jhurliman) on keybase.
  • I have a public key whose fingerprint is 69B3 1804 7775 BCB5 89D8 6114 53FB 287A E5DD 51C1

To claim this, I am signing this object:

@jhurliman
jhurliman / Async.swift
Created July 24, 2015 08:00
Async.swift
import Foundation
typealias Callback = () -> ()
typealias DoneCallback = (error: NSError?) -> ()
typealias ItemCallback = (i: Int, done: DoneCallback) -> ()
func each(range: Range<Int>, exec: ItemCallback, done: DoneCallback) {
var pending = 0
for i in range {
@jhurliman
jhurliman / UIColor+Lerp.m
Created April 18, 2015 06:12
UIColor Linear Interpolation (lerp)
+ (UIColor *)colorLerpFrom:(UIColor *)start to:(UIColor *)end withProgress:(CGFloat)t
{
// TODO: Interpolate in HSB space instead of RGB
t = MAX(0, MIN(1, t));
CGFloat redA, greenA, blueA, alphaA;
[start getRed:&redA green:&greenA blue:&blueA alpha:&alphaA];
CGFloat redB, greenB, blueB, alphaB;
[end getRed:&redB green:&greenB blue:&blueB alpha:&alphaB];
@jhurliman
jhurliman / isValidEmail.m
Created March 16, 2015 20:59
Email Validation in Objective-C
+ (BOOL)isValidEmail:(NSString *)str
{
NSString *emailRegex = @"[A-Z0-9a-z\\._%+-]+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTest evaluateWithObject:str];
}
@jhurliman
jhurliman / isIPhone6OrNewer.m
Created February 7, 2015 01:16
isIPhone6OrNewer.m
#include <sys/utsname.h>
+ (BOOL)isIPhone6OrNewer
{
static int major = -1;
if (major == -1) {
struct utsname unameData;
if (0 != uname(&unameData)) {
major = 0;
@jhurliman
jhurliman / firebaseID.js
Created January 5, 2015 22:33
Generate Firebase IDs using the same approach as Firebase.push()
var ALPHABET = '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz';
function generateFirebaseID() {
var timestamp = +new Date();
var chars = Array(20);
for (var i = 7; 0 <= i; i--) {
chars[i] = ALPHABET.charAt(timestamp % 64);
timestamp = Math.floor(timestamp / 64);
}