Skip to content

Instantly share code, notes, and snippets.

@jamis
jamis / client.rb
Created Aug 26, 2008
Demonstration of how to use Net::SSH::BufferedIo independently of Net::SSH
View client.rb
require 'net/ssh/buffered_io'
require 'socket'
client = TCPSocket.new("localhost", 1234)
client.extend(Net::SSH::BufferedIo)
loop do
readers, writers = IO.select([client], [client], nil, 1)
next if readers.nil?
@jamis
jamis / http-proxy-server.rb
Created Feb 3, 2009
A trivial HTTP proxy server for testing and troubleshooting
View http-proxy-server.rb
# This is a trivial HTTP proxy server, intended for use as a troubleshooting tool
# ONLY (not for real, actual, production use). I wrote this because I couldn't find
# a simple HTTP proxy that I could use to test HTTP proxy support in Net::SSH.
#
# This code is in the public domain, so do with it what you will!
require 'socket'
port = ARGV.shift || 8080
address = ARGV.shift || "127.0.0.1"
@jamis
jamis / codes.rb
Created Feb 4, 2009
A basic substitution-cipher puzzle generator. Uses Prawn (0.5 or later) for PDF output. Sample output: http://www.jamisbuck.org/files/codes.pdf
View codes.rb
# Generates a series of substitution cipher puzzles. The messages to
# "encrypt" are take from a text file passed on the command-line,
# where each message is on one line.
#
# The output is a PDF, "codes.pdf".
#
# This was written for my 7 year-old, who loves doing substitution
# ciphers.
require 'prawn'
@jamis
jamis / bundle.rb
Created May 15, 2009
Creates a stand-alone ruby script that bundles all dependencies
View bundle.rb
#!/usr/bin/env ruby
# ------------------------------------------------------------------------
# bundle.rb
# author: Jamis Buck <jamis@37signals.com>
# usage: ruby bundle.rb <config.yml>
#
# Takes a configuration file in YAML format and writes a single ruby script
# that includes all the dependencies you specify. For example:
#
@jamis
jamis / gist:194394
Created Sep 26, 2009
A great recipe for a flavorful pear pie.
View gist:194394
AWESOME PEAR PIE
----------------
Ingredients:
Crust:
* Your favorite 9" double crust pastry recipe (I use the one in the Better
Homes and Gardens cook book)
@jamis
jamis / i18n.vim
Created Oct 29, 2009
Quickly look up Rails translation strings
View i18n.vim
" Lets you quickly find translation strings. Position your cursor over a translation
" key, type '<leader>rt' (whatever your leader character is configured to be, usually
" backslash, but I have mine set to comma) and the screen will split to show the
" corresponding translation string in config/locales/en.yml.
"
" Right now, this only supports en.yml, and does not search any other locations.
" Also, error handling is abysmal. :) But it does what I need. If you hack it up
" and make it better, let me know!
" MatchPatternAtCursor lifted (and renamed) from rails.vim, thanks tpope! :)
@jamis
jamis / Easy Marshmallow Recipe
Created Dec 10, 2009
Easy Gourmet Marshmallows
View Easy Marshmallow Recipe
EASY MARSHMALLOWS
-----------------
Marshmallows are perhaps one of the simplest confections you can make. They only
require a handful of ingredients, a batch can be thrown together in 10-15 minutes
(plus *cough* 3 hours for them to set), and you can flavor them however you like.
(You haven't LIVED until you've had coconut marshmallows!)
Hardware needed:
View 37id-login-form.html
<form action="https://launchpad.37signals.com/authenticate" method="post">
<input name="product" value="YOUR-PRODUCT" type="hidden" />
<input name="subdomain" value="YOUR-SUBDOMAIN" type="hidden" />
<p>Username<br />
<input name="username" id="username" type="text" /></p>
<p>Password<br />
<input name="password" id="password" type="password" /></p>
View fractal-arrays.rb
# The Fractal Geometry of Recursive Arrays
a = []
a << a << :b
p a
p a[0]
p a[0][0]
# ad infinitum...
@jamis
jamis / behaviors.js
Created Mar 2, 2010
Behavior-registration for UJS
View behaviors.js
// An Unobtrusive Javascript (UJS) driver based on explicit behavior definitions. Just
// put a "data-behaviors" attribute on your view elements, and then assign callbacks
// for those named behaviors via Behaviors.add.
var Behaviors = {
add: function(trigger, behavior, handler) {
document.observe(trigger, function(event) {
var element = event.findElement("*[data-behaviors~=" + behavior + "]");
if (element) handler(element, event);
});