View the_lucky_7s.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Let f(N) be the number of 8s that occur when you write out all the numbers from 1 to N. | |
# For example: | |
# f(6) = 0 | |
# f(8) = 1 | |
# f(20) = 2 | |
# f(80) = 9 | |
# f(100) = 20 | |
def f(N) | |
base = [] |
View rails_error_handler.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Error module to Handle errors globally | |
# include Error::ErrorHandler in application_controller.rb | |
module Error | |
module ErrorHandler | |
def self.included(clazz) | |
clazz.class_eval do | |
rescue_from StandardError, with: :standard_error | |
end | |
end |
View ruby_exception_hierarchy_generator.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# source: http://blog.nicksieger.com/articles/2006/09/06/rubys-exception-hierarchy/ | |
exceptions = [] | |
tree = {} | |
ObjectSpace.each_object(Class) do |cls| | |
next unless cls.ancestors.include? Exception | |
next if exceptions.include? cls | |
next if cls.superclass == SystemCallError # avoid dumping Errno's | |
exceptions << cls | |
cls.ancestors.delete_if {|e| [Object, Kernel].include? e }.reverse.inject(tree) {|memo,cls| memo[cls] ||= {}} |
View proc_usage.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# source: https://openhome.cc/Gossip/Ruby/Proc.html | |
# https://openhome.cc/Gossip/Ruby/IteratorBlock.html | |
# https://tonytonyjan.net/2011/08/12/ruby-block-proc-lambda/ | |
# self-built reduce function | |
class Array | |
def my_reduce(value = 0) | |
for i in 0...self.length | |
value = yield(value, self[i]) | |
end |
View rails_custom_domain_setting.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# app/controllers/application_controller.rb | |
class ApplicationController < ActionController::Base | |
before_action :ensure_domain | |
private | |
def ensure_domain | |
if request.env['HTTP_HOST'] == "jennycodes.herokuapp.com" | |
redirect_to "https://jennycodes.me#{request.env['REQUEST_PATH']}", status: 301 | |
end | |
end |
View activerecord_includes_preload_eager_load_query.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ActiveRecord::Base.logger = Logger.new(STDOUT) | |
Speaker.count # 1873 | |
Talk.count # 1576 | |
Speaker.includes(:talks).to_a | |
# SELECT `speakers`.* FROM `speakers` | |
# SELECT `talks`.* FROM `talks` WHERE `talks`.`speaker_id` IN (1, 2, 3,...(omitted) | |
Speaker.preload(:talks).to_a |
View activerecord_joins_usage.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Speaker -> Talks | |
# CORRECT USAGE | |
# Select speakers that have one or more talks and returns all attributes (columns) plus talk's title. | |
Speaker.joins(:talks).select('distinct speakers.*, talks.title as talks_title').to_a | |
# SELECT distinct speakers.*, talks.title as talks_title FROM `speakers` INNER JOIN `talks` ON `talks`.`speaker_id` = `speakers`.`id` | |
# Select speaker whose associated talk(s) is at status 5. | |
Speaker.joins(:talks).where(talks: {status: 5}) | |
# SELECT `speakers`.* FROM `speakers` INNER JOIN `talks` ON `talks`.`speaker_id` = `speakers`.`id` WHERE `talks`.`status` = 5 |
View ruby_benchmark_usage.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'benchmark/ips' | |
def test | |
Benchmark.ips do |bm| | |
bm.report('#preload ') do | |
Speaker.preload(:talks).to_a | |
end | |
bm.report('#eager_load') do | |
Speaker.eager_load(:talks).to_a |
View ruby_gil_threads_test.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'thwait' | |
require 'pg' | |
start = Time.now | |
first_sleep = Thread.new do | |
puts 'Starting sleep 1' | |
conn = PG::Connection.open(dbname: 'test') | |
conn.exec('SELECT pg_sleep(1);') | |
puts 'Finished sleep 1' |
View ruby_gil_mutex.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def send_money(amount) | |
puts "Sending $#{amount}" | |
sleep 1 # Simulate network call sending of money | |
end | |
lock = Mutex.new | |
threads = [] | |
money_is_sent = false | |
2.times do |
OlderNewer