Pokenを購入

TechCollab2009-03-20


プロフィール交換デバイスPoken」を購入した。

詳細な説明はこちらを参照。個人的にはなかなか面白いデバイス&サービスだと思うが、正直なところ「ケータイ&音楽プレイヤー」で生き抜く若者に、この「Poken」を持ち歩かせるにはもうひと押しな魅力が必要なのかなと思う(プロフィール交換だったら携帯で十分)。この手のものを爆発的に広めるには10代-20代前半の学生世代への認知が必要なのかとは思うが、それならばPokenを持つことがクール、カワイイというステータスまでに昇華させる必要がある。残念ながら今のPokenのデザインは正直なところクール or カワイイとは思わない。今後は、どこかのデザイナやイベントとタイアップしてPokenのイメージを作り上げるか、さらに面白い機能をつけてなんとかするか、なのだろうか。何にしても今後の普及度合いに注目していきたい。最近のCUのような状況になるのは避けたいところ。

WEBとリアルをつなげるデバイス「ioBridge」を触ってみる

TechCollab2009-02-21

ioBridgeとは?

ioBridgeはさまざまなデバイスをインターネット経由で監視/制御できるモジュール。先日Engadged Japanで紹介されたこともあり、自分の中にある「ウェブとリアルの融合」という興味にも合致してたので勢いで購入してみた。下図(ioBridgeシステム構成)の通り、ioBridgeにLANケーブルを挿しネットワークに接続させることで、WEB経由でioBridgeに接続されたセンサー、デバイスの情報を取得したり制御することができる(温度センサー、GPS、ジャイロ、サーボモータ 、etc)。このDog Feederで利用しているサーボコントローラだけでなく、X10コントローラやBasic StampやArduinoなどのシリアルスマートボードとの連携も可能となっているため、デバイス側の連携は無限大の可能性がある。そしてそれらのセンサー、デバイスはすべてWEB経由で操作できる。

ioBridgeコントローラ
ioBridge architecture

ioBridgeシステム構成
ioBridge architecture

入手方法

ioBridgeはioBridge Storeから購入することができる。発注してから大体1週間で到着する。今回かかった料金は下の通り*1

  • IO-204 Module : $88.00
  • Serial Smart Board : $19.99
  • Servo Controller Smart Board : $16.99
  • Shipping Charge : $20程度
利用準備

1. デバイスのセット
電源、LANケーブル、サーボコントローラを接続する。

2. ioBridge接続、ダッシュボード設定
ioBridgeのサイトにログインし、指示に従いデバイスの初期設定を行う。

3. Widgetの作成
バイス制御用Widgetを作成する。

API: デバイス情報の取得

json形式でioBridgeコントローラ情報を取得することが可能。例えば自分のioBridgeコントローラの情報を取得する場合は、下記クエリを投げてデバイス情報を取得する。
http://www.iobridge.com/api/feed/key=v3KAtozHaCZAMDEuHB

{
        "module": {
            "serial": "24000142",
            "label": "Module 24000142",
            "lat": "",
            "long": "",
            "location": "",
            "datetime": "Feb-21-2009 03:14:17 AM",
            "status": "Online",
            "channels": [
            {"channel": "1", "label": "Channel 1", "AnalogInput": "0", "AnalogInputRaw": "0", "AnalogInputScale": "Raw", "DigitalInput": "0", "DigitalInputState": "0", "DigitalOutput": "0", "DigitalOutputState": "0"},
{"channel": "2", "label": "Channel 2", "AnalogInput": "302", "AnalogInputRaw": "302", "AnalogInputScale": "Raw", "DigitalInput": "On", "DigitalInputState": "1", "DigitalOutput": "Off", "DigitalOutputState": "0"},
{"channel": "3", "label": "Channel 3", "AnalogInput": "0", "AnalogInputRaw": "0", "AnalogInputScale": "Raw", "DigitalInput": "0", "DigitalInputState": "0", "DigitalOutput": "0", "DigitalOutputState": "0"},
{"channel": "4", "label": "Channel 4", "AnalogInput": "352", "AnalogInputRaw": "352", "AnalogInputScale": "Raw", "DigitalInput": "On", "DigitalInputState": "1", "DigitalOutput": "Off", "DigitalOutputState": "0"}]
        
        }}

これを応用し、ioBridgeサーバの温度センサーの情報を取得しグラフ表示するようなことも可能: ioBridge Server Temperature

API: デバイスの制御

まだAPIらしいAPIが整備されている段階ではない。デバイス制御はwidgetごとに定義されているスクリプトを元に操作ロジックを書いていくことで行う。

<script type="text/javascript">document.write(unescape("%3Cscript src='" + "http://www.iobridge.com/widgets/io.js?WH0Ng8OIC2B6' type='text/javascript'%3E%3C/script%3E"));</script>

サーボ(Variable Servo Position Widget)の場合は、下記のようにwidgetGetString、widgetSetStringをコールすることでサーボモータの操作ができる(参考:http://www.iobridge.net/forum/index.php/topic,94.0.html)。

<html>
<title>Servo Control Example</title>
<head>

<script type="text/javascript">

function moveServo(widgetID, direction, distance){
  
  distance = parseInt(distance);
  current = parseInt(widgetGetString(widgetID));

  if (direction == "CCW") {
       distance = current-distance;
  }
  else {
       distance = current+distance;
  }

   widgetSetString(widgetID, distance);
	
   current = Math.round(29 - (current - 800) * 60 / 500);
	
   document.getElementById("ServoPosition").innerHTML = current + "°";
}

</script>
</head>

<body onload="moveServo('mfwa3qcO79m8', 'CW', '0')">
<iframe name="livecam" id="livecam" width="320" height="240" src="http://www.picobay.com/fishcam/inside.html" frameborder="0" allowtransparency="false" scrolling="no" ></iframe>
<br><br>

Click the arrow buttons to move pan the camera.
<br><br>

<form><input type="button" Name="CamLeft" Value="<-" onClick="moveServo('mfwa3qcO79m8', 'CW', '200')"><input type="button" Name="CamRight" Value="->" onClick="moveServo('mfwa3qcO79m8', 'CCW', '200')"></form>

Camera Servo Positon = <a id="ServoPosition"></a>

<div id="ioWidgets" style="display:none;">
<script type="text/javascript">document.write(unescape("%3Cscript src='" + "http://www.iobridge.com/widgets/io.js?mfwa3qcO79m8' type='text/javascript'%3E%3C/script%3E"));</script>
</div>

</body>
</html>
お試し:ioBridgeでホーム監視システムの作成

以上を踏まえれば、webカメラサーボモータをつけることで、遠隔操作可能なWEBカメラシステムを簡単に作成することができる。配信はustreamを利用し、WEBカメラの操作はioBridgeサーバを介したJavaScriptコードを書くことで実現する。
ホーム監視システムサンプル: http://hirayama-sosuke.appspot.com/

その他: ioBridgeの応用例

ioBridge Gun Shooting!
WiiリモコンとPCをBluetooth接続し、そのアクションをサーボWidgetを通して操作するというもの。

ioBridge Fish Tank monitor

ioBridge Dog Toy

その他:関連図書

Making Things Talk ―Arduinoで作る「会話」するモノたち (Make:PROJECTS)

Making Things Talk ―Arduinoで作る「会話」するモノたち (Make:PROJECTS)

*1:サーボコントローラは別途購入:SANWA SX-101z

Yammerクライアント「Yammyy」公開

TechCollab2009-02-08


Yammerクライアント「Yammyy」を公開してみた。: http://www.yammyy.com/

Yammerとは?

Yammer is a microblogging service launched in September 2008. Like twitter, it allows users to post updates of their activities, follow others update, tag content, and create memes. Unlike Twitter, Yammer focuses on business, and only individual with the same corporate email address can join a given network.

上の引用の通り、Yammerとはエンタープライズにフォーカスしたミニブログサービスである。ドメイン単位でグルーピングされたtwitterのようなものと思ってもらえたらよいだろう。会社でのことはなかなか外で話してはまずいようなこともあるのでtwitterには書きづらい、でも色々とつぶやきたい!そんな時にはYammerは大変に役立つ。自分も最近ではTwitterへのポスト数よりYammerへのポスト数の方が格段に多い状況になっている。twitterにグルーピング機能を付与したhttp://twicco.jp/というサービスもあるがこれは色々めんどくさいのであまり使っていない。

Yammyyとは?

このようなYammerだが、twitter同様APIも公開され、自由にクライアントを実装することが可能である(Yammer Developer Site)。Yammerからもさまざまなクライアントが公開されているが、プロキシ環境では利用できない状況であったので、気分転換がてら(最近仕事ではお金儲けの話ばかりで、ソースを書くことも見ることもなくなってしまった;)このAPIを使ったYammerクライアント「Yammyy」を実装してみた。ソースもここで公開している。
正直、行き当たりばったりで作ったアプリなのでソースはとても人に見せられるようなものにはなっていないが(デバッグもまともにしてない)、とりあえずWPFやOAuthの実装のサンプルとして見てもらえたらよいと思う。下はYammyyの動画。

社会の軸にとらわれず自分軸を持ち続けることの大切さ

一昨日2月4日、偶然にも自分の誕生日なのだが、大学時代の後輩が自殺したという連絡をもらった。心からサックスを愛している子で、音大に入りなおして、今年3月に卒業するはずだった。とっても明るい子で、サックスが好きで、自分もその明るさが凄い好きだったしサックスへの真摯さも影響を受けた。自殺ということには非常に驚いたし、2日たった今でも実感が沸いていない。実は普通に元気に生きていて、明日にでも「せんぱーい」と親しく話しかけてくれそうな気もしている。しかし、もう彼女はいない。振り返ってみると確かにそのような兆候は見せていた。音大に入る前あたりから普段とても明るい子なのに時々陰りを見せるときもあった。一年前に会った時にもっと注意深く話かけてあげたら、こんなことにはならなったのかもしれない。

連絡を受けて必死に彼女の死に際に何を思っていたのかを考えてみたが、おそらく傍から見たら大したことのないと思うような悩みだったかと思う。しかし、本人にとってはとてもとても辛くてどうしようもないような悩みだったのだと思う。自分にももちろんそういう時はあって、孤独で、不安で、辛くて、呼吸困難になって、という時はある。最近は違う業種の人とも色々と話すようになったが、彼ら彼女らも同様で皆色々な悩みを持っていて、本当に辛そうに話す人も結構いる。しかし世界の中にはもっともっと辛い環境で、でも頑張っている人々はたくさんいるはずだ。上司が分かってくれないだ、会社に風潮が悪いだ、10年後の生活が不安だ、などということで悩むなんて大したことはない。とはいっても、その悩んでいる人にとってそれがすべての世界であってとても辛いことなのだと思う。

学のある人(自分は学がない部類だが)は、特に生真面目な人も多いので注意が必要かもしれない。もっと自分らしく、何とかなるんじゃね、ぐらいの勢いと、度胸、そして自分らしくわがままに生きるという意思が大事だと思う。特に(俗にいう)頭のいい方々はここらについて真面目だから注意した方がいいかもしれない。自分に関しては、大学時代や入社2-3年目あたりはもう空気読めないことなんか関係なしに自分の意見を主張してそれを実現しようとしてきたのだが、4年目の今、その勢いがなくなっているのを切実に感じる。世渡りがうまくなったといえばそれまでの話だが、自分の軸が弱くなって社会軸で物事を考える癖がついてきてしまっている。もっと、特に社会的な権力を持っていない若者は、社会軸とは異なる自分軸をしっかりともってわがままに生きていくべきだと思うし、自分もそうやって生きていきたい。

最後に、鈴華、本当にごめん。もう一度一緒にサックス吹きたい。こんな悩みを持っている人達を少しでも変えられるような場を生み出したい。

「gooラボ ネットの未来プロジェクト」ブロガーミーティングへの参加

TechCollab2009-02-05


gooラボ ネットの未来プロジェクト」ブロガーミーティングというものに参加した。

[告知内容]
2月5日(木)に「gooラボ ネットの未来プロジェクト」ブロガーミーティングが開催されます。今回のテーマはレコメンデーションです。
ネットのレコメンデーションについても研究しているNTTレゾナントさんの新技術実験室『gooラボ』と店員さんによるポップなどリアルなレコメンデーションで音楽ファンを掴む『タワーレコード』が、対談形式でディスカッション行うスペシャル企画です。
この機会に、案外語られることのないレコメンデーションの未来についてネットとリアル双方から一緒に考えてみませんか?

レコメンデーション(Attention Aware分野)については未踏の時のプロジェクトにも色々と考えてきたが、やはり興味のある分野ということで参加表明。イベントはタワーレコード渋谷店 B1Fで開催され、レコメンデーションの技術研究を行っているgooラボのメンバー二人と、リアルなレコメンデーションを業務として実践しているタワーレコードの店員さん二人とのディスカッション形式でのイベントであった。

レコメンデーションとは?

まずは、gooラボの方からレコメンデーションについての概要説明が軽く実施された。レコメンデーションシステムとしての要素は大きく、1.取り方、2.精度、3.出し方があるとは思うが、取り方と出し方が重要だと思っている。とはいっても、具体的な方法については模索中であるので、タワーレコードさんに色々と聞きたい。

タワーレコードにおけるレコメンド

基本的に推薦する楽曲はバイヤーの勘で選ばれる。ある程度レーベルやアーティストで振るいは掛けるものの最終的には勘で選ばれる。そしてバイヤーに推薦されたものは段階的にプッシュされていく。そのプッシュ(レコメンンド)の中で重要なものの一つとしてアイキャッチがある。これにはバイヤーの思いが込められている。タワーレコードでは思いのこもったレコメンドを提供している。手書きにすることで思いが伝わり、リアルな店員を想像することができる。

以上のパネルディスカッションの後、参加者によるグループディスカッションを実施。ディスカッションの後、各代表者がグループの意見をまとめて発表した。

グループディスカッション
  • ディスカッション1: WEBとリアルなレコメンデーションの違いは何だろう

色々な発表がされがが、個人的には「有機と無機」「人か機会」かだと思った。タワレコードのレコメンド(アイキャッチ)の後ろには店員さんの顔と熱い思い、専門性が見える。しかし現在のレコメンドではそれが見えない。


  • ディスカッション2: 魅力的なレコメンデーションって何だろう

例えばAmazonで購入してその後にこれがお勧めといきなり言われても、お勧めしている対象がわからなくていやだ。それよりもお勧めしてくれている人の顔が見える方が安心できる。この製品を買った人に対してお勧めする一般的な製品は紹介してくれるが、あくまでも一般的の製品を紹介してくれるだけ。もっと不確定な要素がほしい。これはリアルならばできること(ex. 目的もなしのぷらっと散歩してたらいいもの見つけた)。


感想

久しぶりのイベントの参加だったが、とても皆さんの意見も聞けて大変興味深い時間を過ごすことができた。未踏の時は、購買情報リンクによるレコメンドだけでなく、デバイスも発達しているのだから、もっと物理的な要素を多方面に分析すればいいのではと思い、特にロケーション情報(ロケーションというよりもスペース)を利用して、「同じ空間にいる人は興味が一致しているはず」という論理のもとレコメンデーションを検討していた。しかし、マーケッターに意見を聞くと大抵それだと弱いといわれる。メーカとしては、30代前半男性子持ち(男の子二人女の子一人)などの細かいセグメントに対して情報をプッシュしたいものだ、と。小売などはそれを解消するためにポイントカードを用意してうまく購買分析とそれに基づくマーケット活動をしている。しかし、ウェブはこの世界には介在できない。魅力的なレコメンデーションはウェブ、リアル(デバイス)、人の三点がうまく融合できた場合に実現できるものではないかと思う。あとはビジネスモデルの問題。例えば、Amazonなどのサービス側で、成長可能なパブリックレコメンデーションを用意、小売(タワレコードなど)がノウハウを提供、その小売のノウハウを通じて売れた場合は、2:8で小売にマージンが入る、など。ここらへんは休みの日にでもゆっくりと考えていきたい。

SilverlightでPresentation! - Page Navigation -

ネタ元:HugeDomains.com - Shop for over 300,000 Premium Domains

引き続きSilverlightのお話*1Silverlightで実装をしているとついつい面倒に思ってしまうのがページ遷移の管理である。簡単なサンプルアプリや、Silverlightをコントロールの一部として実装する際には問題ないが、本格的にSilverlightオンリーのサイトを開発するとなると複数ページをうまく遷移させて構成したいというケースが多々ある。そのような場合にページ間の遷移をうまく管理できるクラスを上のサイトでは公開している。これを使えば下のようなSilverlightでプレゼンテーションを実現するようなことも簡単にできる(Silverlight2 Beta2ランタイム要)。SRCはこちらから。
ここでは軽い紹介のためブラウザリサイズ時の考慮はしていないが、対応する場合は前回のエントリを参照のこと。こうしてみるとSilverlightベースのプレゼンツールなんていうものはあっさりと一日程度で作れてしまうと思うので興味のある方は是非!

http://viralfeed.net/sample/silverlightnavi/

WCFでのRESTfulサービス

WCFでのREST実装とサービスへのアクセス」についてのエントリを書いてみようと思ったが、他に書いている方がいたので省略。以下、参考リンク。
2008-01-31

RSS Collaborator 次期バージョン開発を開始!

以前に開発したRSS Collaborator(参考リンク)とViral Feedを、コンセプトを練り直して次期バージョンとしてスクラッチから開発をしてみようと思う。次期バージョンでは「情報のよりシームレスな流通」「サポートプラットフォーム拡張」「P2Pフレームワークの強化」ということを肝として開発を進めていくことを考え中。ある程度まとまったらソース一式を公開する予定。

*1:P2P関連や、GoogleAPI関連、iPhone開発など書きたいネタはあるが時間が都合上ついつい書きやすいネタになりがちなのが最近のパターン。。。

Windows Live Agents SDKでボット体験

TechCollab2008-06-08


先日LiveSDKのドキュメント日本語化というプレスリリースがされていたこともあり、久しぶりにLive SDKについて軽くサーベイしてみた*1。Live SDKViral Feedでも色々と使っている(Messenger API, Live ID API, Virautl Earth API)が、今日は先月末にSDKが公開されたLive Agentsについて書いてみようと思う*2

Live Agents とは?

Windows Live Agents are chatterbot agents for Windows Live Messenger that is part of Microsoft's Windows Live services. They provide users the ability to interact with the agents through Windows Live Messenger to get more information about specific topics.

Wikipediaからの抜粋。ここにあるとおり、Live Agentsとは人工知能分野の成果としてのチャットボットエージェントサービスである。ここからVisual Studioプラグインをダウンロードし、インストールすることでLive Agentsの開発を行うことができる。

Live Agents SDKを使ってみる

プラグインインストール後Live Agents開発用のテンプレートが追加され、これをベースにLive Agentsの開発を行う。

プロジェクトを開始するとデフォルト状態においても様々なファイルが展開される。各ファイルのフォーマットと用途についてはこちらを参照のこと。

この状態で手を加えず早速エージェントをデバッグ実行してみると、次のようなConversionコントロールとComprehension Infoコントロールがアクティブになりエージェントと会話してみることができる。

このエージェントはよくできていて、英語に限らず日本語、中国語など様々な言語に対応している。下記の通りなかなか面白い(笑える)会話が楽しめる(太字がエージェントの回答)。

>Hi!
What's up?
>Who r u?
I'm change_me_agent! I'm a smart computer that you can chat with about all kinds of things.
Type "?" to see what I can do.

>What's your name?
change_me_agent.
>How old are you?
I'm an adult. I don't like to talk about my age.
>oops..
What's wrong?
>No, good.
I'll get over it.
>bye. see you.
OK. Later!

>こんにちは
こんにちは。
>名前は何ですか
すみませんが、言っていることが理解できません。
>今何をしているのですか
日本語はまだよく話せません。
>年齢は?
日本語は好きですが、まだよく話せません。
>一、二、さんっ、四
すみませんが、言っていることが理解できません
>世界のなべあつ
日本語は好きですが、まだよく話せません。
>さようなら
日本語はまだよく話せません。

>晩上好
我?出生,跟我??可不可以??一点,不要那???。下次?再跟我聊,就会??我??的了。
>謝謝
我可不可以不回答?因?...因?我不会回答。

Agentをカスタマイズする

カスタマイズしなくても十分に楽しめるがSDKという以上実装方式を抑えておく。Live Agensのカスタマイズは基本的にBuddyScriptという独自言語により実装していく。BuddyScriptシンタックスこちらを参照。試しに追加してみたBuddyScriptと実行結果は下の通り。ここですばらしいことはBuddyScriptで定義した文章の意味を解釈して判断してくれるということ。例えば"Who are you?"を"Who r u?"としても同じアクションをしてくれる。

##
## Customized BuddyScript
##
? Who are you?
 - Sosuke Hirayama. Software Developer and Saxophone Player. Nice to meet you!
 
? How old are you?
 - Sorry, it's secret.

? What's your favorite?
 - I live music very much, especially Jazz. I play the Saxophone!

>Who are you?
Sosuke Hirayama. Software Developer and Saxophone Player. Nice to meet you!
>who r u?
Sosuke Hirayama. Software Developer and Saxophone Player. Nice to meet you!
>how old are you?
I'm an adult. I don't like to talk about my age.
>what's your favorite?
I live music very much, especially Jazz. I play the Saxophone!
>good!
Excellent!

BuddyScriptは上のような単純なものだけでなく、様々なアクションを記述することができる。以下はhttp://windowsliveagents.spaces.live.com/からの抜粋。

  • BussyScript Sample 1
###
### Play Trivia
###
? Play trivia
  - Let's play trivia
    in what year was the Eiffel Tower built ?
    in 1889 {action=Right()}
    in 1943 {action=Wrong()}
    in 2001 {action=Wrong()}
    You have 30 seconds to answer
  NID = notify in 30 seconds: action TimeOut()
  ? 1889
  action Right()
    - That is correct!
  ? 1943
  ? 2001
  action Wrong()
    - Nope, the correct answer is 1889.
  action TimeOut()
    - Too late, the correct answer is 1889. 
  • BussyScript Sample 2
###
### Kitchen Timer
###
declare procedure Ring()
variable KITCHEN_TIMER_NOTIFICATION = ""
? Kitchen timer
  - Ok, I'm setting up the time, how many minutes do you want ?
  ? DELAY=Integer
    - Alright, I will notify you in DELAY minutes
    KITCHEN_TIMER_NOTIFICATION = notify in DELAY minutes: Ring()

? Cancel Kitchen timer
  if KITCHEN_TIMER_NOTIFICATION = ""
    - What timer ?
  else
    cancel notify KITCHEN_TIMER_NOTIFICATION
    KITCHEN_TIMER_NOTIFICATION = ""
    - Done.

procedure Ring()
  - DRRRRRRRING !!!!!
    Your time is up!

  KITCHEN_TIMER_NOTIFICATION = ""
  if SYS.Conversation = SYS.User.Conversation
    // This is the user conversation
    - Do you want to snooze ?
    ? Yes
      KITCHEN_TIMER_NOTIFICATION = notify in 5 minutes: Ring()
      - Will ring again in 5 minutes.
    ? No
      - Fine.
  else
    SAVED_USER_CONV = SYS.User.Conversation
    set user conversation
    - To give an extra 5 minutes, type "snooze"
    ? Snooze
      KITCHEN_TIMER_NOTIFICATION = notify in 5 minutes: Ring()
      - Will ring again in 5 minutes.
    ? =AnythingRaw
      forward query SAVED_USER_CONV
    set user conversation SAVED_USER_CONV 
Agentsサービスをデプロイする

作成したエージェントサービスはPartner Hosting Infrastructure(PHI)によりMicrosoftのインフラ上で展開することができる。サービスの登録はこちらから。しかし登録したらすぐ展開されるというものではなく、審査を行った後に公開が可能になるようだ。また、Live Agentsのサービスは様々なプロトコル(AIM/ICQ, Yahoo, IMIP, Jabber, XMPP, RVP, etc...)上に展開することが可能なようで、Live Mssengerでのボットサービスに限定されたものではないようだ。つまり、Live Agents SDKで作ったボットサービスをXMPPで展開しGoogle Talkから利用するということも可能であるようだ。

感想

いやー、技術は確実に進歩していますね。

おまけ

かなりかっこいいオンラインプレゼンテーション作成サービスがあるのを知ったのでここでご紹介(サンプルはこちら)。
http://280slides.com/ via ブログ | 株式会社クリーム | グラフィック & Webデザイン

*1:そろそろMSネタじゃない、溜まってきたネタを書きたいのだが。。。

*2:軽いサーベイした結果の基づいて書いているので間違いがあった場合はすいません。あったら指摘をよろしくです。