Skip to content

Instantly share code, notes, and snippets.

View sorentwo's full-sized avatar
🏡

Parker Selbert sorentwo

🏡
View GitHub Profile
@sorentwo
sorentwo / README.md
Last active December 15, 2015 19:19
Schema dumping, loading and testing with Postgis 2.0 and Rails 3.x

If you need to use Postgis 2.0 with the Rails 3.x series and aren't willing to make the jump to activerecord-postgis-adapter then there are some configuration changes and a little monkeypatching that is necessary. This is my attempt at packaging the config and patches that you'll need for schema dumping, test prep and Travis support.

@sorentwo
sorentwo / json_cache_perf.rb
Last active December 19, 2015 17:48
Caching marshalled objects vs stringified JSON
require 'active_support/json'
require 'benchmark/ips'
require 'dalli'
client = Dalli::Client.new('localhost', namespace: 'json-bm', compress: true)
object = {
id: 1000,
published: false,
posts: [
@sorentwo
sorentwo / double_multi_block_results.txt
Created July 17, 2013 16:42
Dalli pipelining performance comparison
# Two separate multi blocks are used, the first leveraging `get_multi`
Calculating -------------------------------------
fetch 19 i/100ms
fetch_multi 78 i/100ms
-------------------------------------------------
fetch 192.2 (±2.1%) i/s - 969 in 5.044695s
fetch_multi 759.7 (±2.5%) i/s - 3822 in 5.034430s
@sorentwo
sorentwo / .env
Last active January 3, 2016 18:09
Reload environment variables within a running process
DATABASE_URL="postgres://username:password@host/database"
@sorentwo
sorentwo / slack.cap
Last active August 29, 2015 13:56
Slack deploy notification task (adapted from capistrano-slack)
require 'json'
namespace :slack do
def post_to_slack(payload)
slack_subdomain = fetch(:slack_subdomain)
slack_token = fetch(:slack_token)
uri = URI.parse("https://#{slack_subdomain}.slack.com/services/hooks/incoming-webhook?token=#{slack_token}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
@sorentwo
sorentwo / db_backup.sh
Created February 28, 2014 20:01
Micro pg_dump backup script
#!/usr/bin/env bash
backup_dir=/var/backups
database=dscout_production
mkdir -p "$backup_dir" || exit 1
filename="$database-$(date +%Y-%m-%d).dump"
echo "Backing up $database ..."
pg_dump -Fc -f "$backup_dir/$filename" $database
@sorentwo
sorentwo / remove_dup.sql
Created March 1, 2014 22:06
Duplicate Removal
DELETE FROM tablename WHERE id NOT IN (SELECT MAX(dup.id) FROM tablename AS dup GROUP BY dup.field1, dup.field2);
@sorentwo
sorentwo / perforated_performance.txt
Created March 7, 2014 03:51
Comparison of different perforated cache backends.
The first pass writes and the second pass reads.
10_000 Objects:
user system total real
memory-1 1.240000 0.010000 1.250000 ( 1.252629)
memory-2 0.110000 0.000000 0.110000 ( 0.114169)
redis-1 1.930000 0.230000 2.160000 ( 2.300067)
redis-2 0.210000 0.010000 0.220000 ( 0.222959)
dalli-1 1.470000 0.090000 1.560000 ( 1.574031)
@sorentwo
sorentwo / curr_prev_next.sql
Created March 7, 2014 22:08
CTE / Window query for efficient current, prev, next id row retrieval
WITH linked AS (
SELECT id,
lead(id) OVER(ORDER BY id DESC) AS next_id,
lag(id) OVER(ORDER BY id ASC) AS prev_id
FROM snippets
WHERE snippets.mission_id = $1
)
SELECT snippets.* FROM snippets, linked WHERE linked.id = $2 AND snippets.id = linked.next_id;
@sorentwo
sorentwo / cors_headers.rb
Created August 29, 2014 17:18
Micro CORS
class CORSHeaders
ACCESS_CONTROL_HEADERS = {
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'OPTIONS,GET,PATCH,PUT,POST,DELETE',
'Access-Control-Expose-Headers' => '',
'Access-Control-Max-Age' => '1728000',
'Content-Type' => 'text/plain'
}.freeze
def initialize(app)