Skip to content

Instantly share code, notes, and snippets.

J. Whiteman jwhiteman

Block or report user

Report or block jwhiteman

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@jwhiteman
jwhiteman / di.rb
Created Dec 3, 2017
Dumb DI container
View di.rb
class DIContainer
def configure
yield self
end
def method_missing(key, val)
if key =~ /=$/
key = key.to_s.chop
(class << self; self; end).class_eval do
attr_accessor key
@jwhiteman
jwhiteman / condvar_broadcast.rb
Created Mar 18, 2017
ruby condition variable and broadcast
View condvar_broadcast.rb
m = Mutex.new
c = ConditionVariable.new
tg = ThreadGroup.new
t = 5.times.map do |n|
tg.add(Thread.new do
print "starting #{n}\n"
m.synchronize do
@jwhiteman
jwhiteman / renting_zero.rb
Last active Mar 14, 2017
quick connection pool example
View renting_zero.rb
require "thread"
require "connection_pool"
require "pp"
NUM_CLIENTS = 9
MAX_AT_A_TIME = 3
TIMEOUT = 10
JOB_TIME = 3
# we'll let people lease access to zero
@jwhiteman
jwhiteman / s3.rb
Created Jan 30, 2017
Basic Aws::S3::Client usage
View s3.rb
=begin
{
"AccessKey": {
"UserName": "s3.deploy.foo",
"Status": "Active",
"CreateDate": "2016-11-04T16:25:27.123Z",
"SecretAccessKey": "secret",
"AccessKeyId": "access"
}
}
@jwhiteman
jwhiteman / dfa.exs
Created Jan 27, 2017
basic DFA simulation
View dfa.exs
defmodule DFA do
def accepts?(accept: accept_states, rules: rules, s: string) do
string
|> String.graphemes
|> List.foldl(1, fn(char, state) -> next(state: state, char: char, rules: rules) end)
|> member?(accept_states)
end
defp next(state: nil, char: _char, rules: _rules) do
nil
@jwhiteman
jwhiteman / client.rb
Last active Jan 7, 2017
UDP in Ruby - packing socket manually
View client.rb
# or `echo some-request | nc localhost 8181 -4u `
MAX_READ = 1024 * 8
FLAGS = 0
c = Socket.new :INET, :DGRAM
s = Socket.pack_sockaddr_in 8181, "127.0.0.1"
c.send("some-request", FLAGS, s)
res = c.recv(MAX_READ)
@jwhiteman
jwhiteman / strace.sh
Created Dec 30, 2016
sort strace output
View strace.sh
strace cmd 2> /dev/stdout | cut -d '(' -f 1 | sort | uniq | grep -v "[+=]" | sort -rn -k1,1
View join.rb
# A reminder that join conceptually combines the stacks of the parent and child threads.
# If you consider that the stack grows downard, the child stack will sit below the parent
# stack. See output below.
def main?
Thread.current == Thread.main
end
def name
if main?
"main"
@jwhiteman
jwhiteman / pipe.rb
Created Nov 18, 2016
Simple pipeline using Threads and Queues
View pipe.rb
require "thread"
stage_one = Queue.new
stage_two = Queue.new
stage_three = Queue.new
stage_one_worker = Thread.new do
100.times do |n|
stage_one << n
@jwhiteman
jwhiteman / binary_tree.exs
Created Jan 22, 2016
invert a binary tree in Elixir
View binary_tree.exs
# http://is.gd/NzZxYT
defmodule BinaryTree do
def invert([n, list]) when is_integer(n) and is_list(list) do
[n, invert(list)]
end
def invert([n, nc, m, mc])
when is_integer(n) and is_integer(m)
and is_list(nc) and is_list(mc) do
You can’t perform that action at this time.