普通のWebページの文を"読めてしまう"文に変換するRubyスクリプト

今朝読んでおもしろかった話題。
http://www.asks.jp/users/hiro/59059.html
http://www.itmedia.co.jp/news/articles/0905/08/news021.html

確かに読める!


しかし上のページで取り上げられているのはたまたま読みやすかっただけで、一般的にはそうじゃないかもしれない。
そこで任意のWebページの文を、上のような"読めてしまう"文に変換するためのスクリプトを書いた。


reading_trivia.rb

$KCODE ='u'                                                                                                                                                
require 'rubygems'
require 'hpricot'
require 'open-uri'
require 'cgi'
require 'kconv'
require 'extractcontent'

def reading_trivia(url)
  #extractcontentで本文を抽出
  html = ''
  open(url) {|f| html = f.read.toutf8}
  body, title = ExtractContent::Extractor.new.analyse(html)

  #Yahoo!日本語形態素解析APIで各形態素の読み仮名を求める
  app_id = 'yahoo_app_id' #自分のYahoo!アプリケーションID
  doc = open("http://jlp.yahooapis.jp/MAService/V1/parse?appid=#{app_id}&results=ma&response=reading&sentence=#{CGI.escape(body)}") {|f| Hpricot(f)}
  words = (doc/:reading).map {|i| i.inner_text}

  #4文字以上の単語の場合に、単語の両端以外の文字をシャッフルする
  sentence = []
  words.each do |word|
    c = word.split(//)
    if c.size > 3
      sentence << c[0] + c[1..-2].sort_by{rand}.join + c[-1]
    else
      sentence << word
    end
  end
  puts sentence.join(' ')
end

if __FILE__ == $0
  reading_trivia(ARGV.shift)
end

日本語形態素解析には前回と同様にYahoo!日本語形態素解析APIを使った。
http://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html
また本文抽出にはextractcontentというRubyモジュールを使った。
http://labs.cybozu.co.jp/blog/nakatani/2007/09/web_1.html
extractcontentのインストールは

% sudo gem install extractcontent

とかでOK.
(Hpricotが入っていない場合もgem install hpricotで。gemすら入ってない場合は"gem インストール"とかでググればOK)
引数にはWebページのURLを指定する。


例えば昨日の任天堂に関する記事でやってみるとこんな感じ。
http://japan.cnet.com/news/biz/story/0,2000056020,20392731,00.htm

% ruby reading_trivia.rb http://japan.cnet.com/news/biz/story/0,2000056020,20392731,00.htm > hoge.txt
% cat hoge.txt

にてんんどう 、 うだりあげか 、 りえき ともに かこ さいこう -- かがいい うありげ ひりつ は 87.5 % に
ながい みちこ ( へんしゅう ぶ )
2009 / 05 / 07 18 : 33
にんんてどう は 5 がつ 7 にち 、 2009 ねん 3 がつ き の つうき れんけつ けっさん を はぴっょう し た 。 うだげりあか 、 えいぎょう りえき 、 けょじいう りえき 、 じんえゅりき ともに かこ さこいう を きろく し た 。 かがいい うりあげ ひりつ は 87.5 % に のぼる 。
うげりあだか は ぜきんひ 9.9 % ぞう の 1 ちょう 8386 おく えん 、 えぎいょう りえき は どう 1.40 % ぞう の 5552 おく えん 、 けょじいう りえき は どう 1.8 % ぞう の 4846 おく えん 、 じりえんゅき は どう 8.5 % ぞう の 2970 おく えん と なっ た 。 なお 、 えだんか の えょいきう で 、 かわせ さそん を 1339 おく えん けいょじう し て いる 。 うりだげあか の 87.5 % に あたる 1 ちょう 6906 おく えん は かいがい で の うりあげ だ 。
けたいい がた げーむき 「 にんてどんー DS Lite 」 の うありげ が かいがい で こちょうう だっ た ほか 、 2008 ねん 11 がつ 1 にち に 「 にどんんてー DSi 」 を こくない むけ に はばつい し た こと で 、 にどんてんー DS しりーず の ぜん せかい はんばい だいすう は とうき で 3118 まん だい 、 るけいい で 1 おく 178 まん だい と なっ た 。 「 げーむき と し て は しじょう さいたん の きかん で 1 おく だい を こえ た 」 ( にてどんんう ) 。 たいおう そふと と し て は 、 「 ぽけすたもんとっー ぷらちな 」 が 375 まん ほん 、 「 ほし の かー ヴぃ うるとら すぱーー でらくっす 」 が 236 まん ほん 、 「 のう を きえたる おとな の DS とにれんーぐ 」 「 もっと のう を きたえる おとな の DS とんれーにぐ 」 が 2 さく ごけうい で 731 まん ほん はばんい さ れ た 。
すえおき がた げむーき 「 Wii 」 に つい て は 、 かいがい で の はんばい が こうちょう だっ た と いう 。 ぜん せかい の はんばい だいすう は とうき で 2955 まん だい 、 るいけい で 5309 まん だい と なり 、 「 もとっも はやく るけいい はばんい だいすう が 5000 まん だい を とっぱ し た げーむき に なっ た 」 ( にんてどんう ) と の こと 。 たいおう そふと で は 「 まりかおーと Wii 」 が 1540 まん ほん 、 「 まち へ いこ う よ どうつもぶのり 」 が 338 まん ほん 、 「 Wii Msuic 」 が 265 まん ほん うれ た 。 さらに 「 Wii Fit 」 が かいがい でも ひっと し 、 1367 まん ほん はんばい し て いる 。
2010 ねん 3 がつ き に つい て は 、 にどんんてー DSi を かがいい でも はつばい する ほか 、 しんはもき に 「 ぜでんのせだるつ すりっぴと とくらっす ( かょしう ) 」 を はつばい する 。 さらに 、 りある な すーぽつ たいけん を ていょきう する 「 Wii すーぽつ りぞーと 」 も ぜん せかい で てんかい する けいかく 。 ただし 、 うあだげりか は 1 ちょう 8000 おく えん 、 えょいぎう りえき は 4090 おく えん 、 けいじょう りえき は 5000 おく えん 、 じゅえんりき は 3000 おく えん と よばこい を みこん で いる 。

たしかに読めるけれども、あまりなじみのない単語が多いせいか可読性は最初に見た例よりは落ちている気がする。
あと形態素解析器を使うと人手でわかち書きするよりも細かく分けてしまう場合が多いので、3文字以下の単語が増えている。


脳内でどんな処理が行われているのかわからないけど、不思議。


特に関連していないかもしれない記事:
ひらがなせいかつ への いざない - ぼんやりと考えたこと
http://n.h7a.org/blog/entry/1594


P.S.
書き終えた後にdankogaiさんがJavaScriptで似たようなことをすでにやっていたことに気づいた...
http://blog.livedoor.jp/dankogai/archives/51210157.html

Twitterの投稿内容から鬱度を測定する

もうすぐ5月です。
Twitterの投稿内容から鬱度を測定するRubyスクリプトを書いてみました。


これには東京工業大学の高村さんが公開している単語感情極性対応表というものを使っています。
http://www.lr.pi.titech.ac.jp/~takamura/pndic_ja.html

これはある単語がどの程度の感情を表すかを数値化した表で、-1 ~ +1 までの値が特定の単語に割り当てられています。
その単語がネガティブな感情表現だとマイナスの値、ポジティブな感情表現だとプラスの値になっています。

なので、鬱度を測定といってもポジティブな投稿内容が多いときにはプラスの値を返します。


また日本語文の形態素解析にはYahoo!の日本語形態素解析APIを使っています。
http://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html
アプリケーションIDさえ取得すれば、新たにソフトもインストールする必要がないので気軽に使えます。

$KCODE = 'u'
require 'rubygems'
require 'hpricot'
require 'open-uri'
require 'cgi'
require 'kconv'

def utsu_score
  pn_ja = []
  open('http://www.lr.pi.titech.ac.jp/~takamura/pubs/pn_ja.dic') {|f|
    while l = f.gets
      pn_ja << l.chomp.toutf8.split(':')
    end
  }

  app_id = 'yahoo_app_id' #Yahoo!のアプリケーションIDを入力
  statuses = twitter_statuses('user_name') #調べたいユーザーのユーザー名を入力
  total_score = 0
  statuses.each do |status|
    doc = open("http://jlp.yahooapis.jp/MAService/V1/parse?appid=#{app_id}&results=ma&response=baseform&sentence=#{CGI.escape(status)}") {|f| Hpricot(f)}
    words = (doc/:baseform).map {|i| i.inner_text}
    score = 0
    words.each do |w|
      if i = pn_ja.assoc(w)
        score += i[3].to_f
      end
    end
    total_score += score
  end
  p (total_score / 20) ** 3
end

def twitter_statuses(user_name)
  doc = open("http://twitter.com/statuses/user_timeline/#{user_name}.xml") {|f| Hpricot(f)}
  (doc/:text).map {|i| i.inner_text}
end

if __FILE__ == $0
  utsu_score
end

ログイン作業などは書いていないので、パブリックなユーザーのみ測定できます。


単語感情極性対応表を用いて直近20個の投稿について平均スコアを出し、それを3乗しています。
たぶん、ふつうの内容であれば±10前後のスコアだと思います。
少し使ってみた感じだとプラスの値が出るのは結構まれで、たいていの場合マイナスになるようです。
もし-10以下であるようだったら、ちょっとネガティブな発言が近頃多いのかもなー、ぐらいに思っておけばいいんじゃないでしょうか。
逆に+10以上であれば相当ポジティブであると自信を持って良いと思います。

yazztter(yet another buzztter)をつくりました

Twitterにおいて、今ホットなキーワードをおしえてくれるボット、yazztterを作りました。
http://twitter.com/yazztter

背景

前からこんなのをちょっと作ってみたかったのというのと、ちょうどチームラボのアルゴリズムコンテストというものが開かれていたので、ちょうど良いタイミングだと思い、作ってみました。
http://www.team-lab.com/news/index.php?itemid=469

中身

同様のボットとしてbuzztter(http://twitter.com/buzztter)がありますが、ホットなキーワードを導出するための方法が異なっています。
yazztterでは、東京工業大学の藤木さんたちが提案した以下の手法の一部を用いています。
http://www.lr.pi.titech.ac.jp/blogwatcher/paper/NL-160-13.pdf

これはKleinbergの提案したburst検出手法を拡張したもので、各documentの出現間隔に着目した手法です。
Twitterにおいては、頻繁に出現する単語とそうでない単語がありますが、それらが日常的に出現する間隔を考慮して、日常より頻繁に出てくるようであればより大きなスコアを与える、というようなことを行っています。

実装がまだ雑なので、期待通りの結果を出してくれないことがままありますが大目に見てください。

最後に

Twitterのデータ(日本語のPublic Timeline)は@penguinanaさんのtwitter検索を利用しています。ありがとうございます。
http://pcod.no-ip.org/yats/public_timeline

またid:darashiさんによるbuzztterの解説はとても参考になりました。
http://d.hatena.ne.jp/darashi/20071106/1194365071

イコン画像は以下のページのものを使用させていただきました。
http://sky.geocities.jp/hoopmasa137/page005.html

N・ひろしまさんとの昼食 at Google Japan


http://flickr.com/photos/gyazickr/3326835961


ひろしまさん(http://n.h7a.org/blog/)が来日中*1とのことで、Googleの日本オフィスでお会いすることに。

ランチタイムに伺ったところ、その日は寿司の日らしく、写真の寿司セットを食べることができた。しかもこの寿司セットは(たぶん)食べ放題でおかわりしようと思えばいくらでもできたようであったし、飲み物も相変わらず自販機のボタンを押すだけで出てくるし、最近Googleの福利厚生が(ry という話は食堂からは微塵も感じられなかった。
ひろしまさん、ありがとうございました。


ひろしまさんはシリコンバレー*2が最も高い日本人の1人で、JTPAのスタッフ(今はCo-president)でもある(http://www.jtpa.org/staff/)。
僕が参加したシリコンバレーツアーのときも、「起業家セッション」でスピーカーとして登場し、変わった人たちが集まっているその中でも独特の雰囲気を放っていた。そのあまりの雰囲気に、初めて話した千賀さんの出版記念パーティーのときに「アカギに似ていると言われたことありませんか?」と、若干意味不明なことを質問してしまったほどw
最終日の夜には翌朝の6, 7時ぐらいまで、アメリカでのいろんなおもしろい話などを聞いたりして、とてもエキサイティングだった。


それはともかくとして、今回のシリコンバレーカンファレンスではひろしまさんがマウンテンビューのGoogleplexを案内してくれるらしいので、お金と時間に少しでも余裕があるひとは今からでも申し込んでみるのはいかがでしょうか。
面白すぎる話にぜひ期待してください
カンファレンスの締切は過ぎてしまっているけど、参加権譲渡なども行われているらしいので、まだいけるはず!
http://www.chikawatanabe.com/blog/2009/02/jtpaconference.html


カンファレンス当日のプログラムも発表されているのだけれど、去年まで数日に渡って行われていたセッションを一日に凝縮した感じになっていて、日本から行く人にとっては集合を含め、相当なハードプログラムになっている模様w
http://www.jtpa.org/event/svtour/000490.html


シリコンバレーカンファレンス参加者の皆さんは思う存分楽しんできてください!

*1:正しくは帰国中なのだろうけど個人的にはこの表現のほうがしっくりくるのでw

*2:特にTwizzlers(特に黒色)を平常心を失うことなく食べることのできる力

NLP(自然言語処理)研究者をスコアリングしてみた

IR研究者をスコアリングしてみた - 睡眠不足?!
http://d.hatena.ne.jp/sleepy_yoshi/20090215/p1


この記事を読んでNLP分野ではどうだろう、と思ったのでやってみました。
対象とした会議は2001年~2008年のACLとEMNLPです(年によっては他会議との併設含む)。
cf. DO++: 自然言語処理の学会 http://hillbig.cocolog-nifty.com/do/2008/04/post_fe44.html

ACL anthologyから以下のページを利用してデータを取得

ACL: http://www.aclweb.org/anthology-new/P/P08/ (2008年の場合。08の部分を変えれば他の年が見られる)
EMNLP: http://www.aclweb.org/anthology-new/sigdat.html

評価方法

冒頭のIR研究者のスコアリングの場合と同様で、登場回数と著者順位による重みづけによる二つの方法を用いました。
「登場回数は名前が出れば1回とカウント」、「著者順位重みづけは1st authorの重要度をそれ以外の著者よりも重くしてスコアづけ」(複数人の著者がいる場合は1st authorを0.8として、残りの0.2を他の著者に分配、1人の場合は1とする)です。
また、Short PaperやPoster, Workshopなどは対象外としました。

コード

書いたコードは下の通り。名前の表記揺れがいくつかあったので「大文字」+.(ピリオド)は除去してカウントしたりして(例: "Christopher D. Manning" => "Christopher Manning")、最後に手作業で補完しました。

$KCODE = 'u'
require 'rubygems'
require 'nokogiri'
require 'open-uri'

#ACLの論文著者名を取得
def acl_authours
  authors = []
  (1 .. 8).each do |y|
    doc = Nokogiri::HTML(open("http://www.aclweb.org/anthology-new/P/P0#{y}/"))
    (doc/'p').each do |i|
      num = (i/'a').first.inner_text.scan(/\d{4}$/).to_s.to_i
      if num > 1000 && num < 2000
        next if (i/'b').inner_text.split(//).size < 1
        authors << (i/'b').inner_text.gsub(/(\.)[^ ]/) {$1 + ' '}.gsub('', "'").gsub(/\(.+?\) /, '').gsub(/ {2,}/, ' ').gsub(/[A-Z]\. /, '').split('; ')
      end
    end
    sleep 3
  end
  authors
end

#EMNLPの論文著者名を取得
def emnlp_authors
  authors = []
  doc = Nokogiri::HTML(open("http://www.aclweb.org/anthology-new/sigdat.html"))
  (doc/'li').each do |i|
    num = (i/'a').first.inner_text.scan(/(\d+)-/).to_s.to_i
    if num >= 1 && num <= 8
      next if (i/'b').inner_text.split(//).size < 1
      authors << (i/'b').inner_text.gsub(/([a-z]{2,}|\.)([A-Z])/) {$1 + ' ' + $2}.gsub('', "'").gsub(/ {2,}/, ' ').gsub(/[A-Z]\. /, '').split('; ')
    end
  end
  authors
end

#フラットな配列を引数に取りカウント
def count_authors(authors)
  cnt = Hash.new(0)
  authors.each do |i|
    cnt[i] += 1
  end
  cnt.to_a.sort {|a, b| b[1] <=> a[1]}
end

#配列の配列を引数に取りスコアを分配
FIRST_AUTHOR_SCORE = 0.8
def devide_score(authors)
  score = Hash.new(0)
  authors.each do |i|
    if i.size == 1
      score[i.shift] += 1 
    else
      score[i.shift] += FIRST_AUTHOR_SCORE
      rest_score = (1 - FIRST_AUTHOR_SCORE) / i.size
      i.size.times do |t|
        score[i.shift] += rest_score 
      end
    end
  end
  score.to_a.sort {|a, b| b[1] <=> a[1]}
end

if __FILE__ == $0
  p count_authors((acl_authours + emnlp_authors).flatten)
  p devide_score((acl_authours + emnlp_authors))
end

結果

登場回数順(10回以上)
名前 登場回数 URL
1 Christopher D. Manning 26 http://nlp.stanford.edu/~manning/
2 Dan Klein 21 http://www.cs.berkeley.edu/~klein/
2 Daniel Marcu 21 http://www.isi.edu/~marcu/
4 Mark Johnson 20 http://www.cog.brown.edu/~mj/
5 Hwee Tou Ng 18 http://www.comp.nus.edu.sg/~nght/
6 Ming Zhou 16 http://research.microsoft.com/en-us/people/mingzhou/
6 Mirella Lapata 16 http://homepages.inf.ed.ac.uk/mlap/
8 Eduard Hovy 15 http://www.isi.edu/natural-language/people/hovy.html
8 Regina Barzilay 15 http://people.csail.mit.edu/regina/
10 Jianfeng Gao 14 http://research.microsoft.com/en-us/um/people/jfgao/
10 Jun'ichi Tsujii 14 http://www-tsujii.is.s.u-tokyo.ac.jp/~tsujii/
10 Kevin Knight 14 http://www.isi.edu/~knight/
10 Michael Collins 14 http://people.csail.mit.edu/mcollins/
14 Jason Eisner 13 http://www.cs.jhu.edu/~jason/
15 James R. Curran 12 http://www.cs.usyd.edu.au/~james/
15 Jian Su 12 http://www1.i2r.a-star.edu.sg/~sujian/
15 Yuji Matsumoto 12 http://cl.aist-nara.ac.jp/staff/matsu/home-e.html
15 Noah A. Smith 12 http://www.cs.cmu.edu/~nasmith/
19 Chew Lim Tan 11 http://www.comp.nus.edu.sg/~tancl/
19 Eugene Charniak 11 http://www.cs.brown.edu/people/ec/
19 Hideki Isozaki 11 http://www.kecl.ntt.co.jp/icl/kpro/isozaki/index.html
22 Claire Cardie 10 http://www.cs.cornell.edu/home/cardie/
22 Daniel Gildea 10 http://www.cs.rochester.edu/~gildea/
22 Hermann Ney 10 http://www-i6.informatik.rwth-aachen.de/web/Staff/ney/index.html
22 Kristina Toutanova 10 http://nlp.stanford.edu/kristina/
22 Miles Osborne 10 http://www.iccs.inf.ed.ac.uk/~miles/
22 Ryan McDonald 10 http://ryanmcd.googlepages.com/index.html
22 Stephen Clark 10 http://www.cl.cam.ac.uk/~sc609/index.html
22 Yang Liu 10 http://www.hlt.utdallas.edu/~yangl/
スコア順(有効数字4桁, 4.000以上)
名前 スコア URL
1 Jianfeng Gao 8.417 http://research.microsoft.com/en-us/um/people/jfgao/
2 Mark Johnson 7.523 http://www.cog.brown.edu/~mj/
3 Vincent Ng 6.600 http://www.hlt.utdallas.edu/~vince/
4 Michael Collins 6.233 http://people.csail.mit.edu/mcollins/
5 Daniel Marcu 6.117 http://www.isi.edu/~marcu/
6 Jason Eisner 6.100 http://www.cs.jhu.edu/~jason/
7 Daniel Gildea 6.067 http://www.cs.rochester.edu/~gildea/
8 Dan Klein 5.983 http://www.cs.berkeley.edu/~klein/
9 Noah A. Smith 5.867 http://www.cs.cmu.edu/~nasmith/
10 Kristina Toutanova 5.567 http://nlp.stanford.edu/kristina/
11 Ryan McDonald 5.333 http://ryanmcd.googlepages.com/index.html
12 Regina Barzilay 5.167 http://people.csail.mit.edu/regina/
13 James R. Curran 5.100 http://www.cs.usyd.edu.au/~james/
14 Gerald Penn 4.900 http://www.cs.toronto.edu/~gpenn/
14 Stephen Clark 4.900 http://www.cl.cam.ac.uk/~sc609/index.html
16 Libin Shen 4.800 http://www.libinshen.net/
16 Xiaofeng Yang 4.800 http://www1.i2r.a-star.edu.sg/~xiaofengy/
17 David Chiang 4.700 http://www.isi.edu/~chiang/
18 Rada Mihalcea 4.692 http://www.cse.unt.edu/~rada/
19 Yang Liu 4.687 http://www.hlt.utdallas.edu/~yangl/
20 Hwee Tou Ng 4.583 http://www.comp.nus.edu.sg/~nght/
21 Hal Daumé III 4.300 http://www.cs.utah.edu/~hal/
21 Michel Galley 4.300 http://www-nlp.stanford.edu/~mgalley/
23 Robert C. Moore 4.183 http://research.microsoft.com/en-us/people/bobmoore/
24 Jun Suzuki 4.167 http://www.cs.umb.edu/~jxs/
25 Julia Hockenmaier 4.000 http://www.cs.uiuc.edu/homes/juliahmr/
25 Jun'ichi Kazama 4.000 http://www2.nict.go.jp/x/x161/member/kazama_junichi/index.html
25 Shane Bergsma 4.000 http://www.cs.ualberta.ca/~bergsma/

最後に

URLは適当なものではない可能性があります。
Christopher D. Manning先生が書かれた教科書は輪講などでも広く使われています。
http://nlp.stanford.edu/fsnlp/
Dan Klein先生の担当されている授業の資料などは誰でも見ることができます。
http://www.cs.berkeley.edu/~klein/cs288/sp09/


がんばります。

はてなブックマークの被お気に入り登録数を調べてみた



以前に同様のことをやっていた方がいたようですが、もう一年近く更新されていないようなので改めて調べてみました。
http://b.hatena.ne.jp/entry/849289
http://d.hatena.ne.jp/jt_noSke/20070628
http://d.hatena.ne.jp/jt_noSke/20070801

調査期間や対象ユーザー

6/4(水)~6/6(金)ぐらいに、前回までの調査結果に載っていたユーザーおよび4月, 5月のhotenryに入った記事にブックマークしていたユーザーを対象としました。
対象ブックマーカー数は16767でした。(すでにアカウントが無くなっていたユーザなど含む)

結果など

得られた結果をグラフにしてみたのが冒頭の図です。
縦軸が被お気に入り登録数で、横軸にブックマーカーを被お気に入り登録数が多い順に並べています。
まさにいわゆるロングテールで、最近読んだ「新ネットワーク思考」に書いてあったスケールフリーネットワークをここでも確認することができ、興味深いです。

新ネットワーク思考―世界のしくみを読み解く
アルバート・ラズロ・バラバシ
NHK出版
売り上げランキング: 13036
おすすめ度の平均: 4.5
5 課長 島耕作の不思議
3 ネットワークとは
4 ネットワークから数理モデル、物理学まで包括した1冊
5 後半は散漫だが、ネットワークの特性を良く理解できる本
5 世界のしくみが少し分かるかもしれない



被お気に入り登録数が多いブックマーカー上位300人は下の表のようになりました。

ブックマーカー 被お気に入り登録数
1 b:id:naoya 1387
2 b:id:umedamochio 1088
3 b:id:jkondo 878
4 b:id:kanose 658
5 b:id:finalvent 610
6 b:id:miyagawa 583
7 b:id:otsune 518
8 b:id:HiromitsuTakagi 456
9 b:id:Hamachiya2 369
10 b:id:fromdusktildawn 368
11 b:id:laiso 329
12 b:id:REV 328
13 b:id:brazil 293
14 b:id:ululun 281
15 b:id:higepon 270
16 b:id:kokorosha 268
17 b:id:ekken 268
18 b:id:gotanda6 267
19 b:id:netafull 258
20 b:id:lovelovedog 257
21 b:id:amachang 254
22 b:id:kmizusawa 243
23 b:id:kensuu 238
24 b:id:wacky 228
25 b:id:kurimax 226
26 b:id:essa 225
27 b:id:kanimaster 225
28 b:id:jazzanova 225
29 b:id:antipop 223
30 b:id:sweetlove 218
31 b:id:koizuka 217
32 b:id:another 214
33 b:id:yumizou 213
34 b:id:chepooka 212
35 b:id:secondlife 212
36 b:id:kowagari 211
37 b:id:suVene 210
38 b:id:mind 207
39 b:id:KGV 205
40 b:id:kawasaki 201
41 b:id:sirouto2 194
42 b:id:b4-tt 192
43 b:id:amiyoshida 191
44 b:id:lsty 190
45 b:id:maname 183
46 b:id:zonia 182
47 b:id:hatayasan 182
48 b:id:fladdict 181
49 b:id:wetfootdog 180
50 b:id:lovecall 175
51 b:id:tsupo 174
52 b:id:nobody 173
53 b:id:R30 173
54 b:id:dankogai 169
55 b:id:umeten 166
56 b:id:yto 166
57 b:id:acqua_alta 164
58 b:id:nitoyon 160
59 b:id:mereco 159
60 b:id:TakahashiMasaki 157
61 b:id:matakimika 155
62 b:id:okome_chan 155
63 b:id:natu3kan 155
64 b:id:feather_angel 155
65 b:id:I11 153
66 b:id:guldeen 153
67 b:id:xx-internet 151
68 b:id:tomo-moon 143
69 b:id:yuiseki 142
70 b:id:hashigotan 142
71 b:id:youpy 139
72 b:id:roku666 138
73 b:id:nipotan 136
74 b:id:rAdio 136
75 b:id:kotorikotoriko 133
76 b:id:Masao_hate 131
77 b:id:nisemono_san 130
78 b:id:TAKESAKO 130
79 b:id:copyright 129
80 b:id:Erlkonig 128
81 b:id:y_arim 128
82 b:id:hiromark 127
83 b:id:yappo 126
84 b:id:hiro_y 126
85 b:id:heimin 123
86 b:id:nopiko 119
87 b:id:tomozo3 119
88 b:id:gachapinfan 117
89 b:id:SeiSaguru 115
90 b:id:spo0n 113
91 b:id:yuki_19762 113
92 b:id:westerndog 113
93 b:id:stella_nf 113
94 b:id:anzenchan 111
95 b:id:elasticdale 110
96 b:id:rna 109
97 b:id:vantguarde 109
98 b:id:FUKAMACHI 109
99 b:id:azakeri 109
100 b:id:jt_noSke 109
101 b:id:kusigahama 108
102 b:id:shidho 108
103 b:id:maikuhama 108
104 b:id:mpresso 108
105 b:id:jwj 107
106 b:id:pal-9999 107
107 b:id:die_kuma 106
108 b:id:kurokuragawa 106
109 b:id:funaki_naoto 106
110 b:id:citora 105
111 b:id:soylent_green 105
112 b:id:pho 104
113 b:id:kamuraco 104
114 b:id:nitino 104
115 b:id:xevra 103
116 b:id:ayacnews 103
117 b:id:genesis 102
118 b:id:tikeda 101
119 b:id:ch1248 100
120 b:id:partygirl 100
121 b:id:swan_slab 100
122 b:id:udy 99
123 b:id:junkMA 98
124 b:id:uemu 97
125 b:id:hejihogu 97
126 b:id:p_shirokuma 97
127 b:id:yugui 96
128 b:id:fellows 95
129 b:id:furamubon 95
130 b:id:lomo_lomo 94
131 b:id:NOV1975 93
132 b:id:yorihito_tanaka 92
133 b:id:uguisyu 92
134 b:id:sivad 91
135 b:id:webmugi 91
136 b:id:konichan 91
137 b:id:zaikabou 90
138 b:id:screammachine 89
139 b:id:yskszk 88
140 b:id:firestorm 88
141 b:id:matsunaga 87
142 b:id:pongpongland 87
143 b:id:cheebow 86
144 b:id:brainparasite 86
145 b:id:kokokubeta 86
146 b:id:jituzon 86
147 b:id:buyobuyo 85
148 b:id:nkoz 83
149 b:id:adramine 83
150 b:id:rajendra 83
151 b:id:sarutora 83
152 b:id:akogina 82
153 b:id:rikuo 81
154 b:id:ogijun 81
155 b:id:mixi_love 81
156 b:id:Hebi 81
157 b:id:catfrog 80
158 b:id:gnt 80
159 b:id:activecute 80
160 b:id:Marco11 80
161 b:id:titose 80
162 b:id:ore_de_work 79
163 b:id:sennji 79
164 b:id:geeker 79
165 b:id:ikebe 79
166 b:id:yamifuu 79
167 b:id:noshuke 79
168 b:id:kozai 78
169 b:id:puteeui 78
170 b:id:ak9 78
171 b:id:dropdb 78
172 b:id:myrmecoleon 78
173 b:id:throwS 77
174 b:id:hebomegane 76
175 b:id:denken 76
176 b:id:nyaofunhouse 75
177 b:id:FTTH 75
178 b:id:nisoku2 75
179 b:id:yu_i 75
180 b:id:smoking186 74
181 b:id:sasapong 74
182 b:id:girls_fashion 74
183 b:id:kaien 73
184 b:id:toshi123 73
185 b:id:mahal 73
186 b:id:nishiogikucho 73
187 b:id:kiyohero 72
188 b:id:ckom 72
189 b:id:FeZn 72
190 b:id:hisamichi 72
191 b:id:ichinics 72
192 b:id:koyhoge 72
193 b:id:memoclip 71
194 b:id:palookaville 71
195 b:id:pha 71
196 b:id:crowdeer 71
197 b:id:strange 71
198 b:id:setofuumi 70
199 b:id:himagine_no9 70
200 b:id:makaronisan 70
201 b:id:synonymous 70
202 b:id:brax 70
203 b:id:kits 70
204 b:id:mosshm 69
205 b:id:white_cake 69
206 b:id:Schuld 68
207 b:id:kamawada 68
208 b:id:akiyan 68
209 b:id:obacan 68
210 b:id:EurekaEureka 67
211 b:id:anhelo 67
212 b:id:blackshadow 67
213 b:id:NATROM 67
214 b:id:enemyoffreedom 67
215 b:id:mount-root-yy 67
216 b:id:HolyGrail 66
217 b:id:CAX 66
218 b:id:Nao_u 66
219 b:id:lu-and-cy 66
220 b:id:OguraHideo 65
221 b:id:send 65
222 b:id:kokepi 65
223 b:id:asa-ko 64
224 b:id:bricklife 64
225 b:id:laddertothemoon 64
226 b:id:kyo_ju 64
227 b:id:nogamin 64
228 b:id:vas-animatum 64
229 b:id:fou 64
230 b:id:nomonsterinme 64
231 b:id:hmmm 63
232 b:id:Nean 63
233 b:id:t2-news 63
234 b:id:facet 63
235 b:id:fumi_o 63
236 b:id:anutpanna 62
237 b:id:morutan 62
238 b:id:YOW 62
239 b:id:starocker 62
240 b:id:Dirk_Diggler 62
241 b:id:extramegane 62
242 b:id:yuco 62
243 b:id:u--san 62
244 b:id:kazeburo 62
245 b:id:TRICK7 61
246 b:id:Penpen 61
247 b:id:mashijun 61
248 b:id:AyanoIchijo 60
249 b:id:chezmoi 60
250 b:id:hxxk 60
251 b:id:samurai_kung_fu 60
252 b:id:aozora21 60
253 b:id:masui 60
254 b:id:irureme 59
255 b:id:wtnb18 59
256 b:id:mizunotori 59
257 b:id:eureka 59
258 b:id:kimchi 59
259 b:id:takopons 58
260 b:id:ayakomiyamoto 58
261 b:id:dewdrop 58
262 b:id:t_kei 58
263 b:id:shinimai 58
264 b:id:km37 57
265 b:id:Banyou 57
266 b:id:toronei 57
267 b:id:riko 57
268 b:id:VIDEO 57
269 b:id:otokinoki 57
270 b:id:kashmir108 56
271 b:id:Agguy0c 56
272 b:id:Tez 56
273 b:id:cx20 56
274 b:id:todesking 56
275 b:id:spica 56
276 b:id:ymScott 56
277 b:id:D_Amon 56
278 b:id:fuku33 56
279 b:id:fuktommy 56
280 b:id:cayo 55
281 b:id:loomer 55
282 b:id:Yuichirou 55
283 b:id:turkie 55
284 b:id:lakehill 54
285 b:id:t-kawase 54
286 b:id:andsoatlast 54
287 b:id:C_L 54
288 b:id:lockcole 54
289 b:id:Baatarism 54
290 b:id:s1090018 54
291 b:id:massunnk 54
292 b:id:odachi 54
293 b:id:aqua39 54
294 b:id:kasuho 53
295 b:id:j708 53
296 b:id:watapoco 53
297 b:id:choco-holic 53
298 b:id:b_say_so 53
299 b:id:mr29man 53
300 b:id:mozy 53


やはり前回と比べると全体的に被お気に入り登録数は増えています。
前回まであった大旦那とかの区分けは面倒だったのでやってないです。
上のような人でhotenryのようなものを再構成してみたらおもしろいんじゃないかとも思いましたが、すでにやっている方がいました。
http://d.hatena.ne.jp/aki77/20070813
今はサービスが止まっているようですが、あんまりそういうニーズはなかったんですかね。
単純に1ブックマーカーにつき1ブックマーク数というのではなく、被お気に入り登録数に応じて重み付けをして、1000ポイントとかポイントで表示するようにしてもおもしろいかも。


ここに載せられなかった残りのデータなど、欲しい方がいらっしゃいましたらメールなどで送るので言ってください。

YAPC::Asia 2008が終わって

去年に引き続きボランティアスタッフとしてYAPCに参加させてもらいました。
今回は東工大・大岡山キャンパスで行われ、2日間とも晴天で本当に良かったです。
アンケート結果などでも会場に関する評価は良好なようで、なんだかうれしかったです。


個々のセッションはニコニコ動画にあがっています。
http://www.nicovideo.jp/tag/yapcasia2008
感想などはyapcasia2008タグで。
http://b.hatena.ne.jp/t/yapcasia2008
YAPCの写真(takesako's flickr
http://flickr.com/photos/takesako/sets/72157605075794701/(1日目)
http://flickr.com/photos/takesako/sets/72157605091703997/(2日目)


僕は普段はRubyを書いていたりするのだけれど、YAPCに参加して思うのは、去年も感じたようにやっぱりPerlコミュニティは素晴らしい、ということ。
本当にみんな楽しそうに話をしていたりコードを書いたりしている。
YAPCというのはプログラミング言語Perlのカンファレンスなわけだけど、Perlをコミュニケーションのための、まさに言語としても使うおもしろい人たちが集まってガヤガヤやっているという表現が個人的にはしっくりくる。
IT業界に興味があります、という学生こそ、よくわからない就活セミナーとか座談会に行くのではなくてYAPCに来てみるべきだと思う。去年の僕がまさしくそんな感じだった。
どうでもいい余談だけど会場のいたるところでMacBookを開いていたid:tokuhiromなどはとてもかっこよかった。
僕もPerlやればかっこよくなれるかもと思って、研究室にあったLearning Perlを読み始めました。


Perlコミュニティといえばid:miyagawa
「どうやったらPerl Mongersになれますかという人がいたりするけど、ここに来ればもうPerl Mongersです。」
というオープニングスピーチも良かった。これで僕もPerl Mongersです。


また一日目のラリー・ウォールのスピーチで急遽マイク持ちをさせてもらったりもした。とてもいい記念でしたが途中足の感覚がなくなったりしびれたりして、大変でした。


来年はどこでやることになるかわかりませんが、またお手伝いしたいです。
みなさん本当にありがとうございました。
最後にid:TAKESAKOによる感動のYAPCまとめ動画をどうぞ。