Skip to content

Instantly share code, notes, and snippets.

View rcook's full-sized avatar

Richard Cook rcook

View GitHub Profile
cpp-traits-v2
cpp-traits-v2.exe
@rcook
rcook / main.cpp
Created July 7, 2014 16:03
C++ builder/named argument pattern with unique_ptr
#include <iostream>
#include <memory>
#include <vector>
// Backported from C++14
template<typename T, typename ...Args>
std::unique_ptr<T> make_unique(Args &&... args)
{
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}

Keybase proof

I hereby claim:

  • I am rcook on github.
  • I am rcook (https://keybase.io/rcook) on keybase.
  • I have a public key whose fingerprint is 94D7 D1B7 A37F E32B 0FA8 A803 FBD1 C693 7FBB E94E

To claim this, I am signing this object:

@rcook
rcook / After.java
Last active August 29, 2015 14:12
Visitor pattern (re)visited
import java.util.ArrayList;
import java.util.Iterator;
class EatingException extends Exception {
public EatingException() { }
}
interface FruitVisitor {
void visitApple(Apple apple) throws EatingException;
void visitOrange(Orange orange) throws EatingException;
@rcook
rcook / encrypted_attribute_helper.rb
Last active December 19, 2015 17:38
Enable multiparameter attribute form submission for encrypted fields in Ruby on Rails http://stackoverflow.com/questions/17482507/correct-way-to-handle-multiparameter-attributes-corresponding-to-virtual-attribu Simply drop this into config/initializers and use attr_encrypted_default instead of attr_encrypted. I'm working on an update to attr_enc…
if defined?(ActiveRecord::Base)
class ActiveRecord::Base
protected
class EncryptedAttributeClassWrapper
attr_reader :klass
def initialize(klass); @klass = klass; end
end
def self.encrypted_attribute_class_wrappers
@rcook
rcook / option_parser_test.rb
Created July 26, 2013 18:50
Illustrates some of the shortcomings of Ruby's OptionParser class: it doesn't support required arguments out of the box and the design of the code that invokes the code block on "on" and "on_tail" methods requires binding to a variable to save options value, when this is really something that would be better achieved by passing the object into t…
#!/usr/bin/env ruby
# See http://stackoverflow.com/questions/1541294/how-do-you-specify-a-required-switch-not-argument-with-ruby-optionparser
require 'optparse'
require 'ostruct'
require 'pathname'
THIS_PATH = Pathname.new(__FILE__).realpath
THIS_DIR = THIS_PATH.dirname
@rcook
rcook / active_record_test.rb
Last active December 29, 2015 12:19
Test case for Rails/Active Record bug 13044 (https://github.com/rails/rails/issues/13044) Note that this only reproduces using the "postgresql" database adapter. Prerequisites: local instance of PostgreSQL with database name "bug", user name "bug" and password "bug".
unless File.exist?('Gemfile')
File.write('Gemfile', <<-GEMFILE)
source 'https://rubygems.org'
gem 'rails', '=3.2.14'
gem 'pg'
GEMFILE
system 'bundle'
end
@rcook
rcook / lorem-ipsum.Phabricator.diff
Created December 2, 2013 18:27
Reproducer for invalid raw diff output in Phabricator
Index: lorem-ipsum.txt
===================================================================
--- lorem-ipsum.txt
+++ lorem-ipsum.txt
@@ -1,9 +1,13 @@
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed lobortis mattis odio eget iaculis. Curabitur in diam vehicula nisi tempus condimentum. Phasellus non dolor arcu. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus pharetra ipsum nec metus semper egestas. Vestibulum mattis aliquet justo non tincidunt. Etiam a bibendum augue. Nulla cursus, dolor sit amet luctus lobortis, eros mauris imperdiet quam, id vestibulum lacus nisl id ante. Fusce ut ipsum congue, condimentum sapien quis, sagittis nisi.
+FIRST NEW HUNK
+
Quisque tempor malesuada dapibus. Vivamus convallis semper nisi, sit amet mollis ipsum posuere id. Nam pulvinar elit non justo hendrerit, eu semper eros tempor. Nunc eu scelerisque tellus. Proin nec arcu at urna dapibus iaculis vel vel velit. Pellentesque ut nisi diam. Donec sit amet tortor ac ante sodales lobortis. Ut ornare iacu
@rcook
rcook / gist:ebee70c4d9ba1ccaae67400ce89bf978
Created June 5, 2016 01:47 — forked from NathanHowell/gist:5435345
Simple Warp server that can be gracefully shutdown over HTTP.
{-# LANGUAGE OverloadedStrings #-}
module Main (main) where
import Control.Concurrent (forkIO)
import Control.Concurrent.STM
import Control.Monad (when)
import Control.Monad.Trans (liftIO)
import Network.HTTP.Types
import Network.Wai as Wai