猫の魔法

主にruby系の技術メモを記載

Ruby

SlackTsuribariというgemを作った

SlackTsuribariというSlackのIncoming Webhookを使う為のラッパーgemを作りました。 目的 自分の勉強用(Github Actionとか使いたかった) SlackのIncoming Webhook ラッパーのgemの代表格であるslack-notifierが長らく更新されずにいたので、メンテ状態にある…

Array#include?の速度

rubyを書いているとよくArray#include? を使う事が多いのですが、これのパフォーマンスが気になったの調査して見ました。 パフォーマンスの調査としては最悪のケースを考えたいので、要素が引っかからない場合(線形探索と仮定した場合、Arrayのすべての要素…

railsの起動プロセスを追う その3

はじめに また間が空いてしまいましたが、 railsの起動までを見ていこう第3段ということで、今回は rails/all.rb から見ていこうと思います。 以下の「railsの起動プロセスを追う」の部分に各回へのリンクがあります。 rails調査系まとめ - 猫の魔法 ※今回書…

ruby本体をコンパイルしてみる

久々の更新です。 今日は、rubyの本体のコードをちゃんとローカルに持ってきてコンパイル出来る状態にしてみました。 (本当は別の目的があったんですが、すんなりコンパイルが通ったのでやり方だけメモしておこうという算段。。。) 基本はGithubのruby/ruby…

rubyソースコードリーディング 1日目

特に理由はないが、読める所からrubyのソースを読もうと思う。 パット見途中で挫折しそうだが、何も無しに何処まで読めるか試してみるのもありかなと。 とりあえずはv2_5_0_rc1のmain.cから int main(int argc, char **argv) { #ifdef RUBY_DEBUG_ENV ruby_s…

binding.pry チートシート

binding.pry使ってデバックを行う時のチートシートが欲しかったので自分で作ることにした。随時更新。 チートシート pry関連リンク rails以外 GitHub - pry/pry: An IRB alternative and runtime developer console GitHub - pry/pry-doc: Provide MRI Core …

brewコマンドをrakeタスクの中から呼ぶ方法

Rakefileを使ってbrewをコマンドラインから叩いて実行するスクリプトを作っていたのだが、エラーが出て上手く行かなかった。 ネットを結構探したが、解決策がなかなか見つからなかったのでここに顛末を残しておく。 経緯 Rakefileを作って、その中からshでbr…

今日の学び 2017/10/17

だいぶブログを休んでいたが、やっと生活が落ち着いて来たので学んだ事があったら書き留めて行こうと思う。 空白期間にあった話は、気が向けば今度記事にしようと思う。 とりあえず平日はrubyとvim関連で個人的にメモって置いた方が良さそうなことを記載して…

gsubの謎

Codewarsでよく分からない回答があったので、自分なりに調べてみた。 問題はカード番号のマスキングのように下4桁以外の文字なり数字を#でマスキングするという物で、 自分は以下のような回答で提出した(色々褒められた物ではないが。。。) def maskify(cc)…

再考:classとそれが読み込んでいるmoduleの一覧を表示する方法

※この記事の最後のプログラムはバグがあります。正しい物は下記の物を参照して下さい。 再々考:classとそれが読み込んでいるmoduleの一覧を表示する方法(bugfix) - 猫の魔法 今日、Module#ancestorsという インスタンスメソッドを目にしたのだが、このメソ…

is_a?についてのメモ

Highlineのソースを読んでいたら以下の部分でちょっと考えてしまった。 if template_or_question.is_a? Question template_or_question else Question.new(template_or_question, answer_type, &details) end 悩んだのはtemplate_or_question.is_a? Question…

JSON.parseのquirks_modeと2.4.0での変更

どんだけJSONネタで引っ張るのかという話もあるが、色々と調べて見て分かった事があったのでブログに記録しておく。 JSON.parseでは:quirks_modeというオプションがある。 通常JSONを解析する場合、そのトップレベルはオブジェクト若しくは配列になっている…

JSON.loadはオプションが取れる

先日の記事の中でJSON.loadのgithubの実装を紹介した。 Rubyの公式ドキュメント(以下るりま)JSON.loadの説明とgithubのコードを眺めていてあれ?るりまの説明と実装が違う。。。と言う事に気がついた。 るりま側のloadの定義は以下の通り load(source, proc …

JSON.parseとJSON.loadの違い

JSON.parseとJSON.loadの差が何なのか分からなかったので調べてみた。 ※下記の参考のStackOverflowの内容がその答えだが、裏を取りたかった。 require 'json' File.open("hoge.json") do |f| JSON.parse(f.read) == File.open("hoge.json"){ |f| JSON.load(f…

classとそれが読み込んでいるmoduleの一覧を表示する方法

クラスの継承関係と各クラスで読み込んでいるモジュールの一覧を表示したかったので作ってみた。 def display_class_modules(class_name) print "class:#{class_name},modules:#{class_name.included_modules}","\n" if class_name.respond_to?(:included_mo…