諸行無常

IT色々お勉強中のブログ

rspec高速化parallel_testsを試す

先ずはローカルで実行 dockerのコア数確認

cat /proc/cpuinfo | grep processor
processor   : 0
processor   : 1
processor   : 2
processor   : 3

コア数分database準備

bundle exec rake parallel:create[4]

table準備

bundle exec rake parallel:prepare

seedが必要だったのでdatabase分準備

bundle exec rake db:seed RAILS_ENV=test TEST_ENV_NUMBER=4
bundle exec rake parallel:spec

timeoutがたまに起こる、テストが悪いのか、pcの性能が足りないのか、、、、

     1.3) Failure/Error: @io.to_io.wait_readable(@read_timeout) or raise Net::ReadTimeout

          Net::ReadTimeout:
            Net::ReadTimeout

次はcircle ciで、、

patorash.hatenablog.com

同じテーブルを親子関係にしちゃダメな理由

http://shirusu-ni-tarazu.hatenablog.jp/entry/2012/11/04/173742

不要なカラムが増えすぎちゃうから そもそもrailsで扱いづらい、nested使いづらくなる パフォーマンスがどうなのかは分からない

一応無理やりできるっぽい、おすすめしない

【Rails】has_manyとhas_oneで同一モデル内での親子関係の構築 - Qiita

ErgoDox EZ 買ったったで!

早速カスタマイズしよう  下記リンクより

ErgoDox EZ Configurator

edit ボタン押して変更していく ビデオ見てみてね

www.youtube.com

ダウンロードしてキーボードに流し込み手順

https://qiita.com/kei_s/items/40a896d1a1c70f2961e0#%E6%B5%81%E3%81%97%E8%BE%BC%E3%81%BF%E6%89%8B%E9%A0%86qiita.com

アプリを起動してキーボード右側の小さい穴に針かなんかで押す hexファイルをドロップしてアプリのしたボタン左ボタン押したら流し込み成功

変わってるので触ってみよう ちなみにこの記事はErgoDoxEzで書いたよ

参考

medium.com

rails dm 覚書

service mesh 組織が大きくなっても速いサイクルで開発できる

  • kurbanetesと関係あり
  • サービス同士を繋げる

型と実践 観察できるのは結果だけ こうゆう型をやって結果が出たと説明すると良い 具体的題材があると良い 定量評価大事

fintech 少人数、リモートワークしたい SRE自分の仕事を減らす Kubernetes サーバ増やすのが簡単PR送るだけでいける Digdag RPC protocol buf(xmlみたいに構造化されたもの) リソースとアクションをどっちが中心 rpcアクション 全部postでOK URLにアクション書いてるチャットサービス GRPC googleが始めた studdy http/2 binary 型がある、複数言語で連携する場合楽 バイナリでみにくい THEOではAPI通信全部grpc GVL分散処理 https://qiita.com/troter/items/d0eebeea1f04ef62fb5e

https://speakerdeck.com/cnosuke/fintechtorailstogrpcto

https://speakerdeck.com/cnosuke/fintechtorailstogrpcto リモートなチーム開発 難しさ

  • タイミングを設ける同期が難しい
  • チーム外

ActiveRecord アンチパターン

https://speakerdeck.com/toshimaru/active-record-anti-patterns

サークル福利厚生 mechanize

arrle jouny

マジックコメントでRubyの最適化をする Ruby Optimization with One Magic Comment

Ruby Optimization with One Magic Comment

ソフトウェアのパフォーマンスの最適化は簡単です:少ないことをする方法を見つける。 Rubyは遅いという評判があります。その印象は10年前からですが、主要な犯罪者の1人はガベージコレクタです。 これは、gabageを少なくしてRubyのスピードを上げることができますか?もちろん!

文字列の入門

Rubyは、すべての文字列が変更可能であるという不幸なデフォルト文法を持っています:

string = ""
string << "mike"

これは2つの文字列 ""と "mike"を割り当てます。最初の空文字列は、「mike」を含むように変更されます。 しかし、文字列の変異は非常にまれであり、より一般的なのは次のようなものです:

HASH = {
  "mike": 123
}

def getmike
  HASH["mike"] # unnecessary garbage here!
end

getmikeを呼び出すたびに "mike"の新しいコピーが割り当てられ、すぐにガベージとして破棄されますが、 RubyはStringをHash#[]内で変更されるメソッドの引数として扱うだけなので必要です。とても無駄です!

Freeze! Rubyは、割り当てを最小限に抑えるために、何年も前にFreezeの概念を導入しました。オブジェクトのフリーズを呼び出すと、 Rubyはそれを不変として扱うように指示します。 Rubyは "mike"を定数として扱うことができます:

def getmike
  HASH["mike".freeze]
end

Magic Comments! Ruby 2.3では、非常に良いオプションが導入されました。各Rubyファイルは文字列を不変として選択できます。 つまり、ファイル内のすべての文字列が自動的にフリーズし、ファイルの先頭に簡単な魔法のコメントが付きます。 これは、 "mike"に追加のStringを割り当てません。

# frozen_string_literal: true

HASH = {
  "mike": 123
}

def getmike
  HASH["mike"]
end

実世界 数年前、ガーベジコレクタへの影響を最小限に抑え、パフォーマンスを最大化するために、Sidekiqに多くのフリーズコールを追加しました。 先週、これらの呼び出しをすべて削除し、すべてのRubyファイルにfrozen_string_literalコメントを追加しました。 この効果を確認するために、Sidekiqのベンチマークスクリプトを使ってGC.disableを追加し、RSSが成長するのを見て、 frozen_string_literalの実験を行った。 Rubyでは、フラグ付きの機能を有効または無効にすることができます。 無効

$ RUBYOPT=--disable=frozen-string-literal bundle exec bin/sidekiqload
Created 30000 jobs
RSS: 105852 Pending: 25749
RSS: 178880 Pending: 21514
RSS: 252804 Pending: 17306
RSS: 326824 Pending: 12987
RSS: 399268 Pending: 8810
RSS: 472620 Pending: 4618
RSS: 547968 Pending: 319
RSS: 553568 Pending: 0
Done

有効

$ RUBYOPT=--enable=frozen-string-literal bundle exec bin/sidekiqload
Created 30000 jobs
RSS: 105824 Pending: 25687
RSS: 174948 Pending: 21700
RSS: 245448 Pending: 17669
RSS: 316848 Pending: 13559
RSS: 388544 Pending: 9447
RSS: 456704 Pending: 5288
RSS: 450552 Pending: 1160
RSS: 457536 Pending: 0
Done

rozen_string_literalは、生成されたガベージを〜100MBまたは〜20%削減します! 1行のコメントを追加してパフォーマンスを向上させます。

結論 gemの作者:# frozen_string_literal: true:gemのすべてのRubyファイルのトップに追加してください。 これは、文字列の突然変異を使用しない限り、すべてのユーザーに無料のパフォーマンス向上をもたらします。

Notes

  1. mutateを行う場合は、String.newを使って ""の代わりにStringを割り当てます。

  2. 魔法のコメントはRuby 2.3以降でしか動作しませんが、Ruby 2.2は1ヶ月でEOLなので、パフォーマンスチューニングをやめるのは間違いないと思います。