Skip to content

Instantly share code, notes, and snippets.

View sb8244's full-sized avatar

Stephen Bussey sb8244

View GitHub Profile
# Minimal example that demonstrates a memory leak in Celluloid.
# Adapted from @debrasetton example: https://github.com/mperham/sidekiq/issues/2107
# Adapted from @grosser example: https://github.com/mperham/sidekiq/blob/master/examples/leak.rb
# Run with LEAK=0 for no memory leak or LEAK=1 for memory leak, like so:
# LEAK=1 ruby ./leak.rb > /dev/null
require 'celluloid/autostart'
Celluloid.logger = nil
$counter = 0
$jobs = 5_000
@sb8244
sb8244 / gist:a44cfa7463c65e89612e
Created March 13, 2015 20:54
Ernie, play nice with Rails!
# Rails will cause the encoding to slip to ASCII-8BIT for some reason.
# This works fine when all rails libraries aren't loaded onto the ernie process
class Ernie
def self.write_berp(output, ruby)
data = BERT.encode(ruby)
output.write([data.length].pack("N").force_encoding("utf-8"))
output.write(data.force_encoding("utf-8"))
end
end
module AgentDispatch
class Loader
def self.run!
new.run!
end
def run!
future = master.future.run # It's a celluloid example here
while read_trap_io

This privacy policy governs your use of the software application Noisy Dog Log (“Application”) for mobile devices that was created by Stephen Bussey. The Application is a way to monitor loud noises around your device, namely dog barking.

What information does the Application obtain and how is it used?

User Provided Information

The Application obtains the information you provide when you download and register the Application. Registration with us is optional. However, please keep in mind that you may not be able to use some of the features offered by the Application unless you register with us.

When you register with us and use the Application, you generally provide (a) your name, email address, user name, password and other registration information; (b) transaction-related information, such as when you make purchases, respond to any offers, or download or use applications from us; (c) information you provide us when you contact us for help, and; (d) information you enter into our system when using th

@sb8244
sb8244 / gist:8126020
Created December 25, 2013 19:11
Doctrine sample mapper to provide common operations
//FILE GenericMapperInterface.php
<?php
interface GenericMapperInterface
{
public function find($id);
public function findAll();
public function save($entity);
public function remove($entity);
def solution(t)
traverse_height(t, 0)
end
def traverse_height(t, current_height)
return current_height - 1 if t.nil?
left_height = traverse_height(t.l, current_height+1)
right_height = traverse_height(t.r, current_height+1)
[left_height, right_height].max
# First sort the input using an nlogn method
# Then iterate over the array, finding the index of each value in the sorted array
# The index of the value in the sorted array is the inversion count, because all items to the left are less
# Sum those up
# Be sure to use the most efficient searching and not build in. (nlogn sort and logn search)
def solution(a)
return 0 if a.empty?
sorted = a.sort
inversions = a.each_with_index.map do |val, index|
@sb8244
sb8244 / gist:78ba4e736f72aecc2717f6ac5b2c2d2d
Created February 2, 2018 19:18
Distillery migrations

Distillery migrations

  1. Add migration command in rel/config.exs [1]
  2. Create rel/commands/migrate.sh script [2]
  3. Create lib/release/tasks.ex with contents of [3]
  4. Add priv/repo/migrations to your docker context [4]
  5. Now you can run the migrate command as a custom command from your Distillery output, this is just like running console or foreground. It will appear in help of your release
@sb8244
sb8244 / exometer.exs
Created February 7, 2018 22:26
My exometer.exs standard installation
# mix.exs deps
# start exometer; force "correct" modules due to elixometer not compiling properly
{:elixometer, "~> 1.2"},
{:lager, ">= 3.2.1", override: true},
{:exometer, github: "Feuerlabs/exometer"},
{:exometer_core, "~>1.4.0", override: true},
{:amqp_client, git: "https://github.com/dsrosario/amqp_client.git", branch: "erlang_otp_19", override: true},
# end exometer
@sb8244
sb8244 / feed_item_flow.ex
Created May 7, 2018 16:33
Anonymized producer/consumer for triggering events from a controller
defmodule FeedItemProducer do
use GenStage
def start_link(:nameless) do
GenStage.start_link(__MODULE__, :ok)
end
def start_link() do
GenStage.start_link(__MODULE__, :ok, name: __MODULE__)
end