Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mj-hd/ac3751e696a96f30a6223442a6fbad07 to your computer and use it in GitHub Desktop.
Save mj-hd/ac3751e696a96f30a6223442a6fbad07 to your computer and use it in GitHub Desktop.
20210322_RxJSはハード_暗号理論は楽しい

RxJSはハード

ここ最近、RxJSに入門していた。RxJSを使ったデータフローの設計からチャレンジしてみたが、いくつか壁にぶつかり、こりゃエライこっちゃと感じた。

方針: Push-basedで取扱が容易なデータフローを構築する
Switch from pull to push-based approach with RxJS | by Wojciech Trawiński | JavaScript everyday | Medium
https://bitrock.it/blog/getting-started-with-react-push-based-architecture.html
Push Based Architecture With Rxjs! · GitHub

ネット上に転がっているAngular周りのベストプラクティスやflutter界隈で使われているBLoCを参考に、内部にstate$という名前のBehaviorSubjectを持ち、関心のある値が変更された時だけ値が流れるようなObsevableを公開するクラスを定義することで、Push-basedでかつ中央集権な状態を持つ取扱の容易な状態管理を行おうとした。
基本的にはうまく動いたが、一つ、errorを誤ってstate$に流してしまった時に後続のobservable達を巻き込み再起不能になることがあり、state$にerrorが流れないことを静的に担保することもできず、こりゃ一体どうしたことかと思い悩んだ。
RxJS的には全ての箇所でerrorをきちんと処理しようという思想なのだろうが、型で担保されているならまだしも、目視でここを守り抜くのはつらい。何かアーキテクチャとしてエラーが流れ込まない保証をしなければならないと思いつつ、mapオペレータで何かランタイムのエラーが起きてカジュアルにthrowされてしまうこともあるし、良い方法が浮かばなかった…。
全てはJavaScriptのthrowがいけないのか…?
RxJSは調べた限りコレ!というフレームワークなどは見つからなかったし、導入しているプロダクトではどのようにこのあたり担保しているのだろう。

暗号理論が面白い

高校〜大学まで数学を大の苦手としてきて、センター試験などは数学が30点ぐらい、大学の数学の授業は3年連続再履修などボロボロでなんとか生き延びてきた自分だが、友人と輪読会という形で苦手克服の荒治療を始めた。
暗号理論と代数 - 松本 眞

思いのほか、高校数学でやったような行列の知識や、集合の知識があればあとはネット上の参考資料を読みながら学ぶことができ、さらにエンジニアであるというアドバンテージ—例えば、普段からHTTPSなどで暗号化には触れている点や、実際に簡単な暗号化/複合化の実装を行うことができるなど—が活かされ、そこまでハードルが高くなかった。
普段触れている暗号化がどのような歴史でどのような理論のもと動いているのかを理解できると、エンジニアとしての教養—教養とは何かの情報に触れた時、同じ情報量でもより楽しむことができたり、より多くの学びを得ることのできる能力だと思っている—が増え、理解に深みがでた。

特に下の記事はエンジニアでも理解しやすく、楕円曲線暗号という将来性もある暗号を学べるのでオススメ。
楕円曲線暗号アルゴリズムを理解する|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment