May - 28th
Yahoo Japan APIの文章校正を試す
Posted at 11:14 pm | Filed Under PHP, Web Services
というわけで、先日遊んだ形態素解析に引き続き、今度はYahoo Japanの校正支援を使ったデモを作って遊んでみた。APIの詳細はこちら。
まだServices_Yahoo_JPには校正支援用の機能は実装されていないようだったので、形態素解析の中を見てちょろっと変えたらすぐに動いた。問題ないようなら後で投稿しておこう。
単純なAPIなので、filterを指定してあとはレスポンスを待つだけ。
<?php
require_once 'Services/Yahoo/JP/V1.php';
try{
$yahoo = Services_Yahoo_JP_V1::factory('kousei');
$yahoo->withAppID($app_id);
$yahoo->setSentence($keyword);
$yahoo->setFilter('1,2,3');
$result = $yahoo->submit();
} catch(Services_Yahoo_Exception $e){
$error = '接続に失敗したような気がします。';
}
$xml =& $result->xml;
if(count($xml)){
foreach($xml as $k => $row){
print_r($row);
}
}else{
print('正しい日本語みたいです。');
}
?>
こんな感じで実装できる。あんまりYahoo側の仕様がわかっていないから、とりあえず動いたところで放置している。
May - 22nd
Yahoo JapanのAPI、まめな病人
Posted at 1:04 pm | Filed Under Apache, PHP, Web Services
ブスコバンのアレルギーらしく、健康診断が終わってからずっとひどい頭痛だ。今日はちょっと家で休んでいる。
Yahoo JapanのAPI用に既存のPEARパッケージを拡張したServices_Yahoo_JPがある(作者サイト)。面白そうなのでさっそく使ってみた。
テキスト解析はこんな風に使える。例えばテキストの読みがなを取得する。
<?php
require_once 'Services/Yahoo/JP/MA.php';
$keyword = 'これは日本語です。';
$app_id = 'Your APP ID';
try{
$yahoo = Services_Yahoo_JP_MA::factory('parse');
$yahoo->withAppID($app_id);
$yahoo->setSentence($keyword);
$result = $yahoo->submit();
} catch(Services_Yahoo_Exception $e){
$error = 'すいません、YahooJapanに接続できませんでした。';
}
if($result){
$xml =& $result->xml->ma_result->word_list->word;
foreach($xml as $key => $val){
print($val->reading . "\n");
}
}
?>
なるほど。で、何か面白いことでもできないかと考えたが、Yahooから戻ってくる読みがなをさらにローマ字に変換して、Mac OS Xに付属のsayコマンドで読み上げてみるのはどうだろう。
$ say -o 出力ファイル "読み上げるテキスト"
上の書式で変換できるので、フロントエンドのPHPと連携してみれば簡単だ。
そこでふと思いついた。sayコマンドは声の指定も可能なのだが、プリセットされたデータには歌いながらしゃべるパターンもあったはずだ。それを指定すれば、入力したテキストを歌うこともできるじゃないか。
$ say -o 出力ファイル -v "声のパターン名" "読み上げるテキスト"
そうと決まれば話は早い。というわけでデモを作成した。(Proof of conceptということで無茶なことはしないでくださいね)
テキストが入力されると、バックエンドのMacBookにHTTPで通信してプロシージャを呼び出し、MacBook側はテキストを元に音声ファイルを作成してMP3に変換、最終的に作られたファイルをDocmentRoot以下に設置してファイルのパスを返す。フロントエンドのウェブサーバにリバースプロキシでMacBookのローカルファイルにアクセス可能にしてあげていっちょあがり。文字で書くとややこしいが、図にするといたって単純。

追記:Yahoo JapanのAPI側で数字の読み方は返してくれないみたいだ。
Dec - 30th
37signalsのシステム構成
Posted at 1:41 am | Filed Under Ruby, Web Services
37signalsといえば、Getting Realにこんな一節がある:
まだ発生してもいない問題のために時間を費やすな
ユーザーが10万人に達するのに2年かかると予想されるのに、今日10万人のユーザーを想定する必要があるのだろうか?今は3人のプログラマーがいれば事足りるのに、8人を雇う必要があるだろうか?
今は2台のサーバーでまかなえているのに、12台を準備する意味があるのだろうか?
とにかく進めよう
起こってもいない問題の解決方法を考えるために、人は時間を費やしがちです。そんなことに意味があるか! 私達がBasecampを開始したときは、顧客に請求書を送る手はずすら整っていませんでした。しかし1ヶ月サイクルで請求を行うことになっていたので、(サービスが開始してから)30日間の猶予があることはわかっていました。もっと緊急な問題を解決するためにサービス開始までの時間を費やし、私達が請求書の問題に取り組み始めたのはサービス開始後でした。 請求書の発行はうまくいきました(それにこのおかげで、シンプルな解決策をとることができたわけです)。
そして、いまや同社のサービスはBasecampのアカウントが200万、ユーザのアップロードしたファイルが5.9テラバイトという規模になった。つまり、問題は発生したわけで、じゃあどんな対応をしたのかというのが上の記事なわけだ。そう考えるとなんだか興味深い。
Dec - 21st
Services_Amazon、SimpleDB
Posted at 12:42 am | Filed Under Web Services
PEARのServices_Amazonが更新されてHTTP Proxyに対応していたのでさっそくアップデートした。それにしても、この更新がwarlus経由だったとは知らなかった。パッチを投げてるし偉いなあ。
ところで、アマゾンといえばSimpleDBなわけで、いくつかメモ。
PHP Classesにさっそくあがっている。中身未見。
もし、データベースがサービスのコアに関わるのであれば、これをメインに使うのはバカげている。それに、そもそもこれはリレーショナルデータベースですらない。でも、単純にメンテナンスしなくてもいいデータベースが必要なだけだという場合は、高可用性のデータベースを簡単に手に入れることが出来る利点がある。サービス規模が小さければそれなりに、大きくなれば相応の金額で使えるところもいい。
Oct - 15th
人生トラッキング
Posted at 2:03 pm | Filed Under Web Services
今なにをしているかトラッキングしたりとか、今なにを注目しているかトラッキングしたり、そもそも会話をログに残すのだからメッセンジャーもトラッキングしているものだと考えると、これらの隆盛をおもえば自分の行動を記録するというのは結構面白いことなのかもしれない。なら、いっそ全部をまとめてしまうのはどうだろうか。
アカウントを作成すると、基本的なデータを入力して準備が完了する。そこで、用意されたウィジェットを自分のアカウントに追加する。ウィジェットには「食べたものトラッカー」「移動トラッカー」「お金トラッカー」などなどがあって、追加すると必要に応じて基本情報を追加し、あとはそれぞれに応じた入力フォームが表示される。例えば食べたものトラッカーは身長と体重などが登録され、食べたものを簡単に入力できるようになっている。有名な店舗や商品ならちゃちゃっと選択してカロリーや栄養素まで計算してくれる。家計簿トラッカーなら、月次の収入と定期的な支出が基本情報で、あとは収入と支出を簡単に入力できる。それぞれ統計画面がポンと表示される機能もあって、ほかのユーザの統計から順位くらい出てもいい。「ラブトラッカー」というのもあって、文字通り性愛のトラッキングが出来る。ほかのユーザを招待、なんて機能があったりするともっとエロいかもしれない。回数、場所、相手、体位、なんでも記録できる。ウィジェットの追加用APIを公開すれば、ユーザ側で面白いものを作ってくれるかもしれない。トラッカー毎のコミュニティがあればそれはそれでSNSになるし、全体的な統計データはかなり面白いものになるだろうから、それを引っ張りだすアイデアも出てくるかもしれない。それぞれのウィジェットの使いやすさが肝だろう。
というのを考えてみた。
May - 29th
緯度経度から地名を検索
Posted at 6:17 pm | Filed Under Google, PHP, PostgreSQL, Web Services
Google Maps APIでは住所から緯度経度を取得することは出来るが、逆に緯度経度から地名を取得するのは無理なのだろうか。ざっと仕様を眺めたところではそんな機能はないみたいだ。
#追記:可能になったらしい。
猛烈に腹が立ってきたので測量やら何やらについて調べる。そういえば、そもそもPHPにはGoogle Map APIを扱うPEARのライブラリがない。
PostgreSQL + PostGISで何か出来ないかと、国土地理院の「街区レベル位置参照情報ダウンロードサービス」を調べてみた。これなら、緯度経度から近接する街区レベルの情報が取れるのではないか。
さらには、PostLBSを使って緯度経度から割り出した単純な距離ではなく道のりで距離を絞り込んで検索、なんてこともできるかもしれない。
もっとも、商用サービスとしては地図データのメンテナンスが難しそうなのと、もしデータの整合性に問題があったときの対応が面倒なので、やるなら公開するのが一番かも。