u16suzuの blog

日々学んだことのメモブログです。

Mongoid gem の test の実行方法

ソースはこちら : https://github.com/mongodb/mongoid/tree/master/spec#running-mongoid-tests $ git clone git@github.com:mongodb/mongoid.git $ cd mongoid $ git submodule init $ git submodule update # MongoDB を起動する # 起動に失敗する場合は …

mongoid の any_of と or の違い

any_of は、前の条件をそのまま残して、その後に or 条件で挿入してくれる。 or は、前の条件も全部ひっくるめた or 条件を生成する。 コード例 実験したバージョン [57] pry(main)> Mongoid::VERSION => "7.3.5" > User.where(age: 33).any_of({name: "hoge…

mongoid の any_of と or の違い

any_of は、前の条件をそのまま残して、その後に or 条件で挿入してくれる。 or は、前の条件も全部ひっくるめた or 条件を生成する。 [54] pry(main)> User.where(age: 33).any_of( {name: "hoge"} , {tel: "123"} ) => #<Mongoid::Criteria selector: {"age"=>33, "$or"=>[{"n"=>"hoge"}, {"t"=></mongoid::criteria>…

RubyKaigi2023に参加してきた&Ruby東海のRe:bootに手を挙げた

5月11~13日に長野県松本市で開催されたRubyKaigi2023に参加してきた。 今回、一番注目していたセッションは sue445 さんのN+1をrubocopで見つけて修復までやってしまおうという発表でした。 今現職でのメインはMongoDBなのですが、今回の発表で使っているラ…

今日読んだもの

github.com rubocopのcopを全て有効にしています。 そのままだと全て落ちてしまうので、全てのRubyファイルの先頭に # rubocop:todo all をつけてチェックをしないようにしています。 あとは個別のファイルごとにrubocopに対応して # rubocop:todo all を削…

今日読んだもの

Expand arrays in queries https://github.com/mongodb/mongoid/pull/5601 mongoidに対してActiveRecordの挙動に依存するサードパーティgemが動くようにするため、ARの挙動と同じくする提案がなされている。 変更内容は以下のように、要素が1個の配列が与え…

2022/11/8(wed)の日記

社内勉強会が50回目の開催だった 4月ごろに前任者の方から引き継いで、自分が社内のバックエンド勉強会を運営をしている。 私の開催分は数えてみると20回くらいだった。議事録を眺めてみると、運営の担当メンバーは何回か代替わりをしている。 毎回、これの…

2022/11/5(sat)の日記

家族でカフェに行った 自転車で近くのカフェにみんなで行った。途中、くねくねした道で迷ったがなんとかついた。 近さを優先してわかりづらい道をいくよりも、多少遠くても大通りを経由したほうがハラハラしなくて好ましく思う。 公園の周りだと割とオシャレ…

2022/11/7(mon)の日記

菊の蕾 息子が捕まえたバッタをこっそり逃した 年をとったせいか、子育てをしているせいか、最近は生き物の殺生が心苦しい。 夜中に食事をとると内臓に負担がかかる 遅い時間のアルコールや食事が翌日のパフォーマンス悪化につながることが多くなってきた。 …

2022/11/6(sun)の日記

WEB+DB vol.122 の作って学ぶRDBMSのしくみを読んだ システムプログラミングに興味があるので、2章まで読んだ。 Rustのカニ本を読んでおいたので、理解が早かった気がする。 技術書を読むときは、概要をざっとつかんでからあとはコードを読むほうが早い気が…

ISUCON11 に出場した

ISUCON11に一人チーム「カフェでまったり」で出場した。 スコアは8300で予選敗退だった。言語は一番手に馴染んでいるRubyを使った。 本戦出場チームの9割がgoを使っていたので、来年からgoに鞍替えするかもしれない。 今回、初参加だったが、準備を全くせず…

The file '/usr/local/bin/bundle' is marked as an executable but could not be run by the operating system.

最近は仕事では Docker 上で開発することがほとんどでローカルでRubyをいじらない。 いつからか ローカルでの bundle install が失敗するようになっていた。 bashのshebangを実行ファイルに書くと良いという情報があったが、それでもなおらなかった。 $ bund…

Alfredのメモ用のワークフローをかいた

DropboxとAlfred、Atomを組み合わせて自前のメモツールとしている。 find_fileのワークフロー メモファイルをファイル名で検索し、検索結果をAlfredに表示し、選択してAtomで開く。 script filter languageはruby, with input as {query} を指定する。 requi…

Rubyで等差数列と等比数列を書いてみる

inject便利だ。 # 等差数列 def f(a, d, c) c.times.map{|i| a + (d * i)} end p f(1, 1, 5) # 等比数列 def f2(a, r, c) c.times.map{|i| (a * r **i)} end p f2(1, 3, 5) # 等比数列 DP ver def f3(a, r, c) c.times.inject([]){|res, _| res << (res.last…

ARの自己結合と関連をcreate

自己結合 自己テーブルを参照する関連も作ることができる class AddColumnToPosts < ActiveRecord::Migration[6.0] def change add_reference :posts, :prev_post add_reference :posts, :next_post end end class Post < ApplicationRecord belongs_to :cat…

ARのrelationのメソッド定義

Association extensions # Post::ActiveRecord_Associations_CollectionProxy に hoge メソッドを生やす. # 当然メソッド内でのselfはPst::ActiveRecord_Associations_CollectionProxyで posts が入っている。 # CollectionProxyに生えているので 当然 Post.…

自分の.pryrcメモ

# encoding: utf-8 # require "~/.pry/bokudora.rb" ### エイリアス Pry.commands.alias_command 'c', 'continue' Pry.commands.alias_command 'n', 'next' Pry.commands.alias_command 's', 'step' Pry.commands.alias_command 'f', 'finish' Pry.commands.…

Railsで使っているgemの内部で実行を止める

以下をコードの止めたいところに書けば良い。 メソッドの定義内に書いても問題ない。 require "pry"; binding.pry コードを確認し終わって、元に戻したい時は以下を実行すれば良い。 $ bundle pristine GEM_NAME

cのソースをビルド&runする fish shell のコマンド

function gcc_build -d "cのソースをビルド&runする" set c_file $argv set o_file (string replace ".c" ".o" $c_file) gcc $c_file -o $o_file eval ./$o_file end

so that 構文の4種類の用法

当時、筆者が中学で習った so that 構文は「とても~なので…です」 と1種類だけなので容易に覚えることができました。 しかしながら、仕事で英語に触れる機会が増えてくると、上と似たような so that が出てくる文章ではあるけれども、上の意味で訳すとどう…

Rubyでグラフを表現してみる

class Vertex attr_accessor :id, :edges def initialize(id, edges=[]) @id = id @edges = edges end def print puts "#{ @id }" @edges.each do |edge| puts edge end end end class Edge attr_accessor :id, :from, :to, :length def initialize(id, from…

Kernel#systemと`` の挙動の違い

戻り値 p system "ls" # => true p `ls` # => "Capfile\nGemfile\nGemfile.lock\n...." エラー時の挙動 p system "ls2" # => nil p `ls2` # => No such file or directory - ls2 (Errno::ENOENT) の例外が発生し、 空文字列がかえる p ls2 の例については be…

RubyMineでファイルのシンタックスハイライトが効かないときの対応方法

bash のコードは拡張子がなくてRubyMine側がファイルの種類を判断できなかったりするので、自分で指定する必要がある。 Help > Find Action... > Action > Associate with File Type... で指定できる。 Find Action は shift 2回でも起動できる。

RubyMineのメモリ容量を増やす設定

Help > Edit Custom VM Options... をクリック メモリ容量を増やす -Xms1024m -Xmx2048m

ローカルにある不要になった remote-tracking branch を削除する

git

remote-tracking branch を削除する方法 remote-tracking branch とはローカルにあるリモートレポジトリの追跡ブランチのことです。 私たちが手元で使うローカルブランチは、 git fetch して、このremote-tracking branch をローカルに作成した後に、 ここか…

Rubyの細かい記法のメモ

begin, end で複数行をインスタンス変数にキャッシュできる def calc_camage(base) # 最終値={基本値×(1-1/8)×武器補正×攻撃回数} base * (1-1/8) * 8 * 1 end def damage @damage ||= begin atk = 12 dfn = 9 base = atk/2 - dfn/4 calc_camage(base) …

Rubyで別ファイルにログを出力する

Railsで開発をしていると、たくさんSQLを実行しているサーバだと development.log の出力が多すぎて追うのが大変になります。 こういう時、別ファイルに出力させたいのですが、以下のように行えばOKです。 また、log/ 以下は gitignore されていることがほと…

size,count,empty? のパフォーマンスを確認する

size,count,empty? のパフォーマンスを確認をしてみる。 require "benchmark" count = 1000_000 ar = [1, 2, 3, 4, 5] Benchmark.bm(10) do |x| # 10はラベルの為に確保する長さ x.report("size") do count.times do ar.empty? end end x.report("count") do…

gem のコードを git clone して RubyMine で開くスクリプト

以下を /usr/local/bin に置いて、 chmod a+x clone_and_open.rb しておく。 clone_and_open.rb https://github.com/u16suzu/foo すると ~/src にダウンロードされる。 clone_and_open.rb #!/usr/bin/env ruby class CodeReader # clone and open # # git re…

2018年12月にリリースされたRubyGems, BundlerのRubyの対応バージョンのメモ

2018年12月にリリースされた RubyGems v3系, Bundler v2系にてRubyの対応バージョンが2.3以上必須となった。 早速この影響でTravisCIが落ちるなどしたのでシュッと対応しておいた。 RubyGems v3系 (3.0.0) Ruby >= 2.3.0 Bundler v2系 (2.0.0) Ruby >= 2.3.0…