@kyanny's blog

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

Book: JavaScript Ninjaの極意 ライブラリ開発のための知識とコーディング

jQuery の John Resig (とテキサス在住の白ひげのおじさん)が書いた JavaScript の中上級者向けの本。タイトルと表紙の奇抜さが気になって読んでみた。

独特すぎて評価が難しい本。独自の assert 関数を全てのサンプルコードの実行結果に使うのにはおどろいた(console.log でいいじゃん)。全体的に、一般的でない手法を採用していて異質な印象を受けた。「関数的」とか、用語も奇妙。仕事で必要なので JavaScript を習得したいという人には薦めない。高度な内容も少なくないが、そういうトピックは Effective JavaScript を読めばいい。

独特なのは意図したもののようにも感じられた。一般的なプログラミングの専門書(実用書)と比べるとセオリーに沿っていないように感じられる部分が多いが、逆に言えば「お約束」に頼っていないということ。十分な前提知識を持っていない読者にも JavaScript という言語を丁寧に説明しようとして、あえて一風変わった教え方を試みたのかもしれない(入門編にあたる章の話)。

John Resig は Khan Academy で Computer Science の学部長をつとめているそうだ。 Khan Academy はその理念からしておそらく、仕事を得るために技能を身につける職業訓練校のような性質のものではないだろう。となると John Resig の Khan Academy での仕事は、趣味や教養としてプログラミングを学ぶ人のためのものであるはずだ。そういう思想がこの本になにがしかの影響を与えた結果、ふつうのプログラミング書籍と比べて風変わりに仕上がったのかもしれない。

テクニック面では、ブラウザ検出よりも機能検出やオブジェクト検出を利用したほうが未来の変更に対して強いコードになる、という話がためになった。こういう話題こそ忍者にふさわしい。もっと踏み込んでもよかったと思う。終盤のイベント、DOM、CSSセレクタの話題はだいぶ駆け足で、やっつけ仕事な印象を受けた。 jQuery のソースコードを読む手引きにはなるかもしれない。

クセの強い本にもかかわらず、訳者はとてもよい仕事をしたと思う。訳注はたいへん丁寧で、参考文献やオンラインのリソースを細かく添えて本文を補い、補足が必要な訳語についてもしっかり解説している。 Effective JavaScript も翻訳した方らしい。この人の訳書なら名前買いしてみてもよさそうだな、と思った。

JavaScript Ninjaの極意 ライブラリ開発のための知識とコーディング (Programmers’ SELECTION)

JavaScript Ninjaの極意 ライブラリ開発のための知識とコーディング (Programmers’ SELECTION)

Submitted CFP for #rubykaigi 2014

RubyKaigi 2014 の Call for Presentations に応募した。昨年に引き続き bundle update ネタ。またかよと思われそうだけど、動機の説明からして面倒くさいこのニッチな領域にここまで強い関心を抱く人はあまりいそうにないので、「いま自分にしか出せない CFP」にはなったと思う。

応募内容を清書するのは締め切りぎりぎりになってしまったけど、常日頃から考えていることなので書くべき内容には困らず、応募後(特に reject されちゃった場合!)に「もっとこうしておけばよかった」と後悔することはないだろうな、と自信を持って Submit ボタンを押せたので満足。

My CPF is accepted. I became a speaker!

pjax を利用したサイト向けの Chrome Extension の書き方

Chrome Extension の Content Scripts を使うと Greasemonkey のようにウェブサイトを加工できて便利だが、 Content Scripts はページのロード後に一度だけ実行されるので、 github.com のように pjax を利用しているサイトではページ遷移後に期待通り実行されないことがある。

pjax は pjax:success などの独自イベントを発火するが、 Content Scripts はサンドボックス環境で実行されるので pjax が発火するイベントを Listen することができない。しかし DOM の変更時に発生するイベントを Listen することはできる。

DOM の変更を検知するためには DOMSubtreeModified が利用できるが、このイベントは DOM Level 3 で deprecated になってしまった。 Mutation events も同様なので、 MutationObserver を使うのがよい。 WIP Pull Request Unhighlignter for GitHub では MutationObserver を利用した。

https://github.com/kyanny/chrome-ext-wip-pull-request-unhighlighter-for-github/blob/134fea5c17ba261c5354ec86c50108261a77ca7c/app.js#L29-L47

MutationObserver はどの要素からのイベントを受け取るかをオプションで細かく制御できるが、設定を誤ると期待するイベントが発火されないので注意。先のスクリプトでは childList: true, subtree: true というオプションを指定して body 以下の全ての子要素(孫要素も含む)からのイベントを受け取り、イベントハンドラ内で mutation.type をチェックして childList のときのみ DOM を変更するスクリプトを実行している。

Book: 1日で読めてわかるTCP/IPのエッセンス

TCP/IP ちゃんと勉強したことがなかったので勉強になった(過去に「マスタリングTCP/IP」を二度挫折した)

解説が平易で図も多く、わかりやすかった。価格が安く、電子書籍なので暇なときにスマートフォンで気軽に読めるのもよかった。

1日で読めてわかるTCP/IPのエッセンス

1日で読めてわかるTCP/IPのエッセンス

  • 榊正憲
  • ネットワーク
  • ¥1,100

JavaScript で if 文を書くとき必ず波括弧を書くべきと主張しているスタイルガイド

新人さんの JavaScript のコードレビューをしていて、 if 文の本体部分を波括弧で囲っていないコードを見つけた。

おれは本体が一行しかなくても必ず波括弧で囲うようにしており(そのほうがわかりやすいと思っているから)、できればそうして欲しいけど個人の好みを押し付けるのはよくないので、広く支持されているコーディングスタイルガイドの類いで同様の主張をしているものが無いか探した。

Google とか Mozilla とか GitHub あたりのドキュメントを眺めてみたが if 文の波括弧についてはっきり言及している箇所を見つけられずにいたら、該当するドキュメントをいくつか教えてもらった。

追記: あと https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style にも載っていた。

Always brace controlled statements, even a single-line consequent of an if else else. This is redundant typically, but it avoids dangling else bugs, so it's safer at scale than fine-tuning.