u16suzuの blog

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

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…

gemのソースを pry-byebug を使ってブレークポイントで止めて読む準備

いつも仕事でもプライベートでも使っている bundler だけど、中身のコードを把握していないのでどうも雰囲気で使っている感が否めない。 そこで、ソースを読み腹落ち感を得るためにコードを読む準備を進めてみた。 pry-byebug を使ってブレークポイントで止…

rails console から任意のメソッドのソースコードをRubyMineで開く

設定 .pryrcに以下を追記する。RubyMineのCUIコマンドがない場合は Tools > Create Command-line Launcher... で作っておく。 Pry.config.editor = proc { |file, line| "/usr/local/bin/mine --line #{line} #{file}" } Pry.commands.alias_command 'mine',…

自分の小さな「箱」から脱出する方法を読んだ

自分の中で一方的に師と仰いでいる元KLab CTO 仙石さんの投稿をきっかけにして、 以前購入し積読してあった本を読んだ。 とても良い本だった。 > 「私は正しい」という思いに気づくのは、難しいhttps://t.co/kUEFcu3LzM世の中で一番重要な真実でしょうね。…

thoughが使われる文章の訳し方について

github で gem の README を読んでいるとよくでてくる英単語の though について調べました. なんとなく but のように逆説の意味であることは知っていたけれどもいざ実戦で出会うと、though の前の節と後の節が逆のことをいっていて, どちらが文章の真意なの…

RubyMineとiTerm2 でRubyのバックトレースからファイルを開く時に RubyMine で開くようにする

iTerm2側で以下の設定をすることで、cmd+click でファイルパスを選択した時に RubyMineで開いてくれます。 iTerm2 の Preferences > Profiles > 任意のプロファイルを選択 > Advanced タブ > Semantic History > Run Command を選択 > `/usr/local/bin/rubym…

Rubyでデザインパターン ~Stateパターン~

RubyでStateパターンを実装してみるテスト。 Stateのコンクリートクラスにメソッドの実装を生やすことで、Stateを新しく追加するときに追加しやすくしている。 クラスマクロもちょろっと使ってみたり。 でもクラスマクロはコードが短くなるのはいいけど、初…

ORDER BY 狙いのキーについて動作確認メモ

こちらのスライドで説明されていることの理解を深めるために動作確認してみました。 Where狙いのキー、order by狙いのキー from yoku0825 www.slideshare.net # 実験用に bulk insert でデータを入れる values_1 = (1..9990).to_a.map do |_| "(#{rand(80)},…

Bundlerのエラー設計のメモ

Bundlerのエラー設計メモ module Bundler class BundlerError < StandardError def self.status_code(code) define_method(:status_code) { code } if match = BundlerError.all_errors.find {|_k, v| v == code } error, _ = match raise ArgumentError, "T…

2018/1/8(mon) ホットサンドメーカーの使い方が上達した

ホットサンドメーカーで毎朝トーストを焼いているが、今日はとても上手く焼くことができた。 あんこを挟んでバターを乗せて小倉ホットサンドを作って見た。なかなかの味だった。 夜に妹から電話があり、姪に送ったモンテッソーリのおもちゃであるところのシ…

2017/12/31-2018/1/1,2,3,4,5 久々に名古屋に帰っていた

年末風邪気味だったのが徐々に落ち着いてきた頃に、名古屋に帰った。 RubyKaigiが開催された大須がとても近かったので、観光と初詣がてら行ってみたら、予想をはるかに超えた人の波でかなり混雑していた。 イメージ的には仙台の商店街をイメージしていたがそ…

2018/1/7 オブスキュラに久しぶりに行った

近くにある馴染みの神社である池尻稲荷に初詣に行ってきて、おみくじを引いたら大吉だった。おそらく人生初の大吉ではないかと思う。出産が安産だったのが何より。相場に山気を出すなと書いてあって、これは今年は仮想通貨には手を出さずにおとなしく投信で…

あるオブジェクトに対して1回で複数のメソッドを呼ぶ

書いて見た。jbuilderっぽい見た目になった。 class Object def call(*methods) methods.map do |method| self.send(method) end end end p [1,2,3].(:first, :last, :class) # => [1, 3, Array]

Reactのメモ

準備 sudo npm install -g react-tools # jsファイルをwatch して自動ビルドをさせる jsx --watch src/ build/ html <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <script src="https://fb.me/react-15.1.0.js"></script> <script src="https://fb.me/react-dom-15.1.0.js"></script> …</meta></head></html>

outer join を使ってみる

テストデータ # towns table id name 1 アテネ 2 ヴェネチア 3 ローマ 5 ピサ # users table id name town_id 1 taro 1 2 jiro 2 3 saburo 3 4 shiro 4 inner join town_id 4 のレコードは towns tableに存在しないので表示されない select * from users AS …