Skip to content

Instantly share code, notes, and snippets.

@ryandotsmith
ryandotsmith / trie.rb
Created April 12, 2010 20:04
ruby trie for interview
# Foraker, I wanted to give you a fresh code sample; not something that has been lying in my home dir.
# for a year.
# I was reading about tries the other day and decided to implement something in ruby. I built this code
# this morning and it has not gone through any refactorings.
# I want to showcase my ruby knowledge along with knowledge of data structures & algorithms.
@ryandotsmith
ryandotsmith / newton.rb
Created May 5, 2010 01:23
newton's method for computing sqrt
PRECISION = 0.0001
def newtonian_guess( guess,fx,fdx )
loop do
better_guess = guess - ( fx.call( guess ).to_f / fdx.call( guess ).to_f )
return better_guess if ((better_guess - guess).abs <= PRECISION)
guess = better_guess
end
end
@ryandotsmith
ryandotsmith / file.rb
Created July 2, 2010 16:19
prototype of a search engine i built for GS Enterprises
require 'extensions/all'
class String
def peel()
return nil if self.length.zero?
self.strip
end
end
class Seeker
attr_accessor :origin, :destination, :includes, :query
@ryandotsmith
ryandotsmith / sum_benchmark.rb
Created August 6, 2010 05:09
ruby #inject vs. #sum
data = (1..1_000).to_a
measure "sum" do
data.sum { |n| n }
end
measure "inject" do
data.inject(0) { |sum, element| sum + element}
end
@ryandotsmith
ryandotsmith / .screenrc
Created October 28, 2010 04:25
screenrc file
# copied from @solidsnack
nethack on
vbell on
defutf8 on
defscrollback 16384
backtick 1 1 1 date -u +%Y-%m-%dT%TZ
logtstamp on
(ns sicp
(:use clojure.test))
(defn square [num] (* num num))
(defn sum-of-squares [x y] (+ (square x) (square y)))
; assume x != y != z
(defn sum-of-larger-squares [x y z]
(cond
(and (< x y) (< x z));x is the smallest
(sum-of-squares y z)
@ryandotsmith
ryandotsmith / abba.js
Created November 23, 2010 05:50
simple palindrome function in JS
var palindrome = function(center){
var first = center.slice(0,1);
var last = center.slice(-1);
var mid = center.slice(1,-1);
if(mid == "") { print("true"); return;}
if(first == last) { palindrome(mid); }
else { print("false"); }
@ryandotsmith
ryandotsmith / lock_head.sql
Created April 2, 2011 06:17
lock_head with ctids
CREATE OR REPLACE FUNCTION lock_head() RETURNS SETOF jobs AS $$
DECLARE
unlocked integer;
job jobs%rowtype;
BEGIN
SELECT id INTO unlocked
FROM jobs
@ryandotsmith
ryandotsmith / out.sql
Created July 6, 2011 04:24
explain analyze on lock_head()
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------
Limit (cost=21.03..21.04 rows=1 width=10) (actual time=0.063..0.063 rows=1 loops=1)
-> LockRows (cost=21.03..21.11 rows=6 width=10) (actual time=0.062..0.062 rows=1 loops=1)
-> Sort (cost=21.03..21.05 rows=6 width=10) (actual time=0.046..0.046 rows=1 loops=1)
Sort Key: id
Sort Method: quicksort Memory: 25kB
-> Seq Scan on queue_classic_jobs (cost=0.00..21.00 rows=6 width=10) (actual time=0.035..0.036 rows=1 loops=1)
Filter: (locked_at IS NULL)
Total runtime: 0.105 ms
@ryandotsmith
ryandotsmith / memstat.rb
Created July 29, 2011 05:04
I am using this to profile my workers (queue_classic)
module Memstat
extend self
def puts
"memory=#{real_mem_size} ruby_objects=#{num_objects}"
end
def real_mem_size
mb = `ps -o rsz #{$$}`.split("\n")[1].to_f / 1024.0
mb = mb.round(-2) # nearest 100 (i.e. 60.round(-2) == 100)