CubicLouve

Spring_MTの技術ブログ

ActiveRecordでEXPLAINをする

ActiveRecord::Relation には explain メソッドがあります。 github.com このメソッドを使えば、ActiveRecord経由からでも EXPLAIN を打つことができます。 [11] pry > User.joins(:hoge).where(bar_id: 1).class => User::ActiveRecord_Relation [12] pry >…

Railsのcredentialの実装を追う + 自由にpathを指定してeditできるtaskを作る

スタートはここから rails/credentials_command.rb at 0f5c8c5bc61b7e382e64cad4846406021bc8cd35 · rails/rails · GitHub keyの生成 Rails::Generators::EncryptionKeyFileGenerator を使う これは rails/encryption_key_file_generator.rb at 0f5c8c5bc61b…

NextAuth.jsのJWEをrubyで読み込む

まあ、あんまり用途がないと思いますが、調べたので書いておく。 肝は下記の部分 github.com keyはKDFを通して生成する。 require 'jwe' require 'hkdf' next_auth_secret = "secretの内容" jwe = "" hkdf = HKDF.new(next_auth_secret, salt: '', algorithm…

AWSに対してTerraformでなにかする

公式情報のリンクを載せておく GitHub Actions github.com TerraformのplanをPRに乗せる方法 developer.hashicorp.com AWS のOIDC連携 github.com docs.github.com stateを保存するS3はバージョニングをonにする developer.hashicorp.com GitHub ActionsのEn…

ActiveRecordのjoinとかのメモ

moneyforward.com qiita.com

ページネーションのメモ

Web Archiveにあったリンクを残しておく YappoLogs: なぜ SQL_CALC_FOUND_ROWS や LIMIT OFFSET のページングが良く無いのか YappoLogs: Senna+MySQLをより超高速にするパッチ qiita.com

rubyのメモリ周りのメモ

記事もろもろ techracho.bpsinc.jp www.joyfulbikeshedding.com techlife.cookpad.com jemallocに関するチケット bugs.ruby-lang.org malloc_trim(0)に関するチケット bugs.ruby-lang.org その他 ld(1)の --as-needed がデフォルトになった影響でSEGVする場…

KarpenterとGraviton2を使った大規模ゲーム向けAgones on EKS を立ち上げるサンプル multi-cluster-allocation-demo-for-agones-on-eks の紹介

この記事はAWS for Games Advent Calendar 2022の19日目の記事です。 @Spring_MT と言います。 今回は、AgonesをEKS上で動かすためのサンプルを作ったので、そのご紹介ができればと思います。 Agones Agonesはマルチプレーヤーゲーム用のDedicated Game Serv…

ダラダラ考えるということ

仕事で新しいアイディアをその場で生み出すことは難しいと思います。 自分も、なにか新しいアイディアぽいものを言い出すとき、その場で思いついたものはほとんどありません。 そこで、自分なりにどういうことをしているかを改めて考えたとき、 ダラダラ考え…

Macで自由にパケットのフィルタリング、帯域制限、パケロス率の設定をする

Macにおいて、ネットワーク帯域の制御などはNetwork Link Conditionerで対応可能です。 下記ページよりAdditional Tools for Xcode を探してdmgをダウンロードし、その中にあるNetwork Link Conditioner.prePane からインストール可能です。 https://develop…

iptabコマンドとipcountコマンド

macOSでiptableってあるのかなと思ってコマンドを呼び出そうとしたら、iptabコマンドとipcountコマンドを偶然見つけた。 iptabコマンド iptabコマンドはIPv4形式での各ネットマスクに応じたアドレス数やプレフィックスの一覧を表示をする % iptab +---------…

rubyのIPAddrクラスを使えばIPアドレスがCIDR範囲に含まれるかもチェックできる

rubyにはIP アドレスを扱うのためのIPAddrクラスがあります。 docs.ruby-lang.org このIPAddrクラスを使えば、IPアドレスがCIDR範囲に含まれるかもチェックできます。 irb(main):001:0> require 'ipaddr' => true irb(main):002:0> cidr_sample = IPAddr.new…

MTUについて

MTUとは MTUは最大転送単位(Maximum Transmission Unit) MTUはデータリンク層(L2)の性質となる。 RFC 791: Internet Protocol データリンク層での最大のフレーム長(データリンク層のパケットを表すときにはフレームが使われる。) MTUはデータリンク層での性…

MySQLにおける外部キー作成時の自動インデックス生成

MySQLの外部キー制約において、外部キーと参照キーにはインデックスが必要です。 下記はMySQL 8.0のドキュメントですが、5.7でも同じような内容となっています。 dev.mysql.com 参照元のテーブルには、外部キーのカラムが同じ順序で最初のカラムとしてならぶ…

ActiveRecordのcallbackの実装を調べたときのメモ

Railsのcallbackの実体 callbackはActiveSupport::Callbacksを使って定義されます。 github.com ActiveRecordのcallback ActiveRecord::Callbacksに定義があります。 github.com ここでcreateなどが定義されます。 github.com define_model_callbacksは下記…

Railsのrspecのrequest specについて

rspec.info 上記の記事にあるように、Rails 5以降ではrails-controller-testing gemをアプリケーションに追加することは推奨されておらず、RSpecコアチームはrequest specsを書くことを推奨しています。 その理由として、request specでは、単一のcontroller…

線形合同法(Linear congruential method)のスペクトル検定による可視化

線形合同法は擬似乱数生成器の一つ ここでのA(乗数) C(増分) M(法)は定数で、AとCはMより小さい数を選ぶ。 このA C Mの選び方によって周期性は変わる。 どういう選び方すればをいいかは下記本を参照ください。 線形合同法で生成された数列がどれくらい乱雑か…

バイナリファイルを見る方法

白く塗りつぶしたpngファイルの例でやってみる。 % convert -size 128x128 xc:white white.png vimを使う場合 vim -b white.png でバイナリモードでvimで開いた後に下記コマンドでバイナリダンプします。 :%!xxd 00000000: 8950 4e47 0d0a 1a0a 0000 000d 49…

lsofの使い方まとめてみた

github.com lsof コマンドはプロセスがオープンしているファイルの一覧を表示します。 manには下記のように記載されている。 lsof - list open files ファイルはディスク上のファイルだけでなく、ネットワークソケット、デバイスなども含まれるため、オープ…

create-clusterコマンドを使ってローカルでredis clusterを簡単に作成する方法

redis の中に 含まれている create-cluster コマンドを使うと、Redis Clusterを簡単にローカルで立てることができたのでそのメモ。 手順 redisをcloneしてくる git clone git@github.com:redis/redis.git cd redis redisをビルドする make 自分の環境ではmac…

デカフェの生茶は普通の生茶より美味しい

生茶にはデカフェ版があるのですが、これ普通の生茶より美味しい気がしているんですよね。 お茶の旨味はしっかりと残っているんだけど、渋みが減っていてすっきり飲みやすい。 夏におすすめの一品です。 店頭で並んでいることがほとんどないので、流行ったら…

物理クロック 論理クロック

物理クロック ほぼすべてのコンピューターには、内蔵されている水晶発振器によって時刻を計算しています。 水晶は安定した周波数の電気信号を発振するため、振動子として広く使われています。 パソコンの電源が切れたり、充電が切れたりしても、マザーボード…

Tail Latencyについて

research.google この論文では、大規模な分散システムでは、まれなパフォーマンスの低下であっても、全リクエストのかなりの部分に影響を与えるとあります。 つまり大規模な分散システムではテールレイテンシの影響が大きくなります。 テールレイテンシは大…

証明書と認証局の確認

まずは証明書周りについての整理 証明書 証明書は電子文書。 ja.wikipedia.org 証明書の中には、公開鍵やそれに紐づく情報と証明書の発行元のデジタル署名が含まれています。 現在の公開鍵基盤として広く使われているX.509では、証明書の構造は ASN.1 という…

MacでMirageOSを動かしてみる

OCamlと仮想化の勉強のためMirageOSを触ってみることにしました。 setup mirage.io 通りにやってみる brew install opam opam init opam install mirage Hello World mirage.io git clone https://github.com/mirage/mirage-skeleton.git noopをやってみる %…

データベースシステム 改訂2版の数式でわからなかったところメモ

p 37 p 39 p 37 集合は波括弧 {...} を用いて集合の要素を明示的に列挙する。 一般に、条件 P(x) があったとき、それをみたす対象だけを全て集めた集合を、 と表記する。 a ∈ Aは aはAに属している、aはAの要素である。 ∧ は論理積、AND A ∧ Bは、Aであり、…

継続的デリバリー(Continuous Delivery, CD)について

継続的デリバリー(CD)とはなにか? 根本は アジャイル宣言の背後にある原則 になるかと思います。 顧客満足を最優先し、価値のあるソフトウェアを早く継続的に提供します。 Our highest priority is to satisfy the customer through early and continuous d…

Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databasesを読む(その4の補足資料)

MySQLは8.0.19を使っています。 LSN LSNとは Log Sequence Number の略で、単調増加する値で、redoログに書き込まれたバイト数分だけLSNが増えます。 dev.mysql.com MySQLでは SHOW ENGINE INNODB STATUS でLSNを確認できます。 --- LOG --- Log sequence nu…

Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databasesのまとめ

Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases の翻訳まとめページ https://www.allthingsdistributed.com/files/p1041-verbitski.pdf 翻訳内容 spring-mt.hatenablog.com spring-mt.hatenablog.com spring-…

Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databasesを読む(その9 CONCLUSION)

9 CONCLUSION Auroraは,クラウドの環境で、可用性も耐久性も妥協しない、高スループットのOLTPデータベースとして設計した。 この大きなアイデアは、伝統的なデータベースのモノリシックなアーキテクチャからの脱却と、ストレージをコンピュートの分離であ…