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

kaakaa Blog

この世は極楽 空にはとんぼ

来日して欲しいMetalバンド - Metalバンド Advent Calendar 2015

この記事はMETALバンド Advent Calendar 2015 - Adventar の15日目の記事です。

昨日は 120reset さんの 久しぶりにX JAPANを見たら吹っ飛んだ · Hi light & Deep shadeでした。

X Japanはバンドで紅とかSadistic Desireをカバーしてたりします。
バンドメンバーがXとか聖飢魔IIとかの国内メタルが好きで、それがきっかけで聴き始めましたが、テクニックもキャラクターも際立ってて面白いですねー。もっと早くから聴いておけば良かった。


今回はアドベントカレンダーの枠が空いてたのでKayo Dotの来日決定の宣伝も兼ねてエントリ書きます。 (Kayo Dot来日主催の方とはなんの関わりもないです。ただのファンです。念のため。)

Kayo Dot

「来日して欲しい」を考えた時に名前も挙がらないぐらい有り得ないと思いましたが、来日決まっちゃったよ。

Realising MediaさんはTwitterを使っています: "【発表②】6/11、渋谷CYCLONE、宇田川町Garretの両会場を使い、「変の極み vol.2」開催致します。 1ステージは前回同様テクニカル&プログレッシヴ勢で固め、もう1ステージはよりアヴァンギャルドな音楽で固める予定です! https://t.co/ripVdzrVYj"

Kayo Dot来日決定で盛り上がるTwitterタイムラインとは裏腹に、当日スカスカになりそうな予感もしたので宣伝も兼ねてのエントリ。

ただ、Kayo Dotはメタルというとちょっと微妙なところで、アヴァンギャルド/エクスペリメンタルとかポストメタルとかそっち方面。 とは言え、長尺の曲の所々にメタリックなサウンドを入れてきたりするので、メタルの括りに入れても良いかと。

www.youtube.com

興味を持った方は、主要人物のToby Driverの昔のバンドMaudlin Of The Wellなんかも掘ってみると面白いと思います。

来日公演主催のRealising Mediaさんは来日決定の1年前にこんなツイートしてたりしたんですね。

Realising MediaさんはTwitterを使っています: "昨日投稿したのが遅かったのでもう一回だけ。Kayo Dot来日したら真剣に行く!ってかたファボください〜。 http://t.co/IiBnyVMGyp"

こんな感じでオーディエンスの反応見えるようになったのもITの進化の賜物ですね。 明日からも頑張りましょう。

Killer Be Killed

こっからはタイトルどおり来日決まってない勢。

Killer Be Killedは後日紹介予定のMastodonのフロントマンTroy Sandersのサイドプロジェクト。

好きなバンドのメンバーのサイドプロジェクトはオリジナルを超えることがあまりないという印象があるのですが、コレは良いです。 メンバも豪華。

  • Troy Sanders(Mastodon)
  • Max Cavalera(Cavalera Conspiracy, Soulfly)
  • Greg Puciato(Dillinger Escape Plan)
  • Dave Elitch(Antemasque, ex-Mars Volta)

下に貼ったのは1枚目のアルバムの1曲め。惚れました。

www.youtube.com

結成当初はMax Cavaleraが昔やっていたNailbombのような音楽を志向していたらしく*1、そんな感じの粗暴さと、MastodonやDillinger Escape Planなどのメロディアスさとカオティックさを兼ね備えた感じが格好いいです。 上に貼った曲のGreg Puciatoが唄うサビとかなんかは、元のバンドでは想像できないほどキャッチーで疾走感があったりするので、そんな意外性も面白いです。

今年春先のオーストラリアツアーから活動休止してたっぽいですが、Antemasqueの活動を優先するためにツアー前に抜けたDave Elitchに代わって、Ben Koller(Converge)が参加して、自作を作り始めているというニュースが。*2
カバレラさん、Mastodon、Dillenger Escape Plan、Convergeとか…素敵です。

来日と共に次作も期待してます。

Red Fang

オレゴン州出身の4人組。2005年結成。

www.youtube.com

こっちは頭空っぽで聞くような疾走感のあるストーナーメタル。 PVは毎作ビール飲んでたり、内容も馬鹿馬鹿しいので楽しさ満開。

野外の夏フェスとかでビール片手に見たい。

YOB

こちらもオレゴン州出身の3人組。1996年結成。

Red Fangとは打って変わって、コチラはズルズル引き摺る長尺ドームメタル。

www.youtube.com

暗黒ドゥームだけど、メロディはちゃんとあって、しかも長尺ってところにとても惹かれます。
展開もゆっくり進行していくので作業用BGMにもGood!!

ただ、ライブ行くとなるとあまり動きがなさそうなので腰痛が心配…そんな年になりました。

YOBはPitchforkのTop of Metal 2014で3位とかになってるので、そこそこ知名度はありそうな気がするけど全然名前をみたことが無いような。*3
どんな評価なんでしょ。


METALバンド Advent Calendar 2015 - Adventarは明日も参加予定の方がいないようなので、どなたかいかがでしょう?

明日がなければ明後日もkaakaa_hoe_progの「Mastodonについて思いの丈を」です。

GradleでEclipseプラグインをビルドする

Eclipseプラグインを作り続ける人もいる、このロクでもない世の中に向けて。


基本的には下記を参考に。 mikamikuh.hatenablog.com

自分の環境で実行したら、META-INF/MANIFEST.MFファイルが、Gradleがjarタスク実行する時に自動生成するMANIFEST.MFに置き換えられてしまっていた。

ので、jar.manifestの設定で、Eclipseが生成するMANIFEST.MFを出力するよう指定した。

gist.github.com

Eclipseプラグインフォルダをどう指定するかが悩みどころ。


ちゃんとやるなら、GradleのwuffプラグインMaven TychoのGradle移植)を使うべきだろうけど、社内プロキシに阻まれてインストール出来なかったので、簡易的にコッチでも大丈夫かな?(まだHello Worldプラグインでしか動作確認していない)

https://github.com/akhikhl/wuff

[フェス] サマソニ予習用サービスを作りました

紹介

setlist search

コレは何?

最近のセットリストから、ライブで演奏しそうな曲を調べるもの。
フェスで知らないアーティストいっぱいですが、定番曲ぐらいは知っておきたい時にどぞー。

検索窓つけてますが精度が悪く、検索結果が無い場合が多いです。
「Mastodon」なら検索できるはずです(サマソニ関係無い)

どんなもの?

setlist.fm - the setlist wiki というものがあります。
これは、登録したユーザがライブで演奏したセットリストを書き込んで共有するサービス。

setlist.fmのAPIを叩いて、最近のセットリストからよく演奏している曲を探しています(単純に加算してパーセンテージ出してるだけ)。

よく演奏している曲の動画をYouTube Data APIを使って、ページに埋め込んでいます。

もっと詳しく

使ってる技術

  • Sinatra + Haml
  • Heroku Freeプラン
    • 万が一アクセス過多になると多分落ちます
    • 2015/8月以降は一日18時間以上起動すると落ちます

使用しているAPI

心残り

いっぱいあります

Music Brainzの検索精度

結構辛いです。

例えばMUSESearch Results - MusicBrainz

Fuji Rockにも来る、UKバンドのMUSEが来て欲しいところですが、そのMUSEはスコア 98 で、他にスコア 100 のグループが5つヒットします。
どういう基準でスコアが付けられてるのかよくわかりません。

また、コレが辛いところですが、同じアーティストのIDが2つあることがあります。

斉藤和義 - MusicBrainz
斉藤和義 - MusicBrainz

酷いことにMusic Brainzの検索で見つかるIDとsetlist.fmで保持してるIDが別物ということもあり、悲しい思いをしました。

IDと言ったな。アレは嘘だ。

最初はサマソニのサイトのHTMLから自動で~ってのを考えてましたが、結局半分ぐらいは手動検索でMusic Brainz IDを探してました。
音楽関係のサイトが全てMusic Brainz IDベースになれば、もう少し精度上がると思うんだ。

setlist.fm のコンテンツ

ユーザベースのサービスということもあり仕方ないことですが、セットリストの登録が少々残念です。
特に日本のアーティスト。

BABYMETALDIR EN GREYなんかの海外でも話題のアーティストについてはちゃんと登録がありますが、サマソニの出番的にBABYMETALより格上のRADWIMPSなんかは寂しい感じ。

音楽好きにはなかなか良いサービスだと思うので、もう少し日本でも流行って欲しいです。

D'ANGELO AND THE VANGUARD

シングルクオートのせいでJSONが壊れるのでやめてください

おわりに

フジロックのメニューも作ろうとしたけど、HTML見るとヘッドライナークラスがimgタグのロゴ表示しか無いので萎えました。
altぐらい…

commandモジュールがパイプを使えないことを経験した

という話。

LibreOfficeインストール用のPlaybookを書いてる時に、複数rpmファイルをlocalinstallする必要があったので、こんなタスクを書いた。

    - command: find LibreOffice_{{ detail_version }}_Linux_x86-64_rpm/RPMS/ -name *.rpm | xargs yum -y localinstall

エラーになった。

TASK [command] ******************************************************************
fatal: [192.168.33.14]: FAILED! => {"changed": true, "end": "2015-06-08 09:53:27.678648", "stdout": "", "cmd": ["find", "LibreOffice_4.4.3.2_Linux_x86-64_rpm/RPMS/", "-name", "*.rpm", "|", "xargs", "yum", "-y", "localinstall"], "start": "2015-06-08 09:53:27.662475", "delta": "0:00:00.016173", "stderr": "find: paths must precede expression: |\nUsage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]", "rc": 1, "invocation": {"module_name": "command", "module_args": {"_raw_params": "find LibreOffice_4.4.3.2_Linux_x86-64_rpm/RPMS/ -name *.rpm | xargs yum -y localinstall"}}, "stdout_lines": [], "warnings": []}

findの-nameオプションの引数 *.rpm をダブルクオートで囲ってないのが原因だと思って調べまくってたけど解決できず、ようやくcommandモジュールにパイプやリダイレクト等を使用できないことを知る。

ansibleでshellやcommandを使う時の注意点 - Qiita

commandモジュールじゃなくてshellモジュールを使えばいいだけだった。

    - shell: find LibreOffice_{{ detail_version }}_Linux_x86-64_rpm/RPMS/ -name *.rpm | xargs yum -y localinstall

shellモジュールの方が出来ること多いから、commandモジュールいらなくね?って疑問に言及しているエントリを見つけた。

Ansibleのshellモジュールとcommandモジュールの使い分け | bacchi.me

shellモジュールは記述されたコマンドを/bin/shで実行するけど、commandは違うよという話。 ほんまかいな。

まぁ、使えるコマンド制限されてたほうがセキュリティ的に頑丈だよねってことだろうか。


shellモジュールとcommandモジュールの違いが気になってきたのでソースを見てみた。 (結果は、よくわかりませんでした)

ansible/mod_args.py at 5622fc23bc51eebde538b582b5e020c885511f31 · ansible/ansible

shellモジュールが使われてる場合は '_uses_shell' フラグを True にして、アクション名をcommandに書き換えている。 ということは、shellもcommandも同じ動きをする?

'_uses_shell' が使われている箇所を調べるためにansible-playbook実行した時のトレースを見てみる。 Python スクリプトの動作をトレースする - とあるSIerの憂鬱

[vagrant@localhost ~]$ python -m trace --trace /usr/local/src/ansible/bin/ansible-playbook -i hosts  pptgallery-playbook.yml --ask-pass | grep '_uses_shell'
SSH password:
mod_args.py(125):             args['_uses_shell'] = True

設定されてるだけで使われてなかった。。。

とりあえずここまで。


蛇足

来日行こうか迷う。


Pallbearer - Saint Vitus 2014 - YouTube

fluentd-plugin-lets-chatを作った

fluentdのプラグインを作るために色々調べたので備忘録。

概要

REST API経由でsdelements/lets-chatへメッセージを送信してくれるプラグイン

kaakaa/fluent-plugin-lets-chat

背景

Gitbucketを遊びで使ってて、Gitbucketの飛ばすWebhookをLets Chatに飛ばしたかった。

  • Let's ChatのREST APIではリクエストパラメータのJSONの中にtextフィールドを持ってなきゃいけない
  • fluentdに対して `json={}` でない形式でデータを送った時に、fluentdのin_httpプラグインだと解析してくれない(ように見えた)
    • GitbucketのWebhookが `payload={}` の形式でリクエスト飛ばすので、それを処理したかった
    • => なので、 `KEY={}` の `KEY` の部分をconfで指定できるようなHttpInputプラグインを拡張したプラグイン書いた
  • Gitbucketの飛ばすwebhookの内容が大量なので、必要な情報だけをフィルターかけてLets Chatに飛ばしたかった
    • => なので、JSONがネストしてたりする場合もあるので、ネストしていてもキー指定できるようなOutputプラグインい書いた
    • => ただし、JSONの中にArray入ってる場合は強制的に1番目の要素を引っこ抜いてる現状

こう書くとFilterプラグインが必要そうだけど、Filterプラグインの使い方がいまいち掴めなかったので、InputプラグインとOutputプラグインでほげほげしてる。

調べたこと

Fluentdプラグインの書き方については下記を参考にした。

fluentdのためのプラグインをイチから書く手順(bundler版) - たごもりすメモ

  • 自分の環境(Ruby2.0.0)では、上記のやり方に加えて development_dependencyに test-unit を追加する必要があった。

途中、プラグインをインストールしているはずなのに、Fluentd(td-agent)がプラグインを見つけてくれない問題が起こった時には、下記サイトのやり方で原因を見つけた。

Fluentdの自作プラグインがロードできないのでソースの中身を追ってみる… - kk_Atakaの日記


HttpInputプラグインを拡張するやり方、およびテストの書き方については fluent-plugin-heroku-syslog を参考にした

また、本家のin_http.rbなども参考にした。

fluentd/in_http.rb
fluentd/test_in_http.rb

おわりに

Let's ChatはUIもモダンな感じだし、簡易的だけどREST APIも付いてるので自分でホストできるチャットツールとしては優秀だと思う。
SlackやらHipChatを使える人はそっちで十分だと思うけど、色んなしがらみによって外部ツールが使いづらいひとは試してみてはどうでしょう(主にSIer方面)。

Fluentプラグインはコード量が多くならないし、Github見ればいくつもサンプルが転がってるのでコーディング方面ではあまり躓かないけど、どういう動きをしてるのかを掴むまでは辛いものがあった。
まぁ、そこら辺はFluentdのコード読めな話なので精進が足りなかったということで。

蛇足

Royal Thunder良い。

ログインフォームを使ってログインするようなページへのアクセ

Go-lang勉強。

ログインフォームのあるようなサイトにGo-langのhttpパッケージを使ってログインする。

ログインしたいのは Log in - Swipe

フォームの情報送るにはPostForm使うと楽っぽいけど、今回は

  • リファラを設定しないとログインさせてくれない
  • cookieJar使ってログイン情報持ち回りたい

という背景があったので、PostFormだと上記が満たせない感じ。

なので、Request作ってフォームの情報はbodyに流し込む下記のような方法で。

package main

import (
        "net/http"
        "net/http/cookiejar"
        "io/ioutil"
        "bytes"
)

func main() {
        cookieJar, _ := cookiejar.New(nil)

        client := &http.Client {
                Jar: cookieJar,
        }

        // Login to swipe.to
        var str = []byte("Email=hogehoge%40example.com&Password=foobar")
        req, _ := http.NewRequest("POST", "https://www.swipe.to/login", bytes.NewBuffer(str))
        req.Header.Set("Referer", "https://www.swipe.to/home")
        req.Header.Set("Content-Type", "application/x-www-form-urlencoded")

        res, _ := client.Do(req)

        // Create New Doc
        req2, _ := http.NewRequest("POST", "https://www.swipe.to/edit/create", nil)
        req2.Header.Set("Referer", "https://www.swipe.to/home")
        res2, _ := client.Do(req2)
        body, _ := ioutil.ReadAll(res2.Body)
        defer res2.Body.Close()

        println(string(body))
}

なんか勘違いしてる感が拭えない。

社内勉強会でGradle布教活動をしてきた

結果

「Gradle使おうぜ!」 => 失笑

資料


次のステップとして、今のプロジェクトがEclipseな感じなので、akhikhl/wuff をベースにTychoとかOSGI周りとか良いかもしれない