読者です 読者をやめる 読者になる 読者になる

kentana20 技忘録

技術ネタを中心に、セミナー、勉強会、書籍、会社での出来事を綴っていきます。不定期更新。

hatena engineer seminar#4 に行ってきた

Elasticsearch CI 勉強会

2/7(土) に表参道のはてなオフィスで開催された hatena engineer seminar#4に行ってきました。 20~30minのセッションが5本あったのですが、印象に残った2本をチョイスして技忘録。


セミナーの内容は こちら

Goで書かれたmackerel-agentのOSS化や自動化にまつわるあれこれ

昨年秋頃にカヤックからはてなに転職された id:songmu さんの発表。スライドはこちら

mackerel

  • サーバサイドは Scala
  • エージェントは Go

日本製としては珍しいモニタリングサービス。

入社してからやったこと

  • テストをオープンに
  • ビルドをオープンに
  • リリースをオープンに

mackerel-agent

  • Goなので、マルチプラットフォーム
    • Windowsでも一応動く(公式サポートはされていない)
  • シングルバイナリ
    • セットアップが容易
  • 常駐プロセスのプログラムに向いている

なんでOSSにしているのか?

  • 公開しない理由がない
  • ユーザ環境で動くものなので、ソースを開示する
    • この考えが素晴らしい
  • OSSにしたほうがいいことも結構ある
    • パッチをプルリク飛ばしてくれたり
    • そのおかげでツールが育ってきたり

ユーザがHACK出来る余地をのこしておく

  • エンジニア的には嬉しい
  • SaaS系でも結構あること
    • Travis CI
      • コンテナのCookbookを外部公開している
    • github-service
      • service連携部分を公開されている

ソースをオープンにして第一段階クリア

  • その後のパッチ受け入れが大事
  • リポジトリをちゃんと回す
    • プルリク放置すると厳しい
  • 逆にメンテコストがかかると本末転倒
  • GitHubにホストするのが一番

パッチ受け入れ

  • 放置してはいけない
  • プルリクは公平に
  • レビュー体制大事
  • CI整えておけば、レビューややりとりがラクになる

CI

  • テストコケてたら直してといえる
  • パッチのAccept基準も不明瞭になる
  • SaaSを使う

Travis CI

  • 使い慣れている
  • tagをトリガにしてCIが動く

mackerel-agentのCIでやっていること

  • go vet/golint
    • フォーマットの検査
    • 些細なコーディングスタイルの違いで議論したくない
  • go test
    • テスト実行
  • coverage
    • Coveralls
  • cross build可能かを検査
  • Travisのほかに社内Jenkins

Windows対応

レビュー体制

  • しっかり作っている
  • agentは社内の誰かがレビューする
  • 業務時間内の社内リソースをどう割り当てるか
    • 気づいたとき
    • あまり仕組み化できていない

mackerel-agent plug-in

  • たくさんある

リリースプロセスをオープンに

  • make release コマンドでリリース用のプルリクを作る
    • バージョンのBump Up
    • リリースノートの作成
  • release merge commit に対してTravisが自動でtagを作る
  • tag を打たれた commit に対して更にTravisがビルド成果をリリースノートに貼る
    • これ、いい

ここ、近いことはやっているのですが、もうちょい改善できそうなので、詳しく仕組み知りたいと思いました。

仕組みはPerl

  • releng
    • リリース用のプルリクをつくる
  • autotag
    • Travis側から実行する
    • tagを作成

テストもしっかり

課題

  • 社内で検証できないミドルウェアの動作確認
  • リリースサイクル
  • どこまでをコアに同梱するか
  • コアのpluginとoptionalなプラグインの分離

まとめ

  • 自動化するツールもテストできるようにしておくほうが良い
  • ソースをオープンにすることでユーザと一緒にサービスを作っていく
  • TravisなどSaaSを活用するのもその一環

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

id:skozawaさんによるはてブの「トピック機能」の裏側のお話でした。結構刺さった。スライドがまだ公開されていないっぽいので、公開されることを期待。

はてなブックマークでの自然言語処理

  • トピックページ

    • 関連性の高い話題の記事をまとめたページ
  • 要望は前からあった

    • インターネットで盛り上がっている話題を知りたい
    • ホットエントリでの同じ話題のエントリ重複を避けたい
  • トピック生成

  • 重要語抽出ベースのアプローチへの変更

    • 検索技術: Elasticsearch
  • トピック生成の流れ

    • トピック作る
    • 関連するエントリを集める
    • トピックのマージ
  • タイトル生成

    • 重要語抽出
    • 重要文抽出

トピック生成

  • トピックとは

    • キーワードの集合
  • トピックモデル

    • PLSI
    • LDA
  • Elasticsearchでトピック生成

    • 重要語を取得出来る機能がある
  • スコア計算方法

    • jlh
    • mutual information
    • chi square
    • google normalized
  • JLH
    • 出現割合
    • 話題の単語のスコアが高くなる

タイトル生成

  • トピックに含まれる記事は同じ話題
  • 各記事のタイトルはある程度しっかりしている
  • いずれかの記事を使うとうまくいく可能性が高い
    • ただ、闇雲にとってもダメ
    • 重要文を利用する
  • タイトルから重要語を抽出
  • 係り受け関係に基づく文圧縮

まとめ


所感

hatena engineer seminarは2回目の参加でした。今回は

というバラエティに富んだ内容で、非常にインプットが多かったです。中でも以下の2つはイロイロな面で参考になる話が多く、反芻して取り込んでいきたいと思いました。

id:songmu さんのmackerel での自動化あれこれの話

  • いまの自分のミッションに結構マッチしている
  • github-service などからOSSに入っていくのは面白そう
  • 自動化系スクリプトでもテストを書く
  • 言語はやはり揃えた方が良い

id:songmu さんの自動化・オープンマインドには非常に共感出来る部分が多くて、「こういう文化を作っていきたい」そのために、自分のスキルや考えをもっともっと伸ばしたいと思う内容でした。

id:skozawa さんの自然言語処理の話

  • 個人的に興味深い領域
  • いろいろなサービスで活用の仕方を考えられそう
  • Elasticsearchが使えそう

id:skozawa さんの内容は、今年自分がチャレンジしたい領域にマッチしそうな話だったので、ファーストインプットとしてとても参考になりました。

また、休憩時間に id:stanaka さんとお話していて、面白そうなお話を頂きました。こちらについては、話が進められそうになったタイミングで発信したいですね。

はてなさんは東京オフィス(表参道)と一休オフィス(赤坂見附)と近いので、交流する機会を作っていきたいと思いました。

ありがとうございました :)