mysqlの予約語に気をつけた方がいい

やられました...orz 直接sqlをいじることがなかったのですが、いじった時に気付きました。 mysql> show tables; +-----------------------------------+ | Tables_in_foo | +-----------------------------------+ | categories | | comments | | rankings |…

cpuの情報を見る方法(mac/linux)

lscpuでいけるんじゃない?って思っていたのでしたが、macは違いました。 mac system_profiler SPHardwareDataType Hardware Overview: Model Name: MacBook Pro Model Identifier: MacBookPro11,1 Processor Name: Intel Core i5 Processor Speed: 2.4 GHz …

macのmysqlをupdateしたら、Library not loaded: /usr/local/opt/mysql56/lib/libmysqlclient.18.dylibって出るようになった

なんじゃこりゃーってなりました。 なんだ昔のmysqlを見に行ってるの? そんな古い情報見に行かないでくれよ!って感じだと思います。 原因は、gemの情報で古いmysqlの場所を見に行っているのが原因でした。 gem uninstall mysql2 ここで全てのversionを削除…

railsのmysqlでemojiを使う方法

emojiを使おうと思ったら、色々と問題があるようなので、まとめます。 文字コード問題 collation問題 ハハパパ問題(参考) index問題 mysql側の設定 rails側の設定 文字コード問題 まず、emojiはmysqlのutf8では使用できません。 mysqlでemojiを使用するにはu…

クラスメソッドをprivateメソッドにする方法

単純にprivateにするだけはダメです。 class Foo def self.bar puts 'bar' end private def self.baz puts 'baz' end end Foo.baz =>baz という風に実は普通に呼べています。 方法は二種類あります。 self内でprivateを呼ぶ private_class_methodを定義する …

文字列からクラス名にアクセスする方法

constantizeを使用します。 "Topic".constantize => Topic(id: integer, title: string, body: text, category_id: integer, thumbnail_updated_at: datetime, thumbnail_file_size: integer, thumbnail_content_type: string, thumbnail_file_name: string,…

nestしたcontent_tagを書く方法と注意点

nestしたcontent_tagを書く場合です。 concatで連結して書くことができます。 content_tag(:div, class: "c-grid__quotation-image") do concat(image_tag(url)) concat(link_to("出典:#{host_name}", url)) end ただし、こんだけ連結させる場合は、別途ren…

file_fieldに拡張子を制限する方法

今までjs側で処理を行おうとしていました。 普通にhtml属性で設定ができます。 = f.file_field :thumbnail,accept: 'image/jpg,image/jpeg,image/png,image/gif' acceptを使用することで、拡張子が画像系のものしか上げなくできます。 twitterってどうやって…

Redisについて

Redisについてお話ししたいと思います。 Redisとは メモリ上にKVS(Key Value Store)を保存できるようにするソフトウェアです。 インメモリ型データベース メモリ上にデータをすべて持ち、ディスクから取り出すよりも高速処理が可能になる データを永続化する…

capybaraのrpsec実行時にブラウザを切り替えるgemを作成しました

普段はwebkitで十分なのですが、たまにchromeで開きたいって時ありますよね? そんなgemを作成しました。 GitHub - ryosuke-endo/capybara_switch_driver 中身は微妙かもしれないけど、自分で使う分だからいいのかなと思いました。 以上です。

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|レ…