2013年4月19日金曜日

Play framework Enumerator.fromFile とjava.io.File.delete の不思議

ファイルをレスポンスとして送信する処理で、一時ファイルとしてサーバーに作成し、送る前にコンテンツを読み込んで削除するってコードを書いたんだけど、(以下)


val fileContent: Enumerator[Array[Byte]] = Enumerator.fromFile(file)
val size = file.length.toString
file.delete // (1) THE FILE IS TEMPORARY SO SHOULD BE DELETED 
SimpleResult(
 header = ResponseHeader(200, Map(CONTENT_LENGTH -> size, CONTENT_TYPE -> "application/pdf")),
 body = fileContent)
fromFileってcallbackをwrapしてchunkごとにファイル読み込むから、ファイルの内容すぐにロードしなくて、実際はおくるときにbufferしてるから、先にfile.deleteするとおくれないんじゃないかって疑問わいてきて、「ひょっとしたらjava.File.deleteが待ってる?」って憶測をStackOverFlowとPlayのグループに質問したら、
多分そうなんじゃないかということなんだけど、 本当かなー? 
久々にJavaのソース読んでみるか。
fromFileはinputstreamqを中で生成してるけど、 生成しただけでFPってつかまれるんだっけな?
あと、File.deleteが非同期でエラーもはかず待つってのもうそくさいし、やっぱりfromFile時点でコンテンツロードされてて、 Resultの時にクライアントにstream送信されてるだけぽいけど、Enumeratorのコードざっとよんだかぎり、やっぱりResult時にファイル読んでる気もするし、、、うーん。
Javaのコード読んだら、追記しよう。

2013年4月9日火曜日

Scala Seq(List) 便利メソッドメモ

こちらのブログで知った
http://d.hatena.ne.jp/sudix/20110217/1297928331

zipIndex

添字付きでごにょにょしたいときに便利。

こういうのあるからScalaいいなと思ってしまう。

そしてまだまだだな自分。


自分にとっての格言とは

気がつけばインターネットで膨大な量の情報を取得しはじめて久しく経つが(自分の場合、ほぼ社会人生活の長さと一致する)、実はそういった情報過多生活、そして職業エンジニアとしての多忙な日々を生き抜く上でいつも頭の片隅にある言葉がある。

いつどこで言われたかは定かでないが、もう15年ぐらいは前に、どこかのTV番組で教授こと坂本龍一さんがインタビュアーに向かって言われた言葉。
 (以下うる覚えだが確かこんなやりとりだった)

聞き手「どのように(そうやって新しい膨大な)情報を吸収されているのですか?」
教授「どの情報を耳にいれないかを常に考えていますね

「今の時代勝手にほしくもない情報が入って来るので、いかに無駄な情報に脳みそをうばわれないかを考えています」

もはやうるおぼえなので、発言自体は全く違ったものだったかもしれないが、今でもそのときのTV画面と共にこの発言が頭に残っている。特に予定して見た番組でもなく、なんとなくつけたTVでたまたまとびこんできた内容だったと思う。そして自分は坂本さんはすごいとは思うが特にファンとかそういうわけでもない。(YMOもすごいと思うがそれよりPerfumeのほうが好きだ)

これって今でいうキュレーションの発想なんだけども、なぜかそれ以降こころの奥にささって自分のエンジニアキャリアのヒントのひとつになっている。

そう、ITの進歩で人間は情報発信について格段にその量を増やし、内容も充実したかにみえるが、吸収する人間自体の肉体の進化は古代からそれほど進んでいない。
(これは「ウェブはグループで進化する」 の中で述べられてる表現を拝借した)

タダでもしくは安価に大量に発信でるようになったoutputとしての情報にくらべ、自分の脳みそで吸収できるinputとしての情報は希少価値なのだ。

吸収に限界がある脳を未熟ととらえ、ひたすら多くの情報を得ようとするか、脳みそのキャパを貴重な場所としてとらえ、そこに入れる情報を常に吟味するかで仕事や学習の仕方が大分かわってくるように思う。

自分の場合、「何が本質的に重要か」「何が後回しでいいか」「何が人に譲っていいことか」「本当にやりたいことは何か」などを考えて、やること、やらないこと(例えば覚える業務や技術の内容、読む本、読まない本を決めるなど)をばっさりわけることで、自分の能力より少し上の評価を得て来たと思う。自分では地頭はそれほどよくないと思っている。

逆に自分よりはるかに頭はいいだろうと思う人が以外と結果を残せてなかったり、評価が低いのを見うけると、この脳みそバランスがうまくできてないのかなと思う。
つまり、なまじ頭がいいので、全部を飲み込み消化しようとする人。(頭よくなくてもやる人もいるが)

こういった感じで、自分には「本当の意味や詳しいことは知らないがなんとなく頭に残っててそれを自分流に解釈して生きるヒントにしている言葉」があり、それを勝手に格言と呼んでいる。

で、自分の限りある一次記憶装置の内容を適切に二次記憶から置き換えてきたことで高スペックでないCPUを活用できてきたように思う。

まあ、この考え方には自分のスペックを低く見積もりすぎたり、成長や衰退を考慮しないといった落とし穴もあるのだが。

ちなみに、他にもいくつかそういう自分にとってもヒント的な格言があるのだが、いますぐ思い出せない。 ヒントなので、その局面に来た時あたまのどこかからにょきっと顔を出すんだろう。

















Heroku Meetupに参加してきました

こないだのサンフランシスコ出張で参加したWAZAカンファレンスの発表もちょっくらしてきました。
内容はほとんど会社のブログに書いちゃった。。
(最近このパターン多いな)