はてなキーワード: 冪等性とは
冪等性(べきとうせい、idempotency, idempotence)とは、同じ操作を何度繰り返しても、同じ結果が得られるという性質です
私の周りの多くは、吸った後行動力を維持できるという理由でindicaではなくsativaを好むようですが、
私にはどちらもすぐ眠くなってしまうのでハイブリッドで問題なしです。
購入し、家路に着く前にポチ袋を開けて一呼吸。良い香りです。色合いも期待が持てます。
家に帰るといつもの様にヴェポライザーにセット。
準備ができて、いただきます。
効き目も上々です。
前回はAK47というものを頂いたのですが、香りが悪く(ケミカル臭がする)、効きもあまり良くありませんでした。
栽培方法が悪かったのかもしれませんが、とにかく今回はいい感じで良かったです。
しっかりハッピーな気分になれました。
あと、飲酒時と同じように、大麻を吸って寝落ちすると大体変な時間に起きてやや冷めた頭で水を飲んだり散らかった部屋を片付けたりするのですが、
そういうこともなくぐっすり眠れました。
ContainerPatternで"Ambassador Pattern"(Googleで直訳すると、大使の紋章..めっちゃかっこいい)というのがある。
https://docs.microsoft.com/en-us/azure/architecture/patterns/ambassador
なにが大使やねんというと、サービスAがサービスBに接続するときにサービスA'がサービスAの代わりにしてくれるかららしい。外交官的な。
接続にかかわるもろもろ、回線の監視だとかリトライ処理だとか認証だとかそもそも接続する設定値だとかそういったものを代わりにやってくれるサービスを別途にもうけようぜという仕組みだそうだ。
その仕組みがはまる例として
・異なるプログラミング言語だとかフレームワークのサービスを織り交ぜている
という時だそうだ。
ふむふむとうなづきつつ、アンチパターンの方で躓いた。
一つのプログラミング言語しか使ってない場合はメリット内からクライアントに直接通信用のライブラリ入れろよというのは納得...したんだが、
Consider the possible impact of including generalized features in the proxy.
For example, the ambassador could handle retries, but that might not be safe unless all operations are idempotent.
一般的な機能をプロキシに含める影響を考慮してください。例えば、リトライ処理をするとき、全ての処理(注釈: アンバサダー⇒リモートサービスに対する処理)が"冪等"でなければ安全ではないかもしれません。
冪等ってなに?え、リトライ処理でデメリットが生じることがあるの?(ログインの試行回数とか?)
有識者的にはあーっ知ってるよで終わる話(隣の技術者に聞いた感じ)なのかもしれないけどそもそもidempotentの訳を知らなかったので
ググると、"treasure data"の中の人のブログにたどり着いた。
これだよ!!これが俺が知りたかったことなんだ。ありがてぇありがてぇ。
接続しようとしている外部リモートサービスの話で合って、リトライする側のアンバサダーサービスが考える話ではないし、
接続しようとしているサービスに応じてアーキテクチャ設計が変わっちゃうと本末転倒感あるけど、
...はぁ、勉強したー!!
Qiitaに書こうかと思ったけど、言いたいことも言えない、こんな世の中じゃ。
モバイルファースト、APIファーストな文脈でハイブリッドWebをやってきた目からすると、サーバーサイドでHTMLを生成してページ遷移させるなどという90年代調のクラシカルな発想を基本に据えるフレームワークはとても斬新に思えました。HTMLをゴリゴリ生成するなんてよほど特殊な最適化をしようとするのでなければそもそも発想として出てこないです。それでいてDSLやメタプログラミング等のテクニカルな技法が宝石のように鏤められている様はまるでエジプト時代の骨董品を見るかのような趣がありました。turbolinkなどは、かつて表計算ソフトに出しゃばっていたイルカを思い起こさせる味があります。かつて慣れ親しんできたSPAが星のように遠い存在になりました。
Web界隈の人々がモデルだとかアクティブレコードだとか"MVC"だとかを非常に具象的に話す様を見るにつけ、お前らどんだけPofEAA読み込んでるんだよと畏怖していた時期が僕にもありましたが、どうやら彼等はRailsのクラスやディレクトリという特定の実装について話していただけだったようです。Modelという概念もこれだけ肥大化してしまったら、オリジナルな概念で彼等と会話するのは諦めるべきかなと思いましたし、Railsの"MVC"をアンクォートして語るのはもはや害悪であるとすら感じました。
Rails界隈の人がよく「Railsの流儀」や「正しい"MVC"」というのを口角泡を飛ばして議論しているのを目にするのですが、おそらく外に広がる不条理で火傷を負って快適なRailsの世界に引き篭もった結果としての一種のストックホルム症候群なのだなと思いました。いまやAjaxとかWebsocketとかWebRTCとかを組み込もうとする至極真っ当な方法論がとてつもない高難度に見えてきます。設定よりも規約、というのも一つの方向性だと思いますが、ドメインやサービスレイヤの名前空間を構築しようとしたりコードジェネレーションしようとしたりしただけで地獄のようなCircular Dependency罰を受けてしまったので、自分がとても間違った事をしているような気がしてしまいました。とはいえConcernsに特別な名前や役割を与えられても正直しんどいので、皆が皆libにゴミを放り込んでいく様子にも納得がいきました。
RailsをAPIサーバーとして使おうとするとまずビューが無くなってMとCだけになりますが、いわゆる"MVC"の文脈で育ったエンジニアがなぜ息を吸うようにFat ControllerやFat Modelを作ってしまうのかという事が良く分かりました。多くのRailsのリファクタ手法と称されているものはクラスを書くファイルを分割する事以上のものでは無いように思えたので、Rails使いを大きめなAPIサーバー案件に回すときはセットポジションでDDDの青本を投げつける必要が有るなと思いました。
ビューとコントローラを結合させた場合、結合テストはCapybaraとかのBDDでマークアップサイドとの干渉を恐れながら強い気持ちでメンテしていくしか無いのかなと思いました。おそらく脳に電極を埋め込んでいるか、緑色のランプを見るだけでハイになれる特殊な人にしか生き抜けない闇が垣間見えました。コントローラを薄くしてサービスレイヤを挟めばその辺りもうまくいけそうな気がしましたが、ビューからヘルパーやモデルがいくらでも透けて見えてしまうという状況では裏側の完全性に自信を持つ事は難しそうでした。
ビューがRubyを叩いて永続化レイヤと直接コミュニケーション出来るというのはとても生産性が高いのだろうとは思いましたが、こうして出来たパーシャルやら何やらをデザイナーとどうやって共有するかを考えると頭痛が痛くなりました。おそらく適当に切り出して綺麗な空間をassets以下に構築した上でpublicにRPCのような窓口を備えたゴミを量産していくのかなと思いましたが、もっと綺麗な方法はあるのかもしれません。でもきっとRails案件に関われるデザイナーはRubyもバリバリ書けるに違いないはずなので、ここが問題になる事は無いのだろうなと思いました。
RESTはとても美しいパラダイムではありますが、そもそもHTTPがさほど美しくないので歪んだ空間には目を背けるか勝手解釈を与える事で人は初めてRESTfulを名乗る事が出来るのだと思います。GETがbodyを(公式には)持たないという事について美しい説明を与える事は出来ないでしょう。サーチAPIはどうしますか。ステータスコード足りなくないですか。401エラーはどうしますか。そしてRESTはあくまでリソースを抽象化する美しい概念なので、アクションや副作用については貧弱です。動詞が足りないですし、一般動詞に狭義の意味を与えてドキュメントするのは二度手間にしか見えません。PUTには冪等性があるべきみたいなこだわりは家の猫にでも説教してればいいと思います。というわけで、REST的な設計を拝借することはよしとしても、「○○はRESTでは無い故云々~」みたいな注文はやめて頂きたいものです。
とか言わないで欲しいです。こういう時にセットでPHPをディスって悦に浸るのは知る限りRubiestとPythonistaと中学生だけです。それにこれはあくまでサーバーサイド初心者の感想なので、想像するにこれ系のFWは多かれ少なかれ似たような不満を抱えるものなのかなと思います。というわけで、おそらくこれから選択肢がある限りはRailsを使い続けると思います。