Previous month:
June 2005
Next month:
August 2005

『Vista. Not』って何だ?

041029_180323  今日は、サンノゼに出張なのでブログを書かずに寝ようと思っていたのだが、面白い誤訳を見つけてしまったので、英語うんちくを一つ。

 IT Media の記事、「『Vista. Not』に感動!」を読み始めたのだが、題名がどうも理解できない。読み進むと、マイクロソフトの新しいOS、Vista の批判記事らしいことは分かるが、「Vista. Not」が何なのかは最後まで読んでもわからない。

 そこで、元の英文記事を見てみると、タイトルは「I am So Excited by Microsoft Vista. Not.」ではないか。ここで、日本語のタイトルが誤訳だったことが判明する。文の後に、一瞬間を置いてから"Not"と言って文全体を否定する表現方法は、10年ぐらい前に Wayne's World という映画を中心に流行った言葉遊びである。私ぐらいの年齢の人であれば、日本でも、30年ぐらい前に、語尾に「ウソブー」とつける言葉遊びが流行ったのを覚えているだろう。

 つまり、その表現を使えば、

「Vista に感動。ウソブー!」

となるのである。考えて見ると、この手の言葉遊びは過去色々あって、

「Vista に感動。なんちゃって!」 (なんちゃってオジさん)
「Vista に感動。のハンタイ」 (バカボンのパパ)

なども私の世代には通じる。今の世代なら、どういうのだろう。

「Vista に感動しなくなくなくない?」
「Vista ってビミョー」
「Vista に感動。うそぴょん!」 (←ブクマ・コメントで指摘されたので追加)

あたりだろうか。マイクロソフトも頑張って、「Vistaってヤバイ」と言われるように努力しなければならない。


ブログ用ミニアプリ: 箱入り娘 【無料ゲーム】

 数日前に、ブログ用のミニ・アプリを披露したばかりだが、私のブログばかりに工夫を凝らしていても面白くない。何とか、他の人のブログを楽しく出来ないものか、と考えた末にたどり着いたのが、新企画、『ブログ用ミニアプリ』シリーズである。UIEngine (自社製のスクリプト・エンジン)上で作ったミニ・アプリをブログ用の部品(プラグ・イン)として無料で提供しよう、という企画である。

 その第一弾は、おなじみのパズルゲーム、箱入り娘。二年以上前に、携帯電話用のアプリのデモとしてうちの社員(アメリカ人)に作ってもらったのがこれ。日本語の「箱入り娘」というコンセプトがいまいち理解しにくかったのか、「ice princess」という形で出来上がってきた。「氷に閉じ込められたお姫様を助ける」というコンセプトである。この記事にも、サイド・バーにも貼り付けてあるので、「Play」ボタンを押して遊んで見ていただきたい(注:Java の runtime が必要)。

 このミニ・ゲームを自分のブログで提供してみたいと思う人は、何かダウンロードしたり、アップロードしたりする必要はなく、ただ、以下のHTMLコードをサイド・バーなどのブログ内の適切な場所に貼り付ければ良い。

<iframe marginwidth="0" marginheight="0"  src="http://www.uicentric.com/blogparts/Princess.html"
frameborder="0" width="150" scrolling="no" height="220">
</iframe>

 この手の部品をサイド・バー貼り付ける方法は、ブログ・サービスごとに異なっているらしいので、全てのブログ・サービスを網羅した「貼り付け方」を解説することは難しいが、判明しだい順次ここに追加して行こうと思う。もし、Typepad 以外のブログ・サービスをご利用の方でサイド・バーにこの手の部品を貼り付ける方法をご存知の方がいたら、ぜひともコメント欄などを利用してご教授いただきたい。


Cellの真価を引き出すソフトウェア実行環境を開発

050726_074752  私の愛読書の日経エレクトロニクスに、Cell プロセッサのスケジューラに関する良い記事(7月4日号、P.123)が載っていたので、紹介する。次世代ゲーム端末向けのゲーム開発者は、ついに「日経エレ」にまで目を通さねばならない時代が来たようだ。とは言っても、ゲーム開発者に日経エレを定期購読してもらうというのも無理があるので、私が代理で目を光らせておき、読む価値のある記事を見つけたときだけここで紹介しようかと思う。

 ちなみに、この記事は東芝のエンジニアたちによって書かれた Guest Paper。CELLチップは、メインCPU(PPE)1つ+サブCPU(SPE)8つ(PS3では歩留まりのために7つしか使わない)、という非対称な形のマルチ・コア・アーキテクチャを持つため、通常のOSのスケジューラーは使えない。そこで、OSのスケジューラーとは別に、SPE専用のスケジューラーを開発した、という開発者の立場から書かれたもので、私自身、OSを開発して来た立場の者としては、とても興味深く読めた。CELLチップの上で、ミドルウェアなり、ローレベルのモジュールを開発しようとするエンジニアはぜひ目を通しておくべき記事だ。

 要点をまとめると、以下のようになる。

(1)PPE(Power Processor Element)のスジェクーリングは通常のOSのスケジューラに行わせるが、8個あるSPE(Synergistic Processor Element)のスケジューリングは、PPE上で走る「リアルタイム・リソース・スケジューラ」というモジュールが行う。つまり、PPEがマスターとなり、そのSPEでどのSPEスレッドを実行するかを制御するのだ。
(2)スケジューリング・アルゴリズムには、全てのSPEを同じ周期(例えば映像の出力タイミングに合わせた33ms周期で)コンテキスト・スイッチさせる「ギャング・スケジューリング」方式を採用している。この方式を採用することにより、特定のリアルタイム制約(例えば、動画のあるフレームのデコードを次の出力タイミングまでに終えなければならないなど)に応じてSPEの割り当てを変更する、などのリアルタイム処理に必要とされる動的なスケジューリングが可能となる。
(3)SPEスレッドのスケジューリングは、プログラムからAPIを呼び出して動的にコントロールするのではなく、XMLファイルで記述されたメタ・データにより行う。プログラマーは、そのメタ・データ内に、データの処理の順番(例えば、データ・マルチプレクサでビデオと音声データに分けた後、それぞれをビデオ・デコーダ、オーディオ・デコーダに渡すなど)や、リアルタイム制約などを記述するだけで良く、実行時のSPEの割り当ては「リアルタイム・リソース・スケジューラ」が自動的に行ってくれる。

 これで、今まで疑問だったSPEのスケジューリング方式がかなり明らかになった。ただし、このペーパーからだけでは理解できなかったのが、SPEのコンテキスト・スイッチの効率である。PPEとSPEは共有メモリーを持たない構造であるため、SPEのコンテキスト・スイッチのたびに、SPEのローカル・メモリ全て(256キロバイト)を主記憶との間でDMA転送しなければならないのだ。これを最悪の場合で8つのSPEに関して 32ms ごとに同時に行って、オーバーヘッドがどのくらいになるのかが気になってしかたがないのだが、このペーパーには答えを見つけられなかった。このペーパーには、マルチ・ストリームのテストプログラムを走らせたところ、平均して(32ms ごとに)1ms のオーバーヘッドで済むことが分かったと書いてあるが、それは48本のMPEGストリームを同時にデコードする、という比較的単純なケースの実験結果なので、あまりコンテキスト・スイッチが起こらなかった故のオーバーヘッドの低さとも思えるので何とも言えない。

 商業的にCELLチップなりPS3が成功するかどうかはまだ不明だが、少なくとも「エンジニアのおもちゃ箱」としてはとても魅力的なハードウェア・アーキテクチャである。このペーパーを書いた東芝のエンジニア達も、やりがいのある仕事を与えられて楽しかったに違いない。ハードウェアで冒険はせずに、開発環境とオンライン・サービス環境で差別化を図ろうとするマイクロソフトと、ハードウェアとソフトウェアの両方で大きな革新を起こそうとするソニーとの違いは、その設計の根本思想からして大きく違う。極端な言い方をすれば、これは「米国のMBAたちがビジネスで勝つためにエンジニアに作らせたXbox 360」と、「日本のエンジニアがエンジニアのために作ったPS3」との戦いである。目が離せない。

[追気] ちなみに、先日運転しながらラジオで芸能ニュースを聞いていると、突然 "multi-thread" という言葉が飛び込んできたので驚いた。映像業界では、「24」のように、同時に進行する事件をシーンを頻繁に切り替えながら視聴者に見せる手法を「multi-thread 方式」と呼ぶらしい。ひょっとすると、こっちの方が古い用法なのかも知れない。エンジニア以外の人にマルチ・スレッドを説明する時に使えそうだが、そんな機会がそもそもあるかどうかが疑問だ(注意:理科系の学生は、合コンの時に決してマルチ・スレッドの話題はしないように)。


奥田英雄のサウスバウンド

050725_095145  前回日本に行ったときに発売されたばかりの初版本を買い求めてきた奥田英雄の「サウスバウンド」。「寝る前に数ページ読んでは沈没」方式ではなかなか進まないので、週末を利用して一気読み。

 直木賞受賞作の「空中ブランコ」に伊良部一郎というハチャメチャな精神科医を搭乗させて楽しませてくれた奥田氏だが、この作品にも、期待を裏切らずに、元過激派の上原一郎という一味違うハチャメチャさを持つ主人公を搭乗させてくれた奥田氏には脱帽である。

 原則として小説はSFとミステリーしか読まない私がなぜ岡田氏の小説を好きかなのかを自分なりに解釈してみると、やはりその主人公の魅力に尽きると思う。私自身、まわりの人たちには、マイペースだとか、過激な発言をする奴だと思われているようだが、彼の小説の主人公と比べればかわいいものだ。伊良部一郎や上原一郎の奇行を描いた小説を読みながら、「私ももっと暴れていいのかも知れない」と結構本気で思ってしまう私である。

 技術にしろビジネスにしろ、常識だとか他人の目だとかを気にして行動していては、決して新しいものは生まれない。むしろ、常識をうたがってかかって、他人からは「奇行」と言われるぐらいのことをしてこそ、ブレークスルーが起こるのだ。しかし、実際に「奇行」をするにはそれなりの勇気とエネルギーが必要であり、そんな時に良い糧になってくれるのが奥田氏の小説である。


101回目の開眼

050724_060543  今日、一つ「開眼」したことがある。開眼とは言っても、「宮元武蔵が二刀流に開眼した」ような大それたものではなく、ゴルファーなら誰でも一生に何度も経験する例の「開眼」である。

 goo 辞書には、開眼の意味として、

(1)目が見えるようになること。また、見えるようにすること。
用例:「開眼手術」
(2)物事の道理や真理がはっきりわかるようになること。また、物事のこつをつかむこと。
用例:「俳優として開眼する」

の二つが挙げられているが、これでは不十分である。ゴルファーのことを考えて、

(3)アマチュア・ゴルファーが人や教本などからちょっとしたヒントを得たすぐ後にたまたまうまくプレーできた時に、「これで格段にゴルフがうまくなった」と思い込んでしまうこと。
用例:「今年になって、これで5回目の開眼だ」

を3番目の意味として付け加えるべきだ。

 今日の開眼は、「全てのクラブを9番アイアンだと思って振ると良い」である。プレー中に同伴者に言われて早速試してみたところ、後半のスコアが前半のスコアより10も良くなり、9ホールでの新記録(39)が出てしまったのだ。今までも、100回ぐらいこの手の「開眼」をしているので、そのたびに少しづつ上達しているとすれば、今頃とっくにシングル・プレーヤーになっているはずである。にも関わらず相変わらず90を切るか切らないかのあたりで停滞しているのは、今までの「開眼」が、(2)の意味の開眼ではなく、(3)の意味の開眼だったということだ。それでも、「出来れば、この『101回目の開眼』こそ本物であって欲しい」と、性懲りも無く夢を見ている武田鉄也のような私である。

[追伸] アマゾンで、「開眼」という言葉が付くゴルフの教本をサーチした所、14冊も見つかった。それにしても、ゴルフ教本の題名ってなんだか恥ずかしい。「たかがゴルフに『われ本日ゴルフに開眼す』は無いだろう」とツッコミを入れたくなってしまう。


AJAXでミニアプリ: ブログにスライドショーを追加する

050718_040520  最近受け取った叔母からの手紙に、「あんなにブログに力を入れて仕事をする時間があるのかしら?」と書いてあったがもっともなセリフである。もともと趣味で始めたプログラミングを職業として選んでしまって以来、遊びと仕事のボーダーラインをあいまいにしたまま四半世紀も突っ走っている私だから、はたから見ると「いったいいつ仕事をしているのかしら?」と見られても仕方が無い。

 特に最近は、このブログで色々なプログラミング・テクニックを披露したり、会社の製品(UIEngine)を使ったサンプル・プログラムの披露などをしているので、ますます境がなくなっている。会社の製品の宣伝になるのならば、どうどうと仕事中にブログを書いていてもかまわないだろう、という理論がまかり通ってしまうのが私だ(^^;)。

 そこで今日のエントリーも、自社製品(UIEngine)を応用した簡単な「非同期通信型ウェブ・アプリ」の紹介。既に気が付いた人もいるとは思うが、このブログの右上にスライド・ショーを追加したのだ。UIEngineは、もともと携帯電話や組み込み機器用に作ったスクリプト・エンジンなので、ものすごく軽くて小さい(Applet 版は36キロバイト)。その上、アプリケーション自身は全てがスクリプトで書かれているので、携帯電話用の小さな画面向けに作ったミニ・アプリをそのままブログの部品として流用できるのだ。現に、このスライド・ショーは、某社のデジカメ向けに作ったスクリプトをそのまま流用した。

 先日のエントリーにも書いたが、こんなブログ用のミニアプリを一般の人たち(ノンプログラマー)にも簡単に使っていただけるような仕組みを作れないものかと模索中である。スクリプトをテンプレートとして提供することにより、プログラミングなしでこんなスライドショーを作ることを可能にすることはできるのだが、画像をどこに置くだとか、画像の大きさをどうするだとか、ブログに適切なコードを埋め込むにはどうしたら良いだとか、まだまだ解決しなければならない問題は沢山ある。とりあえず一つづつ問題を解決していくしかないのだが、それまでの間は、このブログを見て「私もこんなブログを作ってみたい」「ブログでこんなことが出来るのか」と思ってくれる人たちがいれば喜ばしい限りである。


ケイタイでAJAX(4):Google に対抗して Map Viewer を作ってみた

Screenshot  ここの所、忙しいにも関わらずプログラムが書きたくて仕方がなくなっている。学生時代に試験前になった『脳が熱暴走状態』にとても良く似ている。試験の前日に限って、面白いプログラムのアイデアが浮かんでしまい、勉強をそっちのけで遅くまでプログラムを書いてしまうのだ。早く勉強をしなければと思う分、いつもより効率良くプログラムが書けてしまうのがなんとも皮肉だ。

 「科学うんちく」の好きな私としては、この現象を、「忙しい」とか「勉強しなきゃ」という気持ちがアドレナリンを脳に送り込んでオーバークロック状態にし、脳の中のクリエーティブな部分を刺激した結果と解釈している。作曲が好きな学生は、試験前になると新しい曲が浮かんだりするのだろうか。同じような経験がある人がいたら、ぜひともコメントをいただきたい。

 そんな感じで今朝一気に作ったのが Google Map に対抗して作ったマップ・ビューワー(←このリンクをクリックすると別ウィンドウでエミュレーターが走る)。Google Map と同じく、大きなマップを細切れにしてサーバー側に用意しておき、スクリプトを利用して非同期で取り込んで表示するのだ。

 残念ながら Google Map のような巨大なマップデータは持っていないので、ぷらっと新宿さんがPalm用に公開していたものを借用させていただいた。もっと巨大なマップの方が説得力があるのだが、マップデータの入手は思ったより簡単ではない。国土地理院あたりがウェブ・サービスを提供してくれるとありがたいのだが…

 本来ならば、いつものようにドコモ版を公開したいところだが、「このマップデータはPalm限定」との縛りがあるので、今回は遠慮しておく。Palm 版をビルドして公開しても良いのだが(UIEngine は MIDP、DoJa、BREW 以外にも Palm、PocketPC、vxWorks、μ-iTron、Linux 版などがある)、Palm+WiFi の組み合わせを持っている人がいるとも思えないので、それもパス。ただし、そんな理由で、エミュレーターのスキンだけでもPalm風のものにしておいた。


ケイタイでAJAX(3): ブックリーダー

050719_111317  数日前に、ケイタイ版のAJAX RSSリーダーを公開したが、今回は「なぜケイタイにAJAX、特に非同期通信が重要か」を良く表すアプリケーションのサンプルが出来たので、ここで公開する。

 Barcode_ebooks 
 ブックリーダーのデモ

 ドコモの携帯電話をお持ちの方は上のQRコードをカメラで取り込めばアプリをダウンロードできる(今、シアトルにいるので、申し訳無いが実機でのテストはできない。もし、不具合に気がついた場合コメント欄などで報告いただけるとありがたい。)。そうでない方は上の「ブックリーダーのデモ」をクリックしていただければ、エミュレーター上でもデモを見ることができる(IE6.0、Firefox 1.04、Safari 2.0 で動作確認済み)。

 ウェブ・サービスを利用する(つまり、通信によりデータをサーバーに取得に行く)携帯電話用ウェブ・アプリケーションを作る場合に特に注意しなければいけない主な点を上げると、以下のようになる。

(1)ネットワーク遅延が通常のインターネットと比べてとても大きい(数秒間)
(2)ワーキングメモリの量が少ない(500KB~2MB)
(3)一度に通信できるデータ量が少ない(10KB~30KB)
(4)パケット量に比例した通信料金を徴収される従量課金方式である

 こういった特徴があるために、同期通信しかできない今の世代のブラウザーでウェブ・アプリケーションを作ると、画面を少しスクロールしては「次へ」というリンクを選び、そのたびに数秒間待つ、というとても使い勝手の悪いものになってしまうのである。

 そこで、ここでは非同期通信専用に作ったスクリプト・エンジン(UIEngine)を使い、ネットワーク遅延を出来るだけユーザーの目に触れないような形でブック・リーダーを作ってみた。このアプリのアーキテクチャーを簡単に説明すると、以下のようになる。

 最初にダウンロードするのはスクリプト・エンジンのみ(約28KB)である。ユーザーがアプリ(実はスクリプトエンジン)を立ち上げると、スクリプトで記述されたブックリーダー・アプリのテンプレート(約3.4KB)をダウンロードする(ただし、これはスクラッチパッドにキャッシュされるので、2回目からの通信は必要無い)。続いて、スクリプトで記述されたブックリーダーのロジックが、段落ごとに別々のXMLファイルに格納された本の中身(この本の場合146個のファイル)を、非同期通信でサーバーから取得する(一段落あたり、1~2KB)。ただし、無駄な通信を省くため、ユーザーが見ている部分の後の6段落分のみを先読みするようにしてある。また、同じ段落を再度サーバーから読み込むことを避けるために、一度読み込んだ段落の内容はスクラッチパッドに保存するように作ってある。

 この様に非同期通信を活用する事により、ユーザーの感じるネットワーク遅延を限りなく少なくすることが出来るし(文章を上から順番に読む限り遅延は見えない)、ブラウザー・アプリにつき物の「ウェブ・ページ」という概念から開放され大量の文章が一続きの文章としてアクセス可能になる。その上「先読み」と「キャッシュ」のおかげで、ある程度までは(最大で6段落先まで)オフラインで読むこともできる。

 ちなみに、本質とは関係ないが、おまけ(というか、UIの実験)として「速読トレーニング」の機能も入れてみた。「下」キーを押すことにより3行ずつスクロールすることができるのだが、新しく現れた部分のバックグラウンドを3秒間だけ少し薄い色にしているのだ。こうすることにより、スクロール直後にどこに目線を移せば良いかが明らかになるし、(色が薄い間に読み終わるようにして読み続けることにより)「速読」のトレーニングにもなるのだ。


Ajax でノンプログラマがウェブ・アプリケーションを作れる時代を実現する

 少し前に、Google Map API を使ったウェブ・アプリケーションの例を幾つか公開したが()、とにかくすばやく作ったのが良かったのか、英語のドキュメントしか無いためにサンプルを探している人が多いのか、沢山の人たちが参考にして色々と遊んでくれており、嬉しいかぎりだ。特に、「私はプログラミングは出来ないけれど、サンプルを元にしてなんとか自分なりのウェブ・アプリケーションを作ってしまいました」というようなフィードバックをいただくと、もっともっと頑張らねばと思う。

 ブログのおかげでプログラマー以外の人たち(ノンプログラマー)が情報を発信することがずいぶん容易になったが、まだまだウェブ・アプリケーションは難しすぎる。しかし、これから Ajax なり、Ajax アプリの自動生成の技術などが進歩してくれば、必ず「ノンプログラマーがさまざまなウェブ・アプリケーションを作ることが可能になる時代」が来ると私は信じている。そうなってくると、ブログももっと楽しくなってくるし、パソコンからチョコッと気の利いたアプリを作って友達のケイタイに送る、なんてことが可能になる。

 その例として、簡単なパズルゲームを自家製Ajaxスクリプトエンジン(UIEngine)で作って下に貼り付けてみたので試して欲しい(IE6.0、FIrefox 1.04、Safari 2.0 で動作確認済み)。

 ユーザーは大きさの同じ2枚の画像を用意するだけで良く(pic1.pngpic2.png)、後はスクリプト・エンジンとパズルのテンプレートが仕事をしてくれる。このままでも、サーバーの特定の場所にファイルのアップロードが出来る人であればプログラムを知らなくとも使えるし、ブログサービスやフォトアルバムサービスにこんな仕組みを組み込めばノンプログラマーにも簡単にこんなパズルが作れるようになる。


シアトル豪邸ツアー

 シアトル夏の恒例イベントの一つが Street of Dreams。地元の建築業者が何社か集まって住宅地の一角を買い取り、それぞれ競い合うように超豪華な Dream House を数戸建て、モデルハウスとしてシアトル周辺に住む人たちに公開し、家具・建材の展示、インテリア・建築技術の披露、などをかねて、建てた住宅の販売もしてしまうというイベントだ。家を建てようとしている人達ばかりではなく、家のリモデルの参考にしようという人や、単に普段見ることの出来ない豪邸を見学に来ただけの人たちまで、さまざまな人々が集まるところが面白い所である。そして、このイベントが終わるころまでには、一戸あたり2~3ミリオン・ダラー(2~3億円)の家がちゃんと完売してしまうのだからすごい。

Dreamhouse001 Dreamhouse002 Dreamhouse003 Dreamhouse004 Dreamhouse005 Dreamhouse006 Dreamhouse007 Dreamhouse008

 ちなみに、Street of Dreams の Dream は Dream House や American Dream の Dream である。アメリカに住む人・移住して来る人の多くが、「いつかは自分も成功してこんな家に住みたい」という夢を結構本気で持っている所が、アメリカ人の単純さでもあるが、強さでもあるとつくづく思う。ブッシュには色々と不満もあるが、「子供達や若い人が夢を見られる国を作ろう」という心意気は、今回のスペースシャトルの打ち上げにも強く感じられる。日本から「若者にフリーターやニートが増えている」というニュースが入るたびに、日本の未来が心配になる。「郵政民営化」なんかよりも「若者が夢を見ることの出来る社会を作る」方がずっと大切だと思える今日このごろである。