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 / 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;
@seejohnrun
seejohnrun / 9_to_5.rb
Created May 24, 2011 20:36
ice_cube 9-5
s = IceCube::Schedule.new(Time.now, :duration => 3600 * 7)
s.add_recurrence_rule IceCube::Rule.daily.day(:monday, :tuesday, :wednesday, :thursday, :friday).hour_of_day(9)
s.occurring_at?(Time.new(2011, 5, 30, 10, 0, 0)) # true, monday at 10am
s.occurring_at?(Time.new(2011, 5, 29, 10, 0, 0)) # false, sunday at 10am
s.occurring_at?(Time.new(2011, 5, 30, 8, 0, 0)) # false, monday at 8am
@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 / array_partition.php
Created March 13, 2013 15:57
This should really just be part of PHP
<?php
// implementation
function array_partition($arr, $callable) {
$r = array(array(), array());
foreach ($arr as $e) {
$r[$callable($e) ? 0 : 1][] = $e;
}
return $r;
@seejohnrun
seejohnrun / at_once.rb
Created November 14, 2012 00:29
Enumeration functions that run async (would people want to see this in a library?)
module AtOnce
extend self
def map(objects, &block)
results = Array.new(objects.count)
threads = objects.map.with_index do |object, idx|
Thread.new do
results[idx] = block.call(object)
end