2009年 6月 の投稿一覧

Web+DB Press Vol.51

今月発売。

今月も興味深い。
デプロイ・ファイル転送の特集は役立つ。
あと個人的に「Vimで最速PHP開発」は、ほぼ素でVimを使い続けている自分にはとてもためになる。*1
早速ステータスのラインを出すところから設定を変更。こりゃ、なんで今までこうしてなかったのかと思うくらい必須機能だな。
autocomplpop.vimも設定してみたのだけど、自動補完が行われない。Mac版のgvimなのだが、多分何かとちってると思われるところ。
少しずつでも環境整えたい。

*1:せいぜい行番号出す程度の変更しかvimrcに加えていなかった

Nabaztagと戯れる その2

そういえばNabaztagは通信をどの様に行っているのだろうかと気になったのでパケットキャプチャしてみた。
簡単にみたところプロトコルはJabber(Extensible Messaging and Presence Protocol)みたい。
f:id:hideack:20090628141707p:image
確かにnabaztagの性格上あってるかもしれない。

Nabaztagと戯れる(その1)

まず、これから。
これは、あるAPIPHPでラップしたクラスをコールしたもの。

<?php
require_once('Nabaztag.php');
$alfons = new Nabaztag();
$alfons->serial = "xxxxxxxxxxxx";
$alfons->token  = "**********";
$alfons->say("テスト");
?>

これを実行すると、こうなる。

ウサギがしゃべるんだな。
これはフランス発のウサギ型ロボット「Nabaztag(ナバズタグ)」(http://www.nabaztag.com/)。
先週末、April氏*1と新宿に出た際に思わず衝動買い。
おかしいな、掃除機か洗濯機を買い替えるつもりだったのに...。
紹介は、ASCIIの記事とか、impressの記事を参照。

基本的には、Nabaztagを購入するとhttp://my.violet.net/ というサイトのアカウントの開設ができて、そこへNabaztagの固有ID等を登録するとRSSフィードの読み上げやポッドキャストを行う事ができる様になっている。
RSSフィードの読み上げ等々はサイト上にアプリケーションとして登録されていて、その一部になるのだけどこれ以外にも目覚まし時計や天気予報といったアプリケーションもある。基本的にアプリケーションはすべてこのviolet.net上に登録されていて、普通に利用する場合はこのサイトから利用するものを自分が所有するNabaztagに登録してあげるという形になる。
一応日本語も読み上げ対応。少しロボットボイスで「もやもやさまぁ〜ず2」のナレーションみたいですが…。

で、個人的には既に興味があるのは、制御用のAPIだった訳でありまして...。
仕様は公開されているので、簡単にプログラム可能。
なので、まず今朝このAPIをラップするクラスを作成。*2

PHPでラップしたので、サーバ上において定点監視させたり、イベントが起きたときに自分のナバズタグを制御できる。
例えば、このblogを誰かが開いたときに自分のnabaztagを動かす様にすると以下の動画の様になる。
*3
以前作ったカウンターをトリガーにして動く様になっていて、blogの右側のフレームの一番下にある"f"の画像を読むと別のサーバにリクエストが飛んでいるので、そこから更にnabaztagAPIにリクエストを投げているという話。

他にも直接音声ファイルを指定してnabaztagに再生させることもできる。
たとえば、TBSラジオの某番組のpodcastを再生させる場合は、今回作ったラップクラスを利用すると、

<?php
require_once('Nabaztag.php');
$alfons = new Nabaztag();
$alfons->serial = "xxxxxxxxxxxx";
$alfons->token  = "**********";
$alfons->playMp3("http://podcast.tbsradio.jp/nichiten/files/20090621.mp3");
?>

とすればよい。すると、nabaztagはネットワーク上のmp3ファイルをダウンロードして再生してくれる。

もう少しこのラップクラスに機能を足して、既存のAPIで設定できるウサギの耳のアクション等もラップクラスから設定できる様にするつもり。一通り落ち着いたら公開するかなぁ。多少車輪の再発明な感もなきにしもあらずだけど好きでやってるから。
がっつり書いて作ったのは、まずサーバ監視だったりするところがナニな感じですが、まぁ、いいか。
土曜の午前中の正しい使い方ができた。そして、午後からは仕事です。なんだか...。

*1:はてなIDを持たないのにID名の様な形で頻出の友達

*2:元々のものがシンプルなので、ほとんど必要ない気もする

*3:一日のPVがたかがしれてるのでできるデモである...

偶然

今日は都心界隈で仕事だったので、そのまま直帰。
帰宅すべく電車に乗っているとid:its-tomからメールである。
…なんと同じ電車だった。仲がどんだけいいんだ。おぃ。

私はお客さんと少し食べたり飲んだりしていたので、ノンアルコールの飲み物だけでお付きあい。

すけさま

blogみて驚いたぁ。なんと、id:sukerock07が結婚するようだ!!

うん。よかったよかった。
というか、今から挨拶ということはこの週末が一番緊張するときなのではないか?*1
しっかり挨拶してくるよーに。
そして、お嫁さんを幸せにするよーに。
なんか、お前に言われたかないとツッコミ入れられそうだが、まぁ、いいのだ。めでたいからいいのだ。

そして、やっぱり今年はお祝いイベント発生が多いなぁ。
そういう年頃なのかしら。ともかくいいニュースだ。

*1:教えて経験者

二日酔い

昨日は日曜日なのに深酒をしてしまい、今朝から二日酔いである。ううむううむ。
しそ焼酎「鍛高譚」(たんたかたん)にやられた。タンタカタンめ。カタカナで書くとなんか金属的だな。
帰宅するとき新宿で電車に乗ったところまでは覚えているものの、見事に熟睡し、降りる駅を通り越してなんとか薄い意識の中、自分が降りるべき駅へ。
そこから…。どう帰ったのだか…。

会社に行く前に500mlくらい水を飲んだら見事に会社に着くころ気持ち悪くなり、朝一番からトイレにお世話になる。
消化できてないなぁ。っていうか弱くなったなぁ。新三共胃腸薬を飲んでお昼には回復。
多分、個人的にいろいろあって鬱憤が溜まっていたので飲みすぎた。気がする。

今日のひとことたち

http://h.hatena.ne.jp/hideack/ の一言まとめ

  • 19:34:00 ラーメン屋新規開拓。が、かなり残念な結果に終わる。
  • 15:25:00 趣味プログラム中。平穏だ。
  • 09:03:00 アパートの工事で屋根を人が動く、足音が響いて目が覚める

Yahoo!の日本語形態素解析API

Yahoo!の日本語形態素解析APIを使ってみる。
利用にはあらかじめアプリケーションIDの登録が必要。利用の条件は、

  • 日本語形態素解析Web APIは、24時間以内で1つのアプリケーションIDにつき50000件のリクエストが上限
  • また、1リクエストの最大サイズを100KBに制限しています。

等々。詳しくは、このページあたり参照。
で、アプリケーションIDを取得した後、早速PHPで使ってみる。

<?php
/**
 * Yahoo!形態素解析APIサンプル
 */
require_once 'HTTP/Request.php';
$yahooappid = "foobar..."; // ここにYahooから取得したアプリケーションIDを記載。
// --- 形態素解析対象の文章と文字コード変更
$sentence = "PHPは、HTML埋め込み型のサーバサイド・スクリプト言語として分類される。この言語処理系自体は、C言語で記述されている。";
// --- API呼び出し
$url = 'http://jlp.yahooapis.jp/MAService/V1/parse';  // APIのコール先
$request = new HTTP_Request($url);
$request->addQueryString('appid', $yahooappid);
$request->addQueryString('sentence', $sentence);
$request->addQueryString('results', 'uniq');
$request->addQueryString('filter', '9');    // 名詞でフィルタ
if (PEAR::isError($request->sendRequest())) {
die('request failed');
}
$resp = $request->getResponseBody();
$wordscun = array();
$xml = new SimpleXMLElement($resp);
foreach ($xml->uniq_result->word_list->word as $wd) {
printf("%s (count:%d)\n", $wd->surface, $wd->count);
}
?>

こんな形で良いのではないだろうか。
出力結果は次の様になる。

/Users/hideack/pj/feeddown2/ex% php yahooapi.php
言語 (count:3)
HTML (count:1)
PHP (count:1)
サーバ (count:1)
スクリプト (count:1)
処理 (count:1)
分類 (count:1)
埋め込み (count:1)
自体 (count:1)
記述 (count:1)

サンプル中の文書が解析されて名詞のみが抽出されている。
処理対象文書が少ない場合、あるいは、レンタルサーバ等々の事情でchasen等々が導入できない場合は便利なのではないだろうか。

焼き肉(ホルモン)

id:its-tomまた食べに行った。
f:id:hideack:20090618203855j:image
うん。まぁ、美味しいからいいか。
あと、私がギブアップになっても彼は2皿更に注文していた。なんか多少しか歳は離れていないはずなのだけど、妙に年齢差を感じた。