黒魔術に触れる

すでに1週間以上前の出来事ではありますが、前回の日記に続き、 yokohama.rb 第4回に参加しました。

http://atnd.org/events/11853

今回は jugyo さんによる発表をもとに、みんなでRubyを凄さを学ぶ、という内容でした。

以下、自分的な内容のメモ。

  • Ruby すげー、という点

irb便利
 言わずもがな。irb コマンドですぐにREPLが起動してコードを確認できる。

オブジェクト指向
 Rubyはオブジェクトとしてよくできてる。

>> 1+1
# => 2

 は、実はメソッド呼び出しになっている。

>> 1.+(1)
# => 2

 このようにオブジェクトとして一貫性のあるところがすごい。
 そして、正しくものが作れる感じがする。

オープンクラス
 前回の勉強会で each を再実装したように、
 既存のクラスを拡張して簡単に機能を拡張できる。

DSLが作り易い
 例:rake など

  • ライブラリの作り方

 jeweler でgem が楽に作れる

https://github.com/technicalpickles/jeweler

github にアップロードする、ライセンスはどれを使う、バージョンは〜〜みたいに指定して、
簡単に gem が作れるらしい。
ぜひ試してみたい。

・便利ツール
 jugyo さん作成の便利ツール
gemedit
gem reademe
g
ir b
toclip

・エディタ:txtmate
 rubyが実行出来る

・ifchanged

・attr_accessor
 ゲッターセッターが簡単に作れる

・attr_accessor はモジュールのメソッド

Ruby1.9 のオブジェクトの階層
BasicObject -> Object -> Module -> Class
ruby で class で定義するオブジェクトは Class クラスのオブジェクトとなる。

・RVMとパス
前回定義したとおり、
 rvm によって複数のバージョンのRubyを管理して使用できる。

RVM
http://rvm.beginrescueend.com/

 RVMによってバージョンを切り替えると、パスが変わる。

w84mba:ruby yuto$ rvm reset
w84mba:ruby yuto$ echo $PATH
/usr/local/bin:/opt/local/bin:/opt/local/sbin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin
w84mba:ruby yuto$ rvm use 1.9.2
Using /Users/yuto/.rvm/gems/ruby-1.9.2-p0
w84mba:ruby yuto$ echo $PATH
/Users/yuto/.rvm/gems/ruby-1.9.2-p0/bin:/Users/yuto/.rvm/gems/ruby-1.9.2-p0@global/bin:/Users/yuto/.rvm/rubies/ruby-1.9.2-p0/bin:/Users/yuto/.rvm/bin:/usr/local/bin:/opt/local/bin:/opt/local/sbin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin

パスが変わるので、shebang を書く場合、「/usr/bin/ruby」ではなく、「/usr/bin/env ruby」を使用する。

  • 中括弧の使い方

オライリーの「初めてのRuby」では著者のyuguiさんが以下のような使い分けをしていると説明されている。

# 「初めてのRuby」より

・基本的に do end を利用する
・メソッドの戻り値を利用する場合のみ波括弧を使用する
・あるいは、a.hoge{}.huga{}のようにメソッドチェーンをする場合のみ波括弧を使う

 また、筆者はイテレータには do end を、ブロックによるリソース管理を行う場合には波括弧を利用するようにしています。<略>

他にも1行でかけるものは波括弧を使う。endの後にメソッドが続き場合は波括弧にする、などの意見が。

  • 黒魔術に触れる

ここまで出てきた話の中で、いくつの説明でRuby の様々な機能に関する説明があった。
そのなかでも、特にメタプログラミング的な機能に関する単語を拾って、自分でもその機能を試してみた。
# ただし、理解があやふやなので、読まれる方は説明文をあまり参考とせず、注意されたし。


・module
モジュールはメソッドや定数、クラス変数のグループに名前をつけたもの。
Rubyは多重継承をサポートしていないため、複数のクラスからの機能を
引き継ぐ機能として module をサポートしている。

module Foo
  def a
    puts "A"
  end

  class B
    def b
      puts "B-b"
    end
  end
end

class Bar
  include Foo
  def initialize
    B.new.b
  end
end

class Baz
  include Foo
end

Baz.new.a
Bar.new
# => A
# => B-b

・特異メソッド
特定のオブジェクト専用のメソッド

ruby-1.9.2-p0 > s = "string"
 => "string" 
ruby-1.9.2-p0 > def s.output
ruby-1.9.2-p0 ?>  self + "-text"
ruby-1.9.2-p0 ?>  end
 => nil 
ruby-1.9.2-p0 > puts s.output
string-text
 => nil 

・ブロック
ブロックは中括弧かdo end で区切られたコードであり、
メソッド呼び出しの後ろに配置できる。
メソッドの引数に & を付けた場合、proc オブジェクトや method オブジェクトをブロックとして渡すことができる。

#! /usr/bin/env ruby
# -*- coding:utf-8 -*-

def foo(&block)
    block.call(10)
end

foo{|x| puts x * x }
# => 100

・binding
Binding オブジェクトには、あるオブジェクト内の変数束縛の情報を返すオブジェクト(?)
eval の第2引数として binding を渡すことで、そのオブジェクトの内部の変数にアクセスすることができるようになる。

#! /usr/bin/env ruby
# -*- coding:utf-8 -*-

def foo
  bar = "binding"
  baz = "test"
  bindtest :bar,:baz,binding
end

def bindtest(n,m,context)
  context.eval('puts '+n.to_s+'+" "+'+m.to_s+'')
end

foo
# => "binding test"

・method_missing
未定義のメソッドを読んだ場合、method_missing の第一引数としてメソッド名のシンボルを受け取り、第二引数以降も引数として受け付ける。
この method_missing の中で、処理を記述することで、動的にメソッドを定義するようなことも可能となる。

ちょっと気の利いた使い方がすぐにはおもいつきませんが……。

#! /usr/bin/env ruby
# -*- coding:utf-8 -*-

class String
  def method_missing(name)
      s = ""
    if name.to_s =~ /^head_(\d+)$/
        (0..$1.to_i).each{|x| s = s + self[x]}
        return s
    elsif name.to_s =~ /^tail_(\d+)$/
        (0..$1.to_i).each{|x| s = s + self.reverse[x]}
        return s.reverse
    else
      super
    end
  end
end

puts "method_missing_test".head_5
puts "method_missing_test".tail_5
# => method
# => g_test

・__send__
Object#send メソッドを使うと、引数として指定したメソッドを実行出来る。
この時、指定したメソッドがprivate ,protected メソッドであっても、実行可能である。

#! /usr/bin/env ruby
# -*- coding:utf-8 -*-

class Foo
  def bar(n)
    "bar"*n
  end

  private
  def baz
    "baz!"
  end
end

foo = Foo.new
puts foo.__send__(:bar,5)
puts foo.__send__(:baz)
# => barbarbarbarbar
# => baz!

以上です。

他にも色々ありましたが、自分的に学べた部分はこれぐらい。
それにしても、Rubyメタプログラミング的な側面に触れてみると、Rubyの凄さがまざまざとわかりますね。
動的に組み込みの機能をいくらでも拡張していけるあたり、驚くほど柔軟な上に強力。
かなり理解が難しい部分でもありますが……。

一番の下手くそでいよう、とはいうものの・・・・・・

最近、仕事でのちょっとしたテキスト処理やデータをまとめたりする際に、
Rubyを使うようになりました。
以前はPerlを使っていたのですが、Rubyの方が読み易くて書くのも楽。

そこでさらに Ruby についてもっと深く知っていきたいなーなどと思っていたところ、
ATNDの新着RSSにyokohama.rb というイベントを発見。
初心者向けセミナーがあるということで、そちらに参加してきました。

yokohama.rb 第3回
http://atnd.org/events/10272

初心者向けセミナーの内容はオライリーの「初めてのRuby」を読むというもの。
で今回は主に2章の「配列とハッシュ」。

ここでセミナーの内容をちょっと復習。

配列の定義。

a = ["a","ab","abcde"]
=> ["a", "ab", "abcde"]
a = %w(a ab abcde)
=> ["a", "ab", "abcde"]

配列から最大の長さを探す。

a.max {|e1,e2| e1.size <=> e2.size}.size
=> 6
a.map {|e| e.size}.max
=> 6

map を使うと、配列の各要素に対する処理が実行されたあとの配列が帰ってくる。

各配列の要素を右揃えで表示。

 a = ["a","ab","abcedf"]
  l = a.map {|e| e.size}.max
  
  puts "sprintf"
  a.each do |e|
    puts sprintf("%06s",e)
  end
  
  puts "rjust"
 a.each do |e|
   puts e.rjust(l)
 end

yield を使って、Array オブジェクトに myeach を作る。

class Array
 def myeach
    self.length.times do |e|
     yield self[e]
    end
 end
 def myeach2
    i = 0
    while (i < self.length)
     yield self[i]
     i += 1
    end
 end
end

["a","ab","abcdef"].myeach {|e| puts sprintf("%6s",e)}
["a","ab","abcdef"].myeach2 {|e| puts sprintf("%6s",e)}

さらに、Ruby1.9.2 の文字コードの勉強
Ruby1.9 の文字列自体が文字コードを持つ
・ 外部エンコード:読み込むファイルの文字コード
・ 内部エンコード:読み込み後の文字コード

Ruby1.9では、スクリプト自体の文字コード、読み込むファイルの文字コード
書きだすファイルの文字コードを別々にできる。

# -*- coding:utf-8 -*-

#スクリプト自体の文字コードはUTF-8、
#読むこむファイルはEUC-JP、書き出しはUTF-8
File.open("test.txt","r:EUC-JP:Shift_JIS"){|f|
  File.open("out.txt","w:Shift_JIS:Shift_JIS") {|fo|
    fo.puts(f.read)
  }
}

以前、Windowsアプリのログファイルで日本語入りのUnicodeになっているファイルがあり、
これをRuby1.8ではうまく読めない、なんてことを経験したことがありました。
その時はPerlで読み込んでいたのですが、Ruby1.9ならうまくいきそう。


RVM (Ruby Version Manager)は複数のRubyを管理するバージョン管理ツール。

RVM
http://rvm.beginrescueend.com/

このRVMを使って、Macbook AirRuby1.8.7Ruby1.9.2を共存。

$ ruby --version
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
$ rvm use 1.9.2
Using /Users/hayato/.rvm/gems/ruby-1.9.2-p0
$ ruby --version
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.5.0]

#リセット
$ rvm reset
$ ruby --version
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]

などなど、非常に勉強になりました。


感想:
何と言うか、初心者向けということで行ってみたら、本当の初心者は自分だけだったという。。
職業プログラマではない上、Rubyもあまり書き慣れてないので、
こういうコードを書いて勉強するイベントに参加するには、
もうちょっと普段からRubyのコードを書いておいて方が良いと感じた。
「一番の下手くそでいよう」とはいうものの、さすがに素人すぎるのもまずいなー、と。
勉強用のブログでも作ろうかな。

Japan.R に行って来ました

かなり久しぶりの日記。
何でこんなに間が空いたかっていうと、ただただ色々忙しかったという他には無いわけですが・・・・・・。

それはさておき、今後の世の中は統計分析がホットになる、なんて記事があったり、レコメンデーションや自然言語処理の本なんかも出版されていて、世間では統計分析の技術が徐々にもてはやされつつあるようです。

次の10年、「統計分析」こそテクノロジー分野でいちばんホットな職業になる - Publickey

そして、統計分析用のプログラミング言語 R も徐々に注目が集まっているようです。

http://www.okada.jp.org/RWiki/?R%CB%DC%A5%EA%A5%B9%A5%C8
ここ2年ぐらいでかなりの数のR解説書が出版されてる。

こうした背景から、最近ちょっと R を勉強してみたいなー、などと思ってたわけです。しかしこれといって処理したいデータもなく・・・、という状況できっかけを欠いた状態でした。

しかし、ATNDの新着フィードを眺めていたら、ちょうどRの初心者向け勉強会を発見!

第1回 Japan.R 午前の部: はじめての「R」 : ATND

これはいいタイミングとばかりに喜び勇んで行って参りました。
つうか、統計数理研究所なんて場所あったんですね・・・。
しかも同じ都内とはいえ、立川はマジで遠い・・・。


勉強会の内容は、以下の通り。

  1. R の紹介
  2. R のインストール/アンインストール/アップデート
  3. 変数・関数の使い方
  4. ベクトルの扱い方
  5. 図の表示
  6. 応用:RMeCabの紹介

非常に初心者向けだったので、入門にはばっちりでした。

で、Rの使い方をひと通り習ってきたので、
早速使ってみることに。

まず統計分析の元データとして、ニコニコ動画の月間ランキングと、各動画のはてなブックマーク取得数並べたデータを用意してみます。

これはRubyで適当なスクリプトを組んで取得しました。

#ニコニコ月間ランキング
#http://www.nicovideo.jp/ranking/mylist/hourly/all?rss=2.0

#はてなブックマーク件数取得 API
#http://api.b.st-hatena.com/entry.count?url=

require 'rss'
require 'net/http'
require 'kconv'

require 'rexml/document'
include REXML

rss = RSS::Parser.parse("http://www.nicovideo.jp/ranking/mylist/monthly/all?rss=2.0")

# puts title,rank,bookmark_count
rss.items.each do |item|
  count = nil
  nico_title = item.title.kconv(Kconv::SJIS,Kconv::UTF8).split(//)[1]
  rank = item.title.kconv(Kconv::SJIS,Kconv::UTF8).split(//)[0]
  rank_num = rank.gsub(/|/,'')
  req =Net::HTTP::Get.new('/entry.count?url='+item.link)
  Net::HTTP.start('api.b.st-hatena.com',80) do |http|
    count = http.request(req)
  end
  puts nico_title + ',' + rank_num + ',' + count.body
  sleep(10)
end

で、取得したCSVファイルを元に、R でcsvファイルを読み込み、散布図として表示します。

> data <- read.csv("<データ名>.csv")
> plot(data[,3],data[,2],main="niconico_monthly-hatena-bm",xlab="hatena_bm_count",ylab="nico_monthly_ranking")

散布図は以下のとおりになりました。

こうして見ると、ニコニコ動画の月間ランキング順位とはてなブックマークの取得数はほとんど相関がないことがわかりますね。

ニコニコ動画の中でもはてな民がブクマする動画はジャンルが偏ってるので、こうなるのでしょうか。

こうやっていろいろなデータを解析できるとそれなりに便利かも。
でも活用の前に自分には統計学の勉強が必要なわけですが。

第3回ソーシャルブックマーク研究会に参加してきました

なんだか以前のエントリから大分時間がたってしまいましたが
第 3 回 SBM 研究会に参加してきましたので感想を書きます。


実は第1回SBM研究会にも参加を希望していたのですが、
諸事情あって参加できなかったため、今回が初参加となります。

第3回SBM研究会のスケジュールがFIXしました!
http://toremoro.tea-nifty.com/tomos_hotline/2009/08/3sbmfix-6bbd.html

・第3回SBM研究会プレゼン資料
http://toremoro.tea-nifty.com/tomos_hotline/2009/09/sbm-ee63.html

□日時:2009年9月13日(日) 10:00〜18:00
□場所:東工大大岡山キャンパス

これまで私が参加してきた勉強会は比較的都心部のシャレオツな場所での開催が
多かったのですが、今回の場所は東工大ということで、ちょっと郊外?的な位置。


大学に入ってすぐ、目に飛び込んでくる「2011、東工大は130歳です。キミは?」
という看板がインパクト大w
dankogai がブログにうpしていた謎っぽい写真の意味が明らかに!
http://blog.livedoor.jp/dankogai/archives/51288546.html

もはや勉強会実況は Ust & Tsudaる のが基本!?


開場についてまず後悔したのが、PCを持ってこなかったこと。


数時間あるし、電源がどのぐらい確保されてるかわからないので、
メモ書きで別にいいかと思ってPCを持ってこなかったのですが、
開場では電源が十分な数確保されていて無線LANもアクセス可能という
素晴らしい環境が用意されていました。


で参加者の大半がノートPC持参というスタイル。


もう勉強会といえばみんな twitter で Tsuda るのが当たり前みたいな
空気なんですなー。

各発表の勝手な要約と感想

0.はじめに


最初に主催者の西谷さんより、「SBMアーリーアダプターが使っている状況。どうやったらキャズムを超えられるか」
という今回のテーマ?的な warenosyo 的なお話がありました。


確かに、自分のまわりでも SBM を使ってるのはかなりネット好きな層に限られていて、
SE 職の同僚ですら使ってる人間なんてほとんどいなかったり。
SBM はまだまだキャズムを超えられていない・・・。

1.「エコメンデーション」

発表者:佐々木さん、上村さん(東工大


SBMが普及しない理由はメリットが見えないこと
・でもリンクを羅列するまとめサイトには需要がある
・ブクマ間を関係タグでつないで「ソーシャルまとめサイト」を作ろう
・「エコメンデーション」→レコメンデーション+エコ
計算量をできるだけ減らすために、Normalized Cut というアルゴリズム
木構造を作る


感想:
確かにまとめサイト的なものは結構必要とされてるかも。
自分もはてブを使う前からまとめWikiなどは結構読んでたし。

2.「SBMの推薦アルゴリズム 〜はてなブックマークのレコメンドの仕組み〜」

発表者: 岡野原大輔さん(プリファードインフラストラクチャー


はてなブックマーク2で実装された「関連エントリー」推薦アルゴリズムの解説
・Reflexa (Bayesian Setsの改良)を使った複雑な数式計算の解説
・大規模なレコメンドデータを主記憶上に設置し、圧縮+Locality Sensitive Hashで処理
 数式がよくわからなかったが、内積を使っているので、コサイン類似度などに近い?
・サーバ一台で数千万〜数億件を処理可能だそうだ。凄い。
・ただし、このアルゴリズムだけで純粋に関連エントリーが生成されているというわけではないらしい


感想:
サーバ一台で動いているというのがとにかく凄い。
関連エントリー」は自分も結構クリックするし、精度も高いと思う。
とは言え類似性が高いエントリーを推薦しているという点で、
「このエントリーを含むエントリー」との差別化があまりできていないような気もしますが、
それははてな側のサービス提案の問題でしょうね。
もうちょっと変わったものが出てくる推薦方法というのも面白いかも。

3.「SBMミニブログです」

発表者:福冨 諭さん(Webプログラマ

はてブの個別コメント「URL、タイトル、コメント、タグ」
twitter の個別コメント「コメント、URLを書くこともできる」
はてブは検索に強く、twitterは検索に弱い
・検索性に強いミニブログとして、はてブにダミーURLを入力して、
 コメント欄をミニブログとして使用する「はてバーぶろぐ」を開発
・naoya 絶賛www


感想:
twitter は検索性が低く、はてブは検索性が高い。
はてブ検索できるから便利というのは確かにその通りで、
自分もあとで検索できるから、とばかりにブクマしまくってるものの、
twitter の発言はその場限りのもの、という認識なので、
ミニブログ的なつぶやきはから別にあとから参照できなくてもいいや、
と思ってるのですが、この辺はサービスを使う人次第でしょうね。

4.「SBMを利用したフィッシングサイト検知とその展望 −集合知セキュリティという考え方−」

発表者:中山心太さん(NTT研究所)


SBMに登録されたURLを元に信頼性を判定し、フィッシングサイトを検知するというアイデア
SBM向きのサイトが増加、SBM利用が促進されるようになる
・ただしこの方法がメジャー化すると、フィッシングサイト側もSBMを利用するように
・フィッシングサイト側もURLが登録されることになるので、ブラックリストが作りやすくなる
 →どちらにせよ黒判定


感想:
URLの正誤を判定する方法に使うという発想はなかった。
とは言え、例で示されていた通り、マイナーなサイトだと
そもそもブクマされていなかったりするので、
地銀などのフィッシングサイトを防ぐのは難しそうです。

5.「言語表現に基づくブックマークコメントの分類とフィルタリング」

発表者:山田 剛一さん(東京電機大)


SBMは熱いか→話題は twitter
・利用者はまだ少ないものの、コメントを認知している人はいる
・コメントをフィルタリング可能か調査
・「意見・感想」と「引用・要約」を構文解析などで判定


感想:
SBMを使わずに見るだけの人が多いというのは意外で、
見るだけなら使ってしまえばいいのに、と思ってしますのですが、
自分も 2chは ROM 専なので、読むだけ、という人も多いのでしょうか。
そういう人をユーザー側に引き込む誘導線があるといいかも

6.「LivedoorClip おもしろ大改造」

発表者:mala さん(Livedoor


はてブ2で実装されたWebHookや、LivedorBlog、Livdedoor Reader が対応した PubSubHubbub について
・LivedoorReaderが PubSubHubbub に対応したことで、
・リアルタイムに更新されていくフィードを確認することができる。
・LivedoorReader自体はシンプルにつくり、他のサービスと連携
・WebHook や OAuth を使って連携の可能性が広がる


感想:
Webのリアルタイム更新と複数サイト間の連携が広がりそう。
WebHook、PubSubHubbub、OAuth の技術はチェックしておいた方が良いかも。

7.「ブックマークサービス普及のためのユーザーインターフェース(UI)」

発表者:島津悠樹さん(ヤフー)


・Yahooユーザーの中でYahooブックマークを使用しているユーザーは2%
Webメールの 40 % にと比較して、明らかに少ない。
・UIデザインにはアフォーダンスが重要
  ※アフォーダンスとは
・アイデア
 ・時系列の概念を持ったブックマーク
 ・すご録のようにキーワードで一括してブックマーク
・日常生活からの比喩などを取り入れて、アフォーダンスを高めた設計が必要


感想:
SBM研究会で UI の話はこれが初ということでした。
いかにキャズムを超えるかを志向するならば、
UI に関する考察はより重視されてもいいかも。
イデアとして示された、時系列のBookMarkは著作権の問題や、
Web魚拓的な使われ方がされそうで実装は難しいかな、という印象を持ちました。

8.「SocialDict - 英文Webページのスマートな注釈・辞書引きシステム」

発表者:江原 遥さん(東京大学


・「英単語を推薦したらどうなる」
・SocailDict→自分の知らない単語の訳を推薦してくれるサービス
・GAEに判別器を実装して判定
・GAE:スケーラビリティの確保、アカウント登録をGoogleアカウントで代用
・モデル:TOEFLなどで使用される項目反応理論を使用
・結果:80 % の精度で当たる
・学生の卒論にGAEは最適


感想:
知らない単語を推薦してくれると英語力の弱い自分としても
ありがたいところだけど、単語ごとに色分けされたり、
英文の中に訳が混じってるのも見づらいかもしれない。
その辺は UI のデザイン次第でしょうか。

9.「oneclip - Twitterソーシャルブックマーク

発表者:大澤 昇平さん(筑波大学)


・以前SwimmieというSBMサービスを運営していた
 極力ブラウザのブックマークに近いSBM
 →ForeFoxアドオン→ForeFoxアドオンはそもそもはてブユーザー→マーケットにマッチせず
・Oneclip -URL短縮・RT・アクセス解析などを実装したSBMサービス
・見ているWebページをブックマークレットを使って twitter に投稿
・Webページがクリックされた回数やRT回数を確認
・今後はAPIを提供していきたい


感想:
ブックマークレットやWebページへのオーバーレイ表示、
短縮URLアクセス解析、とtwitterへのURL投稿に
特化サービスという印象。
twitter へ投稿されたURLのクリック率は 5 % とかなり高いらしい。

全体の感想:

SBMはまだまだ一般人にはリーチできていない。
また、手軽な投稿サービスとしては、twitter に話題を奪われている状況にあるという印象です。
その中で様々な利便性向上の提案がなされた、というのが今回の提案の印象です。


レコメンデーション技術やPubsubhubbubなどの話題の技術について話が聞けたのは、
非常に面白かったのですが、個人的にはキャズムを超えるためのアピールを目指すなら、
UI 関連の話についてももっと聞いてみたいと思いました。

マイクロソフトにてインタビューを受けてきました

  • MSに呼ばれてインタビューを受けて来ました

うう、最近花粉症+超多忙でブログどころか twitter もロクに更新できておりません。


そんな中、木曜は何とか定時で会社を抜け出して、マイクロソフト本社のインタビューを受けてきました。
というわけですでに土曜ですが、そのことについて書こうかと。


そもそも何故 MS のインタビューを受けることになったかという経緯については、
特に複雑なものがあるわけではなく、いきなりはてなから↓のような内容の直メールが来た、というのが発端ですw


マイクロソフトが仮想化技術に興味のあるITエンジニアと話したいようだから、
 集客を手伝ってるんだけど、来ませんか?」


ただし、最初にこのメールを見たときは超疑心暗鬼でした。


「え、はてなと MS? なんか話が大きすぎるし、釣り?」


何しろ私ははてな市民ですらない上に、特に目立ってブクマを集めるような記事を書いている
わけでもないのに、なぜこのようなイベントに招待されるの、どういう人選なの? というのが第一印象w


とは言え、メールアドレスもはてなから来ているし、
MSの方と直接話をする機会は滅多にないだろうということで
IT系イベントに弱い僕は誘われるままホイホイ参加してしまったわけです。

  • インタビューの参加者

インタビューには、MS 社からは、Technetエヴァンジェリストマーケティングの方が
参加され、はてなユーザーは4人(id:kagamihoge さん id:yuzuhara さん、id:mamoruk さん+私)で1グループとして受ける形式でした。


私以外のはてなユーザーの方々は基本的に開発だったり、研究だったりと、
プログラマー、開発者に近い仕事をされている方々でした。
それに対して、私は一人インフラ系の SE だったりw
だから、なんというか微妙に場違い感を感じてしまったりもしつつ、
花粉症もあっていろいろいっぱいいっぱいだったしたわけです。


まあ、はてなでもインフラ系のエンジニアってあまり見つからないし、
基本的にインフラ系エンジニアのブログってネットでかなり少ないんですよね。。
そもそも私も別に技術的な日記を書いてるわけではないんですけども。


でも、こういう利害の絡まない場で色んなエンジニアの
仕事や技術の話が聞けるのってかなり面白くて、刺激になります。
ここ2年ぐらい勉強会に参加するようになった大きな理由はそれです。

  • インタビューの目的

インタビューの目的として伺ったのは、インタビュアーの方々は、MS製品に限らず、日本のITエンジニアの満足度を向上させるという目的のため、エンジニアがどのようなことを考えているかを聞いて、今後のコミュニティー運営活動に活かしていきたいという目的で、今回のインタビューを開催したというお話でした。


このため、最初に MS TechnetMSDN それぞれの説明や、現在 MS が提供している様々なオープンソース製品に関するプレゼンテーションがありました。

  • インタビュー内容

普段の仕事と困ってること、情報収集の方法や、ツールについての質問を受けました。


私以外はやはりオープンソース系のツールを主に使用されている方々ばかりでした。


私は基本的に客先導入する製品に向けてコードを書くようなことはないので、(社内では使ってますが)ちょっと毛色の違う領域の話になったかな、と。


IT業界といっても広くて色んなエンジニアがいますから、私のようにちょっとニッチな領域の技術を扱うエンジニアもいるわけです。
(今回聞いたところによると、国内のITエンジニアは200万人だとか)


面白かったのが、情報収集ツールとして全員が第一に twitter を上げていた点w
これは MS の方も関心を持たれてました。
そういえば MS のサービスではまだミニブログサービスは初めてないんですよね。
というか、ブログはやってても、ミニブログをやってる大手 IT 企業はまだないということに気がついた。


でも、ミニブログというか、twitter のツールとしての有用性はかなり高くて、ここ2年ぐらいでIT系の勉強会に参加するような人は、ついったったーである確立も相当に高いのは事実だと思います。


twitter は今のところアーリーアダプターが多くて、IT系の情報はそれこそリアルタイムレベルで集まるので、非常に便利だと実感してます。変態発言が流れてくることも多いけどw
まあ私は最近 ROM ってて滅多に POST できてないんすけど。。
3月は土日も仕事に出てたし、毎日終電以降に帰ってたから仕方ない。


あと、やはり全員 MS 系の情報が Web には少ない、なかなかコミュニティーが広がらない、という点については話題に出していました。


一応あるところにはあるのでしょうが、中々見つけられないというか、オープンソース系のブログの方が目立つ状況です。


MS としてはそういった状況を改善したい、という要望もあるようです。

これは拝見したソフトやプレゼンを見ても感じたのですが、マイクロソフトとしてもオープンソース
力を入れて行こうという思いを持っていて、PHPのWeb開発や、SilverLightなどのRIA技術から、仮想化のインフラも含めてかなりオープンに進めて行こうとしているな、と確かに感じました。


Windows2003 Serverになって以降、確かにOSは凄く安定しているし、その上で、FastCGIASP.netを使うという選択肢も、LAMPと比較して遜色ない状況でしょう。


また、私が学生の頃は有料だったVisural Studioだって、今じゃExpress Editionというフリー版があるわけで、個人でもMS系技術に触れる敷居は下がってきているかな、という印象はここ2-3年持っていました。


個人的には、マイクロソフト製品の技術に特に抵抗があるわけではないので、今後コミュニティー活動が活性化していくということであれば、歓迎していきたい気持ちです。

  • 最後に

マイクロソフトとしては、これで最後というわけではなく、今後も色々と企画していきたい、ということを伺いました。

個人的には、エンジニア同士の語り合う場は沢山あった方が面白いので、ぜひ活性化していって欲しいところです。

今回は、他のはてなユーザーの方の話から、マイクロソフトの方針まで聞けて非常に満足できるイベントでした。

お声をかけてくださった株式会社はてなと、インタビューを開催いただいたマイクロソフト株式会社、ならびにご同席いただいた方々には感謝いたします。

血液型占いの幻想はいつまで維持されるだろうか

血液型占いが日本でこれだけ流行るのって、日本が単一民族でできてるって幻想がまだ大衆に共有されてるからだろうな。
同質の人間だからこそ些細な差異が気になるという。

今後、移民が増えたりすると、そんな生易しい分類は通用しなくなる。
日本において血液型占いが力を失う日がやってくるとしたら、移民がこの国の構成員の何割かを占めるようになったときだろう。そしてそれは案外2−30年以内のことかもしれない。

まあ本当に移民政策が実施されるかはわからないけど、すでに今住んでる地域でもコンビニ店員、ファミレス店員なんかは、色んな国の人が増えてる。

今後確実に人口が減少する中で、これまでと同じ生活レベルを維持するためには、やはり移民政策が必要なのかもしれない。

ただし、当然反発はあるだろうし、EUだってあまり移民政策はうまくいってないようだ。

人口の減少という事実を今後どのように受け入れていくのが最善か、まだわからない。

これは世代論というか、情報インフラの問題というか

いまの60才台〜40才台ぐらいの世代って、
戦後日本が近代化していき、
個人主義化する中で共同体的な集合知を失った世代で、
しかもインターネットのような新たな知の共有手段も知らないから、
自分が知らないものに出会ったときや、
社会の流れが大きく変わった瞬間なんかに、
うまく対応できなくて行き詰ったときに、
参考に出来る知識を得る手段に乏しいんじゃないかな、
なんてことをふと考えた。
そうすると、この世代は自分達で勝手に考えて、勝手に行動するしかないので、
愚かな手段を選んでしまいがちなんじゃないだろうか。
でも、そういう世代が今後も20年ぐらいは力を持ち続けるんだよなあ…。

まあでも60才台〜40才台に対して情報与えるものには活字メディアがあるのか。
ということは、活字メディアってのはそういう「生きる知恵」的なものを
供給する役割もあったわけだ。
って当たり前ですねw

でも「生きる知恵」みたいなものも、
ネットが供給してくれるようになってるから、
30台より下の世代には、活字メディアの一部の需要に対するアピール性は必然的に下がる。
だから、出版不況は必然かなあ。