Skip to content

Instantly share code, notes, and snippets.

View rbishop's full-sized avatar

Richard Bishop rbishop

View GitHub Profile
@rbishop
rbishop / gist:10986218
Created April 17, 2014 14:07
OpenSSH iptables for Arch
iptables -A OUTPUT -t mangle -p tcp --dport 22 -j TOS --set-tos 0x00
@rbishop
rbishop / rainforest.rb
Created June 10, 2014 20:41
rainforest
require 'httparty'
fetch = -> (url) {
HTTParty.get(url, headers: { "Accept" => "application/json"})
}
response = fetch.("http://letsrevolutionizetesting.com/challenge.json")
begin
next_url = response["follow"]
@rbishop
rbishop / unique_pairs.ex
Last active August 29, 2015 14:02
Find all the unique pairs of numbers that add to 100 in a list
defmodule UniquePairs do
def hundreds(numbers) do
numbers
|> combinations
|> is_hundred
|> sort_pairs
|> Enum.uniq
end
@rbishop
rbishop / private.rb
Created July 15, 2014 18:57
Inheritance and private vs protected
class Parent
def initialize(name)
@name = name
end
private
attr_accessor :name
end
@rbishop
rbishop / austin_beer
Last active August 29, 2015 14:04
Craft breweries and beers to order in Austin
- Jester King
- Black Metal Farmhouse Imperial Stout
- Whatever Farmhouse and Wild Ales they have out
- Anything else you see from them, apparently
- Austin Beerworks
- Fire Eagle IPA
- Heavy Machinery Double IPA
- Peacemaker Pale Ale
- Blackthunder Schwarzbier
@rbishop
rbishop / centinel.rb
Last active August 29, 2015 14:04
Cardinal Centinel Gateway Example
credit_card = ActiveMerchant::Billing::CreditCard.new(cc_number, cc_info_hash)
gateway = ActiveMerchant::Billing::CardinalCentinelGateway.new(
ProcessorId: '123',
MerchantId: '456',
TransactionPwd: 'p4ssw0rd'
)
lookup_response = gateway.authorize(amount, credit_card)
if lookup_response.enrolled?
@rbishop
rbishop / ecto.ex
Last active August 29, 2015 14:06
Based on an unknown list size, I want to create an inner join and where clause for each item in the list. I don't know how to dynamically change the binding in the where, though.
def by_path(ancestry) do
Enum.reduce(ancestry, App.Node, fn (ancestor, query) ->
query
|> join(:inner, [n], n1 in App.Node, n1.id == n.parent_id)
|> where([n], n.key == ^ancestor) # This is where I'm stuck, all the where's are n0."key", see line 14
end)
end
# Here is the resulting SQL:
SELECT n0."id", n0."key", n0."project_id", n0."type", n0."parent_id"
@rbishop
rbishop / flatten.ex
Created June 5, 2015 13:18
TCO and append-less List.flatten
defmodule ListOp do
def flatten([head | tail]), do: flatten(tail, [head])
def flatten([], acc), do: Enum.reverse(acc)
def flatten([ [head | []] | tail], acc), do: flatten(tail, [head | acc])
def flatten([ [head | rest] | tail], acc), do: flatten(flatten([rest | tail], [head | acc]))
def flatten([head | tail], acc), do: flatten(tail, [head | acc])
end
@rbishop
rbishop / after.ex
Created August 18, 2015 15:06
Replacing imperative if/else with lazy, infinite Stream. I had to remove some of the specifics for security purposes but hopefully this shows the general idea.
def loop(model, models) do
task_sup = Process.whereis(:worker_supervisor)
Stream.resource(
fn -> {model, 0} end,
&func_that_gets_data/1,
fn(_) -> :ok end
)
|> Stream.chunk(20)
|> Stream.map(fn(ids) -> Task.Supervisor.async(task_sup, Worker, :sanitize, [model, ids]) end)
@rbishop
rbishop / count_between.rb
Last active December 10, 2015 18:08
Exercise: Count the numbers in an array between a given range Write a method count_between which takes three arguments as input: 1. An Array of integers 2. An integer lower bound 3. An integer upper bound count_between should return the number of integers in the Array between the two bounds, including the bounds It should return 0 if the Array i…
def count_between arr, lower, upper
return 0 if arr.length == 0 || lower > upper
return arr.length if lower == upper
range = (lower..upper).to_a
arr.select { |value| range.include?(value) }.length
end