2014/08/31

LINE のインターンシップに参加してきた



8月中はずっと LINE 株式会社でインターンシップをしていました。
はい、噂のアレです。

お前も40万円に釣られたのか!!って思うかもしれませんが、なかなか答えづらい質問ですね。
とはいえ、LINE ってよく考えたらインターンに行くにはすごく魅力的な会社じゃないですか?
  • 登録ユーザー数 x 億人のアプリ
  • 出来てからまだ3年しか経ってない
  • サービスの質もよく出来ているように見える
  • なのに、日本ベースの会社
  • いい噂も、悪い噂も沢山
  • サービスの仕組みやプロトコル、バックエンドの規模が割と謎
せっかく機会があるのだから、これに飛びつかないのはもったいない気がします。

実際の所を言うと、他のインターンシップに申し込んでいてのですが落ちて、丁度その後申し込むのにいい期間に募集を行っていて、かつ8月中の1ヶ月間というのが僕にとってすごく予定的に都合が良かったので、他と吟味した結果申し込んだ感じです。

また、40万円という重さが逆に良い面もあって、それだけ重さのある業務に携われるし、結果も求められる、という意味では悪くないかと。

IT 企業のインターンシップというと、よくあるのがインターンシップ参加者でグループを組んで... とか、新しいサービスを... とか、弊社社員が講義を... とか、そういうところも多いと思います。

今回の LINE のインターンシップは、個人の能力にあった部署に配属されて、そこで個別に課題をこなしていくという感じで、実際に会社の業務が体験できるような形式でした。(僕はこっちが好き)

ただ、この方式だと、人によってやったことも満足度も違うと思うので、このエントリはあくまで僕の感想ということで。
せっかくなので、参加してきて思ったことを書ける範囲で書こうと思います。


インターン期間中の課題


僕は、LINE サーバー開発室という、LINE のメッセージアプリケーション本体のサーバー開発・運用を行っている部署に配属されました。
その中でも、HBase を管理しているチームのチューターさんにお世話になって、HBase 関連の仕事をインターンシップでやりました。

LINE のメッセージアプリケーションのストレージはメインとして、今現在は HBase が使われています。
LINE のインフラでオープンになっている情報は以下にまとまっています。
僕が扱っていたのは、上の記事に書いてある通りの以下のようなものです
メインストレージとして利用されているHBASEの総容量は1PBに上っている。また、ログ解析、統計に活用されているHadoopの総容量は7PBで、そのうち約42%が使用されている。
そうです、LINE の PB 級のストレージが目の前にある状況に1ヶ月間居ました。インフラ好きにとっては堪らないインターンシップでした。

実際にインターンの課題としてやっていたことは、HBase や HDFS のサーバーが大量にあるので、だんだん管理とメンテナンスが大変になってきているようで、それをまとめて管理できるようなツールの開発です。
特に、HBase, HDFS の metrics の監視、RegionServer, DataNode の起動・終了、Region の移動などを Web から操作出来るような監視ツールを作っていました。

Hadoop や HBase の経験もほとんどなかったのですが、なんとなく知っている知識とチューターさんからのアドバイスを得て、HBase や HDFS についてちょっとだけ知識を得た気がします。
開発言語は特に指定はなくて、やりやすいものを使ってくれという感じでしたが、Hadoop 周りの環境はすべて Java で書かれていますし、その他諸々の理由で Java + Play Framework 2 を選択しました。

個人的には、Java を開発した経験はそれまで殆どなかったのですが、それなりにうまく馴染めたので、Java と Scala (view だけ) を使った良い開発経験になりました。

LINE インターンシップでよかった所

LINE の裏側がわかった気分になった

やっぱり、LINE のインフラを知ることが出来た事が個人的には大きな経験になったと思います。
特に、インターンの人たちには隠される情報などなく、むしろサーバーアーキテクチャの解説を時間を取って説明してくれたり、いろいろな質問に答えてくれたり、社内のコードも見放題でしたし、運用中のサーバーを触らせてくれるなど、とても自由でした。

実際の開発会議にも何回か参加させてもらいました。
LINE は日本の会社ではありますが、元々 NAVER だったこともあって、今では韓国の人がすごく開発に関わっています。
なので、会議も韓国とビデオ会議でやりますし、出張も多い感じで、アジアの中とはいえ非常に国際的な会社ですね。悪い意味の日本文化はあまり無くてよかったです。

また、韓国の人もみんな日本語しゃべれるのでコミュニケーションも問題なかったですし、仲良くなれて楽しかったです。
それ以外にも、日本と韓国、更にそれ以外が結構混じりあっているので、開発系の文章などは英語のやりとりが多い感じでした。

ちなみに僕は行きませんでしたが、インターンシップ生で韓国に出張に連れて行ってもらってた人も居ました。(ちょっと驚き)

コードレビュー

また、開発した成果は GitHub Enterprise 上で Pull request を投げる方式で開発していったのですが、書いたコードに対して丁寧にコードレビューをして頂きました。
実際の業務と同じように、Pull request とレビューコメント、そのレスポンスは全て英語でやりとりしました。

チューターの方には "これでも実際の業務よりは甘い" と言われてしまったのですが、僕にとっては自分のコードを人にレビューされる機会はそんなになかったですし、とてもよい経験です。
自分の癖や気づけない所が結構あって、自分も結構適当なコード書いてるな... と反省する機会になりましたし、視点が変わりましたね。

英語 Pull request 力が少し高まったので、これからも精進していきたいです。

会社の雰囲気


会社の中は、とても過ごしやすいですし、かなりいい感じです。
カフェもあって、気軽にコーヒーが飲めます。LINE キャラクターをラテアートしてくれます。

LINE のキャラクターが至る所に書かれていたり、社員の人がみんな机にグッズをおいていたり、オフィスの雰囲気がすごい楽しいです。
椅子は、アーロンチェアです。全く背中も腰も痛くなりません。

LINE インターンシップに参加した仲間

今回のインターンシップは、合計10名が参加していました。

他の人の課題は、スタンプの解析や、ボット作成、ショップの機能追加、fluentd の何か (実際に upstream にパッチ投げてた)、アプリの作成、などでした。

LINE は CTO が女性の方なのですが、そのおかげもあって?かこの手のインターンシップでは珍しく、参加者に女の子も3人居て diversity を感じましたね。
しかも、そのうち2人はインフラ寄りの部隊で、がっつりコード書いてました。

特に同じセンターだった、自称 Python アイドルとか、突然数学について目をキラキラさせて話し始める氏とか、Python 書いてた毎日ごはんに誘ってくる氏にはお世話になりました。
他のセンターの人も、皆さんお疲れ様でした。

他の参加者のブログも載せておきますね (随時追加)

さいごに


今成長中のアツい会社で、有意義な1ヶ月が過ごせたと思います。

このタイミングでこんな会社にインターンシップにいけたのは、自分にとってはとても良い経験になりましたし、とても満足しました。
1ヶ月という期間は、短いようでしたが、調度よかったようにも感じます。(実際これ以上長かったら参加を躊躇していたかも?)

ちなみに、超個人的見解ですが、LINE はいろいろな噂がありますが、安心して使えてよく出来ているメッセージングアプリだと、このインターンシップに来て思いました。(これ以上はいろいろあるので言えませんが)
僕も、インターンシップに来る前までは半信半疑でしたし、余り使っていなかったのですが、インターンシップに来てから LINE をもっと使っていこうと思いましたね。

大学院生最初で最後の楽しい夏が終わってしまった気分です...

40 万円は... 趣味の車や電子工作に使いたいところですが、そんなに遊んでる暇もないので、QoL の向上 (?) に使いたいと思います。
でも、旅行とかいけたらいいですね。

2014/05/30

FreeRXduino で GR-SAKURA のローカルビルド環境を整えてみた

最近、GR-SAKURA の Web コンパイラのバックエンドライブラリとして使われていた、RXduino が自由にダウンロードできるようになり、FreeRXduino として公開されたようです。
http://rx.tokudenkairo.co.jp/freesoft.html

今まで、GR-SAKURA の開発環境は、Web コンパイラがあったわけですが、そのプロジェクトをローカルにダウンロードして、手元でビルドすることはライセンス的に不可能でした。
(詳細: http://rx.tokudenkairo.co.jp/license_gr.html)

しかし、FreeRXduino が公開されたことで、手元のローカルマシンでビルドすることが、ライセンス違反なく、自由にできるようになります。
ただし、オープンソースではないので、ビルド環境ごと再配布したり、RXduino を改変した物を公開したり、 GPL のソースコードとともにコンパイルしたバイナリを再配布したりすることも不可能です (LGPL なら問題ないはずです)。

# ちなみに、最近 Web コンパイラに、GR-SAKURA ライブラリ v2.00 が追加されました。こちらはオープンソースとなるようですが。つまり、RXduino は終焉の方向?

そこで、久しぶりに GR-SAKURA を持ちだして、少しいじってみました。
(とはいえ、実は目的があってのことなのですが、それは後日)

2014/05/27

xv6 を自作 CPU に移植して mruby を動かした話をした #kernelvm

先日の日曜日、第十回 カーネル/VM探検隊&懇親会 (#kernelvm) に参加してきました。
相変わらず、カーネルVMは濃かった。僕の低レイヤー欲が非常に満たされる感じでした。
何故か、PDP-11 が熱かったです。勿論、美しいアーキテクチャですが、かと言って今の時代に PDP-11 というのも変な話ですが。

その前の週に LinuxCon Japan 2014 も学生無料枠 (first50) 参加したのでで、非常に濃い1週間でしたね。各所で話題になっていた、"ワタシハリナックスチョットデキル" Tシャツも頂きました、大切に使います。

ところで、僕はどんな LT をしたかというと、卒論ネタに少し絡めて発表しました。
卒論は主に SSDAlloc という、ハイブリッドメモリアーキテクチャ?を元に mist32 プロセッサの MMU を改造してフラッシュメモリをメモリの一部のように利用できる MMU を提案してみる、みたいな研究でした。
そこで、mist32 プロセッサ向けに OS を何か移植する必要があって、更に何かアプリケーションも動かす必要があったので、その時の話をちょっと。

具体的には、xv6 という UNIX V6 を参考に作られた x86 向けの MIT で使われている教育用 OS を、mist32 に移植して、更にその上で mruby を走らせられるようにポートしました。

xv6 移植については少し wiki の方にまとめました。
http://open-arch.org/software/porting_xv6

スライドは以下に乗せておきます。
もっと詳しく書きたいのですが、時間もないので聞きたいことがあったら気軽に @hktechno に聞いてください。

# しかし、自作プロセッサを作って OS を移植した程度では、#kernelvm 的には何の驚きも提供出来ないことがわかったので、さらなる高みを目指す必要がある。

2014/03/06

SECCON 2013 全国大会に参加してきた


今年も、SECCON 2013 の全国大会に AC な ifconfig チームとして、参加してきました。
メンバーは、@x86_64, @KIM_TPDN, @rkmathi, @hktechno という AC な感じです。
結果はというと、20チーム中5位でした。(たぶん)
まずまずといったところでしょうか。去年は6位だったし。
持ち帰れる問題が少なかったので、結局夜はしっかり寝れて今までの SECCON のなかでは、体力的に楽な感じでした。
(本当はあったのけど、ダウンロードが完了しなかったので、諦め。)

普段から CTF に参加している人達を集めたわけでなく、セキュリティ専門系の人はくりす (@x86_64) だけでしたし、僕を含め SECCON 以外の CTF に殆ど出たことない人で ifconfig チームは構成されています。
なので、地方大会ならまだ良いのですが、全国大会レベルになると、やはりくりすに頼りきりな感じでした。
筑波からは、もう1チーム出ていて、後輩ですが urandom チームが3位になっていました。

個人的な感想としては、Metasploit などのツールやシェルコードの構築の仕方、突けそうな場所の探し方など、普段専門的なことをやっていない事もあって、慣れてないと負けますね...
時間をかけて解くことはできるのですが、調べてる時間に追い越されますし、難しい。

特に、今回の SECCON は、いち早くフラグを立てて、他チームを防衛することで点数を大きく稼げる点数方式だったので、単純に解けることより、素早くコントロールを奪える事が重要でした。
それぞれのサーバーを進んでいくと出てくるキーワードのポイントが1個 100 点であるのに対して、フラグは立てておくだけで5分おきに数十ポイント入ってくる(山分け)ので、独占してフラグを立て続けることが大事です。
防衛方法も、徹底して自動化することで、他を寄せ付けないことも重要な気がしました。

実際、僕達は1日目の後半に某チームと ssh セッションを殺しあう肉弾戦になりましたが、残念ながら2日目は対策をされて手が出ませんでした。
結局、キーワードは結構見つけてそれなりにポイント確保したのですが、全くフラグをまともに建てられず、みるみる差を付けられていった感じですね。特に2日目。

今年も参加してみて思ったけど、CTF はいろいろな知識を網羅していないと解けないし、自分の知識や技術を向上する機会になるので、楽しいし見直す機会になってとても良い。
こんなものに、政府が支援しても良いのかという話があるらしいけど、攻撃だけではなくて、防御もしなければいけないし、攻撃しなければ防御する方法も学べないし、セキュリティの分野は、近年は綺麗事言ってる所ではないぐらいヤバいので、それについてちゃんと世間の理解が浸透して欲しいところ。
防御側として攻撃手法について理解があるのは当たり前であるので、それを手っ取り早く学べるのは、CTF だったりすると思うし、攻撃手法を学ばせてはいけないというのは、何かおかしい。
まあ、グダグダ言ってないで、自分でセキュリティ知識の理解を深めてから発言してほしいものだと思う。
セキュリティの専門家で、CTF 反対の人がいたら、またその意見も聞いてみたい。

ところで、今年はニコニコ生放送があったり、NICT の NIRVANA 改 という可視化システムが運用されていたり、去年よりなかなか面白かったです。
まあ、目の前の画面に集中して、それどころではなかったですが、可視化システムはたまに各チームから噴水が発射されてて興味深かったですね。

2013/12/14

はぐれ学生の例 その1 - はぐれ学生 Advent Calendar 2013

はぐれ学生 Advent Calendar 2013 14日目の投稿です
はぐれ学生の概要はこちらを参照してください。

こんにちは。はぐれ学生の @hktechno です。
現在、筑波大学 情報科学類 在籍5年目で4年生です。
僕が、はぐれるに至った経緯と、はぐれてみた感想を書いてみたい思います。

長いです。読むの大変です。

2013/11/17

SECCON 東北大会に参加した


もう1週間経ってしまいましたが、先週は SECCON 東北大会に参加しました。

SECCON といえば、去年は ifconfig というチームでつくば大会に参加して優勝し、全国大会はあえなく撃沈と言った感じでした。

今年は、福島県会津地方で行われた、東北大会に参加しました。宿泊込の、セキュリティトライアスロンです。普通の CTF とは違って、とても面白かったです。ちなみに、上の写真は、猪苗代湖上で遊覧船かめ丸の上で行われた、早押しクイズ大会開催前の様子です...

僕は、開催前日になって熱がでて大変だったのですが、当日は熱も下がったのでアンチウイルスを施して参加しました。あまり体調は万全ではありませんでしたが、いつもの通りエナジードリンク漬けで頑張りました。

結果的には、まあ優勝というわけだったのですが、僕自身よりチーム全員がそれぞれ取り組んだポイントを確実に取っていったところが、結果につながったと思います。とはいえ、いつもどおりくりすの貢献が大きかった気がする。
初めて、アセンブラかるたとバイナリかるたにも挑戦しました。アセンブラかるたはよかったですが、バイナリかるたは僕には無理ゲーでした。

2013/09/20

PyCon APAC 2013 に参加した

参加した、といっても去年までとは違って今年はスタッフ参加です。去年までは、日本の PyCon は JP として開催してましたが、今年は APAC (Asia-Pacific) としての開催でした。
来年は Taiwan が APAC になって、日本では JP を開催します。
なんで、スタッフ参加しようかと思ったかというと、Python 好きだし使ってるし、何か協力できることがあったら手伝ってもいいと思ったからです。
あと、他のカンファレンスに参加して、なんか PyCon はイケてない感じ(かなり個人的な感想)があったので、なにか変わるかなとか。

ちなみに、この記事はいま YAPC::Asia に参加しながら書いてますけど、これは興味のある話が幾つかあったので参加してる感じです。