Skip to content

Instantly share code, notes, and snippets.

View zerowidth's full-sized avatar

Nathan Witmer zerowidth

View GitHub Profile
@zerowidth
zerowidth / copy_rtf.vim
Created July 21, 2011 01:50
copy a vim buffer or selection as syntax-highlighted RTF to the clipboard
" copy the entire buffer or selected text as RTF
" inspired by https://github.com/dharanasoft/rtf-highlight
" but only uses commands available by default on OS X.
"
" To set html conversion options, :help TOhtml
" And, undocumented, to set the font used,
" let g:html_font="Your Preferred Font"
"
function! CopyRTF(line1,line2)
if !executable('textutil')
@zerowidth
zerowidth / example.rb
Created July 28, 2011 18:41
short circuiting and side effects
# as suggested by @mcmire, https://twitter.com/mcmire/status/96632723220869120
# and clarified in https://twitter.com/mcmire/status/96647536521129985
class Array
def thoroughly_all?(&block)
all_true = true
each {|obj| all_true &= yield(obj) }
all_true
end
# simple guardfile for vital testing workshop.
#
# $ gem install guard guard-rspec growl_notify
#
# put your code in lib/thing.rb
# and the specs in spec/thing_spec.rb
#
# then
#
# $ guard
@zerowidth
zerowidth / ar_pg_defaults.gemspec
Created October 4, 2011 16:11
Let postgres insert default values for columns with default values that AR 3.1 doesn't understand
Gem::Specification.new do |s|
s.name = "ar_pg_defaults"
s.version = "0.0.1"
s.platform = Gem::Platform::RUBY
s.author = "Nathan Witmer"
s.email = "[email protected]"
s.homepage = "https://gist.github.com/1262051"
s.summary = "Help AR let postgres do its thing"
s.description = "Let postgres insert default values for columns with default values that AR 3.1 doesn't understand"
@zerowidth
zerowidth / cleanup.sh
Created February 28, 2012 22:26
git cleanup script
#!/bin/bash
# inspired by https://gist.github.com/1564252
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
BLUE=$(tput setaf 4)
CYAN=$(tput setaf 6)
RESET=$(tput sgr 0)
function header() {
@zerowidth
zerowidth / rage.coffee
Created March 24, 2012 22:06
jointhecolorwar rage face
# npm install socket.io-client canvas
io = require "socket.io-client"
util = require "util"
fs = require "fs"
Canvas = require "canvas"
EventEmitter = require("events").EventEmitter
class Pixels extends EventEmitter
constructor: ->
@zerowidth
zerowidth / gist:2430323
Created April 20, 2012 17:06 — forked from marcel/gist:2100703
giftube – Generates an animated gif from a YouTube url.
#!/usr/bin/env ruby
# giftube – Generates an animated gif from a YouTube url.
#
# Usage:
#
# giftube [youtube url] [minute:second] [duration]
#
# ex.
#
@zerowidth
zerowidth / music.rb
Created May 7, 2012 21:37
A functional, lazily-evaluated solution to https://github.com/KeeperPat/music-yaml-parsing for a "coding challenged" competition
Proc.module_eval { def method_missing(m,*a); call(m.to_s,*a); end }
Array.module_eval { def rest; self[1..-1]; end }
Object.module_eval { def let; yield self; end }
Music = Module.new do
def self.load(filename)
depth = ->(l) { %r(^([\s-]*)\w).match(l)[1].length }
ldepth = ->(l) { %r(^(\s*)\S).match(l)[1].length }
nonzero = ->(n) { n > 0 }
empty = ->(c) { c.empty? }
(defn depth-of [line]
(count ((re-find #"^([\s-]*)" line) 1)))
(defn list-depth [line]
(count ((re-find #"^(\s*)" line) 1)))
(declare parse-list)
(defn parse-hash [lines]
(when-let [line (first lines)]
(let [depth (depth-of line)
children (take-while #(> (depth-of %) depth) (rest lines))
@zerowidth
zerowidth / a.rb
Created July 19, 2012 14:00
child socket port re-binding test
# only way to get the child process to re-bind is to set SO_REUSEPORT on both
# the parent socket and the child socket before binding.
require "socket"
puts "in parent"
server = TCPServer.new("127.0.0.1", 4000)
server.setsockopt(:SOCKET, :REUSEPORT, true)
puts server.inspect