2014年9月28日日曜日

ISUCON4 オンライン予選に参加してきた

ISUCON4のオンライン予選をLINEカフェにお邪魔させて頂きながらやってました。
細かくメモってないから、覚えてる範囲で日記にしておく。

メンバーは専門学校時代の同級生とその同僚で3人。
言語はPHPを選択しました。


  • 08:50 渋谷到着。普段出勤するより早い。
  • 09:00 近くのかつやでカツ丼ミニを食す。
  • 09:20 ヒカリエ11Fに着。ローソンで昼飯飲み物を購入。
  • 09:30 LINEカフェに突入。
  • 10:00 予選開始。bitbucket のリポジトリにコードなどをつっこむ。
  • 10:50 PHP などの初期設定など、もろもろ雑作業を終えて最初のベンチマーク(スコア: 1,646)
  • 11:18 スコア 3,297
  • 11:49 スコア 3,252
  • 12:36 スコア 2,460
  • 13:36 スコア 2,507
  • 13:51 スコア 24,397
  • 14:25 スコア 28,160
  • 14:42 スコア 28,785
  • 15:10 スコア 39,377 この時点で5位。このスコア以降はプログラムを大幅に書き換えようとして制限時間内に終わらず。

最終的に暫定10位以内に入ることは出来なかった。無念。
ami 提出のため、楽天カフェに移動し反省会。
再起動したら 46,274 までスコアが上がった。無念。

今回の反省点。

  • プログラムの大幅な書き換えと平行して、そのままのコードでチューニングしていく人がいるべきだった。
  • SQL力が足りなく、コード内のSQLが何をやっているのかを把握し切れていなかった
この2点が大きいと思った。

技術的な点はそのうちひっそりと追記します。

2014年7月18日金曜日

今まで行ったねこカフェめも 2014年7月版

今までに行ったことがある猫カフェのメモ。

ねこのみせ

URL: http://www.nya-n.jp/
場所: 町田

まずはここ。
関東で一番古くから営業しているお店。
家から一番近いところなので、よくいく。
お店はそれほど広いわけではないけれど、マンガがたくさん置いてある。

初めて行ったのは Twitter によると

行った日メモ

  • 2009年08月17日

ねこっ茶

URL: http://necoccha.com/
場所: 横浜

普通の家みたいなところでした。
和室と洋室があり。

以前の職場が横浜だったのですが、このお店とは駅を挟んで逆側だったので結局一度しか行かず。
駅からもちょっと歩いたところにある。
ねこはもちろん可愛かった。


行った日メモ
  • 2010年06月09日











行った日メモ
  • 2011年04月27日


















Cat Magic

URL: なし
場所: 新宿3丁目

残念ながら閉店してしまったようです。
閉店したからなのか Twitter アカウントがいつのまにか、猫カフェのことじゃなく出会い系のことばかりつぶやくようになっていたので、あまり良い印象はない。

猫は人なつっこかったです。


行った日メモ
  • 2011年05月30日



















ハビ猫

URL: http://hapineko.com/
場所: 渋谷

渋谷のそれなりに良い場所にあるが、自分が行ったときはカップルが一組いた程度だった。
ここは入店時に荷物を預けなければならなず、めんどくさかった。
ロッカーにして欲しいところ。


行った日メモ
  • 2013年08月13日

Cat Cafe Nyanny

URL: http://www.猫カフェ.tokyo.jp/
場所: 秋葉原

秋葉原にあるもう一店。
そんなに広くはないが、2フロアあり1フロアは和室らしい。
自分が行ったときは和室のフロアには足を運ばなかった。

秋葉原に行ったときはここか Jalala で休憩したい。





















2014年7月7日月曜日

Gentoo勉強会 2014年7月に参加してきた

6月に引き続き、7月5日に開催された勉強会に参加してきました。
実はGentoo勉強会のことをすっかり忘れていて、前日に松鵜さんに言われて思い出して参加申し込みをしたのでした。
あと、www.gentoo.gr.jp に掲載しているニュースも当日に Pull Req をするという感じで、次回はちゃんと事前にニュースを載せたいなと思ってます。忘れてたらすいません。

場所はいつもと同じく Miracle Linux さんの会議室。


今回の参加者はメモによると合計11名。

以下メモ。

自己紹介

特にメモはない。
+Takuto Matsuu さんが Gentoo ステッカーを配ってくれました。




最近の Gentoo 事情(@aliceinwire)

EAPI 6のことをいくつか。




Dockerでテストする(@naota344)

  • (プレゼントは関係ないけど)新しいマシンにしたらしい
    • ついでに systemd 使ってみたらちょー起動速いとのこと
  • ebuild 書いた後、ちゃんとテストしてますか?
    • repoman は ebuild の静的なチェック。
    • 書式とか DEPEND とか。
    • あとは実際に build してみるくらい。
  • CFLAGS に -frecord-gcc-switches を入れると、バイナリに CFLAGS の内容が記録されて portage が後で正しく適用されているかチェックしてくれるらしい
  • ld.gold を使えば under-linking が防げる
    • under-linking というのは A -> libB -> libC という依存状態の時に A -> libC がリンクされていない状態。
    • A から見ると libC はあってもなくても良いように見えるけど、libB が依存してるので、削除すると A も動かなくなる。
  • ここから本題の Docker.
  • Docker とはなにか
    • 昨日の Docker meeting に行って下さい。
  • https://github.com/naota/dockergentoo を clone して使ってね
  • 資料はコレらしい。

 emerge できない時、どうする?(https://twitter.com/grauwoelfchen)



一度休憩

きのことたけのこや抹茶わらび餅、おまんじゅうなど。
持ってきて下さった方、ありがとうございます。
ちなみに、たけのこ派です。

metro(@kjm)

自分の発表です。
どなたかの発表が入っていたのですが、キャンセルされていたので入れてしまいました。

自分でも理解し切れていないことが多く、うまく説明できませんでした。
半分くらい Funtoo の話題になってしまった気がします。
Funtoo は drobbins 氏がホスティングサービスを提供していて(今は休止中かも?)、契約すると drobbins 氏のサポートが付いてくると言う特典があります。

一応資料はこちらにアップしております。


Gentoo Linux LDAP Authentication(@mazgi)


  • Gentoo Linux で LDAP Authentication 環境を構築
  • 主に Gentoo Wiki を参考にしたとのこと
  • 実際に構築した環境のでもを見せてくれました
  • 最近は SSSD というものを使うのが普通らしい
    • System Security Service Daemon
    • ある程度認証情報をキャッシュしてくれるらしい

 TravisでGentooのRepomanコマンド(@aliceinwire)




という感じで今回はおしまい。
懇親会にも参加したけど、イイ感じの写真が撮れなかった。
さくら水産で撮影だと素人には難しすぎるようです。


2014年6月11日水曜日

Gentoo勉強会#3 に参加してきた

2014年06月07日(土)に Miracle Linux さまの一室をお借りして開催していた Gentoo 勉強会#3 に参加してきた。

午前中に会社のビルが電気点検のため停電になっており、一部のサーバが Kernel の設定ミスにより正常に起動しなかった。その対応を行った関係で40分ほど遅刻してしまった
タイミングが悪く、入り口で10分ほど待ちぼうけになってしまった。

今回は2回目の勉強会より多い合計15名の参加者でした。
前回はちょっとGWの終わりで時期が悪かったね。

プレゼンメモ

今回も簡単に箇条書きで。

自己紹介

  • 残念ながら遅刻により不明

最近の Gentoo 事情(@aliceinwire)

  • 残念ながら遅刻により不明

Gentooステッカーの進捗について(@matsuu)

  • 前回の勉強会で、今回までに作ってくると言っていた
  • 色々調べたら、イタリアのサイトでステッカーが売っていた
  • 2種類買った
  • 6月7日の午前中に自宅に配達に来た
    • しかし、午前中は墨田セキュリティという勉強会に行っていた
    • 今日持ってきたのは、不在票だけ
  • ステッカーはここで買った
  • Gentoo以外にもいろんなステッカーが売ってる
  • ターミナルで注文もできるよ!
その後ちゃんと届いたようです。

grub2 + EFI + btrfs使い始めた話とか(@mazgi)

  • EFI+btrfsの前に、前回発表した RaspberryPi でデジタルサイネージ的なものを作ってエクスポに持ってった話を少々。
  • 今日の発表は Qiita にメモっている
  • LVM + Filesystem を今まで使っているが、ボリュームを追加したりしたときのフラグメンテーションが気になる
    • 実際にパフォーマンスの劣化が起きるかは調べてない
  • SystemRescueCD は EFI をサポートしてる
    • tmux も入ってるし便利
    • SystemRescueCD の EFIブートの画面(grub2)と BIOS ブートの画面(syslinux) を比べると、今のところ BIOS ブートの画面の方が派手。
  • btrfs の上で swap-file が作れなくてはまった
    • (青田先生)何かのAPIをbtrfsがサポートしてないからかもしれない
    • (青田先生)CoWを切ったら、動くかも?
  • /var/log を別のサブボリュームにしているのは、gzip圧縮にしたいから
    • 他のサブボリュームは lzo
    • gzip にすることでlogrotate時の compress を不要にしたい
  • 必要な Kernel config
    • CONFIG_EFI, CONFIG_EFI_PARTITION, CONFIG_EFI_VARS を y にしておく必要在り
    • (青田先生)CONFIG_EFI_VARS が m だとうまく起動できないことがあるらしいので y にしておいた方がいい
    • (青田先生)CONFIG_EFI_STUB
      • EFIから直接 Linux Kernel をロードできるようにするもの
      • grubが不要になる
      • 複数の kernel を入れ替えるのがちょっと面倒
      • リファレンス的存在
  • (青田先生)最新の kernel じゃないと btrfs の auto-defrag と snapshot は相性が悪い


Radxa Rock(@naobsd)

  • Gentooネタじゃないけど
  • [reksa] と読むらしい
  • http://radxa.com/
  • 透明なケース付き
    • 結構壊れやすいので注意
    • 割れちゃったら、問い合わせると対応してくれるかもしれない
  • インターフェイスが豊富
  • SPDIFケーブルも売っているが、写真がどう見ても光なケーブルじゃないから買わない方がいい
  • 中国の会社
  • Tom Cubieという方が開発している
    • 以前 CubieBoard というものを開発してた人らしい
  • Wifi/Bluetoothもついてるけど、技適通ってないので注意

はじめて ebuild Patch(@aliceinwire)

  • ebuild でパッチを当てる方法
  • filesディレクトリにパッチを置いて epatch コマンドであてる
  • EAPI=2 から src_prepare() で epatch を使うことになった
  • patch は plain/text だけじゃなく xz などの圧縮形式もサポートしてる
  • ARCHごとにパッチのファイル名を生成できる
    • ??_${ARCH}_foo.${EPATCH_SUFFIX}
  • epatch は eutils.eclass に含まれている
  • epatch_user はユーザ独自のパッチを当てられる構文
    • /etc/portage/patches/category/package/*.patch
    • ebuild 内で epatch_user が実行されていたら、使える
    • 実行されてなかったら、パッチを置いても使われない
    • eclass によっては中で使われてるかも

ハッカソンタイム

  • 各自てきとーに。
  • 翻訳とか
  • 青田先生の質問コーナーとか
  • Gentoo初心者のインストールバトルとか
  • 松鵜先生のebuild作成1on1とか

こういう勉強会では Macbook の割合が非常に高くなることが多いが、今回は 50% くらいのような気がする。
他は ThinkPad だったり、その他メーカーだったりしたようだ。


DSC_4309

ULA と Src/Dest NPT を使ってみた

IPv6 では IPv4 と違い使用できるアドレスが潤沢にあるため、LAN 内でもグローバル IPv6 アドレスを使用するのが一般的です。

ただ、グローバルアドレスを付与すると接続している上位の ISP が変わったりすると、LAN 内の機器も新しいグローバルアドレスに変更しなければなりません。
また、複数の ISP に接続していたりするマルチホームな環境の場合、複数のグローバルアドレスを機器に付与するため、ソースアドレスの選択の問題が発生したりします。

そこで ULA(Unique Local Address) を LAN 内の機器に付与し、ルータ等でグローバルアドレスに変換すればアドレスが変わったときに楽にならないかなと、以前から使用したいと思ってたので、試してみました。

アドレスの変換には NPTv6(RFC6296: IPv6-to-IPv6 Network Prefix Translation) を使用します。
変換先のアドレスはプレフィックスが変わったことによりチェックサムが変わらないように計算されたアドレスに変換されます。
これによりトランスレーターの計算負荷を減少させているそうです。

IPv4 の NAT と同様にエンドポイントのアドレスが変わるので、例えば SIP や FTP などは別途対応が必要になりますが、この辺はまだ調べてません。



NPTv6の設定

Linux では Kernel に実装されています。
次のコンフィグを有効化しておきます。
CONFIG_IP6_NF_TARGET_NPT=m
ユーザランドでは netfilter で設定できます。

まずは ULA -> グローバルアドレスの変換。
変換元 fd34:fe56:7891:2f3a::/64
変換先 2001:0db8:abcd:1234::/64


$ ip6tables -t mangle -A POSTROUTING -s fd34:fe56:7891:2f3a::/64 -j SNPT --src-pfx fd34:fe56:7891:2f3a::/64 --dst-pfx 2001:db8:abcd:1234::/64

続いてグローバル -> ULA の変換
$ ip6tables -t mangle -A PREROUTING -d 2001:db8:abcd:1234::/64 -i eth1 -j DNPT --src-pfx 2001:db8:abcd:1234::/64 --dst-pfx fd34:fe56:7891:2f3a::/64
net.ipv6.conf.all.forwarding が有効になっていれば、この箱を通過するパケットのアドレスが自動変換されます。

ちなみに、iptables-1.4.21 の ip6tables-save はルールの保存部分に問題があり、正しいルールが出力されませんのでご注意下さい。

... -j DNPT--src-pfx 2001:db8:abcd:1234::/64 ...
こんなルールが出力されてしまいます..
一応バグ報告を出してみましたが、未だ受理されてないようです。
nftables の方に開発リソースを振ってるのかもしれません。使ってるユーザが少ないというのもありそうですが。

感想

宅内のネットワークで1ヶ月ほど使ってますが、FTPも利用しませんし今のところ不便はないです。
ただ、IPv4のネットワークと同じく、内部ネットワークがプライベートアドレスになってしまうため、サーバ等を NPT の内側に置いてしまっていると、外から見えるアドレスと中から見えるアドレスが異なってしまうのが面倒です。
IPv6の利点であるグローバルアドレスをたくさん使えるメリットがなくなってしまうのは、勿体ない。
しかし、DMZを置くとなると、また最初の問題に戻ってしまうという...

2014年5月16日金曜日

Gentoo勉強会#2に参加した

2014年5月11日(日)に行われた Gentoo 勉強会#2 に参加してきた。

ちゃんとメモってなかったけど、覚えていることをつらつらと書いてみる。

最初に主催の @aliceinwire さんから開会の挨拶。
その後、各自自己紹介。
参加人数は9人のはずが10人くらいいたような気がするがちゃんと数えてなかったので、実際の参加人数は分からない。

続いて有志のプレゼン。
最初は @grauwoelfchen さんの「ELOG と Ebuild Phase Hook について」の予定だったが、ここでトラブル発生。
Gentoo on MacBook(Air?)でプロジェクターを正しく認識できなかったみたい。
xrandr でプロジェクタが出てこなかったというつぶやきが聞こえた。

一旦飛ばして @mazgi さんの「ギョーム系GentooLinux 会社で使えるGentoo Linux on RPiの話をします!」でした。

ギョーム系GentooLinux 会社で使えるGentoo Linux on RPiの話をします!

はじめに Raspberry Pi をプロジェクタにつないで、GentooLinuxのブート画面が撮された。
しばらく待つと、スムーズに動画が再生された。
RaspberryPiの動画再生支援機能を利用し 720p の動画が CPU 使用率 20% くらいで再生できるらしい。
動画再生には omxplayer を使っていて /etc/local.d/xxx.start に直接シェルスクリプトを書いて自動的に再生が始まるようになってるようだ。

omxplayer は Overlay を探せば ebuild が見つかるが、古いヤツしかないらしく今回は直接コンパイルしたとのこと。

RaspberryPiの環境は AMD64 な母艦と distcc を使用しビルドしたとのこと。
コンパイル自体は distcc のおかげでそこそこ速いが、それ以外の、例えば依存性の解決などが激遅でつらかったとのこと。

あと gettext で謎の現象が起きていて解決できてなかった。
gettext --help
は問題ないが
gettext --version
だとセグフォるという。
会場でも、有用な情報は出なかった。


ELOG と Ebuild Phase Hook について

一旦アジェンダを戻って @grauwoelfchen さんの発表。
発表資料はこちら。 
結局プロジェクタを認識できずに資料を別のPCに移して発表されていた。
残念ながらデモは見れなかった。

@grauwoelfchen さんは dvorak 使いらしい。すばらしい。
StumpWM という Common Lisp な WindowManager を使っていながら vim 使いとのこと。

ELOG 機能を利用して emerge 完了時に WM へ通知を飛ばす方法を発表されていた。
採用はしなかったが似た機能として Ebuild Phase Hook についても調査されたそうです。
一部ドキュメントにも載っていないイベントが飛んでくるとか。(発表資料の20pを参照)

プレゼンのテンプレートはこれを使っているらしい。
LaTeX と言う点を除けばイイ感じ。

ちなみに @grauwoelfchen さんのブログでも Gentoo 勉強会#2についてまとめられてるので参照されたし。
grauwoelfchen.at/graffiti/gentoo-users-study-meet-up-no-2

Overlay

続いて @aliceinwire さんの発表。
シンプルなタイトルだが Portage Overlay についての発表でした。
知らなかったのだが本家の Overlay リポジトリは Bugzilla に申請すれば使えるらしい。


このあたりを参考のこと。


  • layman -L でリポジトリの一覧を見れるよ
  • @aliceinwire さんのリポジトリは a から始まるので上の方に表示されてイイネ
  • /etc/portage/package.mask に次のように書くことでOverlay丸ごとマスクできる
     */*::overlay  
    • package.unmask で欲しいものだけ unmask するのが便利
  • layman にリポジトリを登録したければ Bugzilla に書けばいいよ
  • emerge --regen を実行すると依存性のチェックがちょっと速くなるらしい

覚えているのはこれくらい。

ハッカソン?

続いてハッカソンぽいもの。ハッカソンというよりはもくもく会に近かったのかもしれない。
主に本家Wikiの翻訳について行われていた。
もっと初心者の参加者の声を拾える方法があるといいかもしれない。
  • Overlay を翻訳しようとするが、翻訳バーが表示されない
  • @matsuu さんが他のページを参考に翻訳バーを表示させようとしたが、ダメだった。
  • @matsuu さんのトークページに勝手に入れちゃダメだよというコメントが。
  • IRCで確認したら許可制とのこと。品質がいいモノのみ翻訳できるようにしているとのこと。@matsuu さんのツイート
  • 翻訳するにはアカウントに翻訳権限を付けて貰う必要がある
    • 特別ページを編集して依頼するのだが、数分程度で許可されたのでバッチ処理かと思った
    • 実際には IRC に通知が届いて a3li 氏が対応していたようだ。
自分はひっそりと GentooJP Wiki を github に移行するスクリプトを書いていた。
ぜんぜん進まなかったけど。

その他・懇親会

会場で話したのか懇親会で話したのかちゃんと覚えてないことなど。
ちなみに、本会場は Miracle Linux さんでした。
懇親会は安くて安心のさくら水産。
  • @matsuu さんは次回までにステッカーを作成する
    • .ai ファイルが開けない。
    • @mazgi さんが作れるかも
  • Tシャツもいいんじゃないかという話も出たが @naota344 さんが持ってるんじゃね?という話に。
    • そもそも、OSCで販売は NG らしい
  • 次回のOSCっていつ? 
    • Tokyo/Fall は例年10月くらいじゃないか
  • ZFS on Linux でフリーズするのに困ってる
  • btrfs はプチフリっぽいのがたまにあるけど、数年使ってて壊れたことはないよ
  • Quad Core な ARM ボードが $99
    • Gentoo いれるのや distcc にちょうどいいんじゃないか
    • http://radxa.com/
  • 懇親会中に2名ほど障害対応
  • GentooJP 用に VPS サーバ貸せるかもという情報
    • 借りるだけ借りて使わないのは勿体ないので、用途も合わせて募集しないとね
    • 現在びぎネットさんにお借りしているマシンは Xen なので、カーネルアップデート出来なくて Gentoo 的につらい。
    • 新しくサーバを借りつつ、そっちによせるのはありかもしれない
    • あと管理してくれる人も募集中だよ
  • ChromeOS は Gentoo ベースではあるけど Google 謹製の GRP (バイナリパッケージ)しかインストールできないよ
  • ChromeBook って ARM マシンだから RaspberryPi の母艦にちょうどいいんじゃないか
  • CoreOSは勝手にアップデートして再起動するからコワイ
    • 流行のいみゅーたぶるな環境だと問題ないんじゃないか
  • バックアップの話
    • 最近は duplicity がオススメ
    • rsnapshot は、世代間がハードリンクなのでどれか一つ書き換えちゃうと他の世代も書き換わるからコワイ
    • pdumpfs って最近名前聞かないね
    • bacula はOSSで一番えんたーぷらいずな機能を持ってるんじゃないかな

そういえば、せっかく一眼レフカメラを買ったのに、撮るのをすっかり忘れてた。

※ 写真は勉強会とはまったく関係ありません

2013年12月7日土曜日

ElasticSearch と Kibana で画像共有サイトのシェアを調べてみる

 Twitterを眺めてたら ElasticSearchKibana というものが流行ってるらしいので、たまたま気になっていた画像共有サイトのシェアを調べてみた。

Install ElasticSearch

まずは、ElasticSearchをインストールする。
Gentoo Linux の場合は以下のコマンドで一発。

$ sudo emerge -av  app-misc/elasticsearch

設定ファイルのサンプルが /etc/elasticsearch/ にインストールされているので、それをベースに設定する。
今回はデフォルトのまま使用した。

$ sudo cp /etc/elasticsearch/elasticsearch.yml.sample /etc/elasticsearch/elasticsearch.yml
$ sudo cp /etc/elasticsearch/logging.yml.sample /etc/elasticsearch/logging.yml

あとはサービスを起動する。

$ sudo /etc/init.d/elasticsearch start

この起動スクリプトは複数のインスタンスが起動できるようになっているようで、例えば hogehoge.yml という設定を作り /etc/init.d/elasticsearch.hogehoge という名前の起動スクリプトを作ればいいらしい。
デフォルトでは elasticsearch.yml が利用される。


Install Kibana

Kibana 自体は HTML と JavaScript で構成されているものなので、ダウンロードしてきて展開するだけである。

$ tar zxvf kibana-3.0.0milestone4.tar.gz
$ cd kibana-3.0.0milestone4
$ python3 -mhttp.server

一時的に動かすだけであれば、これで十分。

Install Twitter River

 ElasticSearch に Public streamssample をどうやって入れればいいのか調べてみたところ、 Twitter River というプラグインを使えばいいことが分かった。

$ sudo /usr/share/elasticsearch/bin/plugin -install elasticsearch/elasticsearch-river-twitter/1.4.0 
-> Installing elasticsearch/elasticsearch-river-twitter/1.4.0...
 Trying http://download.elasticsearch.org/elasticsearch/elasticsearch-river-twitter/elasticsearch-river-twitter-1.4.0.zip...
 Downloading ....................................................................DONE
 Installed elasticsearch/elasticsearch-river-twitter/1.4.0 into /usr/share/elasticsearch/plugins/river-twitter


使い方については README を見れば判ると思う。
今回は sample を利用するので type は省略する。

$ curl -XPUT localhost:9200/_river/tweets/_meta -d '
  {
      "type" : "twitter",
      "twitter" : {
          "oauth" : {
              "consumer_key" : "**** CONSUMER KEY ****",
              "consumer_secret" : "**** CONSUMER SECRET ****",
              "access_token" : "**** ACCESS TOKEN ****",
              "access_token_secret" : "**** ACCESS SECRET TOKEN ****"
          },
          "ignore_retweet" : true
      },
      "index" : {
        "index": "tweets",
        "type": "tweet",
        "bulk_size": 100
      }
  }
  '
  {"ok":true,"_index":"_river","_type":"tweets","_id":"_meta","_version":1}

これで tweets と言う名前の index が作成され、自動的に Twitter Stream に接続してツイートを収集してくれる。
ツイートがある程度溜まるまでちょっと待ってから Kibana にアクセスしてみる。

前述の通りに Kibana をインストールしている場合は http://localhost:8000/ で表示できます。
ホーム画面の一番下に Blank Dashboard というリンクがあるのでクリックしてみます。


右下に Add Row というボタンがあるのでクリックします。


Create Row ボタンを押します。


Add Panel というボタンを押してパネルを追加します。
Panel Type は Histogram でやってみます。
Sizeは12にすると横幅がマックスになります。

Time Field はデフォルトでは @timestamp になっていて、レコードが追加された日時になるようです。
ただ、Twitter River ではそのようなフィールドはないので Tweets のフィールドである created_at に変更しておきます。


また、右上に Configure Dashboard ボタンで Dashboard の設定を変えられるのですが、そこの Timepicker の設定も created_at に変更しておきます。



そうすると、このようなグラフが表示されます。
簡単ですね。

Customize Twitter River

 さて、これでシェアを調べられると思ったのですが、Twitter Riverプラグインでは Entities の urls フィールドしか取得していないようで、media フィールド内にある pic.twitter.com の情報は取得できませんでした。
 Twitter River には raw という Tweets オブジェクトをまるまる保存するオプションがあります。これを使用すればいいだろうと思って試してみました。

$ curl -XDELETE localhost:9200/_river/tweets/
$ curl -XPUT localhost:9200/_river/tweets/_meta -d '
  {
      "type" : "twitter",
      "twitter" : {
          "oauth" : {
              "consumer_key" : "**** CONSUMER KEY ****",
              "consumer_secret" : "**** CONSUMER SECRET ****",
              "access_token" : "**** ACCESS TOKEN ****",
              "access_token_secret" : "**** ACCESS SECRET TOKEN ****"
          },
          "ignore_retweet" : true,
          "raw": true
      },
      "index" : {
        "index": "tweets",
        "type": "tweet",
        "bulk_size": 100
      }
  }
  '
  {"ok":true,"_index":"_river","_type":"tweets","_id":"_meta","_version":1}

これを試してみたところ created_at が文字列型になってしまいタイムスタンプとしての利用ができませんでした。
試しに Index の型を変更してみようとしたところエラーが出て変更できませんでした。

$ curl -XPUT localhost:9200/tweets/tweet/_mapping -d '
  {
    "tweet" : {
      "properties" : {
        "created_at" : {"type" : "date", "format": "EE MMM d HH:mm:ss Z yyyy" }
        }
      }
    }
  }' | jq .
  {
    "error":"MergeMappingException[Merge failed with failures {[mapper [created_at] of different type, current_type [string], merged_type [date]]}]",
    "status":400
  }

どうも型の変更はできないようです。
Twitter Riverプラグインはオープンソースなのでフォークして、Media内のURLのインデックスを作成するように修正してみました。

https://github.com/kjmkznr/elasticsearch-river-twitter/tree/add-media-entities

$ git clone https://github.com/kjmkznr/elasticsearch-river-twitter.git
$ cd elasticsearch-river-twitter
$ git checkout add-media-entities
$ mvn package

これで target/releases/elasticsearch-river-twitter-1.5.0-SNAPSHOT.zip というファイル名でプラグインがビルドされます。

これを ElasticSearch にインストールします。

  $ sudo /usr/share/elasticsearch/bin/plugin -remove river-twitter
  -> Removing river-twitter 
  Removed river-twitter
  $ sudo /usr/share/elasticsearch/bin/plugin -u file:/path/to/elasticsearch-river-twitter-1.5.0-SNAPSHOT.zip -i river-twitter
  -> Installing river-twitter...
  Trying file:/path/to/elasticsearch-river-twitter-1.5.0-SNAPSHOT.zip...
  Downloading ....DONE
  Installed river-twitter into /usr/share/elasticsearch/plugins/river-twitter
  $ /usr/share/elasticsearch/bin/plugin -l
  Installed plugins:
      - river-twitter

あとはまた収集されるのを待ち Kibana でグラフを表示させます。



このグラフは2013/12/03 18:25 - 2013/12/07 18:25 のものです。
前述のプラグインをさらに修正して lang フィールドが ja のものを対象としています。

1位pic.twitter.com150,804 件
2位twitpic.com3,661 件
3位p.twipple.jp1,112 件
4位instagram.com689 件
5位photozou.jp118 件
6位flickr.com/flic.kr22 件
7位movapic.com1 件


調査対象は自分が思いついたサイトです。
95% は pic.twitter.com が使われているようで、思ったよりシェアが大きくびっくりしました。
公式クライアント・Webを使っている人が増えているようですね。

画像共有とはちょっと違いますが、vine.co を含むツイートを調べてみたところ、2,800件もありました。
結構普及しているんですね。

参考文献

* CactiのデータをElasticSearch+Kibanaでまとめてみてみよう