Skip to content

Instantly share code, notes, and snippets.

Benjamin Fleischer bf4

Block or report user

Report or block bf4

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@bf4
bf4 / bash_trap_template.sh
Created Nov 1, 2016 — forked from sechiro/bash_trap_template.sh
Bash signal trap template. Bashでよく使うシグナルトラップのテンプレート。
View bash_trap_template.sh
#!/bin/bash
set -u # Check unset variables only
#set -ue # Check unset variables. Exit on error
LANG=C
# Trap signals
trap_HUP() {
echo "Trap HUP signal."
exit 1
}
@bf4
bf4 / everytimezone.coffee
Created Oct 31, 2016 — forked from madrobby/everytimezone.coffee
First conversion of http://everytimezone.com/ JavaScript code to CoffeeScript
View everytimezone.coffee
# Two things are important to note:
#
# 1) The code is fugly, because it was a JavaScript/iPad experiment.
# I know that it is ugly, so pretty please don't comment on that part.
# 2) I tried to use as many CoffeeScript features as possible,
# including but not limited to list comprehensions,
# heredocs, destructuring assignment and also the "do" operator
#
# I welcome comments about stuff that is not CoffeeScripty enough, or what I should
# write differently.
@bf4
bf4 / post.md
Created Sep 7, 2016 — forked from fxn/post.md
GeoPlanet data with ancestor chain cache imported in 10 minutes
View post.md

GeoPlanet data with ancestor chain cache imported in 10 minutes

Yahoo! provides its GeoPlanet data as three separate TSV files, available for download here.

That's a database with some 17 million records:

  • 5.7 million records: locations (aka places).
  • 2.2 million records: alternative names for each place (aka aliases).
  • 9.6 million records: matrix of neighbourhoods per place (aka adjacencies).
@bf4
bf4 / registrations_controller.rb
Created Jul 13, 2016 — forked from jwo/registrations_controller.rb
API JSON authentication with Devise
View registrations_controller.rb
class Api::RegistrationsController < Api::BaseController
respond_to :json
def create
user = User.new(params[:user])
if user.save
render :json=> user.as_json(:auth_token=>user.authentication_token, :email=>user.email), :status=>201
return
else
@bf4
bf4 / spec_features_samplefeature.rb
Created Jul 6, 2016 — forked from andreypronin/spec_features_samplefeature.rb
A little spec library I use to test session/persistent cookies behavior in Rails apps with Capybara. Plus, example on how I use it. Implemented for Rack::Test and Poltergeist (PhantomJS) drivers only, as these are my default test preferences.
View spec_features_samplefeature.rb
require 'spec_helper'
feature "Login" do
scenario "remembered user" do
password = "12345678"
user = create(:user, password: password)
access_protected_page_should_ask_to_login
current_path.should eq login_path
@bf4
bf4 / summary.md
Created Jun 16, 2016 — forked from steveklabnik/summary.md
my summary of "using Rust with Ruby: a deep dive with Yehuda Katz"
View summary.md

My summary of https://www.youtube.com/watch?v=IqrwPVtSHZI

TL;DR:

Rails has a library, ActiveSupport, which adds methods to Ruby core classes. One of those methods is String#blank?, which returns a boolean (sometimes I miss this convention in Rust, the ?) if the whole string is whitespace or not. It looks like this: https://github.com/rails/rails/blob/b3eac823006eb6a346f88793aabef28a6d4f928c/activesupport/lib/active_support/core_ext/object/blank.rb#L99-L117

It's pretty slow. So Discourse (which you may know from {users,internals}.rust-lang.org) uses the fast_blank gem, which provides this method via a C implementation instead. It looks like this: https://github.com/SamSaffron/fast_blank/blob/master/ext/fast_blank/fast_blank.c

For fun, Yehuda tried to re-write fast_blank in Rust. Which looks like this:

@bf4
bf4 / bm_throw_raise.rb
Created Jun 14, 2016
Ruby raise/rescue vs. throw/catch. tl;dr throw/catch is much faster
View bm_throw_raise.rb
require 'benchmark/ips'
Benchmark.ips do |x|
x.report(:raise_rescue) do
begin
raise ArgumentError
rescue ArgumentError
end
end
@bf4
bf4 / fix_n_plus_one_queries_on_accepts_nested_attributes.rb
Created Jun 10, 2016
Rails 4.2.6 patch for autosave and accepts_nested_attributes_for from issuing N+1 queries on each eager loaded association
View fix_n_plus_one_queries_on_accepts_nested_attributes.rb
# We noticed that adding `accepts_nested_attributes_for :comments, allow_destroy: true`
# caused extra queries to be run when serializing comments in a post
# and including the post name in each comment resource object (this is JSON API, names changed):
#
# blog_id = params.permit(:id)[:id]
# Blog = Blog.where(id: blog_id).includes(posts: [:comments]).first
# comments = blog.posts.flat_map(&:comments)
# comment_fields = {comments: [:id, :title, :body, :post], posts: [:name]}
# comment_includes = [:post]
#
View rails_rendering_stack.txt
#<Class:ActionController::Parameters>#always_permitted_parameters=:126 ([[:req, :obj]])
ActionDispatch::Http::ParameterFilter#initialize:6 ([[:opt, :filters]])
ActionDispatch::Http::ParameterFilter#initialize:6 ([[:opt, :filters]])
ActiveSupport::Callbacks::ClassMethods#normalize_callback_params:594 ([[:req, :filters], [:req, :block]])
ActiveSupport::Callbacks::ClassMethods#normalize_callback_params:594 ([[:req, :filters], [:req, :block]])
ActiveSupport::Callbacks::ClassMethods#normalize_callback_params:594 ([[:req, :filters], [:req, :block]])
#<Class:ActiveModelSerializers::SerializableResource>#_render_callbacks=:83 ([[:req, :val]])
ActiveModelSerializers::Logging::ClassMethods#instrument_rendering:18 ([])
ActiveModelSerializers::Callbacks::ClassMethods#around_render:50 ([[:rest, :filters], [:block, :blk]])
ActiveSupport::Callbacks::ClassMethods#normalize_callback_params:594 ([[:req, :filters], [:req, :block]])
@bf4
bf4 / irb3.rb
Created May 16, 2016 — forked from peterc/irb3.rb
irb3 - Run an IRB-esque prompt over multiple Ruby implementations at once using RVM
View irb3.rb
#!/usr/bin/env ruby
# encoding: utf-8
# irb3 - Runs an IRB-esque prompt (but it's NOT really IRB!) over multiple
# versions of Ruby at once (using RVM)
#
# By Peter Cooper, BSD licensed
#
# Main dependency is term-ansicolor for each impl:
# rvm exec gem install term-ansicolor
You can’t perform that action at this time.