出会い系サイトで70人と実際に会ってその人に合いそうな本をすすめまくった1年間のこと

その人のことがわからないと本はすすめられないし、本のことも知らないとすすめられないし、さらに、その人に対して、この本はこういう本だからあなたに読んでほしいという理由なしではすすめられないんじゃないかとも思う。  自分が初めて体験し、立ち現れたものが何なのか、よくわからなかった。吉田さんを掘り下げておすすめする本を考えることはすごく面白かったけど、吉田さんは何を受け取ったのだろうか? うれしかっただろうか?  ただ、興奮の余韻はいつまでも頭から離れなかった。この面白さの正体を知りたかった。

面白かった。

ファーストラヴ

ファーストラヴ (文春e-book)

ファーストラヴ (文春e-book)

「人助けしたいやつはたいてい同情できる人間しか助けたがらない。助けたくない人間まで助けなきゃいけないのが医者と弁護士だ。だから迦葉くらい引いてる人間のほうが向いてるって。正直、兄貴のことはアホだと思ってたから、俺びっくりしちゃってさ。こいつには 敵 わないかもしれないってそのとき思ったんだよ。でも敵わないのが嬉しかったんだよな。変かもしれないけど」

面白かった!。島本さんの本は初めて読んだので他のも読んでみる予定。

gorilla/sessions と gorilla/context と net/http.Request.WithContext で気をつけること

net/http には net/http.Request.WithContext という context を紐付け直すメソッドがある。

実装はこうなっている。

func (r *Request) WithContext(ctx context.Context) *Request {
      if ctx == nil {
          panic("nil context")
      }
      r2 := new(Request)
      *r2 = *r
      r2.ctx = ctx
  
      // Deep copy the URL because it isn't
      // a map and the URL is mutable by users
      // of WithContext.
      if r.URL != nil {
          r2URL := new(url.URL)
          *r2URL = *r.URL
          r2.URL = r2URL
      }
  
      return r2
  }

ところで、session を扱おうとすると gorilla/sessions というのが出てきたりする。 echo*1 とか gin*2 のコミュニティ?の session ライブラリでも使われたりする。のでまだメジャなライブラリと言えるかもしれない。

gorilla/sessions は gorilla/context という標準の context package が出てくる前に生まれた request scope な値を入れるためのライブラリに依存している。 これは map[*http.Request]map[interface{}]interface{} という map で管理するというもの。

また

Important Note: If you aren't using gorilla/mux, you need to wrap your handlers with context.ClearHandler or else you will leak memory! An easy way to do this is to wrap the top-level mux when calling http.ListenAndServe:

という記述があり、要は最後にこの map から request object を消去しないとメモリリークするという話。

ただ、ここで上の Request.WithContext の実装見てわかるのだがポインタが変わるので、gorilla/context の map に入った request object を消すことが出来ない。 なので、context.ClearHandler を使ってもメモリリークする。

echo とか gin にはライブラリの context object があってそこに request やメタデータを入れられるのでそちらで管理している限りは request object のポインタは変わらず、最後に context.ClearHandler を呼べば無事 map から消去出来る。

もし Request.WithContext を使いたいのであれば gorilla/context の map に request object を入れなければ良い。 gorilla/sessions の store interface には GetNew (https://godoc.org/github.com/gorilla/sessions#Store) という method があり、Get は gorilla/context を利用してしまうので New の方を呼び、その session object 自体を Request.WithContext で紐づけてあげれば良い。

結論

gorilla/sessions v2 頑張ってほしい。

github.com

盤上の向日葵

盤上の向日葵

盤上の向日葵

「人はな、身体も人生も、百人いれば百とおりなんだよ。こうすれば幸せになれるとか、ああすれば金持ちになれるなんて嘘っぱちよ。腹もそうだ。一日三食摂ればいいというやつがいれば、一日一食で充分だというやつがいる。俺はな、腹が空いているほうが集中できるんだ。俺の身体はそうできている。自分の意見を人に押しつけるな」

面白くて一瞬で読み終わります。将棋わからない人にもオススメ。

君の名前で僕を呼んで

君の名前で僕を呼んで マグノリアブックス

君の名前で僕を呼んで マグノリアブックス

僕は数週間、彼の鋭い目つきをあからさまな敵意の表れだと誤解していた。だけどそれは、まったくの見当外れだった。シャイな人間にとっての、他人の視線の受け止め方にすぎなかった。  自分たちふたりが世界でいちばんシャイな人間だということに、僕はようやく気づいたんだ。

映画の方を先に観たけど、これを読むとさすが脚色賞という感じ。 ただ、映画に書いてない大事なシーンがいくつもあって4章目はただひたすらすごい。この4章目を読むために映画も1、2、3章目もあるような気がした。