ブログ

読んで思い出す。忘れるために書く

pry-theme の windows? メソッドバグを潰した

OSS 活動の話

よくやった

ほめられた!

概要

pry セッション内で、pry-theme install ocean みたいにコマンドを唱えるとエラーが発生するのに気付いて、修正した (詳細はリンク先)

[1] pry(main)> pry-theme install ocean
Installing "ocean" from Pry Theme Collection...
NoMethodError: undefined method `windows?' for #<PryTheme::Command::PryTheme:0x00007fc334a04188>
from /Users/my_user_name/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-theme-1.3.0/lib/pry-theme/commands.rb:230:in `json_body'

Links

Q. テーブルの凡例をスクロールに応じて固定表示させたい

A. position: sticky; を設定する

thead tr th {
  position: sticky;
  top: 47px; /* 調整が必要な場合、数値を指定する (通常は 0 で OK) */
}

0才 → 1才 → 2才... とスクロールに応じて表示が切り替わっている様子:

https://i.gyazo.com/99e931311a6cab7185dc328f36cf415e.gif

これは次の Pull Request : 「成長記録編集・削除ページの追加 by gouf · Pull Request #42 · msm0046/growth_curve_sample」の コミット内容 に含まれている

Links

3ケタの数字から「カプレカ数」を探す

3ケタの数字から見つかる カプレカ数 は「495」が唯一らしい

与えられた数値に対して「カプレカ操作」を実行し、値がおなじになるものの数を探してみた

ループ処理でゴリ押し

def kaprekar_manipulate(n)
  # 桁数を昇順・降順に並べ替える
  max = 
    n.to_s
     .chars
     .map(&:to_i)
     .sort
     .reverse
     .map(&:to_s)
     .join
     .to_i

  min =
    n.to_s
     .chars
     .map(&:to_i)
     .sort
     .map(&:to_s)
     .join
     .to_i

  # for debug
  # pp max
  # pp min

  max - min
end

# n = 495
# p is_kaprekar_number = 
#   kaprekar_manipulate(n).eql?(n) # => true

ret =
  (100..999).map do |n|
    kaprekar_manipulate(n).eql?(n)
  end.filter { |bool| bool }
     .size
p ret # => 1

カプレカ操作を繰り返すことで、プログラムは無限ループに陥るか、カプレカ数を発見できるか分岐するらしい

Links

Q. ワークポート「eコンシェル」でマッチしてない求人情報を非表示化したい

A. つぎのコードスニペットを開発者コンソール上で実行する

// 地域絞り込み
Array.from(document.querySelectorAll('.card-info__text.ng-binding'))
     .filter(x => { return !x.innerHTML.match(/.+万.+/) }) /* 年収レンジの表示以外を収集 */
     .filter(x => { return x.innerHTML.match(/^.*(すごく遠い県|すごく遠い市|すごく遠い区|プロジェクトごとに場所が違う|クライアント先の都合で場所が変わる|etc...).*$/gm) })
     .forEach(x => { x.parentNode.parentNode.parentNode.querySelectorAll('.cardBtn.cardBtn--white')[0].click() })

// 仕事名で絞り込み
Array.from(document.querySelectorAll('.card__name.card__name--small'))
     .filter(x => { return !x.innerHTML.match(/^.*(やりたいジョブタイトル・キーワード|WEBアプリ|Webエンジニア|WEBエンジニア|バックエンド|リモート|サーバ).*$/gm) })
     .forEach(x => { x.parentNode.parentNode.parentNode.querySelectorAll('.cardBtn.cardBtn--white')[0].click() } )

Web ページ上では求人情報一覧 (おすすめ求人) の各項目に「非表示にする」ボタンが用意されている

.filter() の条件設定は ! で否定マッチにするか否かで ホワイトリストブラックリストの切り替えができる

Link

Q. RSpec で定数定義の有無を確認したい

A. (subject を定義して) it { is_expected.to be_const_defined :FOO } と記述する

回答の例 にあるように、be_have_ で柔軟なテストが可能になっている

The reason is that Rspec has "magic" matchers for methods starting with be_ and have_. For example, it { should have_green_pants } would assert that the has_green_pants? method on the subject returns true.

In the same fashion, an example such as it { should be_happy } would assert that the happy? method on the subject returns true.

So, the example it { should be_const_defined(:VERSION) } asserts that const_defined?(:VERSION) returns true.

Links

複数 Rails インストール済み環境でのバージョン切り替え挙動について

GitHub Issue に調査結果を書いた のでこちらにも転載

Rails の複数バージョンがインストールされている環境で、どのようにバージョンが切り替わるのか、調査

TL;DR

プロジェクトディレクトリの内外で、Rails に訊ねたバージョンが切り替わる

状況説明 & 再現手順

状況説明を兼ねて、再現手順を記載

大まかな流れ

  1. Rails gem の複数バージョン インストール
  2. バージョンを指定して Rails のプロジェクト作成
  3. プロジェクトディレクトリ 内・外で Rails のバージョン確認

再現手順

状況を同じにするため、次のコマンド群を打つことで再現可能にします

Rails のインストール (複数バージョン)

# バージョンを指定して Rails をインストール
# 2 つの、異なるバージョンをインストールする
gem install rails -v 5.2.4.3
gem install rails -v 6.0.3.2

バージョンを確認

# インストール済みの gem のリストを表示 (Rails)
# (正規表現で「rails」で始まって終わる語を絞り込み)
gem list --local ^rails$

# =>
# *** LOCAL GEMS ***
#
# rails (6.0.3.2, 5.2.4.3)

今有効なバージョンは?

cd ~ # Home ディレクトリに移動

# 最新バージョンが返ってくる
rails -v # => 6.0.3.2

バージョンを指定して Rails プロジェクト作成

#
# 旧版を指定してプロジェクト作成
#
mkdir my_project && cd $_ # プロジェクトディレクトリを作成して移動
rails _5.2.4.3_ new . --skip-bundle

プロジェクトディレクトリ 内・外で Rails のバージョン確認

プロジェクト内

pwd # => /[...snip...]/my_project
rails -v # => 5.2.4.3
bundle e rails -v  # => 5.2.4.3

Rails の場合、プロジェクト内のバージョンを優先的に利用する処理が記述されているらしい

Ref: Rails 4.1以降のコンソールコマンドは必ず bin/ を付けなきゃいけないの? - Qiita , なんで bin/ がいらないの?

(つまり、Rails でない場合、 bundle exec 無しだと ここで最新バージョンが返ってくる)

プロジェクト外

cd ~ # Home ディレクトリに移動
# 最新バージョンが返ってくる
rails -v # => 6.0.3.2