海外で働くエンジニアAdvent Calendar 12日目です!

2年前のことで過去形になって恐縮ですが、北京のMicrosoft Research Asiaに滞在したときの記録を掘り返してみます。山のように写真を撮ったので、興味のある方はWebアルバムをご覧ください。なお、僕と同じ立場(インターン)で北京に行った人の記録がMicrosoftの中の人のブログにたくさん掲載されています。そちらもあわせてどうぞ。

氷漬けの都

北京

平日は研究に集中し、週末は疲れを癒しながら、北京市街を中心に様々な史跡を回りました。1月から4月まで滞在したため2月の旧正月を体験できました。道端の爆竹、本当にやばいです。死人が出るのも納得の勢い。

同じ年にMicrosoft本社があるアメリカのレドモンドへインターンに行きましたが、あちらは生活圏が基本的に森の中で、頑張ってシアトルに行っても史跡のようなものはあまりなかったため、個人的には北京のほうが楽に、長期的に楽しめる街だと感じました。

とはいえ、日本の綺麗な空気になれていると気になるのが大気汚染。空気が悪い日は空気に色がついており、また、まぶしいはずの太陽がぼんやりとしか見えず容易に直視できたのが印象的でした。空気が最も悪かったのは大気汚染と黄砂が重なった日で、マスクをしないと息がしづらく、マスクをしても自転車で帰宅すると服に砂塵が積もって白くなっていました。

本当に美味しかった

食生活

食生活は、僕は辛いものが苦手なので大丈夫か不安でしたが、実際に行ってみると辛いのは四川料理だけで、たいていの中華料理は美味しく食べられました。

また、日本円で1,000円も出せば高級な料理がお腹いっぱい食べられたため、食に関してはこれまでの人生の中で最も贅沢をした期間だったと言えるかもしれません。

言語

Microsoft社内は英語が公用語ですが、中国人同士では中国語で喋っていました。幸い僕が参加したHCI Groupはフランス、イギリス、イタリア、韓国など研究者とインターンが多国籍であり、社内で言葉で苦労することはありませんでした。強いていえば、共同研究者のSeanがアメリカ人ネイティブで、英語が速くて苦労しましたが、よい練習になりました。インターンを通して様々な国の訛りの英語を聞き、自分でも喋り、英語が非常に上達したように思います。

一方で、一歩社外に出るとほとんどまったく英語が通じません。したがって、生き残りに必要な最低限の中国語(挨拶する、店員を呼ぶ、数を数える、タクシーで行き先を伝える、…など)は身につける必要がありました。Microsoft Research Asiaは外国人向けの中国語教室を開いてくれたのですが、けっきょく最低限以上は身につきませんでした。

実は、日本人であれば、どうしても通じないときには漢字を書き下してみる手が使えます。渡航してすぐの頃、生活必需品を買い揃える際には、メモ帳と鉛筆を手に店員に話しかけ、何とかやり取りをしたのをよく覚えています。

北京の旧正月

治安

治安は、生活圏内に関しては非常によかったと思います。北京は、家賃が高いなどの問題があるものの、基本的には政府のお膝元であり、国の成長および自分の将来に期待している人たちが多く、したがって外国人を襲ったり騙したりして犯罪を犯すメリットよりもリスクのほうが大きいのだと、現地の中国人インターンに聞きました。

なお、観光地に行くとぼったくりに遭うのは世界共通です。(ふっかけられたら太贵了!=たいぐえら!と言うのは覚えとくといいです。)

Great Firewall

インターネットは、確かにFacebookやTwitterへのアクセスが遮断されているのですが、Microsoft社内ではアメリカや日本を通るプロキシがあって実質上何の問題もなくネットを閲覧できました。

さらに社外でも、アメリカのサーバのVPNの内側に接続された無線LANアクセスを提供している喫茶店を見つけることができました。これは、店員に英語で話しかけたら教えてくれました。この喫茶店には複数の無線LANアクセスポイントが用意してあり、そのうち一つだけがアメリカに繋がっているとのことで、ちょっとしたスパイ気分が味わえました。中国語が話せず英語を話す日本人だから、遠慮なく教えてくれたのかもしれません。

北京の秋葉原相当の場所には、Weiboなど北京に本社を持つIT業界の会社の社員がよく出入りする、日本でいうところのノマドカフェのような店がいくつもありました。北京でも近年ベンチャー企業を立ち上げる学生が多くなってきているようで、当時の日本のベンチャー界隈よりも活気があるようにさえ見えました。

インターンの内容

インターン決定までの経緯

Microsoft Research Asiaは、近年、日本からのインターン生を多く受け入れています。インターンに参加するには、日本Microsoftの産学連携担当者と連絡を取って現地研究者の紹介を頼む、研究者と直接連絡を取る、といった方法が一般的です。ただ、私の場合はMicrosoft Researchが日本の大学に研究資金を寄付する産学連携の枠組みMicrosoft CORE (Collaborative Research) プロジェクトの研究代表者となった関係でインターンの機会を与えられました。

研究テーマに関する議論

インターン開始後の一か月間は研究テーマに関する議論を行いました。

当時、Microsoftは人の姿勢情報を安価かつリアルタイムに取得できるMicrosoft Kinectの開発を完了し、当該デバイスを使った応用研究に熱心でした。一方、僕はプログラマ向けのユーザインタフェース研究に興味がありました。また、COREの研究プロジェクトでKinectを利用する統合開発環境Picode を作りかけていました。そこで、まずは当該プロジェクトをインターン期間中に完了させることを提案しました。

しかしメンターのXiangの反応は芳しいものではなく、「もっとクレイジーなことをしよう」というコメントをもらいました。けっきょく、COREのプロジェクトは一旦止めて新しい研究を始めることになりました。とはいえ、完全にゼロベースでプロジェクトを立案するのではなく、XiangのKinect、私のプログラマ向けユーザインタフェースという二つの興味の接点を探ることになりました。

新規プロジェクト立案のため最初に行ったのは、Kinectを利用するアプリケーションのサーベイです。Kinect for Windows SDKが配布されてしばらく経っていたため、アプリケーションはオンラインで探せば数多く見つかりました。実装の完成度ではなくアイデアベースでアプリケーションを分類することで、どのようなKinectアプリケーションがあるのか把握しました。

次に、Kinectアプリケーションがどのように開発されているのか、Kinectを業務で利用している開発者にアンケートを行いました。結果として、既存の統合開発環境が提供するユーザインタフェース群がKinectアプリケーション開発においては必ずしも使いやすくないことが判明しました。また、Computer Visionの研究チームに対する聞き取りも行い、同じような問題が、Kinectのみならず一般的なWebカメラを利用するようなインタラクティブな画像処理アプリケーションで生じていることも分かりました。

こうして、研究プロジェクトのゴールが「インタラクティブな画像処理アプリケーション開発のための統合開発環境」の研究開発に定まりました。前述のCOREのプロジェクトPicodeは一から統合開発環境を作り直して特定の種類のKinectアプリケーション開発に最適化するものでした。一方、本研究はインタラクティブなカメラアプリケーションならどんな種類でも開発しやすいよう一般性を持たせることに注力しています。そのため、Visual Studioなど既存の文字列ベースの統合開発環境に対して適用可能な機能拡張として実装を行い、プロのソフトウェアエンジニアでも利用できるよう設計することに決めました。

新機能のプロトタイピング

2か月~3か月目は、定まったゴールに向けて実際に実装する機能についての議論を行い、並行してプロトタイプ実装を進めました。

Xiangはエンドユーザ向けのユーザインタフェースを主に研究してきており、僕はプログラマ向けユーザインタフェース研究をしてきたものの統合開発環境の歴史やソフトウェア工学などには疎かったので、別の協力者が必要なことは明白でした。すなわち、前掲のゴールに向かって研究を行ううえで、どのような機能が既に実現されており、何なら技術的な新規性があるのか、正しく判断するには二人では力不足ということです。

そこで、Xiangがプログラミング言語(PL)の研究を専門とするSystems Research GroupのSean McDirmidを紹介してくれました。様々に議論を重ねるうち、この三人で研究を進めることになりました。僕にとって、他分野の研究者との本格的な共同研究はこのときが初めてでした。XiangはHCIの、SeanはPLの研究歴が長く、二人とも全く異なる視点で意見を述べるのが非常に面白かったです。

企業のインターンシップではメンターがプロジェクトの方向性を強権的に決定するケースも多いと聞きますが、Xiangはあくまで僕をプロジェクトのリーダーとして尊重してくれました。ということは、自由と引き換えに責任を負うということです。僕は三人の議論をリードする役目を担うことになりました。自分より研究歴の長い二人の専門家に対して、負けじと意見を述べ、三人が考える方向性をすり合わせて議論をまとめるように心がけました。

プロトタイプ実装に関しては、当初、自社製品のVisual Studioを拡張することを考えましたが、開発にかけられる時間などの制約があって、よりシンプルな実装であるオープンソースの統合開発環境SharpDevelopをもとにして研究開発を進めることになりました。これらの調査および実装作業は僕が単独で行い、日々の議論の中でメンターと共同研究者の二人にフィードバックしました。

評価実験と論文執筆

3か月目の末から4か月目にかけて、実装の完成度が向上してきたため、評価実験と論文執筆を行いました。評価実験では、Microsoft社内に多くいるソフトウェアエンジニアに統合開発環境のプロトタイプを実際に使ってもらいました。ソフトウェアエンジニアを対象にした実験が容易な点はソフトウェア開発会社の研究所ならではだったと思います。

最後に、開発した統合開発環境DejaVuに関する研究成果を英文8ページのフルペーパーとしてまとめ、ACMの国際会議UIST 2012に投稿してインターンを終えました。


One Response to “北京に4ヶ月住んだ話(Microsoft Research Asia)”

Trackbacks and Pingbacks:

  1. 情報科学系 海外研究インターンのすすめ〔前編〕 | junkato.jp

    […] どうやってインターンに参加するのか、また、いつ参加するといいのか紹介します。(Microsoft Research Asiaに行ったときの経験については、北京に4ヶ月住んだ話に詳しく書いてあります。) […]

Leave a Reply

  • (will not be published)