Skip to content

Instantly share code, notes, and snippets.

@pinzolo
pinzolo / range-behaves_as_array.rb
Created January 30, 2014 01:35
Rangeに存在しないけど、Arrayに存在するメソッドの場合は委譲する
# coding: utf-8
class Range
def method_missing(name, *args, &block)
if Array.public_instance_methods.include?(name)
to_a.send(name, *args, &block)
else
super
end
end
@pinzolo
pinzolo / compare_array_methods_that_add_item.md
Last active August 29, 2015 13:55
Array の加算メソッド比較

Array#push

  • 破壊的
base = [1,2,3]
added = base.push(4)
p added
  # => [1, 2, 3, 4]
p base
 # => [1, 2, 3, 4]
/**
* 指定の表現が指定されたパターンの日付として妥当かどうかを判別する。
* @param expr 文字列による日付表現
* @param pattern フォーマットパターン
* @return 妥当ならば true
* @throws ParseException パース失敗
*/
public static boolean isValidAsDate(String expr, String pattern) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
// null チェックだと 2013-02-31 -> 2013-03-03 となって valid となるので、再度フォーマットして元と比較する
@pinzolo
pinzolo / git_tips.sh
Last active August 29, 2015 13:56
git コマンドの tips というか一度調べたやつgit branch -m 変更後の名前
# 間違えて git rm したファイルを復活させる
git reset HEAD hoge/hoge.rb # キャッシュ上で復活
git checkout hoge/hoge.rb # ファイルの取り出し
# 現在のブランチ名の変更
git branch -m dest_branch_name
# 特定のブランチ名の変更
git branch -m src_branch_name dest_branch_name
# コミット間で変更のあったファイル一覧
@pinzolo
pinzolo / benchmark_include_and_cover_on_range_of_date.rb
Last active August 29, 2015 13:56
日付の Range においては include? は結構重い。cover? を使おう。RSpec でも include マッチャではなく cover マッチャを使おう。
# coding: utf-8
require 'date'
require 'benchmark'
begin_date = Date.today << 12 * 10
end_date = Date.today
range = begin_date..end_date
try_count = 10000
Benchmark.bm(8) do |bm|
@pinzolo
pinzolo / enumerable-count_while.rb
Last active August 29, 2015 13:56
配列を作らずに条件を満たす最初からの個数を数える
module Enumerable
def count_while
return to_enum(:count_while) unless block_given?
count = 0
each do |item|
if yield(item)
count += 1
else
return count
@pinzolo
pinzolo / enumerable-summing.rb
Created February 19, 2014 04:54
Enumerableに合計取得系のメソッドを追加する
module Enumerable
def sum
total = 0
each { |item| total += block_given? ? yield(item) : item }
total
end
def sum_while
return to_enum(:sum_while) unless block_given?
@pinzolo
pinzolo / benchmark_include_and_cover_on_range_of_integer.rb
Last active August 29, 2015 13:56
数値の Range における include? と cover? のパフォーマンス比較
# coding: utf-8
require 'benchmark'
range = 1..5000
try_count = 10000
Benchmark.bm(8) do |bm|
bm.report('include?') do
try_count.times do
range.include?(rand(10000))
@pinzolo
pinzolo / benchmark_include_and_cover_on_range_of_string.rb
Last active August 29, 2015 13:56
文字列の Range における include? と cover? のパフォーマンス比較
# coding: utf-8
require 'benchmark'
range = 1.chr("UTF-8")..5000.chr("UTF-8")
try_count = 10000
Benchmark.bm(8) do |bm|
bm.report('include?') do
try_count.times do
range.include?(rand(10000).chr("UTF-8"))
@pinzolo
pinzolo / get_lines_from_large_file.sh
Created March 24, 2014 23:41
巨大なファイルから任意の行を取得する
# 先頭行取得
cat large_file.txt | head -1 | tail -1
# ランダム取得(0から32767)
cat large_file.txt | head -$RANDOM | | tail -1
# 複数行取得(1000行目までの10行)
cat large_file.txt | head -1000 | tail -10
# 最終行取得