Hatena Engineer Seminar #4に行ってきました

Posted on Mon 09 February 2015 in blog

Intro

タイトルどおり、行ってきました。
目当ては、mackerelの話だったんですが、思ったより他の話も面白かったです。
今回は抽選だったし、参加できなかった人のためにも、メモと感想を書いておきます。
序盤の話はTwitterでつぶやいているので、参考までに。(後半はPCの電源が死んだのでないです)

資料は見つけたら追加します。

開会の挨拶

はてなの東京オフィスが増床するらしい。
今回の会場は、その増床先のオフィスで、まだ机など入れる前にやってみよう、という感じでした。
普通のオフィスとして使った時はどんな風になるのかわからないですが、今までのオフィス(今回の会場の1階下にあたる)も使うらしいので、ゆったりできそうです。

Goで書かれたmackerel-agentのOSS化や自動化にまつわるあれこれ(@Songmuさん)

資料はこれ

自分もためにmackerel-agentのソースを見たりしているので、この話を一番楽しみにしていた。
タイトルの通り、mackerel-agentをOSS化するにあたって、どういうことを考えているか、というお話でした。

mackerel-agent-pluginsとの対比もあって、微妙な違いがあり面白かったです。
個人的に一番興味を持って聞いていたのは、Travis CIを使ったリリースの自動化でした。

それぞれのリポジトリの.travis.ymlファイルを見ているとわかりますが、タグを打たれたときに、自動でテストしてデプロイしているみたいです。
それ自体はわりと珍しくもないと思いますが、OSSだからこそ大事だという話をされていて、なるほど、となりました。品質のためももちろんあると思うのですが、テストとかそういうものを整備して客観的な基準を作ることで、レビュー時のコミュニケーションロスを減らす目的のようです。

あと、なかなか真似できないですが、ユーザーがhackする余地を残す、というのもとても共感できました。
ちょっと頑張ればhackできそう、という雰囲気を出すのが、難しいと思うんですが、mackerelはとっても良く出来ていてすごいです。

あと、WindowsようにAppVeyorを使っている、と言っていたんですが、このサービスを初めて知りました。

はてなのサービスの開発環境(@astjさん)

まず、2013年11月の段階のこのスライドを最初に読んだほうが良いです。
Vagrant と Chef でつくるはてなブックマークの開発環境

半分は、この話からのアップデート+詳細という形式の話でした。
上記のスライドは、どちらかというとツールのインストールまわりで困ります、という話だったんですが、今回は一歩進んで実際のミドルウェア設定まで考えた時に、本番との差異をどう吸収するのか、という話が聞けました。

ただ、個人的に悩みどころの、開発用DBのメンテの話とかはなかったので、あんまりちゃんと覚えられてないので、割愛します。(間違ったことを書きそうなので。)

個人的に気になったのは、chefでプロビジョニングすると古いものの依存関係を解決するのが大変、みたいな話があったんですが、packerとかでイメージ作っても良いのかな、と思いました。
ただ、hatenaでは、本番に使う用の古いライブラリrpmがあるみたいなので、どっちでもコストは大して変わらんのだろうな、という印象。

はてなブックマークの新機能における自然言語処理の活用(@skozawaさん)

この話は最近はてなブログに追加されたトピックという機能の実装の話です。
この話は自分自身が咀嚼できていないことが多いのですが、ざっくり流れをまとめてみます。

大きくわけて、トピック生成の話と、トピックタイトル生成の話でした。

トピック生成の裏側は、Elastic Searchで、significant_termsを2層にして使っているようです。
significant_termsを使うと、重要語みたいなの(これをトピックとする)がわかるので、それを2層にすることで、特徴語を見つけることができることになります。
トピックに属するエントリの判定は、この特徴語を用いて決めることができて、特徴語のスコアが80を超えたら、などの基準で、分類を行います。

ここまででトピック生成と、トピック内のエントリを分類できました。

次にトピックタイトルの生成です。
実際にページを見ればわかりますが、トピックは単語ではなく、文章です。

記事タイトルを持ってくるのが楽そうなのですが、例えば新聞名が入っていたりとかするので、うまく処理しないといけません。
処理の流れは、以下です。

  1. 重要語抽出: ESの機能のほか、TopicSumという考え方も利用
  2. 重要文抽出: タイトルのスコアを計測、スコアが高いものを利用
  3. 文圧縮: 係受け解析をする(Cabocha & ipadic) : 媒体名を除くなどのため。

実際に文圧縮するには、係り受け解析をしたりして、重要な部分だけを切り取っているそうです。
このあたりは試行錯誤の塊っぽいので、細かいことはフォロー出来ませんでした。

このお話は、試行錯誤の結果が見え隠れしていて、エキサイティングでした。
こういう仕事ができるエンジニアになりたいですね。

はてなのiOSアプリとSwift(@yashiganiさん)

資料というか本人のエントリ

正直、Swiftとかアプリとかあんまり興味ないな、とか思っていたんですが、発表者の話が面白すぎて、今はちょっとSwift書こうかと思っています。

Swiftの良いところ、悪いところ、実際に使うと困るところまで、コードベースで話していて、これは今からObjective-Cは書かないな、むしろSwiftって良い言語じゃね、くらいまで思わせられました。

詳しくは本人のエントリを読むのが良いです。

TypeScriptで実現するMVPアーキテクチャパターン(@nanto_viさん)

この話は、たしかこれの実装話だった気がする。
(あまりちゃんとサイトまで見てなかったので、間違っていたらすみません...。)

MVPモデルで実装することにした理由、またその中でTypeScriptを選択した理由、というお話を聞いていました。
自分はあまりフロントの話はわからないのですが、MVP自体は知識として知っているものの、どういう背景で出てきたモデルなのかよく知らなかったです。(というか自分がフロントの勉強し始めた時には、すでにMVVMがあるような時代だった。)
今回の話では、フレームワークは最小限でやっていたので、そのあたりの細かい話から聞けました。(ロジックとビューの分離をしてテスト可能にしたい。表示位置などのプレゼンテーションロジックもテストしたい、など。)

TypeScriptの話もaltJSとしては、とても使いやすそうに聞こえていて、今後自分がJSを書くとすれば生JSではなくて、TypeScriptにしようかな、と思います。(少なくとも型のある言語にしたいです。)

まとめ

今回はHatena Engineer Seminar #4は、はっきり言って全部の話が面白かったです。
Hatenaはやっぱり良い会社だと思うし、そういう会社で働いている人と切磋琢磨できるように、自分も面白いことをやっていかねば、と思わずにはいられない感じでした。
コーディング欲が増したので、懇親会には参加しませんでしたが、きっと懇親会も楽しい感じだったんだと思います。
またあったら参加したいですね。