Skip to content

Instantly share code, notes, and snippets.

@mikeda
mikeda / gist:d16f02f2b370e3349211833f02276fc3
Last active Jun 28, 2018
子レコードのデータは不要でexists?かどうかだけ知りたい場合のN+1対応を効率的にやる方法が知りたい
View gist:d16f02f2b370e3349211833f02276fc3
# Articleがhas_many :commentsな時に、
# Articleの一覧といっしょに、それぞれにcommentsが存在するかどうかの情報がほしい
# これだとN+1になる
articles = Article.all
articles.each do |article|
commented = article.comments.exists?
end
# N+1にはならないけど不要なcommentsが全てロードされてなんかムダっぽい
View fizzbuzz.pl
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my $num = 100;
for my $i (
@mikeda
mikeda / es_yesterday_access.rb
Last active Jan 3, 2016
fluentd-plugin-elasticseachで突っ込んだアクセスログから昨日1日ぶんのデータを集計するサンプル
View es_yesterday_access.rb
#!/usr/local/bin/ruby
require 'time'
require 'pp'
require 'elasticsearch'
def time2index(time); time.utc.strftime('logstash-%Y.%m.%d') end
today = Date.today
start_time = (today - 1).to_time
@mikeda
mikeda / article_count_by_year.sh
Created Dec 23, 2013
はてなダイアリーの年ごとのブログ投稿数を集計する方法
View article_count_by_year.sh
# http://d.hatena.ne.jp/<USERNAME>/archiveにアクセスて50日ずつのページ数がいくつあるか確認しておく・・・
USERNAME=mikeda
PAGES=5
for((i=0;$i<$((50*PAGES));i+=50));do curl -g "http://d.hatena.ne.jp/${USERNAME}/archive?of=${i}" > archive_${i}.html;done
cat archive_*.html | grep "archive archive-section" | perl -lne 'm|'${USERNAME}'/(\d{4})\d{4}/| or next;print $1' | sort | uniq -c
# 44 2008
# 88 2009
# 26 2010
# 40 2011
@mikeda
mikeda / out_bot_detector.rb
Last active Jan 1, 2016
bot検出用に作ってるプラグイン
View out_bot_detector.rb
# 一定時間で閾値以上の件数があるkeyを検出する
# config:
# <store>
# type bot_detector
# tag bot_count
# count_interval 300
# count_key uid
# threshold 10000
# limit 10
# </store>
@mikeda
mikeda / munin_rds.sh
Created Oct 22, 2013
muninのmysql_プラグインをAWSのRDSに流用する方法を検討中
View munin_rds.sh
#!/bin/bash
# muninのmysql_プラグインで複数のRDSを監視するために、ゴニョる
#
# 事前手順
# 1. munin.confにvirtual nodeを追加する
# [rds;rds-test]
# address 127.0.0.1
# use_node_name no
# 2. 処理を移譲するためのプラグインを作成しておく
# mkdir -p /tmp/munin/plugins/
@mikeda
mikeda / config.rb
Last active Dec 25, 2015
EC2のメモリ、ディスクの使用率をCloudWatchのカスタムメトリクスに追加するcronスクリプト
View config.rb
require 'aws-sdk'
$config_file = File.join(File.dirname(__FILE__), "../../config/aws/aws.yml")
$config = YAML.load(File.read($config_file))
AWS.config(
access_key_id: $config['access_key_id'],
secret_access_key: $config['secret_access_key'],
region: $config['region']
)
@mikeda
mikeda / create_instance_eip.rb
Last active Dec 22, 2015
AWS SDK for RubyでEC2インスタンスを作成するサンプル
View create_instance_eip.rb
# EC2のインスタンスを作成
# VPC
# インスタンスはEBSタイプ
# 追加EBSをcreate & attach & mount
# EIPをallocate & associate
# インスタンス、EBSボリュームにはNameタグをつける
# 使用例
# $ ruby run_instance.rb app01 m1.small 10.0.0.101 30
require 'aws-sdk'
@mikeda
mikeda / analyze_access_log.rb
Last active Jun 30, 2021
アクセスログ集計スクリプトのとりあえず版
View analyze_access_log.rb
#!/usr/local/bin/ruby
# アクセスログを1時間ごとに集計。アクセスタイプごとのアクセス数をTSV形式で出力する
# usage : analyze_access_log.rb <YYYYMMDD> <access_log>...
require 'json'
require 'time'
require 'pp'
ANALYZE_DATE = ARGV.shift # YYYYMMDD
@mikeda
mikeda / cfstats2json.rb
Last active Dec 20, 2015
nodetool cfstatsをJSONに変換
View cfstats2json.rb
#!/usr/local/bin/ruby
require 'json'
result = {}
cur_ks = nil
cur_cf = nil
ARGF.each_line do |line|
line.strip!
if line =~ /^Keyspace: (.+)/