Skip to content

Instantly share code, notes, and snippets.

View steverob's full-sized avatar

Steve Robinson steverob

View GitHub Profile
@steverob
steverob / suppress.rb
Created May 1, 2016 04:15
ActiveRecord Suppress
module ActiveRecord
module Suppressor
extend ActiveSupport::Concern
module ClassMethods
def suppress(&block)
SuppressorRegistry.suppressed[name] = true
yield
ensure
SuppressorRegistry.suppressed[name] = false
@steverob
steverob / user.rb
Last active April 28, 2016 14:41
ActiveRecord Suppress - Part 1
class User < ActiveRecord::Base
# assocations omitted for simplicity
def follow user_to_follow
Relationship.create(follower: self, followed: user_to_follow)
end
end
class Relationship < ActiveRecord::Base
# assocations omitted for simplicity
@steverob
steverob / tracker.rb
Created April 27, 2016 18:46
Eventstream event tracking
track_viewer_event = lambda {|viewers_count|
AnalyticsAdapter.new.track event: 'viewer_entered',
data: { event_slug: viewer.event.slug,
event_id: viewer.event.id,
viewer: viewer.id,
viewer_uuid: viewer.uuid,
online_viewers: viewers_count },
ip_address: request.remote_ip,
user_agent: request.user_agent
}
@steverob
steverob / unicorn.rb
Created April 25, 2016 17:06
Trap USR2 & Print backtrace of all threads under the process
Signal.trap('USR2') do
pid = Process.pid
puts "[#{pid}] Received USR2 at #{Time.now}. Dumping threads:"
Thread.list.each do |t|
trace = t.backtrace.join("\n[#{pid}] ")
puts "[#{pid}] #{trace}"
puts "[#{pid}] ---"
end
puts "[#{pid}] -------------------"
end
@steverob
steverob / countdown.js
Created April 18, 2016 15:23
AngularJS + Moment.js Countdown
timer = null
duration = moment.duration '00:00'
startCountdown = (startTime) ->
duration = moment.duration startTime
oneSecond = moment.duration(1, 'seconds')
timer = $interval ->
duration.subtract oneSecond
resetCountdown() if duration.asSeconds() == 0
, 1000
@steverob
steverob / extract_env_vars_aws_eb.js
Created November 24, 2015 10:53
Export ENV vars of an AWS Elastic Beanstalk environment from the web console :)
$(".properties-table tr").each(function() {
console.log($(this).find('td').text().trim() + ": " + $(this).find('input').val())
});
@steverob
steverob / periscope-orientation.js
Created November 8, 2015 10:18
Periscope Orientation Metadata listening
throttledHandleVideoPlayerMetadata = Utils.throttle(function(e) {
function t(e, t) {
return parseFloat(e[t].replace(/\x03/, ""))
}
if (e.metadata.error && (Debugging.log("Player Metadata Error"), Debugging.log(e.metadata.type), Debugging.log(e.metadata.error), "manifestRefreshError" === e.metadata.type && Actions.endBroadcast()), e.metadata.TIT3) {
var i = t(e.metadata, "TIT3");
Actions.renderedNTP(i)
}
if (e.metadata.TKEY) {
var a = t(e.metadata, "TKEY");
@steverob
steverob / database_yml.config
Last active September 24, 2015 19:24 — forked from t2/sidekiq.config
Sidekiq on AWS ElasticBeanstalk
# Symlink the ondeck database.yml to database.yml.example
# .ebextensions/database_yml.config
files:
"/opt/elasticbeanstalk/hooks/appdeploy/pre/01a_symlink_database_yml.sh":
mode: "000777"
content: |
#!/bin/bash
cd /var/app/ondeck/config
ln -sf database.sample.yml database.yml
if Rubber::Util.has_asset_pipeline?
# load 'deploy/assets'
_cset :asset_env, "RAILS_GROUPS=assets"
_cset :assets_prefix, "assets"
_cset :assets_role, [:app]
_cset :normalize_asset_timestamps, false
before 'deploy:finalize_update', 'deploy:assets:symlink'