javascriptのprototypeオブジェクトの利点

javascriptのprototypeオブジェクトについてです。 今まで適当にやっていたのですが、少しまとめたいと思います。 メモリの使用量を削減できる メンバーの追加や変更をインスタンスがリアルタイムに認識できる メモリの使用量を削減できる こちらはどういう…

database cleanerの設定について

rspecのテスト実行時にDatabaseCleanerを使用しています。 データベースを毎回キレイな状態にしてくれるやつですね。 これの何がいいかというと、テストデータが固定化されるのと、増えないのでテストの実行が遅くならないということです。 ただし、設定によ…

viewの条件式を減らす

viewにロジックを書きすぎるな!ってことです。 自戒の意味を込めて書きます。 - if area? && action_name == "show" - if citys? = render "foo" - else = render "bar" - else = render "bar" こういうのがあったとします。 viewにこんだけロジックが積ま…

javascriptとrubyのクロージャーについて

クロージャーは「ローカル変数を参照する関数」です。 このいいところは、変数を一時保存できるところだと思ってます。 function closure() { let x = 0; return function(){ return ++x; } } c = closure() c() =>1 c() =>2 何回押したとか、初回だけとかの…

javascriptの引数について

javascriptの引数についてです。 引数のチェックをjavascriptでは行ってくれません。 ES2015からは改善されているようです。 引数のチェックはしない function showName(name) { console.log(name); } showName('foo'); =>foo showName('foo', 'bar'); =>foo…

javascriptのスコープについて

javascriptのスコープについてです。 曖昧な知識のままだったので、まとめます。 ブロックスコープ ブロックでのスコープという概念がありません。 { var i = 5; } console.log(i); =>5 このように平気でアクセスできてしまいます。 rubyだとブロックの中の…

javascriptの関数の書き方について

最近少しずつ、javascriptについても学習をしています。 当然ながら、rubyとは動きが違うのですが、違う部分を意識するためにも、ここに記載しておきます。 関数の作り方 function命令で定義する Functionコンストラクターで作成する 関数リテラルで作成する…

nginxのパフォーマンスを向上させてみる

前回のエントリーでパフォーマンスの測定ができるようになりました。 今回はnginxのパフォーマンス向上に努めます。 なお、サイトの事前調査では最大リクエスト数の処理数が70なので、限界までリクエストするようにします。 最初に設定前のファイルを見てみ…

Apache Benchでパフォーマンス測定する

サイト作成していて、負荷テストにはまっていました。 便利なパフォーマンス測定ができるものがありますね。 パフォーマンス測定 Apache Bench こちらを使用すれば、サイトに負荷をかけてレスポンスの向上するのかが確かめることができます。 ab -n 100 -c 1…

factory girlでnamespaceのあるモデルのfactoryを生成する

ActsAsTaggableOnのデータを生成したかったのですが、namespaceがあるために生成できませんでした。 そんな時の技です。 FactoryGirl.define do factory :tag, class: ActsAsTaggableOn::Tag do |f| f.name '脈あり' end end 公式にもっといいのがありました…

factory girlのtraitで関連するモデルを作成するのを選択制にする

関連するモデルを作成する場合は、associationを使います。 ただ、必ずしも毎回そのモデルが必要になるのか?と言われると疑問が浮かびます。 なので、選択制にする方が自由度が高いと考えています。 taritは選択制にできるので、使い方を書きます。 trait f…

routeのresourcesのnestした部分をnamespaceにする方法

nestしたresourcesだと、namespaceでcontrollerとviewのファイル置き場が別々になってしまって嫌です。 下のやつです。 resources :foo do resouces : bar end 結果 foo_bar_index GET /foo/:foo_id/bar(.:format) bar#index POST /foo/:foo_id/bar(.:format…

railsの複数形・単数系がうまくいかない場合の対処

どう見てもこれは変換がおかしいだろってことがありました。 'loves'.singularize => "lofe" 普通にloveを返すべきところじゃん・・・ このおかげでpathがnew_lofe_pathなんてなったりしました。 これはどうにかしたいと思ったら、イレギュラー登録をするこ…

respond_to?でメソッドがあるかを確認する

タイトルの通りです。 respond_toの書き方 class Foo def foo p 'foo' end private def private_foo p 'private foo' end end x = Foo.new x.respond_to?(:foo) => true x.respond_to?(:foo, true) => true x.respond_to?(:private_foo) => false x.respond_…

shared_examples_forに引数を渡して処理をさらにまとめる

ここ最近はリファクタリングやより短い書き方を考えてます。 一行でもコードから文字が減るのは嬉しい。 そんなわけで、カラム名が違うだけで、内容同じじゃん・・・って場合のテストの書き方です。 前提条件 カラムの:login, :passwordは半角英数字のみで文…

返ってくる値を真偽値に変換する

例えば、matchを使用して、正しいかどうかの確認だけをしたいと思います。 REG_EXP = /foo/ x = 'foo' x.match(REG_EXP) => #<MatchData "foo"> x.match('bar') => nil 通常だと判定した結果が返ってきます。 これを真偽値に変換します。 !!(x.match(REG_EXP)) => true !!(x.m</matchdata>…

rspecでprivate methodを呼び出したい時の方法

privateメソッドを実行したいけど、できないよ!って場合の方法です。 sendを使えばできます。 class Foo private def foo puts 'hoge' end end x = Foo.new x.send(:foo) hoge => nil x.foo NoMethodError: private method `foo' called for #<Foo:0x007fa279135010> こうなるので</foo:0x007fa279135010>…

オブジェクトのインスタンス変数名とメソッド一覧の取得方法

タイトルの通りです。 オブジェクトのインスタンス変数名とメソッド一覧の取得方法を探っていきます。 まずはインスタンス変数名からです。 インスタンス変数名の取得方法 instance_variables class Foo def initialize @foo = 1 @bar = 2 end end x = Foo.n…

rubyのthreadについて

スレッドは同じプロセス上でメモリを共有しつつ、処理を並列に実行することができます。 スレッドを用いることで、単独で時間がかかる処理を早くすることができる可能性があります。 スレッドの生成 スレッドを作成し、処理を実行するには、Thread.fork/Thre…

eval族

evalについてです。 |メソッド名|動作| |Kernel.#eval|selfが呼び出された式を評価する| |Module#class_eval|レシーバのクラスをselfとして式を評価する| |Module#module_eval|レシーバのモジュールをselfとして式を評価する| |Basic#Object#instace_eval|レ…

mysqlでcsvエクスポートする

mysqlのcsv出力です。 SELECT * FROM テーブル名 INTO OUTFILE 'hoge.csv' FIELDS TERMINATED BY ',' ←区切り文字の指定 OPTIONALLY ENCLOSED BY '"'; ←項目間の囲う文字 以上です。

includeとprependで読み込む順番の確認

includeとprependで読み込む順番を確認していきたい思います。 moduleの複数読み込みをした場合に、どのような順番で読み込まれるのかを確認していきます。 includeの順番に依存 何も考えないでincludeしていく場合は、読み込む順番に依存していることがわか…

lambdaについて

lambaはProcオブジェクトの別の書き方です。 Procオブジェクトやブロックに関してはこちらの記事をみてください。 ブロックについて - mikami's engineer diary x = lambda { 'foo' } x.call =>foo lambdaは->でも書けるので上はこのように書き直せます。 x …

クラスメソッドについて

クラスメソッドの定義を見ていきます。 class Hoge def self.hello puts 'hoge' end end Hoge.hello =>hoge これは標準的な書き方だと思います。 この時のselfはクラス自身(ここではHoge)を見ています。 class Hoge def Hoge.hello puts 'hoge' end end Hoge…

classを動的に作成する

こんなやり方をすると可読性がなくて、よくないと思うのですが、紹介します。 klass = nil FooClass = Class.new do |f|←ブロック内で定義する klass = f f == self def hello puts 'hello' end end←ここで定義終了 => FooClass x = klass.new => #<FooClass:0x007ff5330a89c8> x.hello </fooclass:0x007ff5330a89c8>…

コールバックの処理が増えてきたら、メソッド化する

コールバックの処理が増えてきて、可読性が悪くなる場合はまとまりをメソッド化にしましょう。 例えば、下記のようなものがあったとします。 before_save : hoge, :foo, :bar, .... if: :test これがどんどん膨らんでいくことは、想像できます。 なので、hog…

moduleについて

moduleについてなんとなーくでやっていたので、まとめます。 classとの違い インスタンスを生成することはできない 継承することはできない 用途 名前空間を作る モジュールのメソッドを、あるクラスのインスタンスメソッドとして取り込む モジュールのメソ…

特異メソッド

特異メソッドは、特定のオブジェクト固有のメソッドを作成することができます。 class Japanese def hello(name) puts "#{name} こんにちは" end end foo = Japanese.new foo.hello("foo") =>foo こんにちは bar = Japanese.new bar.hello("bar") => bar こ…

加工したデータのf.selectの作成方法

f.collection_selectを使いたいけど、なんか違う・・・ 少し加工したデータをセレクトで表示したいという時の方法です。 状況 選手名(Playerモデル)のデータを表示しようとしています。 first_name, last_nameとカラムが分かれている full_nameというメソッ…

ブロックについて

今までブロックについて意識することができていませんでした。 do..endもしくは{}の範囲内って認識でした。 備忘録的として書いておきます。 ブロックとは 上で説明しているようにdo..endもしくは{}の範囲内がブロックです。 languages = %w(Html PHP Ruby) …