@kyanny's blog

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

resque の哲学

resque の README と Introducing Resque - GitHub を読んだ。後者は GibHub における非同期処理の歴史を紐解いたうえで「なぜ resque なのか」に触れられていて、読み応えがあった。

彼らが必要とした非同期処理システムの要件はいろいろ挙げられているが、その背景に「管理・運用を楽にしたい」という思惑を感じた。キューの「タグづけ」や優先度はシステムの全容を把握しやすくするためだろうし、処理の統計を見るために専用のウェブアプリケーションを内包するほどだし、「刺さった」ワーカーを kill -9 できたり、失敗するジョブを繰り返さないことや失敗したジョブを破棄しないことは不具合が発生したときリカバリ・調査する手間を減らすための実際的な要求からきたものだろう。

上記のような要件定義をした上で、それを満たせる既存のミドルウェアとして Redis を採用した、というくだりは非常に説得力があり、「単に流行りの NoSQL を採用したかっただけじゃないの?」とばかり思い込んでいた自分の無知が恥ずかしくなった (いや、実際には、単に使ってみたかった部分も多少はあるのだろうけど)

最も印象深かったのは、このフレーズだった。

I highly recommend DelayedJob to anyone whose site is not 50% background work.

But GitHub is 50% background work.

GitHub は自分たちのサイトに何が必要なのかを見極め、それを作った。ちゃんと見極めること、技術を使い、技術に使われないこと、それが技術的な成功をおさめる秘訣なのかな、と思った。

キーボードの掃除には専用のキートップ引抜工具がおすすめ

数年間使っている Happy Hacking Keyboard Professional2 (墨) を掃除しました。

ビフォー

アフター

徹底的に掃除するならキートップを外したいですよね。マイナスドライバーを差し込んで外すこともできるみたいだけど、僕は不器用だからキーボードを壊してしまいそうなので、不安のない専用の引き抜き工具を買ってみました。これがとても良かった。僕はヨドバシ.com でこれを買いました。

ヨドバシ.com で買うとたった 200 円でも送料無料、なおかつ深夜に注文しても翌日のお届けで、これも無料。ネット通販は送料が気になるのでもっぱら Amazon でまとめ買いをしていたけど、ヨドバシ.com は Amazon プライムいらずで便利でした。さすがにこれだけ注文するのも気が引けたのでついでにエアダスターとかクリーナーもまとめ買いしたから結局あんまり差がなかったけど。

外したキートップは台所用洗剤で洗ってからしばらくぬるま湯につけて、洗濯ネットに入れてすすいだあとタオルの上に置いて干しました。一個ずつ洗うとうっかり落として排水口に流してしまいそうだったので洗濯ネットに入れてみたら、じゃぶじゃぶ洗えてとても楽ちんだったのでこれもおすすめです。

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

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

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

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 ライブラリのちょっとしたものを読むとっかかりとしてはいい教材だったと思う。これを読んで自信をつけてから大物に挑むのがいいなと思った。