Memo:

アイデアや気づきとかが雑に書き殴られる

RxjsのSubjectを活用したNode.jsプログラムの依存関係制御

Node.js で依存関係をうまく制御するために、Pub/Sub パターンを使いたかった。調べて見つけた Rxjs の Subject を利用することで上手く実装できたと思う。Pub/Sub を使うと何が嬉しいのかと、Subject を使った実装をまとめてみる。 例には以下の FizzBuzz …

@golevelup/nestjs-rabbitmq で実装した consumer が queue を消化できなくなった

このライブラリで作成した consumer が queue を消化できなくなり、メモリ使用率がじわじわと上昇し(300MB/8h 位の速度) OOM で停止してしまった。 RabbitMQ の GUI やサーバーのメトリクスを見ると以下のような状況になっていた。 起動しているすべての c…

docker container のとめかた

このような Dockerfile を $docker build . -t webapp:latest でビルドした後、$ docker run webapp:latest でコンテナを立ち上げることができる。 # Dockerfile FROM python WORKDIR /app COPY . /app RUN pip install flask ENTRYPOINT ["bash", "entorypo…

Jest でテスト網羅率(カバレッジ)を計測したい

Jest は Meta(元 Facebook) が保守している、JavaScript のテスティングフレームワーク、らしい。Jest を使うと、コード網羅率(カバレッジ)を簡単に計測できる。 カバレッジを計測することで、テストが不足しているコードが検知できるようになって嬉しく…

UUID v4 はなぜ暗号的に安全な乱数が使われているんだろう?

UUID は分散システムで一意な Identifier として使えること(= 衝突しない前提で使える)を目的にした ID で、その version 4 はランダムに作るやつ。 この前ふと、uuid v4 をパスワードのような使い方をしていいのか?が気になって調べてみた。 Secure - Cr…

JavaScriptのProxyを使って、サードパーティーのクラスを書き換えずにログを出力したい

以下のようなサードパーティのクラスがあって、メソッドに渡された引数や結果をログに残すためにインターセプトしたい。 自分らが管理しているクラスなら、デコレーターを作るのがいいと思うが、サードパーティーのクラスを書き換えるのはちょっと嫌だ(保守…

JavaScript でクラスのメソッド名を取得する方法 - プロトタイプチェーンを利用して列挙不可能プロパティを取得する

Object.getPrototypeOf() でプロトタイプにアクセスし、そこから Object.getOwnPropertyNames() で得られる。 Object.getOwnPropertyNames()は列挙不可能プロパティも取得できるという特性を持っているので取得が可能になる。

DRY原則と直交性、仕様変更時の影響を考えてみる

良い設計とは?と聞かれるとパッと答えるのは難しいが「悪い設計とは?」と聞かれたときには以下のようなものが思い浮かぶ。

TypeScript で stripe-node API のレスポンスから requestId や statusCode を取得したい

TypeScript + stripe-node で API の requestId や statusCode 等を取得したい時、API の返り値の lastResponse から得られる。しかし、 Property 'lastResponse' does not exist on type 'Session'. と TypeScript に怒られることがある。 var customer = a…

疑似乱数(xorshift)の内部状態と生成される数値の関係について考えてみる

※細かく調べたり検証を行ったわけではないので、話半分に見てください 以下の記事で疑似乱数(xorshift)について考えていた時にある疑問が浮かんだので、それについて書いてみる。 buri83.hateblo.jp 実験のしやすさのため、周期が 216 - 1 の xorshift を…

疑似乱数は本当に予測できるのか試したい

世の中には2種類の人間がいる... という文句、妙に説得力がありそうで、この後主語もスケールも大きい名言が続きそうなやつ。 人間だけではなく疑似乱数についても、2種類に分けられるらしい。 「世の中には2種類の疑似乱数がある、次の出力を予測できるか出…

変数の知識の重複による不整合を防ぎたい(DRY原則とオブジェクト指向)

オブジェクト内で同じ意味を持つ変数が複数存在する場合(つまり、DRY な状態になっていない)、不整合が発生する可能性がある。 例えば、注文を表す Order と、商品を表す Item を考えてみる。Order は複数の Item オブジェクトをまとめる役割である。Item …