M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

三浦しをん『愛なき世界』

愛なき世界 (単行本)

愛なき世界 (単行本)

三浦しをんの新刊を読みました。彼女の作品の好きなところは、落語や漫才のようなリズム感のある語り・会話と、(階級とかジェンダーとかの形で)構造化された客体かつ構造化する主体としての登場人物たちの性格付け、それらをベースにした内面描写です。
作品によって「落語や漫才のような・・・」の部分が明確に出ていたりそうでなかったりしますが、本作は前者。植物の形質や形成の研究に取り憑かれた人びとと、そういう人びとに取り憑かれた人びとのお話で、そこだけいうと堅苦しいところがあるのでしょうけれど、全編通じてコメディぽいところもあり、気楽に読むことができます。

ところで先日イオンモール未来屋書店で本書を探したところ、本書がないどころか三浦しをん著の単行本が一冊もないことがわかり愕然としました。そんなことってあるだろうかと店内をぐるぐる見て回りましたが事実ありませんでした。

十数年ぶりに焼石岳

昨日、十数年ぶりに焼石岳に行ってきました。つぶ沼コースで日帰りです。

以前来たときにはまだ胆沢ダムはなく、石淵ダムが現役でした。今現在はすでに石淵ダムの面影の欠片もなく、ダム建設にともなって国道397号線(焼石ビーチライン)もすっかり姿を変えていました。

雲が多いものの日差しもあり一応の晴天。つぶ沼から石沼あたりにかけてのブナを主体とした森の中は、気温はそれほどでないものの風がなく湿度も高いため、歩くと汗がだらだら。銀明水のすぐ向かいの斜面にはいつものように若干残雪が残っておりその周辺はひんやりとした風が吹いていました。姥石平周辺から山頂にかけては流石に風があり、比較的快適に歩くことができました。

花は端境期らしく、あまり多くは咲いておらず。キンポウゲ、シャクナゲ、アヤメはまっさかりという感じでしたが、ヒメカイウはほとんどすべての株が白い花弁を落としてしまったあとでした。ちょっとびっくりしたのは山頂の岩陰にアジサイの小さな小さな株があり花を咲かせていたことでした。

https://www.instagram.com/p/BlNPDDOjkzK/
十何年かぶりの焼石岳
https://www.instagram.com/p/BlNOkZeD3J7/
キンポウゲ
https://www.instagram.com/p/BlPCG3FjKu_/
シャクナゲ
https://www.instagram.com/p/BlNOtvZj2tF/
チングルマ

ASP.NET Core 2.0でWebAPIにXSRF対策を仕込む

今日はASP.NET Core 2.0でWebAPIのコントローラーのアクションが起動するまえにXSRF対策の事前チェックを行う方法を調べていました。

HTMLのform要素をPOSTリクエストの送信元とする場合については情報も多くありました。しかし、jQueryのような低レベルのAPIであれAngularのようなフルスタックなフレームワークが提供する高レベルのAPIであれ、JavaScriptコードを送信元とする場合についてはあまり情報がありません。

Web上で紹介されている方法としては2つ。1つ目はASP.NET Coreフレームワークによりform要素内に書き出されたXRSFトークンをJavaScriptコードから取得してAjaxリクエストに使用するもの。2つ目は特定のパスにアクセスしたときだけCookieのエントリーとしてXSRFトークンをクライアントに発行し、クライアント側のJavaScriptコードからこれを取得してAjaxリクエストに使用するもの。

情報量としては前者の方が多かったです。しかし、この方法ではViewをレンダリングするアプリケーションとWebAPIを提供するアプリケーションは同一でないといけないのです。シンプルには違いないものの、どこか理屈というか哲学というかに引っかかるところがあります。ViewとWebAPIをなるべく疎結合にしたいと考えるなら、後者の方を選ぶことになると思います。

後者の方法はこちらで紹介されていました。このWebページの例ではAntiforgeryTokenMiddlewareというミドルウェア・クラスを定義して、「HTTPリクエストを解析して特定のパスに対するリクエストであったら、XSRFトークンを新規作成、HTTPレスポンスのSet-Cookieヘッダーを通じてクライアントに渡す」というロジックを記述しています。そしてこのミドルウェアStartup.Configure(IApplicationBuilder, IHostingEnvironment)でアプリケーションに組み込んでいます。

一方でConfigureServices(IServiceCollection services)ではクライアントからのHTTP要求時にトークンがどこに格納されて送信されてくるかを指定しています。これをあえてしないとフレームワークトークンがフォーム・データとしてHTTP要求本文の一部として送信されてくることを前提とした動きをしてしまうとのこと。

わかればどうということもない、ほんの少しのコードで実現できるのですが、意外と情報が少ないので苦戦しました。