読者です 読者をやめる 読者になる 読者になる

u16suzuの blog

u16suzu のブログです。

リトライ処理のメモ

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…

ディレクトリの作成と移動を同時に行うコマンド

zsh

function mkcd { mkdir $1 && cd $_ } 参考: blog.tstylestudio.com 全くzshに関係ないけど、fish便利だから、そろそろ仕事でも使いたい。pecoとの連携ができてなかったので、そこが設定できたら使えそう。

DBやKVSの楽観ロックと悲観ロックについて調べた

楽観ロック 参照時にロックをしない 仕組み : バージョンを保持しておき、バージョンが更新されていたら、その後の変更は破棄される 同じリソースへの更新が、頻繁に発生しないことを想定したロック 変更が破棄されるためリトライを考慮した設計にしなければ…

Macでディレクトリにあるファイル内の全ての文字列を置換する

-d を -F に変換する場合 $ grep -Rl '\-d' ./* | xargs sed -i.bak -e 's/\-d/\-F/g'

2016/08/03の日記

このブログ記事に書いてあるスクリプトを読んで、わからないところを調べた。 83億レコードを移行し、日々2,500万レコードのアクセスログをBigQueryに記録している話(インフラ編) | Money Forward Engineers' Blog set -o pipefail bash に set -o pipefai…

2016/8/2(tue)の日記

shell起動時に自動的に指定のディレクトリに移動するようにした。 毎朝仕事を開始する時に、いつも仕事用のディレクトリにcdで移動するのが大変なので書いた。 以下のように .open_directory にディレクトリを指定すると、shell 起動時に移動してくれる。 $ …

2016/8/1(mon)の日記

プロジェクトで使っている bundler で入れたgemの調査をするためのコマンドをbashで書いた。 Ruby 書くときは atom がメインエディタになりつつある。 RubyMineは重いので、コードリーディングの時だけ使っている。 ### bundler でインストールした gem を編…

2016/7/31(Sun)の日記

今日はマクドでRuby script 用のDSLを書いて遊んだ。 仕事でよく使うテスト用のスクリプトなんだけど、実行するタスクを引数で指定できるようになっている。 それをDSLで指定できるようにした。 @argv = [ {env: "pro"}, 'login', 'start' ] @env = "dev" p …

2016/7/28(木)の日記

jbuilderについて extract! # activerecord objectのアトリビュートを指定して書き出し ignore_nil! # このメソッドを書いた後は, nil のkey-valueをjsonに書き出さない. ignore_nil! false でオフにできる. Splat演算子 a, b = *[1,2] # => a = 1, b = 2 *c…

2016/7/27の日記

Rubyのメソッドに関する雑多なメモ << # 右ビットシフト `*2` と同じ意味 >> # 左ビットシフト `/2` と同じ意味 | # 論理和演算子. 0011|0101 => 0111 8.to_s(2) #=> "1000" : 2進数表現の文字列を取得 "0x4d2".hex #=> 1234 : 16進数を10進数に変換. 0xはな…

「Rubyのしくみ」(Ruby Under a Microscope)を読んだ

「Rubyのしくみ」(Ruby Under a Microscope)を読みました。 Rubyのしくみ -Ruby Under a Microscope-作者: Pat Shaughnessy,島田浩二,角谷信太郎出版社/メーカー: オーム社発売日: 2014/11/29メディア: 単行本(ソフトカバー)この商品を含むブログ (4件) を…

KPTふり返りのテンプレート

最近、MTGのファッシリテーションをするようになったので、すぐに使い回せるようにテンプレート化しておく。 スケジュールのメール文フォーマット お疲れ様です。 以下のフォーマットで、KPTふり返りMTGを行います。 もし、KPTに関してご存じない場合、参考資料に目…

cssのパディングとマージン

css

パディングとマージンどっちがどっちかよく忘れるのでメモしておく。 コード <html> <head> <style type="text/css"> div { padding : 10px; /* 要素とボーダーラインのあいだの距離 */ border : 5px solid maroon; /* ボーダーラインの幅 */ margin : 10px; /* ボーダーラインと画面の端の距離 *</style></head></html>…

2つの proc を合成して1つの proc にする

# 2つの proc を合成して1つの proc にする def foo(arg1, arg2) Proc.new do arg1.call arg2.call end end p1 = Proc.new { p 123} p2 = Proc.new { p 456} res = foo( p1, p2 ) res.call # => 123\n456

例外を投げるclosure

() throws ->(String) in と書くと例外を投げるクロージャを定義できる enum MyError : ErrorType { case Hoge } let c = {() throws ->(String) in throw MyError.Hoge } do { try c() } catch { print( "\(__FUNCTION__): L\(__LINE__)") }

Swiftでクラスからインスタンスを生成する

インスタンス化するクラスを定義 class Hoge { required init(){ } class func newInstance()->Hoge { return Hoge.init() } } 呼び出し let hogeClass: Hoge.Type = Hoge.self let hogeObject = hogeClass.init()

Rubyで行列とベクトルの演算

固有ベクトルは任意の行列m を適用した際に,向きが変わらないベクトルのこと require 'matrix' m = Matrix[ [2,1], [1,2] ] v1 = Vector[1, 1] v2 = Vector[1, -1] # v1は m の eigen vecotr p m * v1 # => Vector[3, 3] # v2 is eigen vector of matrix m t…

UIWebView でリンクをクリックしたとき safari で開く

UIWebView でリンクをクリックしたとき safari で開く func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { if(navigationType == UIWebViewNavigationType.LinkClick…

UIView の bounds と frame プロパティについて

サイズはどちらも同じで座標系が異なる bounds : 座標系が自分のビュー基準 frame : 座標系が親ビュー基準 あとで読む frameとboundsの理解をちょっとだけ深める - Qiita [iPhone] UIView の frame と bounds の違い | Sun Limited Mt.

swiftでKVO

監視対象のプロパティに dynamic 修飾子をつける Observer は NSObject を継承している必要がある dynamic var fbNativeAd:FBNativeAd? addObserver(self, forKeyPath: "fbNativeAd", options: [.New, .Old], context: nil) deinit { removeObserver(self, f…

swiftのディープコピー

swift はデフォルトで deep copyになる。 また、引数で受け取ったオブジェクトはletになってて直接加工できない。 そのため、ディープコピーを作ってそれを編集する必要がある。 // swift はデフォルトで deep copyになる let ar = [1,2,3,4] var ar2 = ar ar2.in…

swiftの filter メソッドを使ってみた

0から100の範囲で10で割り切れる値を得る print( (Array<Int>)(0...100).filter({$0 % 10 == 0}) ) // => [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]</int>

swiftのジェネリクスを使ってみる

// ジェネリクス関数 func swapAnyObject<T>(a:T, b:T){ print( a.dynamicType, b.dynamicType) } // ジェネリクス関数その2 // http://qiita.com/mini_house/items/73cefa9612d5c7680d7e より func myRepeat<ItemType>(item: ItemType, times: Int) -> [ItemType]{ var r</itemtype></t>…

Rubyで設定系DSLを書いてみた

こちらのスライドを参考にしてRuby で設定系のDSLを書いてみました。 sixeight.hatenablog.com ところどころ、コメントを書いて理解しながら書いてみました。 # 設定系DSL class Awesome class Config attr_accessor :hoge, :fuga # (a) attr_accessor :method …

swift でシングルトンクラスをつくってみる

シングルトンクラスの定義 遅延実行で生成するパターン import Foundation class NetworkErrorAlertControllerManager : NSObject { static var sharedManager: NetworkErrorAlertControllerManager = { return NetworkErrorAlertControllerManager() }() ov…