コンピュータの夢
2007.11.30
そういえば、私も結構プログラマ歴が長いわけです....たとえば、こんな質問はどうでしょう?
コンピュータの編集画面のイメージが、黒バックから白バックに代わった一番最初はいつ?
これをある人に以前訊かれたころがあります。私の答え...というのは(若干自慢ですが)
Smalltalk 80 の紹介記事!(確か「Computer Today」だと...1985年くらい?)
でした。ですから、これ要するに XEROX Star の画面のイメージですね。当時 PC9801(初代から少しくらい) が最新鋭の時代ですから、「一体どうやってビットマップディスプレイ上でウィンドウをうまく実現できるのだろう...」(勿論ムリ)と馬鹿なことを考えていたりしたわけです(苦笑)。
特にユーザインターフェイスというのは、いろいろと空想の余地がありますし、さまざまなデバイス(工夫、という意味がありますよ!)が、中にはすぐに廃れたものを含めていろいろあるわけです。
こういう中で、たとえば音声入力・音声出力というものは、今の技術水準で充分に可能なのですが、それでも「ユーザのニーズ」という面で考えてみたら、かなり「怪しげ」なデバイス、ということになるわけです(勿論、視覚障害者用途は大きな意味がありますが)。たとえば、ちょっとしたテキストを編集するのに、すべて「声」で命令を与えることを考えたら、「ちょっとやってられないよね」となるのが普通でしょう。
こんなことを考えたのは、1998年ですから今からもう10年近く前になるアニメで「serial experiments lain」というのがあるのをご存知の方もいるでしょう。この世界だと、音声入力がかなり一般的...になっているわけです。勿論アニメですから、現実の世界のエンジニアリングとは次元の違うもの、と考えるのが穏当なんでしょうけども、「コンピュータをめぐる夢想」というレベルでは、やはり「夢として重要な」デバイスなのかもしれません。
同じような問題というと、「なぜテレビ電話が普及しないの?」という昔からの問題がありますね。なぜって...電話に出るたびに身なりを気にしなきゃならない女性の立場だと、こんなの大反対です(逆に聴覚障害者が手話で「電話」するメディアとしての話題が結構たくさんあるようです.....)。「技術的な夢 ≠ 現実的なニーズ」であっても、それが「夢としての充分なリアリティ」を備えている場合は、繰り返し繰り返し、現れては潰えていく運命にあるのかもしれません。
「lain」では結構今のネット社会の状況を予言している部分もある、という面でかなり先見的な部分(「ネットいじめ」をやってますよ)がある反面、夢が夢でしかないレベルの弱さ、みたいなもの(そりゃ「大衆の夢」を具現化するエンタテイメントですから)を同時に備えるのは至極当然なことです。まあさすがに10年たつと当時最新で今ではもう廃れたデテールが散見して、懐かし恥ずかしなんですがねぇ。
ちなみに私が1980年代の段階で見た、最強の「コンピュータの夢」とは、これです。
あと20年もすれば、ほとんどの人がそれなりにプログラムを書いて楽しむことができるようになる....
ちょっとこれは、実現しっこなさそうですね。
投稿者 : 杉浦 こずえ | 投稿日時 : 2007.11.30 17:42
意外.....文字列比較!
2007.11.21
私の個人ホームページ側にリンクを張ってくれた方のページによると、
Stringの比較で、最近教えてもらった面白い特性を紹介します。
#有名だったらごめんなさい。
------問題-------------------------------
String str1 = "a";
String str2 = "a";
ここで
System.out.println(str1 == str2);
とやると何と表示されるでしょう?
------------------------------------------
答えはtrueです。
だそうです....意外。要するに最適化に絡んだ現象、ということです。
まあ、最適化は「影の領域」ですから、コンパイラのバージョンにもよるでしょうし、一概に言えないのでしょうけども....
どうせならば、Java でも「末尾再帰の最適化」やってくれると楽しいようには思いますね....(どうも最近 gcc はやってくれるようです)
投稿者 : 杉浦 こずえ | 投稿日時 : 2007.11.21 21:03
なつかしい「奇跡」
2007.11.16
ちょっと思い出した懐かしのネタを一つ。
昨日のエントリで JavaScript を使った3Dグラフィックなどを、「メガデモみたい」と評したこともあって、今どうなってるんだろう...と調べてみました(あ、メガデモってのは、「リアルタイムで映像を生成するデモプログラム」です)。
今でも「Assembly」(有名な「パーティ」:要するにメガデモ・コンペティション)はまだ続いているようです。その昔のメインプラットフォームだった Amiga だ Commodore64 だは当然もうないわけですから、今ではWindows プラットフォームで「Combined Demo(無制限?)」「Oldschool Demo(2Dイメージ)」「Combined 64K Intro(64Kbyte以下)」の3部門に統合されているようです。
Future Crew らが活躍した時期と今だと、もちろんCPUの速度は比較なる...わけがないです(486DX2でしたね)。ですから、今のデモだと、レイトレーシング使いまくりの3Dゴリゴリのアニメをキッチリ動かしているわけです。
今の「ちょいとびっくり!級」のものですと、
Farb-rausch fr-025: the popular.demo (2003)
→ ダウンロードサイト:scene.org。今時だと Windows で窓実行するのがいいでしょう。
だと、ディスコみたいなキラキラ・イメージで、かなりリアルな3Dポリゴンの人物がウネウネ踊る(モブシーンあり:これ圧巻)...というものです。メタリックとか半透明のレイトレーシングで出来ていて、床面への写りこみとかきっちり入ってます。ここらへんが今風なんでしょうね。
この Farb-rausch が活動休止した Future Crew に代わる、21世紀のトップグループみたいです。2000年の fr-08: the.product は 64k Intro ですけども(だからダウンロードは一瞬です)、ホント「64Kbyte...冗談でしょ、それ!」となるくらいのスゴさがあります。ドイツで結構大人数で作っているグループです。
まあ、ごく簡単に「こういうもの」というのを見てみたければ、今だと YouTube に Future Crew など昔のものをキャプチャしてビデオフォーマット化したものが入ってたりします。こういうの見て結構懐かしかったです....
Future Crew : Second Reality (1993)
投稿者 : 杉浦 こずえ | 投稿日時 : 2007.11.16 13:36
熱い言語....
2007.11.15
なぜか今一番「熱い言語」って JavaScript みたいですね。
以前紹介した「JavaScript: 世界で最も誤解された言語」とか、O'Reillyの「JavaScript」の第5版とか....と、JavaScript 関連の面白いネタというのは目白押しのような今日この頃です。
たとえばこんなのどうでしょう?
Animation.Cube - サイコロ回転エフェクト (テキスチャマッピング)
JS3D(alpha): The 3d JavaScript Graphic Layer(3Dフレームワーク)
→ たとえば3Dワイヤフレームがゴリゴリ回る。
JS Games (インタラクティブではない視覚効果中心)
→Starfield がキレイ....(これだけIE遅いです)
と、懐かしのメガデモみたいなグラフィックをありふれた JavaScript で、ブラウザ非依存で実現しているものがあります。
「ブラウザによるインタプリタ実行」というかなりハンデのある実行環境でも、CPUパワーが上がってきている分、こういうことが出来るようになってきちゃっている....というのはかなり冷や汗ものです.....
投稿者 : 杉浦 こずえ | 投稿日時 : 2007.11.15 17:02
SPAMはおいしいかな?
2007.11.14
私はお料理を結構よくします。けども、SPAMミートって使ったことがなかったのですね。だって缶詰肉の割りに高いですし、コンビーフみたいに油っ気が強いと苦手...というあたりが理由でしたけども、ちょっと思い切って買ってみました。
まあ、コンビーフがいかにも「油で固めた...」という感じだったのと比較すると、どっちかいうと(油の多い)ソーセージみたいなものでした。味の方は....もう一つですね。続けて買う、という気には私はあまりなりません。
勿論このブログはコンピュータネタですから、やはり「SPAM はおいしいかな?」というのはネタです。私は意外に「技術者としてはおいしい面もある!」というのを指摘したいわけです。というのも、SPAMメールっていうと、日本語関連のRFC理解が浅いこともあって、「RFC的にヘンテコなメール」を平気で送ってくれます。これはメールを読んで処理するアプリを書く場合、「タダで極限に挑んでくれるサンプル」をくれる、という面があるわけです。現状 JavaMail は「RFCに即したメール」でないと、正しく受け付けない...という面がありますから、そこらへん独自にチューンをする切実な必要もあるわけです(そのための参考ページのオススメは「JavaMail完全解説サポートページ」。絶版の本よりコッチがオススメ)。
たとえばこんなものがあったりしました。皆さんもこういうメールを日々受け取っていたりするわけですよね。
- 1. SJIS とか UTF-8 を、そのままベタの本文で送ってくるメール。
- 2. Content-Transfer-Encoding と実際のエンコーディングが違うメール
- 3. なぜか 日本語をQエンコーディングでエンコードしてくるメール(これは必ずしもRFC違反じゃないけど)。
- 4. 日本語じゃないマルチバイト文字(最近ハングルとキリル文字が多い...)で送ってくるメール。
ポジティブシンキングをすれば、タダで「異常だったり少し変だったりするメールをくれる」スパムメールというのは、少しくらいは役に立つこともあるわけです....(けど結構チャレンジ!ですね)
投稿者 : 杉浦 こずえ | 投稿日時 : 2007.11.14 11:29
停電....
2007.11.13
今日、会社のある辺り一帯で、1時間少し停電してしまいました。
配電盤の事故のようで、難波元町近辺の範囲で停電していたのです。私は当然仕事中で、急にコンピュータの電源も蛍光灯も全部消えてしまい、一瞬パニックでした。で、なかなか復旧せず1時間以上待ってましたけども、ホントに開店休業状態でした....
電気が来ないとプログラマって何の役にも立たないわけです(苦笑)。
その中で出た冗談。
こんな停電状態でもコーディングをしなければなりませんでした。で、自転車に発電機をつけて、2人組で片一方が自転車を漕いで発電し、もう一方がプログラムを書く....「これがホントのペアプログラミング!」
お粗末でした。
投稿者 : 杉浦 こずえ | 投稿日時 : 2007.11.13 12:18
スタックの恩恵
2007.11.08
スタック、という用語がありますけども、今回はその話です。
まあこれ、昔からあるデータ構造の名前(PUSH, POP動作のみを許す可変長配列)で、「コンピュータ科学の最大の発明!」とまで言われてきたデータ構造なのですが、どうも若いプログラマは知らない人が多いようです。しかしこの現象は「あまりに一般的に使われすぎているのだけども、直接書くことが今ではあまりない...」というかなり倒錯した理由のような気がしないでもないです。
確かに、プログラマが自分でスタックを作って操作する、というのはたとえば、
- 1. 入れ子構造を持ったデータの処理
- 2. ちょっとした言語をパースする場合
...という風に、「アルゴリズム的なややこしい処理」をする場合専用みたいな格好になっていて、典型的な中級データ構造だったりする、というところにあるようです。とはいえ、Java にだってちゃんと java.util.Stack クラスがあって、それなりに使える(とはいえ Java はスコープを有効に狭める手段がない....)わけです。スタックとして扱った方が明快なケースでは、スタックを使いましょう!
というのか、世の中には「スタック指向言語」というものもあったりするわけです。「面白言語」として紹介した Mind も実はスタック指向言語で、
日本語の語順を、コンピュータで処理しやすいデータとして扱う
のに、スタックの考え方を使ってやっているわけです。その他に、その昔 Basic 全盛期にその対抗馬とされた Forth や、ページ記述言語である PostScript がこういうスタック指向言語だったりするわけです。実際、PostScript だったら、FreeUnixならどこにでもある GhostScript がちゃんとしたインタプリタですから、自前で記述した PostScript を解釈実行されて勉強する、というのも面白いです。
実際、自分でちょっとしたスクリプト言語を書く時というと、パーサがこういう「スタック指向言語の中間形式」に変換してやって、それを実行するという手法があったりするわけです。そういう時にスタック指向言語の知識ってあるといいわけです。
実際、Java の仮想マシンはこういうやり方をしています。ですから、バイトコードインタプリタはスタックマシンであり、実は「Forth仮想マシンの仕様をベースにしている...」という話があるくらいです。
これほど「スタック」というのは重要なデータ構造だったりするわけです。
投稿者 : 杉浦 こずえ | 投稿日時 : 2007.11.08 12:29
薔薇の花嫁?
2007.11.07
さて、今回はフリーソフトのネーミングの話です。
特に Linux 界ってのは、「ソフトのネーミング」に無関心...というのがあります(私も人のこと言えない...)。まあ、無難なのを選ぶ、という傾向がやはりありますが、たとえばサブカル・ネタの名前のフリーソフト、というとたとえば、
Python -- モンティ・パイソン
くらいしかメジャーなものって無いような気もします。国産有名ソフトでもたとえば、Ruby とか Seasar とか、特にそういうネタじゃないですね(憶えやすい名前にする努力はあります)。
古いネタだと、たとえばIBMの開発したチェスマシンが「DeepThought」だったのは、「銀河ヒッチハイクガイド」のネタだったわけで、ジョークのネタ(特に42という数と関連して)としてはいろいろ使われていますけどもね(ゲームのNethack のレベルとか...そういえばこれの日本独自カスタマイズで「戦士」のデフォルト装備がセーラー服。ゲームですからいくら「歴史と伝統」のNethack でもそういうのは許されます)。
最近フリーUNIX 系の日本語入力システムとして、実質開発が止まっている Canna とか freewnn とかに代わるものとして、話題になっているのが anthy です。けど、このネーミングは「おお!」ですね。やはりアニメのキャラクターは旬がありますし、「マジメなソフトなので、ゲームとかとは差別化したい...」という心理も働きますから、そういうネーミングはしづらいところで、こういう名前になった...というのは結構例外的かな、という気もします。
でも、ハッキリ言って、ウケました(ネタ元のファンです...)。そのうち入れてみよっと。
ちなみにネタ元は劇中での「10年後に笑ってお茶を一緒に」というセリフがあったことにちなんで、放送10年後の今年、結構いろいろとファンの間でのイベントがあるようです....ネットの上でも「懐かしアニメ」のわりに、いろいろと新ページが出来ているようなので、結構楽しんじゃってます。
あ、あと「lainOS」というFreeBSD 派生バージョンがあるみたいです。勿論その名の通り(苦笑)。海外にもマニアがいるわけです....
投稿者 : 杉浦 こずえ | 投稿日時 : 2007.11.07 13:58
地震...
2007.11.06
今日10時02分ごろ、関西を中心に地震がありました。
仕事してましたけど、ちょっと検索。
そうすると、どうやら Weathernews の地震速報が一番速かったみたいで、1・2分でネットの上でも情報が出てました。
地震とネット...というと、やはり私なんかは阪神大震災のときが思い出深いです。あの時は神戸郊外に住んでいて、他にすることもないし、電気は来ていたので、徹夜に近いくらいに Nifty の震災フォーラムを見てました...ちょっと感慨ですね。やはり地震を感じると、「家族は大丈夫?」というのは気になるのが人情ですものね。地震被害が大きくないことを祈ります(大丈夫でしょうけど....)。
とはいえこの震災フォーラムについて検索しても、ロクに記事がヒットしないです...10年少し前のことですが、ドッグイヤーというものでしょうか。
投稿者 : 杉浦 こずえ | 投稿日時 : 2007.11.06 13:52
sed のススメ
2007.11.05
同僚から、「JSPの出力の、先頭空白タブを削除したいのだけども...」という相談に乗りました。そのとき、「Tomcat のフィルターで削除するのがいいんだろうけども....」と答えたのですが、「JSPソースを加工してコピーしてOK」という話だったので、
じゃ一番簡単なのは sed でフィルターするのがいいんじゃない?
と答えたわけです....が、同僚は sed を知らなかったのですね。
私はホント sed で正規表現を憶えたようなものです。その昔まだ MS-DOS だった時代、ASCII sed(ASCII Software Tools: UNIX 互換の MS-DOS コマンドをいろいろ作ったシリーズに所収。その解説が「MS-DOSを256倍使うための本」Vol.3) が「ホントにこれちゃんと実装されるの?」と疑いの目で見られるくらいに「極めて高速な MS-DOS 上の正規表現フィルター」として君臨していた時代があったのです。ちなみにライバルは JGAWK(GNU Awk の日本語化。おっと、まだ Vector に転がってる...)でしたけども、こっちはとにかく「遅い...それと MS-DOS だと実質スクリプトファイルを書かないとちゃんと動かせない」という理由で、私は「とにかくフィルターの王者 sed!」という感覚だったわけです(ちなみにストールマンの「GNU宣言」を初めて読んで感動したのは JGAWK に付いてきたものでした....)。
その後、私はどんな環境でも「sed がないと...」くらいの sed のファンでしたけども、やはり「文法が旧弊」というのがあってか、UNIX 系のスクリプト・プログラミング以外では、あまり使われなくなったようで、若いプログラマは知らないんですね。とはいえ、今「デフォルトは Windows + Cygwin」という開発環境の設定ですから、当然 sed は Cygwin にあります。使いましょう!
要するに sed は vi(正確にはその元になった ed)の正規表現置換ルーチンをそのまま抜き出したようなテキストフィルターです。つまり、正規表現で入力を置換して出力する、というものです。まあ、正規表現自体は、Perl & CGI の流行をきっかけとして、「プログラマの必須教養」になっているものですが、sed の正規表現はちょいとクラシックです(まあ、本家みたいなものですから)。たとえば「+」(1回以上の繰り返し)はありませんし、「{}」(繰り返し回数の指定)もありません。しかし、コマンドラインからクォートして大概のコマンドを書けるので、特に置換内容をスクリプトファイルにする必要もありません(ま、UNIXだとawk でも簡単に 'BEGIN{FS=","}{print $3}' とか書けますけどね)。
% sed 's/^[ \o011]*//' # 行先頭のタブスペースを削除
% sed -n '10,30p' # 10行目から30行目を出力。head, tail を組み合わせるより簡単
# ファイルを検索して、見つかったファイルを扱う任意のプログラムを起動するスクリプトを生成する。一応生成されたスクリプトが、ほんとに対象が正しいかどうかチェックしてから実行したいよね...
% find web/WEB-INF/src -name '*.java' | sed -n 's/^.*\/\([A-Za-z0-9]*\)\.java$/someCommand \1/p' >doit.sh
# ファイル名からパスと拡張子を無視して、それを環境変数 target にセットする
# export taget=`basename $file .java` の代替
% export taget=`echo $file | sed 's/^.*\/\([a-zA-Z0-9_]*\).java$/\1'`
など、「イディオムとして憶える」という感覚で使うといいのでは....などと思います。以前、sed の高度な使い方...について、とても良いページがあったのですが、今探してみると見つからなくなってます。それでもネットの上には sed の使い方の情報は結構まだありますから、一度見てみるといかが。
(どうでもいい話ですが、実は sed 文法は「チューリング完全」です。言い換えると、フツーのプログラミング言語と理論上同等の能力がある言語だったりするわけです....)
投稿者 : 杉浦 こずえ | 投稿日時 : 2007.11.05 09:21
面白言語のあれこれ
2007.11.02
Haskell なんてやってるせいか、ちょっと言語の話です。
世の中にはヘンテコな言語がいろいろとあるものです。昔から有名だったのは Jargon File にも項目がある INTERCAL ですが、これは E.S.Raymond 自身が関わっていたことがあるので、特別扱いで収録されたのでは....と思わせるくらいに、ヘンテコ言語というものは実際にはあるわけです(Lisp とか Prolog をこれに入れないで欲しいですけどね)。
まず一番手は Whitespace です。これを使って「Hello, World!」を出力するプログラムは、
あれ、プログラムがない....なんて言わないでくださいね。その名の通り Whitespace 言語では、空白の文字(スペース・タブ・改行コード)だけで、プログラムを書きます。その他の文字はすべてコメントとして読み飛ばされます(苦笑)。とはいえこれ、一応ちゃんとしたスタック言語ですから、Forth とか Postscript 同様に、やろうとすればマトモな動作をするプログラムを書くことができるわけです。
2番手は懐かしの Mind です。
午前?とは 時刻を得て 時が 12より 小さいこと。 メインとは 午前? ならば 「おはよう」を さもなければ 「こんにちは」を つぎに 表示し 改行すること。
あ、これ全然ヘンテコじゃないです....Mind というと、日本語プログラミング言語で相当昔からあるものですから、最近ではGUIもちゃんと付いていて(内部から Tcl/Tk を呼び出す)、現状ではバージョンが 7 にまで進んでます。けど、Mind はヘンテコじゃない、くらいの日本語プログラム表現力が、逆に何かほほえましくていいですね。
一応「言語」というからには、やはりきっちり「(理屈上)どんなことでもできる」というものであって欲しい...わけです。そういう基準は理論の上では「チューリング完全」という言葉で表現されます。つまり、計算理論の中で一番最初に定式化された「チューリング機械」に還元できる、チューリング機械と同等なものであることが証明可能な言語のことをこう呼びます。一応今紹介した Whitespace だって Mind だって、チューリング完全な言語です。それどころか、XSLT や sed のような、「一般的なプログラミング言語ではない」とされる特殊用途言語でも、実際にはチューリング完全だったりすることもあるわけです....というわけで、
変な言語は変じゃない!
というのが、結論でしょうか。逆を狙って「チューリング完全ではない言語」をわざと作る、というのがいいかも。たとえば「無限ループ」が絶対に起きないようにする(while文なし、forループは上限定数のみ、再帰禁止とか...)と、実は理屈上チューリング完全ではなくなります。
投稿者 : 杉浦 こずえ | 投稿日時 : 2007.11.02 09:22





