2007 年 07 月 02 日 : ソフトウェアの進化
DNA はデオキシリボース、リン酸、塩基という物質から構成される。
地球上のすべての生命が持つ DNA の基本的な構成要素はこれだけに過ぎない。DNA を調べるだけで取り違えされないでそれがどんな生物であったのか分るらしい。
それがどんな風にして生まれ、発展したか知る由もない。けれどもそこには想像し得ないほどの長い歴史があって今日へと至った。
コンピューターの世界も、最小単位は 0 と 1 という本当にシンプルな要素から構成される。そんな基本要素からさまざまな用途に応用されている。地球上の生命ほどでないにしても、それは個人的には生命の発展過程に極めて類似しているようにも思えてくる。
果てしなく続く時の流れの中で、数多くの生命が生まれては消えていった。
何故絶滅した生物の種があって、今日まで生き残ったものもあるのか?
いろんな管理などの要因もあるかもしれないが、生命の設計図と言われる DNA がどんな構造していたのかというのが大きな決め手になったようにも思える。
ソフトウェアの歴史はまだまだ浅く、ソフトウェアそのものを一元的に特定する DNA そのものは存在しえない。けれどもソフトウェアというものは、設計して、プログラミングして、完成するものであって、どんなソフトウェアにも設計図は存在する。
生物の種と同じく、個々のソフトウェアも生まれて消えの連続である。
貴重な時間を割いて創ったものだから、願わくば長く生き残ってもらいたいものである。
そんな思いでいつも仕事をしているわけだが、その願いを実現するためのヒントは DNA にあるように思えて仕方ない。
今のところ、様々なソフトウェアを特定するための DNA のようなものは存在しない。
すべてのソフトウェアに共通する設計図に相当するものがないということである。
生物の DNA には何億年にも渡って生存し続けられるほどの情報が記されているが、ソフトウェアにもそれほどのものが存在したときに、きっと変革は現実のものとなるだろう。
2007 年 06 月 21 日 : SAX Parser for BREW
BREW 携帯電話で、Amazon のサイトから XML 文書をネット経由で取得して処理する BREW アプリ(本棚アプリ Books Application )を公開した。
SAX パーサーを使っているのが最大の特徴である。
BREW 上で SAX パーサーを実現している会社や団体は他に存在しないので、BREW では世界初の SAX アプリかもしれない。
Webサービスでやり取りされる XML 文書を処理を処理するためには、その文書がどんな構造になっているのかを解析する必要がある。
そのためのソフト技術として DOM パーサーと SAX パーサーがある。
DOM パーサーでは、XML 文書を DOM(Document Object Model) という木構造の形式で文書全体をメモリ上に展開して処理する。SAX パーサーでは、SAX(Simple API for XML) という API によって XML 文書を先頭から順番に読み取って処理する。
SAX パーサーの場合、文章を一行一行読んで処理するので、 DOM パーサーに比べるとメモリ消費量がきわめて少ないのがメリットと言える。
実際に、BREW プロファイリング ツール Bleuet de BREW でメモリ消費量について調査した。
その結果分かったのは、解析対象の XML 文書にも依るものの、DOM パーサーで 300 KB 必要だった処理が SAX パーサーでは 3 KB の場合があるということだった。
国内の高機能携帯電話では、300 KB といっても問題にならないサイズかもしれない。けれども、海外のマーケットを見渡せば、300 KB のメモリを持たない携帯電話も多数存在する。
世界全体で考えると、日本のマーケットは 10 %にも満たない。だからマーケットの大半は、日本の状況とは全く逆であると考えるべきだと思う。
そういう意味において、高機能携帯電話に合わせてソフト技術を研究開発するのではなく、グローバルスタンダードとも言える携帯電話で、利用可能なソフト技術を、シンプルに創造するのがベターではないだろうか。
2007 年 05 月 21 日 : ソフトウェア設計
『………このディスク・コントローラ・カードのチップの数は、他の競合製品よりずっと少なくてウォズニアクはその点を「私の生涯でもお気に入りの設計だ」と考えた。………』(『アメリカン・ドリーム』、マイケル・モーリッツ著)
ウォズニアクとは、ジョブズと共にアップル社を創業し、コンピューターの設計をしていた人物である。
アップル社が今日に至るにはいろんな要素があったと思うが、僕は技術的な観点では最少の部品からコンピューターを設計する思想、すなわち抽象化の概念にあったと感じている。
そういった考え方を持ってソフトウェアを設計する人は多くないように思う。それは何故か?
理由は単純である。
目先の売上とか利益を追い求めるからではないだろうか。というのは、ソフトウェアを抽象化して最少のサイズにして設計するには、何回も何回も設計し直して、プログラミングしテストするというサイクルを繰り返さねばならない。
その結果、同じ機能のソフトウェアが他よりも 10 分の 1 のサイズで実現できたりするのだ。
家中に散らばっている家電製品のリモコンが一つに集約されればどれくらい便利だろうか?
ソフトウェアでも同じことが言えると思う。
ソフトウェアを構成する個々のモジュール(部品)が様々なアプリケーションで利用されることで革新が起こるだろう。
僕たちは今、過去 5 年間もの歳月を費やして研究開発してきたソフトウェアの集大成のフェーズに入っている。
ソフトウェアそのものの抽象化を徹底し、革新的にコンパクトでスピーディなものとし、リファレンスマニュアルの推敲の上に推敲を重ね、世界の人々に届けるため、何千ページにも及ぶドキュメント類の英語への翻訳作業に余念はない。
2006 年 09 月 14 日 : Mobile2.0
巷では「Mobile2.0」なるキーワードが聞かれるようになった。
Web そのものをプラットフォームとしてアプリケーションを利用する様式 「Web2.0」にあやかって名付けられたものと想像に難くない。
Web2.0 的なアプリケーションでは、インターネット上に分散する情報を統合的に扱えるようにするため、Google にしても、Amazon.com にしても、その情報は XML という世界標準のデータ記述言語で表現される。
標準的な枠内に収まっているからこそ、異なるコンピューターに宿る多種多様なデータを、時空を超えて自由自在に扱えることが現実のものとなるのだけれど、それでは携帯電話で「Mobile2.0」を真の理想のものとして具現化するには何が必要になるのだろうか?
そんな問題意識のもとに、数年前からインターネット上で XML を扱える携帯ソフト技術を根気強く研究して実際に開発してきた。
先月、世界で初めて、携帯電話からインターネットサーバーの XML で表現された Web サービスにアクセスできるソフトを出荷することができた。
以下のようにプログラミングするだけで、世界のネット空間に散らばっている、様々な Web サービスにアクセスできる携帯電話向けアプリケーションが簡単に開発できるのだ。
詳細は、SophiaFramework XML for BREW をご覧になってください。
// クラス変数
SFXSOAPServiceProxy _wsdl;
// サーバからの返答を受け取るための通知コールバックメソッドを設定
_wsdl.SetNotifyHandler(OnResultSHP, this);
// Web サービス記述言語 WSDL を設定
if (_wsdl.SetWSDLDocument("weatherbycity2.xml") == SFERR_NO_ERROR) {
// Web サービスの名前を設定
_wsdl.SetServiveName("WeatherByCity");
// Web サービスのポート名を設定
_wsdl.SetPortName("WeatherByCitySoap");
// 呼び出す Web サービスとその機能 (メソッド) を指定
_wsdl.SetMethodName("GetWeatherByCity");
// 指定されたパラメータの値を設定
//
// Web サービスのユーザプロパティを設定
_wsdl.SetParameterValue("UserID",
SFXBuffer(SFXAnsiString("[email protected]")));
_wsdl.SetParameterValue("Password",
SFXBuffer(SFXAnsiString("*******")));
// Web サービスのパラメータを設定
_wsdl.SetParameterValue("CityName",
SFXBuffer(SFXAnsiString("Washington")));
_wsdl.SetParameterValue("StateAbbreviationORCountryName",
SFXBuffer(SFXAnsiString("PA")));
// Web サービスを呼び出す
_wsdl.Invoke();
}
2006 年 06 月 29 日 : 検索エンジンにおける人と時間と空間の軸
ソフィア・クレイドルが関わっているビジネスで、最も重要なキーワードの一つが ” BREW ” である。
” BREW ” をキーにして Google で検索してみると、タイミングによって変動するけれども、約 37,700,000 件中 の 6 番目と 7 番目の位置にソフィア・クレイドルのページがある。
最初から、このポジションにあったわけではなくて、Web 制作のとき、コンテンツの質と量において様々な創意工夫が功を奏しての結果なのだろう。
最近、” BREW ” をキーにしてた Google での検索結果の 1 ページ目を何度も何度も眺めていて、あることに気が付いた。
それは 1 ページ目に表示される、Web サイトの顔ぶれに変動がほとんどないという現象である。
逆に言えば、実は 2 ページ目以降に控えた、膨大な Web ページの中に、検索エンジンを使う人が真に探し求めるものが隠されているのではないかという考え方もできる。
Google の検索結果を見ていると、何年間も何のアップデートもなく、もはや情報価値が消失してしまったといえるようなページが 1 番目に表示されている例も珍しくない。
いま、BLOG で情報発信する人が急激に増え、インターネットにある情報は玉石混交であり、一体どの情報が自分が必要とするものなのかが難しくなってきているのではないだろうか。
検索した結果、たまたま上位に表示されている情報を読んだだけで、すべてを分かったつもりになっているかもしれない。本当は、その後に表示されている情報の方がもっと価値があるのにもかかわらず ・・・ 。
実際のところ、これだけネット上に情報が氾濫している状態では、検索エンジンにしても情報発信にしても、新たなアプローチを組み込む必要性が高くなってきている。
携帯電話はフルブラウザや GPS などが標準で搭載されたりして、今後ますますネット端末としての地位を高めて行きそうだ。
元々、携帯電話はパーソナルなもので、家庭や職場で共有して使うものではない。誰がどうしたというのを特定できるツールでもある。
その携帯電話に GPS が標準で搭載されれば、特定の人物が何処でいつ何を情報発信したかという属性を情報に持たせることは可能である。
情報に時刻と場所と発信者という属性を自動的に持たせて、検索エンジンも単なる「キーワード」だけの検索機能をそういった軸にひろげてゆくことで、氾濫する情報の波をある程度まではうまくコントロールできるかもしれない。
そして、膨大なデータの山に埋れていた、ダイヤモンドの原石といえるような希少価値のある情報を組み合わせることで、新たなる価値のある情報が生成されるかもしれない。
指数関数的に増殖し続けるネット情報をいかにコントロールするかで、次世代の検索エンジンは自然淘汰されるし、Google を遥かに超えるものが誕生する余地も充分あるに違いない。
2006 年 06 月 21 日 : Connectivity
オープンソースという言葉がITの世界で流行っている。
けれども、この先、ソフトウェア産業の発展を望むならば、オープンソース以上に大切になってくるコンセプトというものがありそうな気がする。
それは「コネクティビティ」というごく有り触れた考え方である。
オープンソースは、ネット上にソースコードを公開し、さまざまなプログラマがソースコードをシェアながらソフトを開発してゆくアプローチである。
ひとつ疑問に思うのは、ソースコードをシェアすることが果たして本当に生産的かどうかなのだ。
プログラムというソフトは日本語や英語と比べると、プログラマーによって記述される内容は厳密そのものであるが、その意図を理解しようとするならば少なからず苦痛や努力が伴うものである。
ソースコードを読んでワクワク&ドキドキな体験をする方が稀と言えるかもしれない。
オープンソースのアプローチでは、少なくともソースコードを理解するための時間と労力が非生産的なのではないだろうか。
勿論、自分より才能や能力のある人のソースコードを読むことで自分のプログラミングスキルを伸ばすという有意義な一面もあるけれど、それはオープンソースの主たる目的ではない。
オブジェクト指向のカプセル化、日本語では「情報隠蔽」なる言葉で翻訳される概念こそが重要ではないかと思う。
それはソースコードをオープンにするのではなくて、寧ろクローズなものとし、必要なアプリケーションプログラミングインターフェース(API)のみを公開するというアプローチである。
今現在、"Web 2.0" というキーワードで説明されるインターネット業界は、この方向に動いているような気がする。
インターネット上のデータベースをアクセスするための API を公開し、ネットの人々が自由に使える世界である。
データは何も商品やニュース、個人情報に限らなくとも良いと思う。
プログラムも一種のデータであり、それらの API がひろくネット上に公開され、かつあらゆるプログラム間で自由自在に接続可能となり、そのバリエーションによってアプリケーションがインプリメントされるとすればどうだろうか?
同じ種類のプログラムモジュールを複数の人間でシェアして開発するよりも、その人が世界一才能を発揮できる分野のモジュールを一人で開発し、同じようにして創られた他のモジュールを接続しながら動作する世界の方が躍動感がありそうだと感じるのは僕だけであろうか。
オープンソースの先にあるもの。
それは、プログラムを構成するモジュールが自由自在にネット上にあるモジュールと柔軟に、そして簡単にコネクトできる世界である、と感じる。