70
YAPC::Asia 2014 前夜祭

YAPC::Asia 2014 前夜祭

Embed Size (px)

DESCRIPTION

YAPC::Asia 2014 前夜祭 hrhm.infoのお話

Citation preview

Page 1: YAPC::Asia 2014 前夜祭

YAPC::Asia 2014 前夜祭

Page 2: YAPC::Asia 2014 前夜祭
Page 3: YAPC::Asia 2014 前夜祭

スタッフの方へお願い

Page 4: YAPC::Asia 2014 前夜祭

不適切な発言があったらピー音入れて下さい

Page 5: YAPC::Asia 2014 前夜祭

あたし

ID:hondallica(ホンダリカ)※Lは2つです

職業:HeavyMetal Programmer年齢:100,03x歳血液型:X出身:北海道

好きな言葉:親に嫌われたら一人前だ

URL: http://sukuna.net/   https://github.com/hondallica

Hachioji.pmに出没します。

Page 6: YAPC::Asia 2014 前夜祭

本日のセットリスト

・ヘヴィメタルとは

・サービス(hrhm.info)のご紹介

・データの集め方

・副産物

Page 7: YAPC::Asia 2014 前夜祭

Page 8: YAPC::Asia 2014 前夜祭

お客様の中にハードロック・ヘヴィメタルが好きな方はいらっしゃいますか?

Page 9: YAPC::Asia 2014 前夜祭
Page 10: YAPC::Asia 2014 前夜祭

ヘヴィメタルとは

Page 11: YAPC::Asia 2014 前夜祭
Page 12: YAPC::Asia 2014 前夜祭
Page 13: YAPC::Asia 2014 前夜祭
Page 14: YAPC::Asia 2014 前夜祭
Page 15: YAPC::Asia 2014 前夜祭
Page 16: YAPC::Asia 2014 前夜祭
Page 17: YAPC::Asia 2014 前夜祭
Page 18: YAPC::Asia 2014 前夜祭

ヘヴィメタルとは

・社会にちょっとなじめない人たちが

・重低音をかき鳴らしながら

・ファンタジーの世界に迷い込んだり

・世の中間違ってると叫んでいる

・聴いている人があんまりいない

・かわいい音楽

DEATH!!

Page 19: YAPC::Asia 2014 前夜祭

本題

Page 20: YAPC::Asia 2014 前夜祭

Hard Rock & Heavy MetalWeb Service

http://hrhm.info

Page 21: YAPC::Asia 2014 前夜祭

YouTubeの動画探すの楽な俺得サービス

Page 22: YAPC::Asia 2014 前夜祭

DEMO

Page 23: YAPC::Asia 2014 前夜祭

構成

・VPS: Digital Ocean ( 安い・SSD速い)

・Web Server: Nginx (使ってみたかった

・App Server: Starman (これしか知らなかった

・WAF: Mojolicious::Lite (覚えやすかった

・WebAPI: node.js( 使ってみたかった

・SQLite: ファイルポン置きでリリースできる

Page 24: YAPC::Asia 2014 前夜祭

構成

・自分の既存の知識で扱える構成にする

 ▶�インフラ構築の勉強も兼ねているので

  スモールスタート

・とにかく公開することを優先

・個人サービスだし困ったら後で見直せばいい

Page 25: YAPC::Asia 2014 前夜祭

データの集め方

Page 26: YAPC::Asia 2014 前夜祭

必要なもの

・PC →データ収集専用機があるとよい(常時稼働)・DB →お好みで

・ちょっとしたプログラミング能力

 →HTTP投げてDBに突っ込む程度で大丈夫

・狂気

 →根こそぎデータ集めるぞという気持ち

Page 27: YAPC::Asia 2014 前夜祭

ひたすらデータを集める

Page 28: YAPC::Asia 2014 前夜祭

ひたすらScraping、WebAPI

Page 29: YAPC::Asia 2014 前夜祭

主な情報源

・HR/HMニュースサイト

・Last.fm・SoundCloud・MusicBrainz・Bandcamp・Myspace・Facebook・Twitter

Page 30: YAPC::Asia 2014 前夜祭

押さえておくべき2サイト

Page 31: YAPC::Asia 2014 前夜祭

Last.fm・インターネットラジオ + SNS・ユーザーが聴いている曲情報が共有される

Page 32: YAPC::Asia 2014 前夜祭

Last.fm・恐ろしくAPIが充実している

Page 33: YAPC::Asia 2014 前夜祭

Last.fm・CPANモジュールあります

 ・Net::LastFM ・WebService::LastFM ・etc...

Page 34: YAPC::Asia 2014 前夜祭

MusicBrainz・音楽のWikipedia・メタデータが豊富

Page 35: YAPC::Asia 2014 前夜祭

MusicBrainz・特にMusic Brainz ID(MBID)が重要

アーティスト、アルバム、楽曲などにユニークなIDが振られている。

4bd02db1-3592-4d15-9aa5-23c9591e49ce

Last.fmやその他音楽系WebAPIでは、リクエストパラメータにMBIDを使える事が多い。

サービス間連携に超重要!

Page 36: YAPC::Asia 2014 前夜祭

MusicBrainz・CPANモジュールあります

 ・WebService::MusicBrainz

Page 37: YAPC::Asia 2014 前夜祭

MusicBrainz

さらに

Page 38: YAPC::Asia 2014 前夜祭

MusicBrainz・このサービスのVMがダウンロードできますhttp://musicbrainz.org/doc/MusicBrainz_Server/Setup

・コマンドでマスターサーバとDB同期できる

・ローカル環境でAPI叩き放題

・DB(PostgreSQL)に直接アクセスも可

・チラ見した限りだと80万以上のアーティスト が登録されていた

Page 39: YAPC::Asia 2014 前夜祭

集めたデータ

Page 40: YAPC::Asia 2014 前夜祭

Band・Band Name・Country・Genre(Thrash, Death, Power...)・Status(活動中,休止中,解散...)・収集中ですがライヴ履歴も

100K〜 records

Page 41: YAPC::Asia 2014 前夜祭

Artist・Name・Country・Age・Gender・Part(ヴォーカル,ギター,ドラム...)・History(今まで所属していたバンド)

500K〜 records

Page 42: YAPC::Asia 2014 前夜祭

Discography・Name・Type(シングル,アルバム,ビデオ...)・Release Date

240K〜 records

Page 43: YAPC::Asia 2014 前夜祭

Track・Title・Length・Lyric(ごく一部)

1.7M〜 records

Page 44: YAPC::Asia 2014 前夜祭

Similar Band・Band・Similar Band・Score(関連性を独自集計) ▶�複数のWebAPIのスコア

 ▶�同じアーティストが所属していた

 ▶�一緒にライヴをやった回数

 ▶�独断と偏見

4.2M〜 records

Page 45: YAPC::Asia 2014 前夜祭

同名バンド

Page 46: YAPC::Asia 2014 前夜祭

読めないバンド

↑文字化けではありませんバンド名です

Page 47: YAPC::Asia 2014 前夜祭

頻出ワード

Death Black Dead Blood War Life Night Time World Hell Dark Die Darkness Fire End Last Love Evil God Metal

みなさんもよく使うと思います

Page 48: YAPC::Asia 2014 前夜祭

似ている・関連バンド(demo)http://hrhm.info/similar

Page 49: YAPC::Asia 2014 前夜祭

DB・最初はとにかく集める

・サイトによって取れる情報が異なる

 ▶�いきなりきれいに構造化はできない

・HTML、JSON、XMLを生データのままDBに 格納しておく

・最低限サービス公開に使う情報を構造化

 例:バンド名、アルバム名、曲名、国、

   ジャンル、アーティスト名

Page 50: YAPC::Asia 2014 前夜祭

データ収集中に生まれた

副産物

Page 51: YAPC::Asia 2014 前夜祭

メタル系の人は

Page 52: YAPC::Asia 2014 前夜祭

ヘビメタって言われるのを

嫌います

Page 53: YAPC::Asia 2014 前夜祭

曲に合わせて頭振るのを

ヘッドバンギングと

言いますが

Page 54: YAPC::Asia 2014 前夜祭

ヘッドバンキングって

書いてるのをよく見ます。何銀行だよ!?

Page 55: YAPC::Asia 2014 前夜祭

副産物(1)Chrome拡張作りました。https://github.com/hondallica/userscript-heavymetal

Page 56: YAPC::Asia 2014 前夜祭

副産物(1)最高にクールだろ?

Page 57: YAPC::Asia 2014 前夜祭

副産物(2)さきほどご紹介したLast.fmのCPANモジュール

Net::LastFM

api_keyいちいち入力したくないので、引数を省略したら$ENVから読みたい。

Page 58: YAPC::Asia 2014 前夜祭

副産物(2)依存モジュールが重そうだった。

Page 59: YAPC::Asia 2014 前夜祭

副産物(2)完成してませんが、Net::LastFM::Liteを作ってみました。(GET系APIなら動くはず)https://github.com/hondallica/p5-Net-LastFM-Lite

Page 60: YAPC::Asia 2014 前夜祭

副産物(2)ほぼモジュール差し替えですが

Page 61: YAPC::Asia 2014 前夜祭

副産物(2)けっこう速くなった。

Benchmark: timing 400 iterations of lfm, lfml...lfm: 305 wallclock secs ( 1.34 usr + 0.17 sys = 1.51 CPU) @ 264.90/s (n=400)lfml: 296 wallclock secs ( 0.66 usr + 0.13 sys = 0.79 CPU) @ 506.33/s (n=400)Rate lfm lfmllfm 265/s -- -48%lfml 506/s 91% --

Page 62: YAPC::Asia 2014 前夜祭

副産物(3)・bandcampというアーティスト直販サービス

・インディーズバンド多め

Page 63: YAPC::Asia 2014 前夜祭

副産物(3)・APIはありますがCPANモジュールなかった

Page 64: YAPC::Asia 2014 前夜祭

副産物(3)WebService::Bandcampリリースしました。

Page 65: YAPC::Asia 2014 前夜祭

残念なことに

Page 66: YAPC::Asia 2014 前夜祭

APIキーの配布が停止中

このモジュールは

APIドキュメントからリンクされてる

サンプルリクエストのキーを使って作った。

Page 67: YAPC::Asia 2014 前夜祭

自分専用として始めた

サービスですが

Page 68: YAPC::Asia 2014 前夜祭

現在95カ国からご利用頂いておりますアフリカ・中東・グリーンランド、北朝鮮に

メタラーのお友達がいたら宣伝をお願いします

Page 69: YAPC::Asia 2014 前夜祭

まとめ

・自分の好きな事を形に

・データ持ってるとできることが広がる

・しょぼくても公開する事が大事 ▶�この場で話す機会がいただけた!

Page 70: YAPC::Asia 2014 前夜祭

The End