Skip to content

Instantly share code, notes, and snippets.

View seejohnrun's full-sized avatar
🤗
Writing codes

John Crepezzi seejohnrun

🤗
Writing codes
View GitHub Profile
@seejohnrun
seejohnrun / variants.rb
Last active February 10, 2023 03:23
A pattern for Variants in Ruby
require 'set'
require 'rspec'
### An example of how to implement a variant pattern in Ruby
class Variant
InvalidLabel = Class.new(StandardError)
UnhandledMatchCase = Class.new(StandardError)
UnnecessaryDefaultCase = Class.new(StandardError)
ExtraMatchCase = Class.new(StandardError)
@seejohnrun
seejohnrun / map_count.rb
Created November 7, 2014 18:38
Do want
module Enumerable
def map_count
Hash.new(0).tap { |h| each { |e| h[yield e] += 1 } }
end
end
puts [1, 2, 3, 4, 5].map_count(&:odd?) # {true=>3, false=>2}
@seejohnrun
seejohnrun / tap_try.rb
Last active August 29, 2015 14:05
tap_try should exist
# Mark NoMethodError(s) coming from a call on `nil`
class NilClass
def method_missing(*)
super
rescue NoMethodError => e
e.instance_variable_set :@real_nil, true
raise e
end
end
@seejohnrun
seejohnrun / example.rb
Last active August 29, 2015 14:05
satirical ruby
class String
def |(other)
other.call(*self)
end
def >(other)
File.write(other, *self)
0
end
end
@seejohnrun
seejohnrun / generate.js
Created December 17, 2013 21:37
Manipulate http://make8bitart.com/ using phantomjs (and a few canvas workarounds) to let the computer be the artist this example generates: http://i.minus.com/jccK6EuB7LRdl.png
var url = 'https://lh6.googleusercontent.com/-NQAMokukfdE/AAAAAAAAAAI/AAAAAAAAAAA/zSaLZajdgEI/s48-c-k-no/photo.jpg';
var xoffset = 240;
var yoffset = 210;
var pixelSize = 7;
var viewportWidth = 800;
var viewportHeight = 670;
//
// And away we go
//
@seejohnrun
seejohnrun / globber
Created June 21, 2013 19:01
I can never remember the args to find & xargs And a lot of times, I want something a billion % simpler
#!/usr/bin/env ruby
raise 'usage: globber \'views/**/*.php\' \'echo {}\'' unless ARGV.length == 2
Dir.glob(ARGV[0]).each { |f| system(ARGV[1].gsub('{}', f)) }
@seejohnrun
seejohnrun / simpleSequence.js
Created June 5, 2013 20:02
A quick runner for doing operations (either synchronous or asynchronous), in series
// A quick runner for doing operations (either synchronous or asynchronous),
// in series
var simpleSequence = function (sequenceCallback) {
// Collect the operations
var operations = [];
sequenceCallback(function (operation) {
operations.push(operation);
});
// Do the operations
(function perform() {
@seejohnrun
seejohnrun / timebomb.js
Last active December 17, 2015 23:09
Tick tick tick...
// Grab a timebomb copy of a function that will expire in a certain time
// period - raising errors when called outside of that window
var timebomb = function (toCall, expireIn) {
// Expire the function call in expireIn ms
setTimeout(function () {
toCall = undefined;
}, expireIn);
// Return a wrapper function that will clear the timeout, and
@seejohnrun
seejohnrun / drawer.js
Created May 15, 2013 04:37
Move around a fixed panel
(function($){
/*
* This is a jQuery extension to make it so that when you drag
* a fixed-position div's handle, you can resize the div.
*
* options.handleSelector (default='.handle') - how to find the handle
* options.direction (default='up') - the expansion direction
* options.min (default=0) - the min height (or width)
* options.max (default=clientHeight) - the max height (or width)
@seejohnrun
seejohnrun / random_k.js
Last active October 9, 2018 22:40
Select (n) random elements from a weighted set randomly
// ported from:
http://stackoverflow.com/questions/2140787/select-random-k-elements-from-a-list-whose-elements-have-weights
// each node in the heap has a value, weight, and totalWeight
// the totalWeight is the weight of the node plus any children
var Node = {};
var newNode = function (value, weight, totalWeight) {
var node = Object.create(Node);
node.value = value;
node.weight = weight;