私的大岡山ランチスポット

いよいよ前夜祭は明日、本編は明後日に迫ってきましたYAPC::ASIA TOKYO 2010!
http://yapcasia.org/2010/

今回は大岡山周辺でおすすめなランチスポットをいくつか紹介したいと思います。
(追記)
弁当を食べたいというブクマコメントがあったので最後に弁当について少し書きました。
ちなみに東工大の昼休みは12:10~13:20となっているのでこのあたりは混んでいる確率が高いです。


まずは四川屋台。通称四川。正門を出てすぐのところにあり、東工大生のほとんど全員が一度は行ったことがあるんじゃないかという中華料理のお店です。
おすすめは担々麺。辛さも大辛まであるので辛いもの好きの人にもばっちりです。
オリジナルのラー油を使っていることもありその風味は独特。好みは分かれると思いますがぼくは好きです。とりあえず大岡山に来た記念にでも。中華の鉄人、陳建一も来たらしいです。
四川屋台 シセンヤタイ - 大岡山/中華料理 [食べログ]
http://r.tabelog.com/tokyo/A1317/A131711/13003297/


2つ目はたんや。東工大生にもかなり人気があるお店です。店内の座席数がそんなに多くないこともあり、昼休み時にはたいていある程度の行列ができています。
おすすめはたんや丼。柔らかい豚の角煮とマヨネーズ風味のソース、煮玉子が非常によくマッチします。
ぼくは注文したことはないですが、ここの担々麺もとてもおいしいらしいです。普通においしい担々麺を食べたいときはここで。
麺飯場 たんや TANN-YA - 大岡山/担々麺 [食べログ]
http://r.tabelog.com/tokyo/A1317/A131711/13003298/


続いてやぶ。そばやうどん、カレー、定食などいろんなメニューがある店です。
豚の角煮定食みたいなものがおいしかったです。
どのメニューもおいしそうだったので特にこれといって食べたいものがないというときにもどうぞ。
やぶそば - 大岡山/そば [食べログ]
http://r.tabelog.com/tokyo/A1317/A131711/13048041/

そして最後は知る人ぞ知る婆娑羅。いわゆる二郎っぽい麺類を出すお店です。
最近ぼくが大岡山で昼飯を食べるときにはたいていここですw
その量と価格のコストパフォーマンスは大岡山トップレベル。ここの味もかなり好きです。
つめ麺もおいしいです。
麺屋 婆娑羅 めんや ばさら - 大岡山/ラーメン [食べログ]
http://r.tabelog.com/tokyo/A1317/A131711/13023109/


大岡山には他にもインドカレー屋やラーメン屋などいろいろなところがあるのでそのへんにいる東工大生に聞いてみれば快く教えてくれると思います。


(追記)
弁当についても少しですが紹介します。
1つ目はすでにおなじみ四川。
ランチの時間帯には500円で割とボリュームのある弁当を店頭で販売しています。
個人的に好きなのは角煮弁当。柔らかい豚の角煮に香辛料が効いていておいしいです。それとどの弁当にも麻婆豆腐がついてくるのですが、これもまた独特です。たぶん今までに食べてたことのないような味だと思うのでぜひ食べてください。


2つ目は通称肉屋。ボリュームもありおいしい弁当が500円ぐらいで売られています。味・量ともに申し分なく満足度は高いです。
正門からは少し遠いのと、昼時は少し行列ができたりしているので注意してください。
ミートショップ ミカワヤ - 大岡山/弁当 [食べログ]
http://r.tabelog.com/tokyo/A1317/A131711/13103807/


さらにTwitterで広島風お好み焼きの弁当があると教えてもらいました。
お好み焼きの店がきまぐれで販売しているらしく、売ってないこともあるそうなので注意が必要です。
ひろBAY - 大岡山/お好み焼き [食べログ]
http://r.tabelog.com/tokyo/A1317/A131711/13047213/


駅を出て右手の北口商店街には松屋ココイチなどもあります。ついでにお菓子が安いまちおかというお店もあります。
金曜日であれば大学の学食を利用するというのもそこそこ安くていいと思います。

それでは当日お会いしたときにはよろしくお願いします!

そのカレー、リトルショップにつき

とにかくその量がすごい、との話を知り合いの方々から聞いていて一度行ってみたいとずっと思っていたのだけれど、ついに行ってきました。



たしかに量がはんぱなかった。
写真のCセット(別名:気まぐれ)の大盛を注文したのだけれどすごいボリューム。
しかしこれで800円というのだから驚きである。
食べるのに20分強を要し、最後の方は店の方にがんばってと励まされてしまったw
ナス、ピーマン、からあげ、カツ、ゆで卵、目玉焼きなどがこれでもかというぐらい載っている。ある意味栄養バランスがとても良いメニューである。


とにかくどんな空腹状態にある人でもこれを食べきった直後は空腹感を感じることはないと断言できる。
でも実は量だけではなくカレーもやや甘めでとても美味しく、野菜やからあげも申し分ない。


ランチタイムしかやっていないけれど、お腹が空きすぎておいしいカレーが食べたいという人はぜひ。
カレーやさん LITTLE SHOP[食べログ]


今週は日曜日にイタリアンの食べ放題、一昨日がピザ、昨日が焼肉とかいう素晴らしい食生活なのでしっかり運動しないと。


参考:
「山の、山の頂上が見えません!」@リトルショップ - D-6 [相変わらず根無し]
俺がメタボになる理由。カレー?の写真のために - ゆーすけべー日記
(もはやJPA公式メニュー?)

ニコニコ動画のコメントをGrowlで作業中にも前面に表示する

こんなときに

作業用BGMなどの動画をニコニコ動画で聞きながら作業している時に、バックグラウンドで再生されている動画についているコメントを見たくなる時がままある。曲の歌詞とか、曲が切り替わったときにみんなどういう反応しているのかなー、とか。
でもそのたびにいちいちアプリケーションを切り替えるのはとてもめんどくさい。
そういうときにこのNicowl(仮)の出番。

ruby nicowl.rb 4841649

のようにして実行します。
"Ready!"と画面に出たらreturnキーを押すと、下のコード例だと2秒後にコメントを流し始めます。
(この間に手動で動画の再生をw)
すると上の画像のようにコメントをGrowlで通知してくれます。(引数に動画idを指定)
Growlを使用しているのでMac OS限定。

ソースコード


MeowはRubyからGrowl通知を簡単に実現できるライブラリで

sudo gem install meow

でインストールできます。

注意点

MacPortsでインストールしたrubyを使っている人は

sudo port install rb-cocoa

でrb-cocoaMacPortsからインストールすることが必要。

弱点

Growlからのメッセージが表示され続ける時間が指定できたらいいかもと思ったけれど、Meowのドキュメントやソースを見る限りそのような設定は見つからなかった。
時報が来たらアウツ。
トイレに行きたくなったりして途中で動画の再生を止めたらアウツ。
(control+z & fg などでサスペンド & 復帰とかやればなんとか可)
このスクリプトを実行した後、ブラウザで新しい動画を見る場合は再度ログインが必要。
Greasemonkeyとかでごにょごにょやれば再生と自動でシンクロさせたりとかできるのかも。

Twitter研究会で話してきました

慶應義塾大学湘南藤沢キャンパス(SFC)で行われたTwitter研究会で話してきました。
http://homepage3.nifty.com/toremoro/study/twitterconf.html


"Twitterからホットなキーワードを抽出する方法"というタイトルで発表しました。

ustreamの録画はこちら(チームラボの高須さんありがとうございます)
http://www.ustream.tv/recorded/2713804


もっとちゃんと整理してわかりやすく説明をすべきだというのは大いなる反省点ですが、練習あるのみですね...
SFCに行くのは初めてで、陸の孤島とかいわれているのでどんなところだろうと思っていましたが、そんな大げさに言う程でもないような気がしました。
いろんな場面でのTwitterでの使われ方の紹介や、モバツイッターのえふしんさんの独立宣言があったりとおもしろかったです。
see also:
It is not a diary » Twitter研究会の感想とか
ハッシュタグクラウド - ログ 12月5日 Twitter研究会 #twitterconf


運営スタッフや参加者の方々、ありがとうございました!

自分がフォローしている人たちだけのbuzztterみたいなものを実現する with Echofon

先日中川さん(id:Psychs)によってEchofon for Macのベータ版がnaan studioからリリースされました。
http://echofon.com/twitter/mac/
http://d.hatena.ne.jp/Psychs/20091001/1254351633

必要な機能をシンプルにまとめたTwitterクライアントでとても使いやすいです。(個人的にはあとjk移動がほしい)


さてEchofonはTwitterのログを保存する際にSQLiteを使っているのが一つの特徴です。
そのため自分の過去ログをいじっていろんなことができておもしろいです。

例えば自分がフォローしている人たちだけを対象にしたbuzztterみたいなことを実現することができます。
(Twitter日本語圏全体からのホットなキーワード抽出として、ぼくは@yazztterというのを作っています:))
具体的には自分のまわりで直近1時間で話題になっているキーワード(特徴語)を抽出したりできます。
O/RマッパーとしてActiveRecord, 形態素解析器としてMeCabを使ってRubyで書くと下のようになります。

$KCODE = 'u'
require 'rubygems'
require 'active_record'
require 'MeCab'

ActiveRecord::Base.establish_connection(
  :adapter => 'sqlite3',
  :dbfile => '/Users/username/Library/Application Support/Echofon/tweets_db.sql' #usernameを自分の環境に合わせて変更
)

class Status < ActiveRecord::Base
end

def calculate_statuses_tfidf
  t = Time.now.strftime('%s').to_i #現在時刻をEchofonに合わせてUNIX時間に変換
  all_statuses = []
  recent_statuses = []
  past_time = 24 #とりあえず24時間前までのログを過去ログの対象とする
  (1..past_time).each do |i|
    lower_limit = t - 3600 * i
    upper_limit = t - 3600 * (i - 1)
    statuses = Status.find(:all, :conditions => ['created_at >= ? and created_at < ?', lower_limit, upper_limit])
    word_count = Hash.new(0)
    statuses.each do |st|
      st.text.split(/,、。  /).each do |s| #句読点や半角スペースと全角スペースがあったらそこでいったん区切る
        c = MeCab::Tagger.new
        n = c.parseToNode(s)
        words = ''
        while n do
          #抽出する単語を名詞や記号などに限定して、それらが連続していればくっつける
          if (n.feature.split(',').first == '名詞') || (n.feature.split(',')[1] == '連体化') || ((n.feature.split(',').first == '記号') && (n.feature.split(',')[1] == '一般'))
            words += n.surface
          else
            if words != ''
              word_count[words] += 1
              words = ''
            end 
          end
          n = n.next
        end
      end
    end
    recent_statuses = word_count.to_a if i == 1
    all_statuses << word_count.to_a
  end
  result = []
  recent_statuses.sort{|a, b| b[1] <=> a[1]}.each do |w|
    break if w.last < 3 #1時間以内の発言数が3未満の単語は対象外とする
    tf = w.last
    df = all_statuses.flatten(1).select{|i| i.first == w.first}.size #ruby 1.8.7以上からflattenに引数をとれるようになった!
    idf = Math::log(past_time / df.to_f)
    tfidf = tf * idf
    result << [w.first, tfidf]
  end
  result.sort {|a, b| b[1] <=> a[1]}
end

if __FILE__ == $0
  calculate_statuses_tfidf.each do |i|
    puts i.first + ': ' + i.last.to_s
  end
end

コードを読んでもらえれば大体どんなことをやっているか分かると思いますが、tf-idfというキーワード抽出のためのアルゴリズムを使っています。tf-idfとは簡単に言ってしまえば、ある文書中によく出てくる単語にはキーワードになりそうなので高スコアを割り当てたいけれども、その単語が他の文書中にも出てくるようならばそれはキーワードというよりも一般的な単語と見なせるのでその分スコアを差し引く、という考え方です。
参考: [を] 形態素解析と検索APIとTF-IDFでキーワード抽出

今回は1時間ごとのログを1つの文書とし、24時間分なので全体で24の文書があるとしてtf-idfを適用しています。
ログがあれば48時間分とかにしたほうがもう少し正確なキーワード抽出ができるかもしれません。


このプログラムを実行するとこんな感じになります。


Twitterクライアントは常時起動しているとは限らないのでどうしても取りこぼしなどが出てきてしまうのは仕方のないことですが、ログをきちんと保存するクライアントであれば、今回紹介したEchofonではなくても上記と同様の手法が適用できると思うので試したりしてください!

スタンフォード大学の自然言語処理(NLP)の授業公開っぷりがとてつもない件

以前からMITのOCWを中心にアメリカの大学の授業のビデオや資料などが公開されているのは知っていたが、今日知ったスタンフォード大学の授業公開っぷりがものすごい。

http://see.stanford.edu/SEE/lecturelist.aspx?coll=63480b48-8819-4efd-8412-263f1a472f5a


授業のビデオだけではなく、なんと授業のtranscript、つまり授業中に先生がしゃべったことがテキストに書き起こされているのだ。
MITなどでも授業のビデオは公開されていたが、当然授業の内容を理解するには授業資料がある場合にせよ、何をしゃべっているかを自分で聞き取るほか無く、リスニング力が低い僕には結構ネックだった。


それが今回しゃべる内容がテキストになっているということで聞き取れなくてもテキストを見ればよいし、リスニングの勉強にもなる。

しかも公開されているのが僕の研究分野でもある自然言語処理(NLP)の授業ということで、とても感動した。


さらにこの授業の講師がChristopher Manning先生。Manning先生と言えば日本のNLP関係の研究室での輪講でも広く使われている、通称FSNLP(サイコロ本)の著者でもあり、以前NLP研究者のランキングを行ったときにも登場回数順で1位でもあったし、NLP界の大御所中の大御所である(と思う)。

Foundations of Statistical Natural Language Processing
CD Manning
MIT Press
売り上げランキング: 32243
スタンフォードにいるのだから授業をするのは当たり前といえば当たり前かもしれないが、やはりすごい。


もう輪講のかわりにこの授業ビデオでもいい気がしてきた...


ちなみに機械学習(Machine Learning)の授業も同様に公開されている。
http://see.stanford.edu/see/lecturelist.aspx?coll=348ca38a-3a6d-4052-937d-cb017338d7b1


スタンフォード恐るべし。