Skip to content

Instantly share code, notes, and snippets.

View y13i's full-sized avatar
☘️

Yoriki Yamaguchi y13i

☘️
View GitHub Profile
@y13i
y13i / integer_attempts.rb
Last active August 29, 2015 13:58
n回までリトライする
class Integer
def attempts error_class = StandardError, &block
fail "Block is required." unless block_given?
1.upto self do |i|
begin
return yield i
rescue error_class => e
raise e if i == self
next
@y13i
y13i / access_log_to_json.rb
Created April 30, 2014 07:50
ApacheのアクセスログをJSONに変換する
require "json"
require "time"
require "optparse"
# require "pry"
# require "awesome_print"
ApacheLog = Struct.new :line do
IP_ADDR_PATTERN = %q((\d{1,3}\.){3}\d{1,3})
FIELDS = %i(xforward_for ip remotelog remoteuser _time _request status bytes _referer _ua)
@y13i
y13i / plogger.rb
Created May 2, 2014 14:03
標準出力しつつログファイルにも出力する
require "logger"
class PLogger
def initialize *args
@stdout = Logger.new STDOUT
@log = Logger.new *args
end
%w(debug info warn error fatal).each do |level|
define_method(level) do |*args|
@y13i
y13i / benchmark.rb
Created June 6, 2014 09:06
Rubyでのベンチマークのやり方忘れそうなのでメモ
require "benchmark"
N = 10000000
Benchmark.benchmark Benchmark::CAPTION, 20, nil, "total", "average" do |bm|
results = {}
candidates = {
"some_candidate" => ->(i){"do something".capitalize},
"another_candidate" => ->(i){"do something".sub(/\A\w/) {|match| match.upcase}},
@y13i
y13i / s3_account_total_size_usage.rb
Last active August 29, 2015 14:02
S3の総使用容量を取得する
s3.buckets.inject(0) do |account_total, bucket|
account_total + bucket.objects.inject(0) do |bucket_total, object|
bucket_total + object.content_length
end
end
@y13i
y13i / list_all_objects_in_a_bucket.rb
Created July 3, 2014 13:34
S3バケット内の全オブジェクト一覧をファイルに出力する
File.open "./list_of_objects_in_some_bucket.txt", "w" do |file|
s3.buckets["some_bucket"].objects.each do |object|
file.puts object.key
end
end
@y13i
y13i / so_many_ebs.rb
Last active August 29, 2015 14:04
大量のEBSをつけたインスタンスを起動する
block_device_mappings = ("b".."n").map do |name|
{
device_name: "/dev/sd#{name}",
ebs: {
volume_size: 10,
delete_on_termination: true,
}
}
end
@y13i
y13i / chef_php.rb
Created July 29, 2014 11:59
memcache not installed?
# attributes/default.rb
default.php.version = "5.5.15"
default.php.directives = {
"date.timezone" => "Asia/Tokyo",
"memory_limit" => "128M",
"post_max_size" => "64M",
"upload_max_filesize" => "16M",
"output_handler" => "mb_output_handler",
@y13i
y13i / recipe_build_php_memcache.rb
Created July 29, 2014 12:55
物理の力でmemcache moduleをねじ込む
bash "build php-memcache" do
action :run
not_if "php -m | grep memcache"
code <<-EOS
cd #{Chef::Config[:file_cache_path]}
pecl download memcache
tar -zxvf `ls . | grep memcache`
rm -f memcache-*.tgz package.xml
cd `ls . | grep memcache`
@y13i
y13i / add_large_d_to_log_format.rb
Created August 6, 2014 12:10
Chef recipe: ApacheのLogFormat末尾に%Dを追加する
ruby_block "add %D to LogFormat" do
path = "/etc/httpd/conf/httpd.conf"
content = File.read path
notifies :restart, "service[httpd]"
not_if do
content.match /^LogFormat.*%D.*combined$/
end
block do