観測所日誌 このページをアンテナに追加 RSSフィード

2010-11-03

[] Facebook の可能性と fb phone の必然性

google がどれだけ世界を変えたかを考え、次に世の情報や価値はパブリックな領域とプライベートな領域に分散する事を思い浮かべた時、fb の価値が見える気がする。

プライベートな領域にアクセスするには Social Graph が極めて有効な手段なのだ。

プライベートな領域はまだ未開拓で、かつ開拓されたパブリックな領域よりも豊かな可能性を秘めている。


Facebook phone については色んな角度から見る事が出来ると思うけど、ここはひとつ Social Graph の観点から眺めてみたい。

今の Social Graph 形成はとても貧弱で、fb phone はそれを次のパラダイムに押し上げる可能性がある。

fb の friend suggestion は結構優秀&便利で、Social Graph の形成手段というのは本来ああいったマシンによる整理+ユーザコントロールの形を取るべきだ。

人間の時間、アテンションは世の中で最も貴重な資源だし、Social Graph はもっと "影" に沿うと価値が上がる。

今の iPhone が果たしている日常の役割、利便性と fb の機能性、Social Graph を考え合わせるとめちゃめちゃ相性が良い、、iPhone を覆せるとしたら fb phone だろう、というのは置いておいて。

fb phone のような SNS サービスと連動したエージェントの利点はシャドウデータを取れる事だ。

知り合った人を fb で探すのではなく、GPS や議事録アプリのようなアクティビティのメタデータからあるタイミングで "you may know.." とエージェントが提示してくれるようになる。

日常を密接に支えるユーザの一部であるエージェントだからこそ、ユーザのコンテキストを察知する事が出来て、従って Social Graph の自動分類も可能になる。

(人々をどうクラスタリングするか、というのは SN Provider にとって極めて重要な箇所だ)

"my gf" のタグを付けていればディズニーランドで撮った写真は自動共有されるハズ。

通貨革命やグルーポンの次を行くサービスなど、その上で構築出来るリアル(! ゲーム)なソーシャルアプリケーションの可能性も期待出来るのでは。

fb phone はリアルな Social Graph をもっと豊かに構築する手段であり、私たちの生活を変えちゃう可能性のあるソリューションだ。

(と同時に fb を抜きん出た存在に上げ、そのレイヤに於いて fb 以外の選択肢を駆逐する手段になるのかもね)

欠点があるとすれば中央集権的なデータ構造と fb の信頼されなさ、傲慢さ、、

理想論だと思うけど、人は利便性に惹かれて釣られちゃうものだと思うけど、データは端末に閉じて存在し暗号化されてユーザの許可があって初めてアンロックされるべきだと思うんだ。

この辺のアーキテクチャ、構造って社会性や人類社会の発展方向を決める重要な部分だと思うよ。

fb なぁ、、

2010-08-26

[] AppleScript 覚え書き

TextMate, QuickSilver を使っていると AppleScript が欠かせないものになってくる。

今まで見よう見まねで AppleScript を使っていたけど思うようにいかない、、のでリファレンスに目を通してみた。

メインはコードと一緒に gist に、gist に書けなかった覚え書きをここにメモ。

学び終えた今は MacRuby 頑張れ!!の気持ちでいっぱいです。


AppleScript is an object-oriented language. 
An object is an instantiation of a class definition, which can include properties and actions.
"script" is the top-level object, which is the overall script we are working in.

自然言語的な見かけを持てるよう設計された言語で、面白いけどとっつき悪いように思う。

-- オブジェクトのプロパティを of で辿る。 as integer でキャスト (coercion)
-- log や say は utf-8 クラスが扱えないので注意
log(size of first file of window 1 of application "Finder" as integer)

handler、所謂関数の定義は

-- 普通ぽい形
-- AS っぽい事をしたい人は log に代えて say を使うとか
on rock(clock)
	log (clock as text)
end rock
rock(current date)


-- こうも書ける
on rock around clock
	log (clock as text)
end rock
-- 呼び出し側も変わる。() では呼べない。
rock around current date

-- optional に the も使える
on rock around the clock
	log (clock as text)
end rock
-- こちらの the も省略可能
rock around the current date

更に

-- labeled parameters
to findNumbers of numberList above minLimit given rounding:roundBoolean
end findNumbers
-- call
findNumbers of myList above 19 given rounding:true
-- もしくは
findNumbers of {5.1, 20.1, 20.5, 33} above 20 with rounding
findNumbers of {5.1, 20.1, 20.5, 33.7} above 20 without rounding

-- patterned positional parameters
on hl({x,y})
     log x * y
end hl
hl({10, 20})

シェルスクリプト実行

-- シェルスクリプト実行
log (do shell script "cd ~; ls")
-- Technical Note TN2065, do shell script in AppleScript.
-- http://developer.apple.com/mac/library/technotes/tn2002/tn2065.html

tell について、ScriptEditor にて次を実行する

log name of window 1 as text
tell application "Finder"
	log name of window 1 as text
end tell
log name of window 1 of application "Finder" as text

どのオブジェクトにメッセージ送信されるかにより結果が変わっている。

... of me や my ... でステートメント単位でコントロール出来る。 tell を使うとブロック内を括れる。

tell の外部と内部ではスコープが異なるので外部で定義されているハンドラの参照には my や of me が必要 (me はスクリプト自体を指す)

tell application "Finder"
	my fn(name of window 1)
end tell

on fn(x)
	log x & "!!!"
end fn

シェルから AppleScript を使う

#!/usr/bin/osascript
osascript -e 'tell app "Address Book" to get the name of every person' | perl -pe 's/, /\n/g' | sort | uniq

2010-05-30

[] Interface Builder を一発で呼び出す QS 用 AppleScript

キーストローク1発で任意のアプリケーションにスイッチし、かつ全ウィンドウを前面に持ってくる QS Action 用の AppleScript を書きました。

てか Interface Builder 用です。

QS の Action に登録後、QS -> . -> Interface Builder とタイプ -> Action で当該スクリプトを呼び出す、として使います。

QS のトリガは便利なのですが、複数のウィンドウを持つアプリケーションでは他のウィンドウが前面に出てこない事があり、AppleScript で何とかしました。


何故か Text で Application 指定していますが、パクり元サンプルが text を使っておりそのまま作ったら動いたので放置しとります。

Application を渡した方がキレイだと思うので誰かりファクタリングしてください。

menu 操作が便利だったのでコードを残していますが、activate しただけで Bring All to Front っぽい動作になっていたような気も、、、

動いている&自分が満足で今はいじる気が無いので晒しておきます。

2010-05-19

[][] mongoid 2.0.0.beta.6 で遊ぶ

MongoId 可愛いよ、MongoId。

mongo 標準のシェルに潜るより r c してコンソールから叩く方が楽なので困る(嬉しい意味で)。


以前はこう出来たのが

where(:price => {'$gt' => 0})

今はこう

where(:price.gt => 0})

また exclude, not_in のような見慣れないメソッドがあった。

使っていないので見落としていただけかも。


bson のデータ型に対する厳格さが増したかも知れない。

以前は $gt => 0 で取れたのが取れなくなっている。

# これはもうダメ、nil が返る
Entry.first(:conditions=>{:published_at => {'$gt' => 0}})

# こうする
Entry.first(:conditions => {:published_at => nil})
=> #<Entry _id: 4befcdc10482931424000006, ..

# 逆の場合は
Entry.first(:conditions => {:published_at.ne => nil})
=> #<Entry _id: 4befcdc104829314240000…

# 値指定なら
Entry.first(:conditions => {:published_at.gt => 2.years.ago.utc})
=> #<Entry _id: 4befcdc10482931424000001, …

MongoId はよく出来ていると思う。

インタフェースのクセが AR2 時代のそれなので AR3 の cool さを見てしまうとちょっと寂しいけど。

機能的には満足しておりますです。

2010-05-17

[] Ruby/AppleEvent ブリッジの覚え書き

AppleScript っぽい事を ruby で、な環境を一通り調べてみた。


rb-applescript

今はこれが現役、Ruby だけでなく python, Objective-C のバインディングがある。

ところが困った事に、クリップボードにアクセスしようとすると osax が 64bit ruby で動かないようだ。

dynamically retrieve scripting addition terminology within a 64-bit process

と言われる。


RubyOSA

既に開発中止らしい。けど中身はそれほど悪くない。個人的には好き。

ではどうするかというと、github にある Snow Leopard 対応版を使う。

gem install pbosetti-rubyosa

で、、クリップボードにアクセスする方法を探しまわったが見つからずに断念。


クリップボードが扱えない件

さくさく rubyスクリプティングなら rb-appscript でも RubyOSA でも役割は果たせる。

問題はクリップボードですよ。

ペースト操作だけなら AppleScript

tell application "System Events" to keystroke "v" using command down

これを

sys = OSA.app 'System Events'
sys.keystroke 'v', OSA::SystemEvents::EMDS::COMMAND_DOWN

と同等の事が出来るが、クリップボードに書き戻す手段が無い。

pbcopy/pbpaste を試したがコマンド経由だとマルチバイト文字が扱えない。

マルチバイトを有効にした terminal app を activate して実行する方法があるものの、スマートでない&ウィンドウが一枚立ち上がったりするので諦めた。

ruby-cocoa だと上手く行くが、こちらは力量不足で NSString オブジェクトruby の String を相互変換する方法が分からなかった。


という事でクリップボードは諦めて osax のアップデート待ち中。

ソースコードから自分でコンパイルすれば良いような気もする。


QuickSilver と組み合わせてクリップボードフィルタを作りたかったのだけど、今回は諦めた。

日本語が絡まなければ目的は達成、、うーむ。