以前の記事でRxJSに入門したとき、一緒に使ってみたライブラリ observable-hooks の使い心地に感銘を受けた。
RxJSのObservableによる世界とReactとの境界をhooksとして取り持つライブラリなのだが、これがConcurrent Mode Safeと謳っている。
実際、Observable Resourceというオブジェクトを経由してストリームの状態、例えば値が流れていない初期状態はPromiseをthrowで表現したり、エラー時は流れてきたerrorをthrowしたり、内部で流れてきた値をキャッシュしてrender時に値を提供することでObervableからReact Concurrent Modeの世界へ状態を変換してくれる。
使い心地としてはReact側からもデータフロー側からもConcurrent Modeのアレやコレをライブラリが全て隠蔽しており、ハハーンこれが来るべき未来なのかーと感心した。
とある事情によりネットワークの帯域を大まかに推定する必要に迫られたのだが、似たようなことをしているライブラリを参考に、指数平滑移動平均(EWMA)という方法を使うと良さそうなことを学んだ。
定期的にネットワーク帯域をサンプルしたとして、全体の平均をとってしまえば分母がどんどん大きくなり、急激な変化に反応できなくなる。そこで時系列順に指数関数的な重み付けを与え、新しいデータほど平均値に与える割合を多くしたものが指数平滑移動平均らしい。外れ値の影響を省きつつ機敏にネットワーク状況に追従できるので、[hls.js](https://github.com/video-dev/hls.js/blob/master/src/