2003-04-13
_ Mozillaが“不死鳥”Phoenixになる――? from ZDNet (13:49)
確かに最近のMozillaはまるでマイクロソフトアプリみたいに巨大になっていたからなー。安定性やメンテナンス製が高い小さなモジュールの組み合わせによって、トータルで高機能を実現するアプローチを取った方が、IEとの差別化も進むし、オープンソース文化との親和性も高いだろう。
_ メタデータを付与することの意味 (13:49)
- アレですよ、アレ - http://eto.com/d/0304.html
>リソースを公開する人が、それにメタデータを付与する努力をする必要がある。しかしその努力の見返りに、その人はどんな利益を受けられるのだろうか。この質問に答えられなければ、メタデータをつけようとする人がいないことは自明である。
俺個人が思い描くところの、Webサイトにメタデータを付与することによって何が起きうるか、各サイト運営者にどのようなメリットがあるのか、を語ってみる。
Web上に公開されているリソースというのは、それ単独で意味があるコンテンツであると同時に、WWWという巨大なコンテンツの中の部分でもある。たとえば、個人ニュースサイトなどが作成した「ある話題の関連リンク集」によって、さまざまなサイトに分散された情報が編集され、別のコンテンツ(リンク集)の一部としての意味合いを持つ、というような事例が挙げられる。
Web上(あるいはインターネット上)に公開されたリソースは、すべて「ハイパーテキストによって接続される」=「他のコンテンツの一部として編集される」可能性を持っている。そして、その可能性は個人が個人としてコンテンツを作成しているときには思いも寄らなかった、新しい可能性を見いだしうる。あるコンテンツとあるコンテンツを接続することによって、新しい別の意味(コンテンツ)がそこから生まれたり。
現在のメタデータをほとんど持たないWeb上のコンテンツでも、人間が人力でその意味を解釈して再編集すれば、新しい意味を付与したコンテンツを生成することが出来る(関連リンク集の例のように)。しかし、人力で意味を解釈して再編集をするという作業には、マンパワー的な限界がつきまとう。そのマンパワー的な限界を突破する道具がメタデータの付与だ。
もちろん、メタデータによってマンパワー的な作業量が減じたからといって、人力がすべて必要なくなるわけではない。編集の結果として新しく意味があるコンテンツを作成できるかどうかは、あくまでも人力にかかっている。ただし、そこにおける単純労働的な要素を限りなく自動化することは可能だろう。
メタデータの付与が一般化したときに、最初にその恩恵を受けるのはいわゆる検索エンジンシステムだ。現在のキーワード一致検索などと比べると、圧倒的に高度な検索システムが実現されるだろう。単なるキーワード一致検索では、そのキーワードがそのコンテンツにおいてどのような意味を持つかまでは(コンピュータが)認識できなかったが、メタデータによってキーワードの意味が取得できるようになると、キーワードの各コンテンツにおける意味(重要度、使われ方)までを加味した検索処理が可能になる。
また、Amazonのようなネット書店の例で言うと、メタデータ(を取得するためのインターフェース)を提供することによって、自分のサイトよりも安価なサイトに客を取られうるというネガティブな可能性ももちろんあるのだが、それよりもAmazon自身が用意できる販売サイト(コンテンツ)以外にも、いろいろなユーザー(および同業他社)によって新しく魅力があるコンテンツ(販売サイト)が登場しうる可能性がある。
実際Amazon Webサービスを利用し、独自のコンテンツ(インターフェース)によって書籍の販売を行っているサイトも存在する。それがAmazonにどれだけの利益を生み出しているかは知らないけれど、ukでも同様のサービスを開始した(Amazon、Web サービスプログラムをイギリスでも実施参照)と言うことは、少なくともAmazonは今まで実際に運営してきた結果として、そういうサービスを今後も運営し続ける価値があると認識しているのだろう。
Web上のコンテンツにメタデータを付与するということは、自らが作成したコンテンツがその単独としての意味を持つだけではなく、WWWの一部として新しい意味を持ちうる可能性を、積極的に肯定することだ。
そのようなポリシーを誰もが是とするわけではない(自分のコンテンツには、自分以外からはリンクすらされたくない、という人もいるわけだし)ことは承知しているが、WWWという仕組みを積極的に活用しようと考えたときに、このような思想に至るのは私にはごく自然なことのように思われる。
とここまで書いてきた感想としては、メタデータを付与することによって個人Webサイト運営者が受ける直接的なメリットというのはほとんどない。ただし、「個人Webサイト運営者」=「WWWのディープな利用者」であると考えると、「メタデータの付与によって、巡り巡ってWWWの仕組み自体が便利になる」という「風が吹けば桶屋が儲かる」程度のマクロなメリットはあるだろう。即物的な利益を求める人には向いていない思想かも。
_ コピーできないCD、米国以外ではメインストリームに? from ZDNet (13:49)
>「(これら地域の)人々は、(コピープロテクトCDの)コンセプトに慣れてきている。これらの国の消費者は、米国の消費者ほど口やかましくないということだと思う」とMacrovisionのCEO(最高経営責任者)、Bill Krepick氏は語る。
へー、そうなんだ。俺は慣れていないし、個人的には(個人用途ですらコピーすることに制限があるCCCDは)絶対に買わないつもりだけれど。でもセカンドセッションに収録されているデジタルデータが、音質を落としすぎない(最悪でも96kbpsか?)もので、データフォーマットがMP3(WMAとかATRAC3なんて使いたくない)で、個人用途ではコピー制限がないようなものだったら買うだろうな。エンコードの手間が省けて逆にうれしいし。
_ ROBODEX2003“エージェントAIBO”と一緒にドライブに出かけよう from ZDNet (13:49)
- ROBODEX2003“エージェントAIBO”と一緒にドライブに出かけよう - http://www.zdnet.co.jp/news/0304/04/nj00_robo_aibo.html
>「お家でいつも遊んでいるAIBOが、一緒にドライブに行ってくれる。それも、ただ横に座っているだけでなく、車の情報を伝えてくれたり、カーナビの情報をしゃべってくれる。カーナビの液晶ディスプレイに3D化したAIBOが同様のことをするぐらいは今でもすぐにでも可能だが、リアルなAIBOがパートナーとして同乗してくれることで、ドライブが一層楽しくなる」(ソニー)。
なるほど確かに機能の問題ではなく、人間向けのインターフェースとしてAIBOみたいなロボットが、いつでもどこでも共通に使えるってのはいいかもね。
別にロボットまでいかなくても、PDAみたいなものに汎用(共通)のインターフェースアプリを入れておいて、一般的な処理(PIMやナビゲーション的な機能)はそのインターフェース越しにアクセス出来るようにしておくと、人間の使い勝手が結構変わるだろう。実際に問い合わせを行う先は、別サーバーにあるのかもしれないし、PDAローカルにあるのかもしれないけど、ユーザーはそんなことは気にせずに、マスコット的な共通インターフェースに対して操作をするだけでいいようにして。
_ サーバートラブル中 (13:49)
ただいまサーバートラブル中。共通ライブラリの細かい手直しをしているタイミングで、ユーザーのhomeディレクトリ用ドライブがディスクフルになりやがった。ここは基本的にquotaはゆるゆるにしかかけられていないサーバー(ディスク容量と帯域に関しては、「性善説のUNIXサーバ」みたいな感じ)なんで、分かっていないユーザーがいるとそういうことが起こりうる。
/home以下にはファイルの上書きすら出来ないんで、「サーバートラブル中」のメッセージを表示させるにも一苦労。/tmpは別ドライブで唯一アクセス権があるディレクトリだったんで、そこにメッセージファイルを置いてシンボリックリンクを張れば表示できるかも、と試していると一瞬だけディスク使用量が99%に落ちたんで、その隙に必要なファイルをアップロード。
というわけで、なんとかぱっと見は動く状態に戻ったけど、キャッシュファイル回りとかが腐った状態だ。まあWikiLikeはデータをDB(これも別ドライブ)上にしか持たず、ローカルファイルはキャッシングにしか使っていないから、エラーメッセージを表示しなければちゃんと動いているように見えるに違いない。
という状態なんで、しばらくの間は微妙にいろいろ不具合があるかも。
お、ディスク容量が1Gくらい一気に空いた。誰かのアカウントが丸ごと停止になったかな? これでキャッシュ回りもちゃんと動くようになったはず。
_ アスペクト指向プログラミング (13:49)
- アスペクト指向プログラミング 関連情報 - http://www.race.u-tokyo.ac.jp/~yoshimi/AOP/index-j.html
「アスペクト指向プログラミング」という言葉を「AOP読書中(http://www.sgtpepper.net/hyspro/diary/?date=20030413#p02)」で知って、ちょっと調べてみたところ見つけたページ。
ざっと読んだだけで全然理解できてはいないんだけど、OOPでもうまく独立したきれいなモジュールとして構成することができないようなプログラミング要素を、もっと抽象的なモジュール+実行時の特性に分割して管理し、実行時に(あるいはコンパイル時に)コードを動的に再構成することによって、抽象性(汎用性)を保ったコードのまま複雑な状況に対応できるようにしようって感じなのかな?
ひとまず上記のような理解があっているとして、そういうアプローチはインターフェースをばりばり使ったら既存のOOP言語でもなんとか表現できそうな気がするなー。あるいはスクリプト系でOOP対応の言語なんかで、自己書き換えとかevalとかを使ってもそれっぽいことが出来そうな気がする。
抽象クラスやインターフェースを(普通に)使っても結局あまりきれいに書けないようなモジュールを、そういうアプローチによって解決できるかどうか今度試してみよう。
2004-04-13
_ PostgreSQLでPHP (13:51)
PHPでPostgreSQLじゃないよ。PostgreSQLでストアドプロシージャを書くときに、PL/pgSQLの代わりに(というか使用言語として)PHPが使えるというものらしいよ。
PL/SQLはよくわからないし、使いどころも難しいから、あんまり使わないようにしていたんだけど、記述言語としてPHPが使えるとなると結構嬉しそうだなー。更新がかかったらメールをとばすとか、ややこしい判断ロジックをPHPで記述したりとか、いろいろできそうだ。今度どこかで使ってみよう。
ネタ元
- A Way Out - plPHP - http://club.h14m.org/kenji/diary/?200404b&to=200404132#200404132
2005-04-13
_ PHP 4にthrow〜catchを載せてみる実験 (10:07)
あらかじめ断っておきますが、単なる実験で実用レベルではないです。
if (!class_exists('exception')) {
function throw($ex)
{
$ex->doCatch();
}
function __catch($ex)
{
die($ex->toString() . "\n" .$ex->getTraceAsString());
}
class Exception
{
var $message = 'Unknown exception';
var $code = 0;
var $file;
var $line;
var $_catchFunction;
var $_trace;
function Exception($catchFunction = '__catch', $message = NULL, $code = 0)
{
$this->_catchFunction = $catchFunction;
$this->message = isset($message) ? $message : $this->message;
$this->code = ($code > 0) ? $code : $this->code;
$this->_trace = debug_backtrace();
$this->file = $this->_trace[0]['file'];
$this->line = $this->_trace[0]['line'];
}
function getMessage()
{
return $this->message;
}
function getCode()
{
return $this->code;
}
function getFile()
{
return $this->file;
}
function getLine()
{
return $this->line;
}
function getTrace()
{
return $this->_trace;
}
function getTraceAsString()
{
return var_export($this->_trace, TRUE);
}
function toString()
{
return "Exception: Code: {$this->code}: {$this->message} in {$this->file} on line {$this->line}";
}
function doCatch()
{
call_user_func($this->_catchFunction, $this);
}
}
}
これで、
throw(new Exception());
とかやると、デフォルトではその時点でのトレースが出力される。
function myCatch($ex)
{
//独自のキャッチ処理
}
throw new Exception('myCatch');
とかやると、独自のキャッチ処理が呼ばれるようになる。
でも強引に指定した関数 or メソッドを呼ばせたところで、関数ならばスコープが別になっちゃうからまっとうな継続処理はできない。メソッドを指定すればインスタンス変数までは一応見えるけど、それでも制約が大きい。
というか、catch処理が終了したあとにthrowの次の行にしか戻れないんで、たいていの場合はcatch処理のあとそのまま終了するしかないのが致命的。結局のところ、trigger_errorを一見例外処理風に書いて見せているだけにすぎない。
exit 2みたいにreturn 2とかやって、関数の呼び出し元の呼び出し元まで脱出できれば、まだ使い出がありそうなんだけど。
というわけで、ただの実験でした。特に実用性はありません。PHP 4でthrow new Exception()と書いてみたかっただけです。
_ tDiary移動&noraリビルド (14:35)
tDiaryを旧サーバーに戻したら、トップページは表示されるんだけど、日ごとページを表示するとこける。erbscanでエラーが出ていたんで、erbscanを入れ直してみたけどだめ。うーん。と思いつつ、ひとまずRuby関係のライブラリを順番に入れ直していったら、noraを入れたところで復活した。理屈はよくわからない。Rubyは全然わかっていないんでこういうときに困るんだよなー。
_ bk1対応書籍メモ登録bookmarklet (19:48)
bk1っつーか、単にHTML中に最初に見つかった「ISBN:******」みたいな文字列を引っかけているだけだけど。
bookmarklet: bk1用
javascript:if (document.body.innerHTML.match(/ISBN\s*[::]\s*([0-9X\-]+)/i)){var asin=RegExp.$1.replace(/-/g, '');document.location.href='http://1470.net/mm/memo_form.html?asin='+asin;}else{alert('NO ISBN');}
これで、mylistで自分のbk1ブリーダーIDを登録できるようにすれば、bk1で買い物する時用クリッピングツールとして使えるかな。



_ mia [mixiの招待状いただけませんでしょうか?とても入りたいのでお願いしたいです☆]
_ ishinao [すみませんが、知らない人は招待しませんので。]