@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Backbone.View

Backbone.View を読んだ。ざっと眺めただけ。

http://documentcloud.github.com/backbone/docs/backbone.html

  • model: とか collection: とか tagName: とかは viewOptions というのに定義されてる
  • selectorDelegate というやつで、 jQuery とかの selector の検索範囲を特定の DOM 要素以下に限定するようなのを使っていて、 this.$ にそれで得られたオブジェクトをバインドしている
  • initialize, render は最初は空っぽな感じで、上書きして使うことが想定されている
  • make というのがあって、動的に DOM 要素を作って返す。テンプレートが必要ないような小さい要素の場合に使う、みたいなメモがあるけどどう嬉しいのかよくわからず
  • delegateEvents は Backbone.View 独特の "click .button" : 'save' みたいなイベントハンドラの宣言を受け取って、実際にイベントハンドラをバインドする。 new Backbone.View() したときに実行される。 for in でループして一個ずつやっている。 underscore.js の _.bind と jQuery などの $.bind が入り交じってて、 underscore.js のほうの理解があいまいなのでぼんやりしてしまう。 this を固定するためのものだっけ _.bind は。
  • _configure で viewOptions が Backbone.View のインスタンスのプロパティに生える。
  • _ensureElement で el: の値を初期化する。 Backbone.View のインスタンスが、実際どの DOM 要素と対応してるのかを示すプロパティ。自前で指定すればそれを使い、そうでなければ tagName とかから自動生成。これも new Backbone.View() したときに実行される。

delegateEvent で this.el に対してイベントハンドラをセットするあたりがこのクラスのキモで、あとは render() のインターフェースを揃えて、 DOM 操作がカオスにならないようにする、くらいの意義なのかな。薄い印象を受けた。眺めただけなので細かいコーディングレベルまで踏み込まずぼんやりしてるため、この行のテクニックが!みたいな感想が書けなくて薄いのはこのエントリのほうだ。

Backbone.sync

Backbone.sync を読んだ。ざっと眺めただけ。これだけ小文字 (Sync ではなく sync) なのがなんか気になる。と思ったらこれは new するためのクラス(関数)じゃなくて単なる関数だからだった。

http://documentcloud.github.com/backbone/docs/backbone.html

  • リモートサーバの API を呼び出して、 Backbone.Model なインスタンスのデータを取得したり更新したりする永続化ストレージと通信するためのクラス。デフォルトでは Rails の resources ルーティングのルールを想定した作りになっていて、違う感じの API をバックエンドにする場合はこのクラスを上書きしろ、という感じ。
  • ちょっとした変更は全部書き換えなくていいように専用の変更用インターフェースがある。 emulateHTTP とか。
  • デフォルトではリクエストは JSON でおくる。 emulateJSON が有効だとフォーム送信の形式を使う。
  • 送信用パラメータとかリクエストヘッダとかを調整した上で、最後は $.ajax を呼び出して丸投げしている。なので、 jQuey なりそういうライブラリが別途必要。このへんは割り切ってるなーと思う。

要するに、単なるパラメータ調整用のラッパー関数なので、短いしやってることもすぐわかる感じだった。 xhr.setRequestHeader('X-HTTP-Method-Override', type); とかは、まぁこれ使えば覚えておく必要はないんだけど、これを使わないで自前でこういう風にリクエストをおくるときに、こういうリクエストヘッダの指定漏れとかでうまく動かなくてデバッグに苦労するとかよくあるので、見たことがあるだけでも記憶の底にひっかかっていて解決の糸口になったりするので、かけ捨ての保険みたいな意味で読んでおいてよかったと思う。

Backbone.js Helpers 他

Backbone.js の Helpers とか、その他の細かい部分のコードを読んだ。ざっと眺めただけ。

http://documentcloud.github.com/backbone/docs/backbone.html

  • Initial Setup では、すでに Backbone がロードされてたら初期化を二重にやらないようにしていたり、 node.js など CommonJS の仕様に準拠した実行環境のときは exports まわりの仕様にあわせるなど、そんなことをやってる。あと underscore.js をロードしたり。 jQuery or Zepto の $ をとってきたり。
  • var new_backbone = Backbone.noConflict(); みたいにして、 window.Backbone はもともとロードされてたほうの Backbone オブジェクトに保ったまま新しくロードしたほうも使う、とかできる。
  • extend, inherits, ctor あたりはプロトタイプ継承ツリーを作ってる・・・んだと思うけど ctor の存在意義がいまいちよくわからない。constructorとprototype.constructorがわからなくなった - 宇宙野武士は元気にしているかを読んだら余計にわけがわからなくなった。 JavaScript りょく、というかプロトタイプベースのオブジェクト思考の理解が足りない。
  • あとは本当にユーティリティ関数。
  • 全体を (function(){ ... }).call(this); で囲って、無名関数を即時実行するイディオムなのはわかるんだけど、 call を使うのはなんでなんだっけ・・・どこかで (function(){})() との違いとかを比べてるブログ記事を見た覚えがあるけど忘れた。

Backbone.Hogehoge みたいなのにきれいにまとめられていて、あぶれた部分はとても少なかった。全体的に、整理されているし、名前の付け方も Ruby とか Rails っぽくておれには馴染みがあるし、コードもあんまり奇抜なところはなくて (while とかで破壊的に何かするやつは意味不明だったけど) 読みやすいコードだった。 jQuery とか、いまよりもっと勉強不足だった頃に眺めて最初のほうですでにつまづいてしまったけど、これはそれよりも読みやすくて、 JavaScript ライブラリのちょっとしたものを読むとっかかりとしてはいい教材だったと思う。これを読んで自信をつけてから大物に挑むのがいいなと思った。

Backbone.js のソースコードを読んだ

Backbone.js (annotated source code)ソースコードを読んだ。単なる趣味です。全体的に読みやすくて読んでて楽しかった。他人が読んで役に立つものでもないので、そういうのをお探しの方は Backbone.js Advent Calendar 2011 あたりをどうぞ。以下、読んで書いたブログ記事へのリンク集です。

2011年を振り返る

2011年ももう終わるので、この一年を振り返ってみる。2010年の総括とも比べてみる。

仕事

今年も引き続き 30days Album の開発に携わった。サイトは一年で順調に成長した。これを書いてる時点でアップロードされた写真ののべ枚数は 91,907,412 枚と、 2010年末と比べると増加ペースがぐっとあがった。登録ユーザー数も 10 万人を超えた。社外の方と会って自己紹介すると「使ってます!」と言ってもらえることもしばしばあった。検索エンジンでも上位になってきたし、一年前よりも広く使われるようになった。しかし人気が出てきた反面、サーバ・インフラのコストがかさんだり、過負荷をさばききれず障害が長期化してしまった時期もあった。来年は安定稼働と、いろんな意味で速度の改善を目標に引き続き頑張りたい。

生活

年明け早々結婚した。これ以上のイベントは人生でもそうそうないので、それだけでメモリアルな一年だといえる。秋には結婚式も挙げた。夫婦仲は円満で、幸せです。体調面では、持病の症状はおさえられていて大崩れすることなく過ごせたが、年末近くになってちょっと検査結果が悪くなりだしてしまった。来年はしばらく病院通いが多くなりそうだし、気を引き締めて節制につとめたい。

勉強

去年以上に本を買わなかった。そのかわり Kindle を活用する機会が増えた。でかい本は買っても読まないということをようやく自覚したので、もうサイン入りだから捨てられないとか特殊な事情がある本をのぞいて、来年からはばんばん処分してしまおうと思っている。読書は Kindle で読める範囲内だけでやりくりしても十分だと思う。もともと読書家でもないし。社外の勉強会にはそれなりに参加したけど、自分のなかで「勉強会」というラベルがつく集まりに魅力を感じなくなってきたこともあり、ゆるやかな距離感とペースに移行した感じがある。社内では JavaScript ライブラリのソースコードリーディングなどを有志で行う会を半年ほど主催した。その流れで、スマートフォンでいろいろなソースコードを読む機会が増えたのは良かった。来年も Kindle で技術書を読み、ソースコードを読んでいきたい。あと、英会話は張り切って始めたものの、継続できなかった。来年どうするかは改めて考えたい。

イベント

二年連続で http://d.hatena.ne.jp/a666666/20111014/1318607048:title=YAPC::Asia で発表した。今年は自力でやりきった手応えがあり、そのおかげでようやくここ数年来の憑き物が落ちたようなすっきりした気持ちになれた。ただし発表内容やプレゼンテーションは反省点も多く、来年以降また機会があったらもっとうまくやろうと思う。 RubyKaigi にも参加することができた。春に #shibuyarblunch をはじめて、ずっと継続することができたし、いろいろなひとと知り合えた。一緒にやってくれている皆さんに感謝したい。社内では、さっきも書いたけど JS リーディングという JavaScript ライブラリのソースコードリーディングをする会を継続できた。こちらも一緒にやってくれている皆さんに感謝したい。どちらも来年も続けていきたい。

その他

去年以上に、いろいろへんなこだわりがなくなり、物欲みたいなものも薄くなり、嫉妬心とか負のオーラをまとうことも少なくなったように思う。要するに一年ではっきり自覚できるくらい精神的に老いた気がする。そう悪いことでもないと思っているので、ほどほどのペースを維持しながら来年も老いていきたい。あと、謙虚で悪いことは何もないので、来年はまた改めて謙虚を念頭において行動していきたい。運動は今年も例年以上にできていなかったし、来年もダメだと思うけど、気が向いたら朝ランニングなども試してみたい。あと、来年は家族が増える予定なので(ペットです)、生き物の命を預かるという自覚をしっかり持とうと思う。

総括

2011年は結婚に始まり結婚に終わった。いろいろあって大変な一年だったけど、来年は落ち着いて生活をしっかりさせたい。