u16suzuの blog

u16suzu のブログです。

outer join を使ってみる

テストデータ # towns table id name 1 アテネ 2 ヴェネチア 3 ローマ 5 ピサ # users table id name town_id 1 taro 1 2 jiro 2 3 saburo 3 4 shiro 4 inner join town_id 4 のレコードは towns tableに存在しないので表示されない select * from users AS …

TOC と CCPMに関する本を読んだ

夏休みの読書感想文。 最近 TOC と CCPMに関する本を会社からいただいて読んだ。 また、会社での研修にも参加することができそこでも座学とワークショップで CCPM, TOC について学んだ。 これにより、スケジュール通りに品質を落とさずに、仕事を進めるため…

ARのjoinまわりのメソッドを勉強した

ARのjoinまわりのメソッドを勉強した。N+1を解消するのにとても便利。 joins アソシエーションをキャッシュしない アソシエーションを検索条件でだけつかいたいときに有効 内部的には普通にjoinしてる preload アソシエーションをキャッシュする 必要なテー…

1 on 1 についてのまとめ

最近、自分の周りで 1 on 1 をやる機会が多くなってきた。 そんな折に、タイムリーにも WEB+DB PRESS で ひげぽんさんが 1 on 1 の記事を書いていらして、 とても良い記事だったので、後から見返しやすいようにまとめてみました。 1 on 1 を行う目的 半年の1…

リトライ処理のメモ

Rubyでリトライ処理をする際のテンプレ。再帰を使って綺麗に書ける。 class RetryException < StandardError; end def foo p Time.now raise RetryException end def retry_foo( rc = 3) begin foo rescue RetryException => ex # RetryException以外はretry…

Object#methodについてメモ

この書き方ができるの知らなかった. # レシーバがself. (Object#methodはレシーバとメソッドの実態を封入する.) [1,2,3].each( &self.method(:puts) ) [1,2,3].each( &method(:puts) ) # selfを省略できる [1,2,3].each{|i| puts(i) } こちらはたまに使う. #…

MySQLのパーティションのメモ

各パーティションのサイズを確認 check size of each partitions mysql> use information_schema; mysql> select partition_name,data_length,index_length from partitions where table_name = 'entries'; entries テーブルのパーティション一覧を表示する …

定数を定義する

module Constants GOLD_DEFAULT = 100 ITEM_MAX_COUNT = 255 end p Constants::GOLD_DEFAULT, Constants::ITEM_MAX_COUNT # => 100 # => 255 p Constants.constants # => [:GOLD_DEFAULT, :ITEM_MAX_COUNT] 定数は初めだけ大文字であればよいのだが、全部大…

現在見ているページのmarkdown形式のリンクを生成するブックマークレット

javascript:(function(){prompt('%E3%82%B3%E3%83%94%E3%83%BC%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84',%20%20%20%20%20'-%20['%20+%20document.title.replace(/([\[\]])/g,'\\$1')%20+%20']'%20+%20'('%20+%20location.href%20+%20')');})…

実引数側でのアスタリスク(*)の使用例メモ

実引数側でのアスタリスクの使用例メモ。配列オブジェクトを展開してメソッドの各引数に入れてくれる。便利。 def foo(name, val) "#{name}: #{val}" end ar = [[:a, 1], [:b, 2], [:c, 3]] ar.each do |elem| puts foo(*elem) # here end こちらの記事のsci…

scopeの使い方メモ

よくググるのでメモ scope :available, -> { where('deleted = false') } scope :available, -> { receivable.opened.showable } # 引数あり scope :find_by_friend_ids, -> friend_ids { where( target_id: friend_ids ) }

[キーワード引数] キーワード引数の使い方メモ

よく忘れるのでキーワード引数の使い方のメモ. 2.1からarg1のようにキーワード引数のデフォルト引数は省略できるようになった. def foo( arg1: , arg2: "arg2") puts "#{arg1} #{arg2}" end # 定義時に省略したarg1は呼び出し時には省略できない.(ArgumentEr…

enumのメモ

定義 class Log < ActiveRecord::Base enum reason: { login: 0, purchase: 1, finish_game: 2 } end 呼び出し 以下のように書いておくと、後から変更が必要になった時にわかりやすい pry(main)> Log::reasons[:login] => 0 全部欲しい場合 pry(main)> Log::…

Rubyのメタプログラミングメモ

Classをインスタンス化する時にHashで渡した値でInitializeするクラスのテンプレート class Person attr_accessor :name, :age, :address def initialize( hash={}) if block_given? yield( self ) else hash.each do |k, v| public_send("#{k}=", v) if res…

空白で区切って指定したフィールドの文字を取得

$ echo "1 2 3" | cut -d " " -f3 3 参考: フィルタを使用した文字列操作 2 | UNIX & Linux コマンド・シェルスクリプト リファレンス

def check_names names return unless Hash === names invalid_options = names.keys.map { |k| k.to_sym } - [:rdoc, :clobber_rdoc, :rerdoc] unless invalid_options.empty? then raise ArgumentError, "invalid options: #{invalid_options.join ', '}" …

Rubyの特殊変数メモ

$! : 最後に発生した例外オブジェクト $: : Rubyライブラリの検索パス, $LOAD_PATH $0 : 実行中のRubyスクリプトのfile名 $/ : 区切り文字 $, : デフォルトの出力フィールド区切り文字列 参考: module Kernel (Ruby 2.1.0)

Classをインスタンス化する時にHashで渡した値でInitializeする

Classをインスタンス化する時にHashで渡した値でInitializeする class Person attr_accessor :name, :age, :address def initialize( hash={}) if block_given? yield( self ) else hash.each do |k, v| public_send("#{k}=", v) if respond_to?("#{k}=") en…

Macの特殊キー

記号 ⌘ Command ⌃ Control ⇧ Shift ⇪ Caps Lock ⎋ ESC ⌥ Option Tab

Hash.newにブロックを渡す

以下の記事を読んで初めて知ったのでメモ。 Ruby で メモ化カッコカリ( #rubytokai 発表メモ) - 名古屋で数学するプログラマ(仮) Hash.new にブロックを渡すことができる。 このブロックはすぐには実行されずに、h["key"] と言う形で参照されたキーがhash…

atomのタブやfuzzy-finderなどのフォントサイズを一括で変更するbash script

仕事でノートPCをモニタにつないだり、ノートPC本体だけで使ったりすることがあり、 atomの編集部分以外のフォントサイズを手軽に一括で変更したくて書いた。 ### change atom font size atom_font() { cd ~/.atom/styles case "$1" in "pc" ) ln -sfv font_…

オブジェクトのパラメーターとメソッドの引き数名が同じ時は、メソッドの引数が優先される

オブジェクトのパラメーターとメソッドの引き数名が同じ時は、メソッドの引数が優先される。 もしも、パラメーターを呼びたい時はselfをつける。 class Foo attr_accessor :name def bar(name) p name # => "aaa" 引数が優先されている p self.name # => "do…

MySQLの参照系のインデックスチューニングについて

最近MySQLのインデックスに関する勉強をしているので、それについてまとめたいと思います。 今回参考にした本です。内容が充実しおり、とてもオススメの本です。 Linux-DB システム構築/運用入門 (DB Magazine SELECTION)作者: 松信嘉範出版社/メーカー: 翔…

MySQLのカバリングIndex が効いているかを実験してみる

ダミーのテーブルを作成する CREATE TABLE item ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(10), description VARCHAR(30), price INT UNSIGNED, created_at DATETIME ); Indexをはる CREATE INDEX price_index on item( price ) INSERT INTO item …

まとめてファイル置換する

hoge ディレクトリの中にある.rbファイル中にある文字列 foo を barに置換する。 -i "0" を指定することでバックアップファイルを作らないようになる。 $ find ./hoge -type f -name "*.rb" -print0 | xargs -0 sed -i "" -e "s/foo/bar/g" Redis.new.flusha…

git のエイリアスを2個登録した

git

git add と git commit を同時に行う ga コマンドを追加, "$*" とすることで 以下のようにcomit log をダブルクオーテションで囲まなくてもよくなる。 $ga hoge fuga def git_add_commit(){ zle accept-line git add --all . && git commit -m "$*" } zle -N…

この記事を参考にして、git の diff を綺麗にする設定をした。 qiita.com

ActiveSupportの Array のメソッドを一通り眺めてみる

ActiveSupport の Array の拡張メソッドを一通り眺めてみた extract_options! 引数のオプション部分だけをかえしてくれる. メソッドを定義するときに便利 def options(*args) args.extract_options! end options(1, 2) # => {} options(1, 2, a: :b) # => {:…

学習のためRailsのコードリーディングをした時のmemo

rails と rspec scopeのマージは、以下のようにかくと、paramsの条件分岐が綺麗に書ける. scope = User.where( id: user.id ) scope = scope.where( 'created_at >= ?', params[:date_from].to_date ) if params[:date_from].present? scope = scope.where( …

opensslコマンドについて調べた

RSAの秘密鍵を生成 pemという拡張子にしているが、これはテキストエンコーディングで保存しているということのみを表し、暗号方式とは関係ない openssl ではデフォルトでpem形式で保存される $ openssl genrsa 1024 > private.pem Generating RSA private ke…