MacBookAir買いました

軽い。
本体も動きも。
あと2本指でスクロールするのがすごくいいです。放り投げられる感じが。


今はいろいろ設定+インストール中です。


Firefox +アドオン
Flash
Chrome
Twitterクライアント(今んとこSAEZURI)+Adobe Air
Java
Eclipse ←いまここ
メールとか?


いろんな意味ですべてがクラウドになってインストール不要になるといいな、と今日はほんと思いました。


Windowsに慣れきっちゃってていろいろなところで手間取ってます。
移行アシスタントが全然動かなくて参っちゃいました。たぶん手動で移行するのかな。


違和感があるところ
・ファイルを選択してEnterを押しても開かず、WindowsのF2に相当する 名前を変更モード になる。
マウスを繋げたときのホイールの向き     (←追記:2011/08/18解消)
・確認ダイアログのはい/いいえの左右
Firefoxマウスジェスチャー的なことをしたい。(Safariだと戻るが2本指でできる。(追記:2011/08/18))

HBase at Facebook に行ってきました

FacebookでのHbase利用について、
アーキテクトのJonathan Grayさんに来てもらって、プレゼンしてもらうという
素晴らしい会に参加しました。


http://www.zusaar.com/event/agZ6dXNhYXJyDQsSBUV2ZW50GOuRAgw


@ さんによるJonathanのプレゼン資料の日本語訳



(英語資料は未公開)

  • 感想
    • FacebookでHiveで15-24hoursかかってた処理がPUMA(+PTail)というので10-30 secになった。衝撃的。PTailは数週間(a couple of weeks)で公開されるとのこと。
    • FacebookはHBaseにかなり力を入れている。
    • おそらくMySQLをやめて代わりにHBase+CacheにしてWebもバックエンドもリアルタイム化しようとしている。
    • 「バッチスタイルのアプローチだったが、ストリーミングなアプローチにした」というのが印象的だった。
    • 彼らの中ではHadoopはもう古いんだと思う。これからはストリーミング。日本は数年遅れてると思った。
    • もしかしたらCassandraでもと思われる方が多いかもしれないが、僕はそうは思わない。おそらく全てのサービスでconsistency(一貫性)は非常に重要なので、HBaseが合う。実際にCassandraを作ったFacebookで、もうCassandraは使われてないという事実が全てを示している。
    • Facebookは広告の効果測定をリアルタイム化していた。
    • オープンソース化する文化って本当に素晴らしい。日本にはないものだと思った。日本も恩恵を受けてるんだから返さないとだめだと思う。
    • @ さんとアンケートのユースケースにもあった某CT○の翻訳が素晴らしかった。
    • 普通に二次会予約しておけばよかった。
    • FacebookとJonathanかっこいい!
  • Jonathan Grayさんが言ってたこと
    • HBaseの特徴で「HDFSは3000ノードで40PB」
    • 「HBaseは辞書とリストに優れている。登録した瞬間に3世代でソートされている」
    • 「PTailとHBaseによってほとんど全てのMap-Reduceを置き換えられる」
    • MySQLのスケールに成功した。でもめちゃめちゃコストがかかる(笑)。HBaseは安く済む。MySQLは1台に300GB(SSD)だが、HBaseなら1台に2TB乗る。」
    • 「HBaseでトランザクションを扱えるようにしたい」
  • Q&A覚書き(長いです)

Q: Scribeあたりのバッファの消失の問題をどうしているか(古橋さん[twitter@frsyuki])
A: オフセットを保持して、そこまで書けたら次のオフセットまでという方式。
Transactionの話
scribeがこけたらどうのという話題も。


Q: なぜCassandraやMySQLシャーディングじゃなかったのか?
A: consistency(一貫性)が欲しかった。
ひとつのサーバーに複数のシャードを割り当てたい。
社内にHDFSに詳しい人がたくさんいた。


Q: Pumaのボトルネックはどこでどう改善したのか?
A: Hiveでは24時間のデータを処理するのに24時間以上かかっていた。
バッチスタイルのアプローチだったが、ストリーミングなアプローチに変えたということ。


Q: MySQLをスケーラブルにっていうのはどういう風に?
A: 単純なシャーディング
レンジがどうとか(よくわからん)
Joinはアプリケーションサイド


Q: ネットワークの苦労話は?
A: DC内でネットワークパーティションがおきないこと。
Redundancy(冗長性)の確保。
上層のネットワークを10GBにした。
下は1G。
物理的に近いところにある。階をまたがない。


Q: rainbirdやverticaをなぜ使わないのか?
A: 自分で作りたいし(笑)


Q: スケーラブルなスキーマの例がなかったが
A: rowがユーザーひとりで、メッセージとか全部そこにつまってるよ


Q: どんな見積もり方法をしましたか?
A: Darkloanchと呼ばれる方法(Facebookの詳しい資料にちょっと書いてありました)。


Q: FacebookでCassandraは使われてるのですか?
CassandraのコミッターはFacebookにたくさんいますが・・・(西澤無我さん)
A: 使ってません。(ざわざわざわ・・・)
僕らが欲しかったのは
Availability
Consistency
まあ、違う用途には使えるだろう。


Q: PUMAはオープンソース?どうしても欲しいです。
A: PUMAはサービスよりの技術(的な事を言ってた)。こんな構成要素からなる。
scribe
ptail
HBase
(Caribe FS?(カリブと聞こえた))
昨日なにか発表があったよ。そこで新しい発表があったかもしれない。
ptailは数週間以内にオープンソース化されるだろう。(歓声!そして質問者握手!w)


Q: HBaseのバックアップは?(将さん)
A: 実は開発中です。
今までは2箇所に書いてた。
今は違うアプローチを取ろうとしてる。
HBaseでスナップショットを取るような
インメモリはディスクに書き出す。
HLOGを書き出すような。


Q: メジャーコンパクションのレイテンシはどう保つか
A: スプリットやコンパクション自体を少なくすればいい。
ブルームフィルターみたいので解決できる(よくわからず)。
あらかじめスプリットしておく。
TITANは自動スプリットはしてない?


Q: もしJonathanがスタートアップにいて、それでも使う?
A: 会社によると思う。
僕が起こした会社はものすごい量のデータを扱っていたので必要があると思う。
NoSQLとかの新しい技術はいいこともあるけど悪いこともある。
新しいことはできるけど、成熟してない。


Q: PUMAを使えるようになってよかった例は?
A: さまざまな効果測定がリアルタイムに。
広告のUU数とか。
ユーザーの動きがリアルタイムにわかるようになった。



昨日の地震

地震のときは品川シーサイドの会社で、ビルが高いため長い間揺れていました。
(緊急地震速報出てなかったよね?あの地震がわからないなら結局役に立ってないような。)
最初は喜んでいるやつもいましたが、縦ゆれが何度か来た時点で僕は普通じゃないと思いました。
その時点で頭をかばったのですが、収まらないのでやばいと判断して机にもぐったりしました。
ミシミシ、パラパラという音が聞こえたためビルもダメージを受けてるなと思ったら
あとで少しひびが入って塗料が落ちているところをいくつか確認しました。
地震情報を確認して、やっぱり宮城沖で震度7だということを確認しました。


そのときは何度も余震がきて少し怖いのと、
どことどこが壊滅だとか適当なことを大きな声で笑いながら言ってる人がいるのにも耐えられなかったので、外に1時間くらい非難していました。
一緒に出た子は地元が仙台で、僕は嫁の実家が石巻
お互い現地に連絡を取れず不安を隠せませんでした。
避難命令があった会社もあるようで人がたくさんいました。
お台場の方?から煙があがってました。
エレベーターが止まっていて上まで戻るのが辛かった。。


そのあと帰っていいという連絡が来たのですが、JRが運転を止めていて帰れません。
バスもタクシーも道の異常な混雑でおそらく使えない感じでした。
JRは初動が遅すぎると思います。
なにかあったときに弱すぎて、JRが二次災害を起こしていることに気づきましょう。
しばらくどうにもできなくて夜にジャスコにいきました。
やはり会社の人がごちゃごちゃいて売り切れ続出でどこも30分待ち。
すぐに食べに行った連中は頭いいなと思いました。


で、しばらく品川シーサイドから所沢に帰る手段が見つからなかったのですが
夜になって少しずつ地下鉄が復活して、大江戸線が復活した時点で帰ろうと思いました。
新宿から練馬までいけるので。
そのあと少し様子見してると半蔵門線西武線が運転しだしたので
渋谷まで歩いてから帰ることを決意しました。



同じ方面の人3人(所沢、自由が丘、池袋方面のその日で会社最後の方もいたり)と
22時くらいに一緒に渋谷に向かいました。そのときまだ会社には同じ部署の人は10人弱くらい残っていました。
道ではとくに混乱はありませんでした。さすが日本。
車は混んでました。大崎あたりは一瞬空いてました。
同じような人が数人いて、抜きつ抜かれつして進む程度でした。


30分程歩いたくらいで嫁から連絡があり、親戚が両親と連絡が取れたとの連絡があり喜びました。
それから少しして電話の電池が切れました。危なかった。買い換えようかな。。
1時間ほど歩いて大崎の手前で巨大な集団とすれ違いました。どこかの僕らとは関係ない駅に向かってる集団のようでした。
僕らが大崎を過ぎた、あたりでだんだん人が増えて車も異常に増えてきました。
途中長い上りがきつかったんですが(五反田あたりだったかな?)、
出てから1時間半程で目黒について、南北線が動いていて、駅員は東西線有楽町線も動いている情報はないと言ってたけどTwitterで動いていることが確認できていたので、渋谷に向かう一人とは別れて南北線に乗りました。


Twitterすげーっす。情報が一番速くて当事者がつぶやくのである程度信用できます。マスコミよりいいかもね。


南北線は1本東西線が来て、少し待ってる人が大目でしたが、座ろうと思えば座れるくらいに最初空いてました。
僕らは立ってたんですが、途中でどんどん人が乗ってきて、青山一丁目あたりからぎゅうぎゅうで、永田町でピークに達しました。
飯田橋で頑張って降りて有楽町線に乗り換え。
池袋についたときは西武線も動いている情報があったので、ゲームをクリアしたような達成感でした。
ただ、池袋には大量に人がいました。老若男女が隙間がないくらいにたくさん。
JRが動かなくて帰れない人か、池袋近辺で働いてた人だと思います。
情報があれば私鉄で帰れる人もいるんじゃないかなとも思ったりしました。
僕らは一緒に屯ちんでラーメンを食べて、池袋の人にはお世話になりましたと言って別れました。


所沢には西武池袋線が終夜運行してくれてたので問題なく帰れました。
すっごい眠かった。
家に着いたのはたしか2時半くらいでした。


ついてからテレビを見て衝撃でした。特に気仙沼の映像が。
さすがに疲れてテレビを見ながら寝てしまいました。


今はなるべく電気を使わないようにしながらTwitterで情報を探したりRTしたりしてます。

地震被災情報リンク 石巻を中心に

リンク
Google Person Finder (消息情報): 2011 日本地震http://japan.person-finder.appspot.com/


http://www.kraftwerk.jp/news/2011/03/12/262/http://www.kraftwerk.jp/news/2011/03/12/262/


「paper:plustic: 石巻とその周辺被災地 現地から発せられていると思われる情報まとめ」 http://paperplustic.blogspot.com/2011/03/blog-post.html


「みんなで仲良く石巻を語ろう53回」 http://tohoku.machi.to/bbs/read.cgi/touhoku/1298901197/l50 (3/13 06:19 追加)


「【石巻の皆がんばれ!】石巻地震津波災害情報、避難状況のまとめ」 http://blog.nexyzbb.ne.jp/rciel/ (3/13 6:57追加)


東北地方太平洋沖地震 | Hang in there TOHOKU」 http://www.geocities.jp/saveeq311/ (3/14 17:28追加)


Picasa ウェブ アルバム - Google Japan」(避難者リスト) http://picasaweb.google.com/tohoku.anpi (3/15 2:29追加)


現地のアカウント
(殺到すると良くないので彼らに直接質問したりするのはなるべくやめてください。)


宮城県石巻市
@ 石巻出身の在京の方(3/13 06:19 追加)
@ (3/15 2:08追加)
@ (3/15 2:08追加)
@ (3/15 2:08追加)
@ (3/15 2:08追加)
@ (3/15 2:08追加)
@ (3/15 2:08追加)
@ (3/15 2:08追加)
@ (3/15 2:08追加)
@ (3/13 06:19 追加)不明?繋がらない
@ (3/16 0:20追加)
石巻
@ 佐々木輝さん (3/13 6:57追加)
宮城県石巻市蛇田
@ 石森洋史さん? (3/13 06:19 追加)
@ (3/13 06:19 追加)
宮城県石巻市千石町
@ (3/13 06:19 追加)


宮城県東松島
@ (3/13 06:19 追加)


宮城県大崎市
@ (3/13 06:19 追加)


宮城県仙台青葉区
@ (3/13 06:19 追加)
@ (3/13 06:19 追加)


仙台
@ (3/13 6:57追加)
@ 東北放送ラジオのひろぽんさん(3/13 7:04追加)
@ (3/15 2:08追加)


石巻→仙台
@ (3/15 2:08追加)


塩竈市
@ (3/15 2:08追加)


場所不明
@ (3/13 7:16追加)


放射線モニタ結果
高エネルギー加速器研究機構(KEK)の一宮さんが立ち上げられた、放射線モニターデータのまとめページ(情報を俯瞰できる)
「radmonitor311」 https://sites.google.com/site/radmonitor311/home


経済産業省のモニタ結果
「報道発表(METI/経済産業省)」 http://www.meti.go.jp/press/


関東のモニタ結果
文部科学省ホームページ」 http://www.mext.go.jp/

単純ファイル集計の各言語ベンチマーク


いろんな言語でファイルを単純に集計するという処理のベンチマークをとってみました。


処理はタブ区切りのkey-valueの羅列のファイルからkeyごとにvalueを合計するというモノ。
但し家で環境もないのでだいたいcygwinの結果です。
Javaだけ素で動くからちょっと有利な結果になってるのかも。

Language Version Src[Byte] Src[line] 100000行[s] 1000000行[s] 10000000行[s]
gawk 3.1.6(cygwin) 108 9 0.229 1.634 15.552
Python 2.5.2(cygwin) 277 12 0.634 4.644 47.492
Java 1.6.0_22-b04 1046 24 0.83 7.027 46.492
Perl v5.10.0(cygwin) 141 8 1.395 12.755 129.764
Ruby 1.8.7(cygwin) 243 14 1.928 19.656 192.643


<グラフとか追加したい>


単純処理はgawkが速いようです。(一般的にはあまり言語と思われてないのかな?)
件数がもうちょっと行くと、おそらくJavaPythonに勝ちそうです。
※だいぶUpdateしてないのでバージョン古めかもしれません。ck使えなくなると嫌なので


ソースの量も比較したかったので、けっこう詰めて端折って書いています。## マネしないでね
以下、ソース。



gawk

#!/usr/bin/awk -f
{
    total[$1]+=$2
}
END{
    for(key in total){
        print key"\t"total[key]
    }
}


Perl

#!/usr/bin/perl
while(<>){
    @rec = split();
    $table{$rec[0]} += $rec[1];
}
for $key(keys(%table)){
    print "$key\t$table{$key}\n";
}


Python

#!/usr/bin/env python
import sys
total={}
for line in open(sys.argv[1], 'r'):
    items=line[:-1].split('\t')
    if items[0] in total:
        total[items[0]]+=int(items[1])
    else:
        total[items[0]]=int(items[1])

for key in total:
    print key+"\t"+str(total[key])


Ruby1.8

#!/usr/bin/ruby
total={}
while a=gets
    a.chomp!
    b=a.split("\t")
    if total[b[0]]==nil
        total[b[0]]=b[1].to_i
    else
        total[b[0]]+=b[1].to_i
    end
end
for key in total.keys
    print key+"\t"+total[key].to_s+"\n"
end


Java

package sample;
import java.io.BufferedReader;
import java.io.File;
import java.util.HashMap;
public class SimpleSum {
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new java.io.FileReader(new File(args[0])));
            java.util.Map<String, Integer> map = new HashMap<String, Integer>();
            String line;
            while ((line = reader.readLine()) != null) {
                String[] record = line.split("\t");
                int val = Integer.parseInt(record[1]);
                map.put(record[0], map.containsKey(record[0])?map.get(record[0])+val:val);
            }
            for (String key : map.keySet()) {
                System.out.print(key + "\t" + map.get(key) + "\n");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

# 今見ると直せるところいっぱいあるな。。今度直して計りなおしたい。正規表現系とかも。

タイトル・URLコピー系ブックマークレット

「タイトル」 URL(短縮しない)表示ブックマークレット

  • 「タイトル」 URL(短縮しない) をpromptで表示します。
javascript:var x=prompt('Copy this!','「' document.title '」 ' location.href);

「タイトル」 URL(bit.ly短縮)表示ブックマークレット

直接webのtwitterに投稿するブックマークレット。これがないとたぶんできなかった。
2010-03-07 - notes plastiques


僕は直接投稿じゃなくてコピーしたいのでちょっと改変してみました。

利用にはbitlyアカウントが必要ですので「http://bit.ly」でアカウントを作成してください。当然ながらtwitterアカウントも必要です。

そしたら

でbitlyのAPIkeyを取得してくだしあ。


注意!このブックマークレットの"http://bit.ly/javascript-api.js?version=latest&login=bitlyapidemo&apiKey=R_0da49e0a9118ff35f52f629d2d71bf07"のlogin=〜とapiKey=〜の部分は先程取得しましたbitlyのapikeyに書き換えてください!

javascript:var%20JSLoader=function(options){var%20options=options||{};this.pointer=0;this.finish=options.finish||function(){};this.append=options.append||null;this.queue={length:0,list:[],push:function(arg){this.list.push(arg);this.length++;}};return%20this;};JSLoader.prototype={next:function(){var%20self=this;var%20loader=new%20JSLoader({append:self.append,finish:function(){self._next();}});var%20args=[];for(var%20i=0,l=arguments.length;i<l;i++){loader.assign(arguments[i]);}self.assign(function(){loader.run();});return%20this;},_next:function(){var%20func=this.queue.list[this.pointer++];if(func){func();}},assign:function(arg){var%20self=this;switch(typeof%20arg){case'string':this.queue.push(function(){self.load(arg,{append:self.append,onload:function(){self.report();}});});break;case'function':this.queue.push(function(){arg();self.report();});break;}},report:function(){this.queue.length--;if(this.queue.length==0){this.finish();}},start:function(){this._next();},run:function(){for(var%20i=0,l=this.queue.length;i<l;i++){this.queue.list[i]();}},load:function(src,options){var%20options=options||{};var%20element=options.append||document.body||document.documentElement;var%20script=document.createElement('script');script.src=src;script.type=options.type||'text/javascript';script.onload=options.onload||function(){};if(options.charset)script.charset=options.charset;if(document.all){script.onreadystatechange=function(){switch(script.readyState){case'complete':case'loaded':script.onload();break;}};}element.appendChild(script);}};function%20responder(data){var%20s='';var%20first_result;for(var%20r%20in%20data.results){first_result=data.results[r];break;}var%20x=prompt('Copy%20this!','%E3%80%8C'+document.title+'%E3%80%8D%20'+first_result["shortUrl"].toString());}new%20JSLoader().next('http://bit.ly/javascript-api.js?version=latest&login=bitlyapidemo&apiKey=R_0da49e0a9118ff35f52f629d2d71bf07').next(function(){BitlyClient.shorten(location.href,"responder");}).start();

第7回 データマイニング+WEB 勉強会@東京 資料まとめ

第7回 データマイニング+WEB 勉強会@東京 (Tokyo.Webmining #7) −機械学習・解析・セマンティックウェブ祭り− http://atnd.org/events/8164
ハッシュタグ: #TokyoWebmining http://search.twitter.com/search?q=%23TokyoWebmining
togetter第7回データマイニング+WEB 勉強会@東京 ( #TokyoWebmining #7 ) -機械学習・解析・セマンティックウェブ祭り- - Togetterまとめ


かなり面白かった。
部外者ですが資料まとめてみました。


↓正式なまとめはコチラ
第7回 データマイニング+WEB 勉強会@東京 ( #TokyoWebmining #7) −機械学習・解析・セマンティックウェブ祭り−を開催しました - hamadakoichi blog


O1.“Openinig Talk” (10分)
O2.“参加者全員自己紹介” (30分)

  • 「GAを用いた最適化の応用例:シミュレータ上のロボットの運動学習と体構造の進化」 (発表10分 + 議論10分)
  • 「ソーシャルアプリでの Amazon Elastic MapReduce 活用事例」(発表15分+議論15分)