はてなインターンを終えて2008年09月24日 21時25分

先に書いたように 8 月は株式会社はてなのサマーインターンシップに参加していました。もう第 2 回も終わろうかというころですが、遅まきながら私の場合についてまとめたい思います。

インターン生の 1 日

「インターン生の」とつけましたが、特に後半 2 週間は何らかのチームに参加しての開発だったのであまり社員と変わらないかと思います。就業時間は 10 時から 19 時となっており、朝は東京オフィスとビデオでつないだ全体ミーティングから始まります。ここでは前日のリリース報告やはてな社に関する活動報告、当日の予定確認があります。その後はチームミーティングで、チーム (数人) の各員が前日の作業内容、当日の作業予定を報告します。私が配属されたキーワードチームには近藤社長も所属しており、社長自ら各自の報告に質問や感想をはさむことも多々ありました。これらのミーティングは不必要に長引くのを避けるためかすべて立ったままで行われ、時間は合わせて 30 ~ 50 分ほどでした。キーワードチームは人数が多めだったため、ややチームミーティングの時間が長かったかもしれません。

ミーティングが終わると開発に移ります。インターン生は基本的に二人一組でチームに配属されるので、配属後しばらくは相方の ninjinkun とのペアプログラミングが中心でした。後の方になるとリリース予定日に追われて二人が別の作業を進めることも増えてきました。私はインターン生だったのでミーティング後はひたすら開発、一区切りついたら、あるいは行き詰ったら社員を訪ねて、サーバーでの確認やアドバイスを求めるという感じでした。社員の人は単純な開発作業に加えて、サーバー調整のためにインフラ・運用チームの人とのミーティングなど、小さなミーティングをいくつかこなしていたようです。

お昼は 13 時からで、週 3 回はオフィスランチが出ます。オフィスランチがないときもご飯だけは炊いてもらえ、別途お弁当屋さんからおかずだけ買って一緒に食べることもできます。炊き立てのご飯が食べられることによる開発意欲の向上は目覚しいものがあり、私などは「初日に来たときは今にも死にそうなくらい顔色が悪かったが、毎日オフィスランチを食べているうちにどんどん顔色が良くなっていった」(伊藤直也氏談) と言われるほどでした。ランチ後もお昼休みはゆったり過ごすことができ、私の場合は社内に転がっているクッションでお昼寝することもしばしばでした。

午後も開発は続きますが、ここで重要なのがフリードリンク・フリースナックです。パイの実やチョコボールといった甘いものをつまむことで脳に糖分を補給し、万全の状態で開発に臨むことができるのです。私はもっぱら緑茶 (ハトムギ茶系のお茶がなかったので) とチョコレート菓子で午後を乗り切っていました。と、ここまで書いて思い出したのですが、ドリンクやお菓子の種類はリクエストもできます (必ずかなえられるとは限りませんが)。十六茶や爽健美茶がほしければそうリクエストすればよかったんですね。

夜は大体 20 ~ 21 時くらいまで残っていました。オフィスランチが残っていればそれを夜食にすることもあります。私はそのまま家に帰ることが多かったですが、インターン生同士 (+ α) でインドカレーやラーメンを食べに行ったり、銭湯に行ったりもしました。

インターンに参加して

このインターンで、これまであまり経験がなかったサーバーサイドでのプログラミングとチームによる開発を体験することができました。成果であるランキング機能については ninjinkun の記事も参照してください。チームの皆さんに助けられつつ、自分がチームに、会社に、ひいては社会に少しでも貢献できたかもしれないと考えると、インターンに参加して本当によかったです。おかげでよりいっそうプログラミングを楽しいと思えるようになりました。

また、会社は顔が見える人たちだけで回っているのではないということも実感しました。はてなのエンジニアといえば伊藤直也さん田中慎司さんが有名ですが、それ以外にも多くの有能なエンジニアによって各サービスは支えられており、さらにエンジニア以外のスタッフも一体となってはてなは成り立っているということがダイレクトに伝わってきました。

ほかの会社を知らないので比較はできませんが、ユーザーにじかに使ってもらえるサービスを Web 上で提供したいというときに、はてなは開発者にとって素晴しい環境を提供してくれる場所であると思います。

第 13 回 Admintech.jp 勉強会2008年09月30日 21時12分

ブラウザに関する話が聞けるということで第 13 回 Admintech.jp 勉強会に行ってきました。他の勉強会 (といっても私の場合は Kanasan.JS がほとんどですが) と比べると、Admintech.jp 自体が ITプロ(システム管理者やネットワークエンジニア)向けのコミュニティということもあってか、学生が少ない印象を受けました。また、参加者のノートパソコンを見渡すと、会場 (マイクロソフト大阪オフィスセミナールーム) のせいではないでしょうが近年ではまれに見る Mac 率の低さだったようです。

IE に依存した Web アプリケーションセキュリティ

はせがわようすけさんによる、IE 以外のブラウザでは問題ないが、IE では XSS につながるパターンの紹介でした。発表資料ははせがわさんの記事から参照できます。

文書の文字符号化方式を UTF-7 や US-ASCII と誤認識させることによる XSS の話が出ていましたが、HTML 4 で文字符号化方式の判定がどのように規定されているかについては「文字符号化方式判定の優先順位」@水無月ばけらのえび日記に解説があります。「常に valid な HTML を出力するようにしておけば XSS の 9 割は防げる」と聞いたこともありますし、HTTP、HTML といった標準を抑えておくことはセキュリティの面からも重要なのではないかと思います。発表にもあった IE の Content-Type 無視のように、標準に従っていてもブラウザ側の動作によって問題がおきることもありますが。

IE 8 では HTML 文字列からスクリプトなどを取り除く toStaticHTML メソッドが導入される予定ですが、IE 8 Beta 2 時点ではダイナミックプロパティ (CSS expression) による XSS を防ぎきれないといった問題があるそうです。

「レジストリに登録されていない MIME タイプ」という話がありましたが、このレジストリとは HKCR\Mime\Database\Content Type のことでしょうか? だとすると私の XP SP3 環境では application/javascript が登録されておらず、application/rss+xml は登録されているのですが、安全だ安全でないというにはまた別の基準があるのでしょうか?

WebKit の可能性

Google の及川卓也さんによる発表ですが、Google Chrome には特に触れず、WebKit の特徴と Windows でのアプリケーションへの組み込み方が主な内容でした。IE はコンポーネントが簡単に利用できますし、Firefox も Mozilla ActiveX ControlGeckoFX が公開されていますが、WebKit にはいまだそういう手軽に組み込む仕組みがほとんど存在しないそうです。

JavaScriptCore が、もともとは AST をたどって実行していたのが、SquirrelFish の導入で中間言語を用いるようになり、さらに SquirrelFish Extreme で機械語を出力するようになるなど、JavaScript エンジンがどんどんハードウェアに依存するレイヤーに近づいているというのが印象に残りました。

ここが変わった! IE 8 Beta 2

Microsoft の五寶匡郎さんによる IE 8 の紹介です。管理者向けということで IEAK の説明もありました。

IE 8 の文書表示モード

IE 8 ではブラウザモードと文書モードという二つの機構が導入されます。ブラウザモードによってユーザーエージェント文字列とバージョンベクタ (条件付きコメントで用いられる) が変化し、文書モードによって CSS や DOM の解釈が変化するようです。ブラウザモードには次の三つがあります。

ブラウザモード ユーザーエージェント文字列 バージョンベクタ
IE 8 モード Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; ...) 8.0
IE 8 互換表示モード Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; ...) 7.0
IE 7 モード Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; ...) 7.0

文書モードには IE 8 標準モード、IE 7 標準モード、IE 5 モード (Quirks モード) の三つがあります。X-UA-Compatible の指定によるブラウザモード、文書モードの変化は次のようになると私は理解しました。

X-UA-Compatible ブラウザモード 文書モード
指定なし IE 8 モード 文書型宣言によって IE 8 標準モードまたは IE 5 モード
IE=8 IE 8 モード IE 8 標準モード
IE=7 IE 8 互換表示モード IE 7 標準モード
IE=5 IE 8 モード IE 5 モード
IE=EmulateIE8 IE 8 モード 文書型宣言によって IE 8 標準モードまたは IE 5 モード
IE=EmulateIE7 IE 8 互換表示モード 文書型宣言によって IE 7 標準モードまたは IE 5 モード

ただし、以下のサンプルで実際に試してみると、開発者ツールから明示的に選択しない限り、IE 8 互換表示モードでもユーザーエージェント文字列は MSIE 8.0 となります。hxxk.jp - DOCTYPE スイッチについてのまとめと一覧表も参考にしてください。なお、ブラウザモードのうち IE 7 モードは、開発者ツールから選択した場合のみ実行できます。

  1. X-UA-Compatible の指定なし
  2. X-UA-Compatible の指定なし、文書型宣言なし
  3. X-UA-Compatible: IE=8
  4. X-UA-Compatible: IE=8、文書型宣言なし
  5. X-UA-Compatible: IE=7
  6. X-UA-Compatible: IE=7、文書型宣言なし
  7. X-UA-Compatible: IE=5
  8. X-UA-Compatible: IE=5、文書型宣言なし
  9. X-UA-Compatible: IE=EmulateIE8
  10. X-UA-Compatible: IE=EmulateIE8、文書型宣言なし
  11. X-UA-Compatible: IE=EmulateIE7
  12. X-UA-Compatible: IE=EmulateIE7、文書型宣言なし

また、文書モードが IE 7 標準モードや IE 5 モードだからといって、動作が完全に IE 7 や IE 5 と同じになるわけではありません。ActiveX コントロールのサポート状況や JScript エンジンなどは IE 8 と同じままです。

その他 IE 8 に関する話

「まず標準準拠で作って Firefox や Safari で確認し、それから IE でおかしいところを CSS ハックで直す」という開発者の言葉に衝撃を受け、開発者の支持がないブラウザは廃れるとの思いで IE 8 での標準準拠路線を進めてこられたそうです。利用者のニーズと開発者のニーズ、過去の IE との互換性とほかのブラウザとの相互運用性など、異なる方向性を両立させるべく苦労を重ねているようでした。

インストールやアンインストールではまった人が多かったようです。インストール/アンインストール時の問題点についてはリリースノートに書かれているので、ちゃんとリリースノートを読みましょうとのことでした。

ツールバー上で右クリックして "Customize" → "Show Stop and Refresh Buttons before Address Bar" (英語版の場合) を選択すると、中止ボタンと更新ボタンが戻る / 進むボタンの右側、アドレスバーの左側に移動します。これで IE 6 以前のボタン配置になれている人も安心ですね。

Microsoft TechNetMicrosoft Connect などを通じてどんどんフィードバックしてほしいとのことでした。

ユーザーエージェント文字列に Trident/4.0 というのが含まれていますが、この 4.0 という数字はどこから来たのでしょう? Wikipedia の Trident の項によると IE 8 に使われているのは Trident VI だそうですが。

ある機能を追加するかどうかは、それがどのように使われるかを熟考して決めるようです。SVG も開発者からの要望は強く、いったんは IE 7 の追加機能リストに入ったものの、それが本当に必要かという議論になり見送られたとか。逆に言うと、Microsoft は想定外の使われ方をすること自体を想定していないのかなと思いました。

Mozilla からみて IE 8 に期待すること ~ 標準化とセキュリティー

もじら組の himorin さんによる IE 8 への要望。せっかくアドレスバーでドメイン名を強調表示するようになったのに、ステータスバーのリンク先表示でドメイン名が強調表示されないのは片手落ちだといった意見を出していました。各種プラグインを一括アップデートできるようにしてほしいという話から議論が膨らんで、Windows Update に各種ブラウザの更新通知も含めるべきだとかいった話題に。

勉強会のレポート集

ところで、こういった勉強会のレポートをまとめて読みたいと思うのは私だけでしょうか。Kanasan.JS の場合は参加者のブログ記事一覧に各自が登録していくことになっているので手軽に読めますが、一般にはそうでもありません。独立したページではなくても、主催者のブログにトラックバックすることを呼びかけるなどしてもらえるといいなと思います。Admintech.jp に関してははてなブックマークの「admintech.jp」タグを含む新着エントリーを追いかけるという手もありそうですが。第 13 回 Admintech.jp 勉強会アンケート結果の最後にまとめられていました。