時空を越えて、僕の混沌とした書斎に到達したのは、A.I. Memo No. 625だった。
次世代の人工知能プログラムは活性オブジェクトのグループとして知識を組織化する能力を必要とするだろう。各々のオブジェクトは、それ自身のローカルな専門的知識、他のオブジェクトと並行に操作される能力と他のオブジェクトと通信する能力を持つべきである。人工知能プログラムはまた大きな柔軟性を必要とし、オブジェクトの多重な表現をサポートし、新しい上位互換のバージョンのオブジェクトと付加的・透過的に置換できることが必要だろう。これを実現するために、我々はactorの概念、message passingによって通信する活性オブジェクトに基づいた計算モデルを提案する。アクターはデータと方法(procedures)の間の伝統的な区別をぼやけさせる。アクター哲学(Actors philosophy)は、プロトタイプ・アクター・インタプリタ、Act 1の記述によって描かれる。
(Abstract of A.I Memo No. 625, June, 1981, A Preview of Act 1, Henry Lieberman) ← 在点
Henry Liebermanを知ったのは、Carl Hewittを調べる過程であったはずだ。Hewitt's Actorsがアクターモデルの出発点だからだ(言葉と物 CXXXI - オブジェクト指向の起源)。Liebermanの文献に、"Concurrent Object-Oriented Programming in Act 1"(1987)がある。並列ねえと思って、"Concurrent Perl"で検索してみると、YAPC::Asia 2008の"From POE to Erlang"の記事が出てきた。このなかにActor Modelの話が出てくる。Erlangの並列処理はアクターモデルに基づくものなのである。Perlに関しては、POEというモジュールについて紹介される。このモジュールはPerlのプロジェクトのなかでは最先端で高度なものとして注目されているようだが、並列処理プログラミングにパーソナルなレベルでは実用的な必要性を求めることは難しいかもしれない。Faiz Kazi氏の話にも出てくることだが・・・
XML PRESS Vol.5の渕先生のインタビューは次のようにしてはじまる。
(XML PRESS) 渕先生といえば、第五世代コンピュータの権威でいらっしゃいますよね。第五世代コンピュータとXMLには、思想面での共通点があるのでしょうか。
(渕先生) やはり、メディアにはその印象が残っているのかな。今は、隠居的に「RubyでXML」なんだけど、うーん。無関係でもないか。第五世代コンピュータでは、並列分散を目指していたのだけど、今ならSOAPかなと考えたことがあります。RubyでSOAPを飛ばしたりのように。
(XML PRESS Vol.5、技術評論社、2002年、112ページ、「渕一博氏、XMLを語る」)
パーソナルな視点から見ると、Webは既に並列分散処理になっている。HTTPリクエストを出せば、答えが戻ってくるわけだ。Webは基本的にメッセージ交換システムである。XMLを交換するSOAPも同じだ。メッセージ交換の約束事がどうなっているかだけのことに過ぎない。
ようやく、WWDC 2008のKeynoteを見た。いつもAppleのサイトで探し回って見つける必要がある。iTunesでダウンロードすればいいのだった。しかし、Podcastでダウンロードすると1.18GBもある。
最近は予測記事が出回るし、予測するほどの話もないが、商標登録から.MacがMobileMeになるという予測も当たったね。MobileMeを介したPCとiPhoneとの連動も素晴らしい。iPhoneで動いているのが、ほとんどUnixだというのが、なるほどと思ったところ。BSDやSQLiteなども動いている。スクリプティング言語をローカルサーバーで動かせるとおもしろい。ソフトウェアのGUI開発ツールは便利そうだが、実際のところ本当に簡単なのだろうかと疑問に思いつつ眺めた。ゲームなどのソフトウェアはPCやゲーム機で動くものと変わらないか、それ以上かもしれない。ゲーム機としても大きな脅威なのではないか。これが・・・
iPhone 3G = $199 !!!・・・だからね。手のひらに高度なコンピュータが実際に載ったねという感じがした。なにもかもが霞んでしまいそうだ^^;)
それはそれとして、電話機にはそれほど興味はないので、iPodの製品ラインナップがどうなるのかということが、今後最大の興味だろう。デバイス代$199はインパクトあり過ぎなんだが、実際にはこれに$99/年のMobileMeの料金と電話代が上乗せになる。さて・・・
アップル、ウェブアプリに向けオープンな「SproutCore」技術を採用か?ネタ。
RoughlyDrafted Magazineが元ネタ。SproutCoreはgemでインストールするので、へーっ、Rubyなのって思ったが、開発にRubyを使うが、純粋なHTML/JS/CSSのWeb標準フレームワークである。
Webアプリケーションを作るのに、AdobeのAirを使うか(「Adobe AIR 1.1」公開、日本語に正式対応)、MicrosoftのSilverlightを使うかが選択肢としてはあるが、Web標準ではない。いずれは、それらの機能もWeb標準に吸収されていくはずだ。こうしてみると、スクリプティング言語にはJavaScriptを選べっていうことになるのだが^^;)
なぜ、GoogleやAppleがオープンなWebを求めるのかの元ネタ解説がおもしろい。
サイモン・シン著「フェルマーの最終定理」(新潮文庫、2006年)。昨日、夢タウンの紀伊国屋書店で吉田秀和著「世界のピアニスト 吉田秀和コレクション」(ちくま文庫、2008年)と一緒に買ってきたが、495ページをもう読み終えた。グールドのスウェーリンクに感嘆しながら・・・第VI章の「秘密の計算」の最後のほうでは涙が浮かんできた^^;)、それでも物語は終わらない・・・
なぜ、読もうとしたかというと、松岡正剛の千夜千冊1241夜『デカルトからベイトソンへ』モリス・バーマン(言葉と物 CXXXII - 意味が壊れる)にあるブレーズ・パスカル(762夜)へのリンクの最初にパスカルの確率の話が出ていて、フェルマーそのものだという記述があったからだ。その部分に関しては、Amazonの読者書評にゲーム理論とあわせて言及もあるが、断片的なものであり、いずれも本筋の話ではない。実は、千夜千冊にはこの本自体が取り上げられている。しかし、それを読むよりはこの本を先に読むべきである。お勧めである。数というものの不思議さをいまさらのように思い返すことになる。
モリス・バーマン著「デカルトからベイトソンへ 世界の再魔術化」(国文社、1989年)。原著は1981年に発刊されている。21世紀の今日、時系列的にはこの本はもはや古いとも言えるのだが、取り上げられている1960-1970年代の問題は現在においてさらに先鋭化されているとも感じられる。
デカルトからベイトソンへ知の身体化の問題こそが、再魔術化のテーマなのかもしれない。ミシェル・フーコーは肯定的に数箇所で引用されているが、「言葉と物」は「デカルトからベイトソンへ」と比べると抽象的である。どちらかというと抽象的というのはフーコー自身がどこかで述べていた。この本は、言葉や物ではなく、人間が主役であり、少なくとも僕には、19世紀末から20世紀の初めで終わっている「言葉と物」(1966)を現代に媒介する道案内の書物のようにも読めそうだ。図版も多く、直感的な理解を助けてくれるのがありがたい。よい本に巡りあった。千夜千冊に感謝^^)
第二百二十五回 ドラゴンコード準備着々 後編ネタ。オリンパスのEye-Trekの話が出ていたので、少し調べた。
ITmedia +D LifeStyle:“完全ワイヤレス”で、HMDはファッションになる ...。デザインは確かにこれからだろうけど、機能的にはかなりおもしろい。
まあ、じぇんじぇん関係ないんだが、ちょっと前にポラロイド話もあったことだし。今日RSSをチェックしていて、10万円で始める、通な銀塩カメラ(1)ニコンF3を見つけてしまって、なんだか忘れ物を思い出したような気がして、Nikon FE(1978)を取り出した。これも10万円ぐらいはしたはずだが・・・この後、F3(1980、定価17.5万円)は出てきたはず・・・ふーむ30年物^^;)
Nikon FEなぜ、このカメラを使わなくなったかというとストラップやカメラケースがぼろぼろになって、さらにはレンズキャップを無くしてしまったからだということを思い出した。それくらいならなんとか復元できるね。
博多に一泊旅行をしたとき、使い捨てカメラで取った写真をFUJICOLOR CDに入れてもらったのだが、描写性能はどちらとも言えないが、画質(解像度)は携帯のデジタルの方がいいぐらいだった(博多巡りの思い出)。当然か、レンズが小さすぎるからね。Nikon FEで試してみようか。しかし、コストがねえ・・・
記憶の忘れ物で「ゲーム理論」を取りあげたが、それよりももう少し古い言葉に「サイバネティックス」があった。第八百六十七夜【0867】2003年10月10日、ノーバート・ウィーナー著『サイバネティックス第二版』が参考になる。
サイバネティックスという言葉をどこで最初に聞いたのかは忘れたが、小学生ぐらいだったかもしれない。学校の先生の何かすごい考え方なんだみたいな文脈の話だったような気がするが、小学生にする話でもなさそうだな^^;)中学生の時かな・・・記憶が偽造されているかもしれない。
最近、思うのは現代は1980年代のどこかぐらいから退化を始めたのではないかということ。物の見方、考え方自体が過去のほうが豊饒に思えるからである。オブジェクト指向の過去を調べていて未来に旅をしているような錯覚を覚えたからだ。サイバネティックスの考え方を少し調べてみるともっと先の未来を覗けるかもしれない。
岩手宮城内陸地震の震源地に近い山間部の見たこともないような広範囲な陥没の原因の説明図を見ながら、山津波という言葉を思い出した。世界中で大変な災害が続けて起きている。人間の存在を超えた自然の力には為す術もない。僕はといえば、最近は季節の移り変わりにも言及することもなく、日記を書き続けている。
昨日は、Joe Armstrong著「プログラミングErlang」(オーム社、2008年)がアマゾンから届いた。今回はいやに速い。速達は別料金制になって以来、のんびりモードの配達で、これじゃアマゾンでなくてもねと思ったりしていたところ。今日は、トナーも届いて、プリンタが動き始めた。「プログラミングErlang」には久しぶりにゾクッと来たね。よい本だ。可能性を感じさせる。もう少し使ってみないと本当のところは見えてこないけど・・・これまでにないプログラミング言語である。
「プログラミングErlang」と一緒に届いたのが、カートに入れたままになっていたパスカルの「パンセ」(中公文庫、1973年)。千夜千冊にもあったので、やはり、手を抜くわけにもいかないだろうと・・・
短い断章の集成のような構成なのだが、次の極めて短い章で、小さく唸った。
二三言葉は、ちがった配列をすると、ちがった意味を生じ、意味は、ちがった配列をすると、異なった効果を生じる。
これは意味は作用だと言ったパースの感覚・・・、もっとも渕先生からの又聞きだけど。
疲れが肩に覆いかぶさっている。今週は月曜日から4日間キャリーバックなるものを引っ張って歩いた。海外二泊、水曜には関空へ戻り、南海電車で目的地に向かう。夕方、夜の闇に向かって新幹線でさらに東京を目指した。木曜は仕事をなんとか予定通り済ませて、羽田を立つ。仕事以外の収穫は、本が三冊。新大阪駅のキオスクで焦りながら何か一冊をと選んだ、北岡元著「仕事に役立つインテリジェンス 問題解決のための情報分析入門」(PHP新書、2008年)と、K氏に教えてもらったピーター・バーンスタイン著「リスク」上下(日経ビジネス文庫、2001年)二冊は広島駅に戻って、またもや廣文館書店で購入。いずれも確率の話が絡む。「リスク」のほうにはゲーム理論の言葉が直接登場した。
ようやく、TSNETを読む。でびさんのsort問題にYささんのawkスクリプト。さて、ソートを文字コード順ではなくて、任意の順を指定してソートするにはどうするのか。Yささんのawkスクリプトをperlに移植してみる。なんだか、スクリプトを書くのは久しぶり。もっと他の方法はないかなと考えたり、リハビリにはもってこいの課題だった( 533. Re: Sort の考え方 [jscripter] 2008/6/28(01:20))。
ErlangがActor Modelを体現した並列分散言語であるということで、もう少し調べてみることにした。第五世代コンピュータが追い求めたPrologによる並列分散を実現したものとも考えられるので、そういう意味でも興味がある。Prologについては、S-Prolog時代は「Prologの冒険」(ソフトバンク、1992年)でかなり研究したのだが、それ以来、Ciao PrologやSWI-Prologなどに少しは触ってみたぐらいで、本格的には試していない。
サンプルを動かす準備をする。ErlangのページにあるDownloadsから最新のものでもダウンロードしてインストールしよう。次に、erl.exeにパスを通しておこう。
ExamplesのSmall Examplesのページからいくつかのスクリプトをダウンロードして、適当なディレクトリに格納しよう。そのディレクトリでコマンドプロンプトからerlを起動する。
Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\Documents and Settings\jscripter>cd c:\Scripts\erlang C:\Scripts\erlang>erl =PROGRESS REPORT==== 12-Jun-2008::22:10:40 === supervisor: {local,sasl_safe_sup} started: [{pid,<0.32.0>}, {name,alarm_handler}, {mfa,{alarm_handler,start_link,[]}}, {restart_type,permanent}, {shutdown,2000}, {child_type,worker}] =PROGRESS REPORT==== 12-Jun-2008::22:10:40 === supervisor: {local,sasl_safe_sup} started: [{pid,<0.33.0>}, {name,overload}, {mfa,{overload,start_link,[]}}, {restart_type,permanent}, {shutdown,2000}, {child_type,worker}] =PROGRESS REPORT==== 12-Jun-2008::22:10:40 === supervisor: {local,sasl_sup} started: [{pid,<0.31.0>}, {name,sasl_safe_sup}, {mfa, {supervisor,start_link, [{local,sasl_safe_sup},sasl,safe]}}, {restart_type,permanent}, {shutdown,infinity}, {child_type,supervisor}] =PROGRESS REPORT==== 12-Jun-2008::22:10:40 === supervisor: {local,sasl_sup} started: [{pid,<0.34.0>}, {name,release_handler}, {mfa,{release_handler,start_link,[]}}, {restart_type,permanent}, {shutdown,2000}, {child_type,worker}] =PROGRESS REPORT==== 12-Jun-2008::22:10:40 === application: sasl started_at: nonode@nohost Eshell V5.6.1 (abort with ^G) 1> board:start(). ** exception error: undefined function board:start/0 2> c(board). ./board.erl:226: Warning: variable 'X' is unused ./board.erl:313: Warning: variable 'X' is unused ./board.erl:316: Warning: variable 'X' is unused ./board.erl:318: Warning: variable 'Rec' is unused ./board.erl:320: Warning: variable 'H' is unused ./board.erl:322: Warning: variable 'Rec' is unused ./board.erl:336: Warning: variable 'B' is unused ./board.erl:348: Warning: variable 'Canvas' is unused ./board.erl:370: Warning: variable 'Lab' is unused ./board.erl:447: Warning: variable 'Lab' is unused ./board.erl:593: Warning: variable 'Win' is unused ./board.erl:600: Warning: variable 'Win' is unused ./board.erl:752: Warning: variable 'C' is unused ./board.erl:762: Warning: variable 'A' is unused ./board.erl:780: Warning: variable 'D' is unused ./board.erl:790: Warning: variable 'B' is unused ./board.erl:838: Warning: variable 'Ball' is unused {ok,board} 3> board:start(). true 4> You win 1 and loose 13 End of game 4>
Small Examplesのページにあるようにスクリプトを実行する前に、スクリプトをコンパイルする必要がある。「c(board).」というコマンド操作がそれである。
Erlang example: board.erlTkが立ち上がってゲームがはじまる。なかなかおもしろい。ブラックホールならぬブラックキューブに赤いボールが吸い込まれないようにゴールへ運ぶゲームである。
最近のプログラミング言語は文字コードがUTF8ならば通るようになってきた。慶賀の至りである。おそらくErlangもそうであろうと試してみる。
bash-3.2$ pwd /cygdrive/c/home bash-3.2$ cd /cygdrive/c/scripts/erlang bash-3.2$ pwd /cygdrive/c/scripts/erlang bash-3.2$ erl =PROGRESS REPORT==== 13-Jun-2008::21:04:31 === supervisor: {local,sasl_safe_sup} started: [{pid,<0.32.0>}, {name,alarm_handler}, {mfa,{alarm_handler,start_link,[]}}, {restart_type,permanent}, {shutdown,2000}, {child_type,worker}] ..... =PROGRESS REPORT==== 13-Jun-2008::21:04:31 === application: sasl started_at: nonode@nohost Eshell V5.6.1 (abort with ^G) 1> c(sampleutf8). * 1: syntax error before: '[' 1> sampleutf8:hello_world(). ハローワールド、ソレイユ! ok 2> sample:hello_world(). Hello, World! ok 3> c(sample2). {ok,sample2} 4> sample2:hello_world(). こんにちは、赤ちゃん! ok 5> samplesjis:hello_world(). ハローワールド、ャ激Cユ! ok 6>
UTF8は予想通り。SJISは予想通り文字化け。上記の出力サンプルは、ckstartup.jsというwscriptの出力で、SJIS、EUC、UTF8の自動判別出力表示が可能なCygwinコンソールckが動いている。ねこ丸さんに教えてもらったものだったか・・・なかなか重宝する。[O] これから15分で Erlang を始めるための資料のHello Worldサンプルを文字コードを変えて日本語で試した。
ちなみにCygwinのコンソールではWindowsアプリも動作する。ただ、本家のck terminal emulatorは見えなくなっているようだ。Poderosaもうまく起動できなくなったし、Aprotool TM Editorが頼みの綱か。うーむ・・・そうか、K.Takata's software : ck (for Win9x)は、XPでも動作するので使えますね。Cygwinの「エクスプローラでフォルダの右クリックからckを呼ぶ」を参考にすれば、ckstartup.jsもさらに便利になる。ck.exeとckstartup.jsをC:\cygwin\binに置くなら、レジストリの「HKEY_CLASSES_ROOT\Folder\shell\ck」に「Cygwin ck here」、「HKEY_CLASSES_ROOT\Folder\shell\ck\command」には「wscript c:\cygwin\bin\ckstartup.js "%1"」と設定すればよい。僕はレジストリエディタを使って設定した。(ただ、右クリックしたディレクトリをカレントディレクトリとして、ckが起動されない^^;)
Erlangプログラムのコンパイルは一度でよい。二度やるとわけのわからないエラーが出た。上記の出力サンプルの最初のほうでは、一度コマンドプロンプトでコンパイルしたものを再コンパイルしてエラーが出ている(註)。ソースを格納したディレクトリを調べてみると、コンパイルしたものには、beamという拡張子のファイルができている。
(註) 実は、繰り返して、コンパイルしても問題ない。単に、カーソルをコマンドラインで変に動かした場合にエラーになるようだ。
1年以上前の記事だが、twitterブームの陰で注目を集める“ Erlang ” - @ITが、Erlangについての説明としては最適だろう。
・・・と思いながら調べていると、見たことのある記事ばかりだよねと思い始めた。更新日記を検索してみると、バベルの塔その後 ⇔ GraphVizへワープ (2007/08/15)の記事の最後に、現在もGoogle上位に出てくる記事へのリンクがある。ここにある「みかログ 新・天然みかげ120%」がErlangの中味については実践的に最も詳しそうだ。時折新しい記事がポストされているようなのでウオッチは吉かも^^)チップスは、Erlang Tipsにまとまっている。
もう一つ二つ、見つけた。Erlang Notesにあるリンク、Erlang クエックブックの関数のリストがプログラミングには参考になるだろう。
Erlangはメジャーになるかどうかということなのだが、「みかログ」でも注目されているYawsというWeb serverがキラーアプリになるのかもしれないということぐらいかな。サーバーは並列分散が本質だから。デスクトップCGIを標榜としている僕としてもフレームに割り付けたCGIが並列で動作すると、パフォーマンスを改善する可能性がある。しかし、OS自体が忙しそうだからね。それがネックのような気がする。OS自体が並列分散にならねば、トータルでパフォーマンスが上がらないかも。Erlang OSという考え方も既にある。
Erlangは、Joe Armstrong氏のホームページにある文献(Publications)を読むと、a Prolog meta-interpreterとしてErlangが生まれ出る長い物語の出発点は、1980年代初期のEricsson MD110という電話交換機をUNIXで制御するようにプログラムしたPOTSというアプリケーションである。
Erlangがまだ実験的な電話通信プログラミング言語であった1990年には、KL/1や、初めて目にした言語だが、Strand (programming language )のような並行論理プログラミング言語を目指していた。「プロセスを同期させたり、プロセス間でデータを交換する唯一の方法は、メッセージ・パッシング(Message passing)である」としている。
Joe Armstrong氏の引用していたSTRAND言語を調べると、Gridの父と呼ばれるIan Fosterに達し、さらにはMPI(Message passing interface)に到達した。オブジェクト指向から知識表現、アクターモデル、ゲーム理論、メッセージング・パッシング、並行プログラミング、Ruby1.9のFiber、Revactor、Erlangと駆け足でWebをスキャンしてきたが、ほぼ最先端の情報に達したようだし、プリンタもトナー切れ、リンクを辿るのはこれで一旦止めておこう。トナーが届き次第、再開するとは思うが^^;)
ちなみに、MPIと、MPIの文献の中に比較として出てくるPVM(Parallel virtual machine)については、Perlにはそれぞれモジュールが存在する。
Erlangに触っているとProlog的記法が懐かしくなって、遅蒔きながら「プログラミングErlang」を注文してしまった。アクターモデル、メッセージ・パッシングか。これも何かの縁だねえ。
文字列処理のプログラミングにおいて、正規表現によるパターンマッチは大変強力な機能である。他の方法で文字列処理のプログラムを書きたいとは思わない。昔は、Perlでデータを組み込んだPrologのプログラムを生成して遊んでいたことを思い出す。erlang:cookbookのページを、「Erlang regex」で検索して見つけた。Erlang クエックブックのページのサンプル「ファイルの改行コードを変更する」に「regex:gsub」の文字列を見つけたからだ。残念ながら、まだ作り掛けのようだ。
ここで、少し実用的なプログラミングに向けて、テスト的なものを書いてみよう。HTMLを読み込んで、タグを除去してテキストとして出力するプログラムである。Perlなら、LWPモジュールを使えば簡単な作業である。こんな具合になる。ErlangのサイトにあるExamplesのurlgetモジュールのdirect関数をインポートして使っている。
-module(webconv). % the first hack on Erlang by jscripter: 2008-06-15 -export([html2txt/2]). -import(urlget, [direct/1]). html2txt(URL, Txtfile) -> {ok, {Url,Reply,Head,Body}} = urlget:direct(URL), Str = Body, {ok, NewStr, RepCount} = regexp:gsub(Str, "<[^>]+>", ""), file:write_file(Txtfile, list_to_binary(NewStr)).
上記のプログラムをwebconv.erlとして保存しよう。モジュール名とファイル名は一致する必要がある。コンパイルして、実行した結果は次のようになる。a.txtを調べると、確かにHTMLタグはすべて除去されていた。regex:gsubのgsubは「globally substitute」という意味で、マッチしたものは全部置換する。erlang:cookbookによれば、Erlangの正規表現はegrepのシンタックス(On-line Manual of " egrep ")に従う。
8> c(webconv). ./webconv.erl:10: Warning: variable 'Head' is unused ./webconv.erl:10: Warning: variable 'Reply' is unused ./webconv.erl:10: Warning: variable 'Url' is unused ./webconv.erl:12: Warning: variable 'RepCount' is unused {ok,webconv} 9> webconv:html2txt("http://text.world.coocan.jp/","a.txt"). Here connect:"text.world.coocan.jp" 80 progress:#bytes (100%) = 2548 ok
昨日、夢タウンの紀伊国屋書店で、「新潮」6月号を調べていると、浅田彰氏のアラン・ロブ=グリエへの追悼文、「あるポルノグラファーの死――ロブ=グリエへの遅れてきた追悼」があった。[時事][ノート]あるポルノグラファーの死 - Flying to Wake Islandよりに詳しい。
先日、アラン・ロブ=グリエとソレルスは無意味に向かったと書いた(言葉と物 CXXXII - 意味が壊れる)ばかりなので、あーっ、亡くなったのかと感慨深く思った。85才。「嫉妬」(新潮社、1959)、「快楽の館」(河出書房新社、1969、原著: 1965)、「消しゴム」(河出書房新社、新装版、1979、原著: 1953)、「覗く人」(講談社、1970)、「快楽の漸進的横滑り」(新潮社、1977、原著: 1974)が手元にある。懐かしい作家であることは確かだが。評価が定まらないということも確かだろう。
松岡さんの「ポスト・メディア論」(在点)が気になるね。いずれ戻っていくかもしれない。最近、オブジェクト指向について調べて、その歴史を辿ると、意味ネットワーク、知識表現、フレーム理論や人工知能に辿りついた。僕は、プログラミング言語の系列を辿ることになると予想していたので、かなり意外な感じがした。そこには最も親しみのあるFORTRAN、BASICやCなどの言語は見当たらない。
言語には二系統あるのかなと思った。人間(人工知能)から発展したものと機械から発展したもの。僕が知っていた言語の種族は機械(アセンブラ)から進化したものだったと言えるのかもしれない。
パターンマッチは極めて人間的な機能だ。さまざまな構造を持つ情報から自分の欲しい部分を取り出すためにパターンマッチを利用する。そうして収集したものを組織化してまとめることができる。僕はそのためにプログラミングを利用している。プログラミングだけではない。Webの情報の集積に目を凝らしながら、自分の欲しいパターンを求めている。自らパターンマッチング・マシンと化していることに気が付く。
それで、なぜこの記事がメディアというカテゴリーに入るかだが、今思いついたのは、パターンマッチは情報と人間の間に介在するメディアではないかということ。お後がよろしいようで^^;)
渕先生の言われたパースの言葉「意味とは作用である」は本日記では繰り返して出てくる。僕にとってはそれほど印象的だったのだ。世界の名著(中央公論社、1968年)のパースの「論文集」から、それに該当する言説を探す。結局、ほとんど全部を調べたようになった。
「どんな記号であれ、その記号のもつ理性的な意味の総体とは、その記号について考えることのできるあらゆる状況とあらゆる意図のもとでの用法から導きだされる人間の理性的行動の、あらゆる一般的な様式の総体にほかならない」
世界の名著(中央公論社、1968年)、パース、「論文集」、第八章 プラグマティシズムの問題点、一 若干の確実と思われる常識が存在する(247ページ)
言ってみれば、プログラムのモジュールの意味はメソッドだと言っているようなものである。そのようにモジュールを書かねばならないのかも・・・
今日、論文集を読んでいて、気になったのが「推論」という言葉が多用されていることだ。松岡さんの千夜千冊の話の主軸を成す。気になるけど、少し寝かせておこう。
[TSpython:1124]のBruce.さんネタ。Processingで作っているというのだけど、結構なものなのかもしれない。元のデータと映像の関係が知りたいものだが・・・
Processingの最新版、0141βはUTF8のデータが取り扱えるようになったらしい。研究してみる価値のあるものがもう一つ登場したということだ。Processingを最初に取り扱ったのは、表現のためのツール (2005/01/12)の記事で、一時動作しなくなっていた(Win版iTunesのバグ検証podcast (2007/05/04))。
ペンローズ・タイルの描画Processing関連では、John Resig - Processing.jsが注目されているらしい。
RubyKaigi'08の記事を書いて、TSNETWikiにもページを作ってみた。そんなところで、日本Ruby会議2008の趣意書を読んだ。Rubyの世界も多様性の中に拡散する危険性を孕んでいる。有名どころでは、JRuby、IronRubyだが・・・
僕のスクリプティング言語遍歴は、1990年代の初めにXTR/TBLを経て、JGAWKからjperlという流れを辿る。sedを使っていたこともあるが、sedが得意と考えられる置換処理を比べてみると、当時はjperlが信じられないぐらい圧倒的に速かったので、もうjperlを使えばいいんじゃないということで現在に至っている。
Rubyに関しては、当初から関心は持ってはいて、リンクページ(オブジェクト指向スクリプト言語Rubyを使おう:Yet Another Ruby Links)は作っていたが、2003年ぐらいに初めて私のRubyページ「Ruby AWKING for Beginner」を書いた。その時思ったのは、この程度の内容であれば、結局jperlを書くのと一緒だということ。それから、Rubyならではの題材はと、ずーっと考えている・・・^^;)dRubyに注目して、本は二冊とも初版^^)を買ったけど、例によって積読。個人的な目的の中では使い道に結びつけることが難しいし、直接的な目的に定めないと手がけることができない。
この記事を書こうと思ったのは、本家以外のインプリメンテーションとして、ParrotでRubyを動かすCardinalが今どうなっているのだろうと調べ始めたのがきっかけ。「parrot ruby」で検索、まず、On Ruby : Parrot /Cardinal Mini-Interviewが出てきた。ここで見かけない文字列「Rubinius」を見て調べ始めた。そこで、またActor-modelとErlangの文字列に出会う。
最後のRevactor libraryのリンクで、なんだか、Rubyと僕がつながったみたいな気がするけど・・・^^)/~
うむ、簡単なことはどこにもない^^;)これまではRubyにどっぷりはまるほど触っていないので、常識がない。Revactorをインストールしようとして、初歩的なところで躓いてしまった。
Revactorは、1.9で導入されたFiberというクラスライブラリ(class Fiber)を使うので、1.8系列ではうまく動かないはずだ。それで、1.9.0をインストールしてというか単にzipファイルを解凍しただけだが、1.9.0ではgemがデフォルトで配布されているので、そのままrevactorをインストールしようとした。
C:\Scripts\Ruby\rubygems-1.1.1>c:\scripts\ruby\1.9.0\bin\gem install revactor Bulk updating Gem source index for: http://gems.rubyforge.org Building native extensions. This could take a while... ERROR: Error installing revactor: ERROR: Failed to build gem native extension. C:/LAN/ruby-1.9.0-0/bin/ruby.exe extconf.rb install revactor 'C:/LAN/ruby-1.9.0-0/bin/ruby.exe' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 Gem files will remain installed in C:/LAN/ruby-1.9.0-0/lib/ruby/gems/1.9.0/gems/ rev-0.2.2 for inspection. Results logged to C:/LAN/ruby-1.9.0-0/lib/ruby/gems/1.9.0/gems/rev-0.2.2/ext/htt p11_client/gem_make.out
わけのわからないエラーが出る。このC:/LAN/...はなんだい。CドライブにLANというディレクトリができている。ちょっと、1.8.7系列に戻ってインストール関係を確かめてみよう。gemがデフォルトで入っていないので、gemのインストール用のsetup.rbで一悶着あって、RUBYOPT環境変数を削除(エラーメッセージで検索して、cygwin環境で Ruby を動かすとき。「ubyって何だよ。」 - Hell o world (foo)を参照)。Fiberはないけど、インストールを試してみる。
C:\Scripts\Ruby\rubygems-1.1.1>gem install revactor Bulk updating Gem source index for: http://gems.rubyforge.org/ Building native extensions. This could take a while... ERROR: Error installing revactor: ERROR: Failed to build gem native extension. C:/Scripts/Ruby/1.8.7/bin/ruby.exe extconf.rb install revactor checking for main() in c.lib... no creating Makefile nmake Microsoft (R) Program Maintenance Utility Version 1.50 Copyright (c) Microsoft Corp 1988-94. All rights reserved. cl -nologo -I. -I. -IC:/Scripts/Ruby/1.8.7/lib/ruby/1.8/i386-mswin32 -I. -MD -Zi -O2b2xg- -G6 -c -Tchttp11_client.c http11_client.c c:\Scripts\Ruby\1.8.7\lib\ruby\1.8\i386-mswin32\config.h(2) : fatal error C1189: #error : MSC version unmatch: _MSC_VER: 1200 is expected. NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code '0x2' Stop. Gem files will remain installed in C:/Scripts/Ruby/1.8.7/lib/ruby/gems/1.8/gems/ rev-0.2.2 for inspection. Results logged to C:/Scripts/Ruby/1.8.7/lib/ruby/gems/1.8/gems/rev-0.2.2/ext/htt p11_client/gem_make.out
あれ、nmakeが動いているじゃない。拡張モジュールか・・・なるほど、「Building native extensions.」の意味が頭に染透っていなかった^^;)
この調子では、Windows環境では無理そう。Linuxにログイン。
Ruby 1.9用のDevactorというライブラリ以外にActor-modelを持つ1.8用のライブラリがあった。Interview With Revactor Developer Tony Arcieriより。The Omnibus Concurrency LibraryというActor-modelに基づくライブラリをRubiniusは標準でサポートしているそうだ。Ruby 1.8で動作する。RubyForge: The Omnibus Concurrency Library : Project Infoを見ると、concurrentとcaseというライブラリをインストールすればよいようだ。
1.8でよいなら、Cygwinにインストールしてみよう。まず、gemをCygwinにインストールして(すなわち、CygwinのRubyで「/usr/bin/ruby setup.rb install」とすればよい)、Cygwinのgemでインストールすればよい。
jscripter@Dell3 /usr/bin $ ./gem install concurrent Bulk updating Gem source index for: http://gems.rubyforge.org/ Building native extensions. This could take a while... Successfully installed scheduler-0.3 Successfully installed concurrent-0.2.2 2 gems installed Installing ri documentation for scheduler-0.3... Installing RDoc documentation for scheduler-0.3... jscripter@Dell3 /usr/bin $ ./gem install case Bulk updating Gem source index for: http://gems.rubyforge.org/ Successfully installed case-0.4 1 gem installed Installing ri documentation for case-0.4... Installing RDoc documentation for case-0.4...
Matzにっき(2007-05-25)の[Ruby] RubyForge: The Omnibus Concurrency Libraryが参考になるだろう。
次のライブラリもいるのかな・・・
jscripter@Dell3 /usr/bin $ ./gem install concurrent-selectable Bulk updating Gem source index for: http://gems.rubyforge.org/ Successfully installed concurrent-selectable-0.1.1 1 gem installed Installing ri documentation for concurrent-selectable-0.1.1... Installing RDoc documentation for concurrent-selectable-0.1.1... jscripter@Dell3 /usr/bin $ ./gem install concurrent-sequential Bulk updating Gem source index for: http://gems.rubyforge.org/ Successfully installed concurrent-sequential-0.2 1 gem installed Installing ri documentation for concurrent-sequential-0.2... Installing RDoc documentation for concurrent-sequential-0.2...
なるほど、みんな過去に追いつきつつあるということか・・・PCの性能が昔のミニコンや並列分散マシンの性能に追いついたわけだ。
しかし、なんだかおかしい。ライブラリがインストールされてない・・・ような・・・まつもとさんの日記にあるサンプルが動かない^^;)
よく調べると、ライブラリはすべてC:\cygwin\lib\ruby\gems\1.8\gemsにインストールされている。なぜ、動かないか。RubyGemsでライブラリをインストールした場合には、スクリプトの最初に、require 'rubygems'と加えるか、ruby -rubygems yourscript.rbとするか、RUBYOPT=rubygemsを設定するかが必要ということだ。ちょっとこの仕様はいただけないという気はするが・・・まあ、当面大したことではない。
jscripter@Dell3 /cygdrive/c/Scripts/Ruby $ ruby -rubygems concur.rb Howdy, Bill! jscripter@Dell3 /cygdrive/c/Scripts/Ruby $ ruby -v ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-cygwin]
Debianを立ち上げて、なんたらパッケージマネージャからRuby1.9をインストールすると、/usr/bin/gem1.9がインストールされるので、revactorのインストールを試してみた。
jscripter@jscripter:~$ gem1.9 install revactor Bulk updating Gem source index for: http://gems.rubyforge.org/ ERROR: While executing gem ... (ArgumentError) illegal access mode rb:ascii-8bit
だめか(;_;)
Ruby1.9で実装されたFiberを試すまたとないチャンスなのに・・・うーむ、このエラーはrootになっていないからかな。まあ、明日のことにしよう^^;)
SUしても一緒(;_;)
昼から、ひろしま美術館のマティスとルオー展に車で出掛けたのだが、入り口に並んで待っているとねばったにもかかわらず結局追い払われてしまった(;_;)待ち行列は渋滞の原因というわけだ。二台目でそれほど後続車の邪魔になっていたとは思えないので、相当ムカついたが、あきらめて他の駐車場に向かった。しかし、降雨のせいか、紙屋町付近の駐車場は満車で入り口には車の長い行列が・・・ムカついたのと、見ようという意欲が萎えてしまったのとで、今日はやめだと帰宅。バカみたい^^;)車で行くんじゃなかった・・・「一般」来館者をもっと大切にする態度が欲しいね--)
それはともかく、ひさしぶりのスクリプトはよい題材なので、さらに展開してみた。一つはRubyで書くとどうなるか。Perlの場合は、UTF-8文字列を処理する場合、UTF-8フラグのオン・オフの問題があるが、Rubyではないはずということを確認した。もう一つは、PerlのUTF-8フラグの立て方・降ろし方について検討すること。
Perl 5.8.x Unicode関連やPerl/CGI メモ @Siliconics ~北大マイクロコンピュータ研究会 WEB Site~のページが参考になりそうだ。
ひさしぶりのスクリプトがもう少しでプロジェクトに化けそうだったが、世の中にはそれなりに既にあるというか、Unicode文字列をJISX4061の仕様でソートするPerlモジュールが見つかった。
Zazelさんが、JISX4061を話題にしてくれた御蔭だ。まあ、これが現在の日本語文字列ソートの標準なのだろう(TSabc:561)
日本語文字列のソートの問題を考えていると、辞書順(読み順)にソートするだけではおもしろくないと思い始めて、意味的なソートができないかと考え始めた。任意の順にソートするとは意味的にソートすることに通じるわけだが、読み順だったり、時系列順だったり、意味的な塊順だったりと、データの持つ属性によってソートすることにつながってくる。これは一種の分類である。
佐々木俊尚 ジャーナリストの視点: ウェブ3.0と黒川紀章ネタ。最近、Web 3.0が話題になっているのだそうだ。
結論、Web 3.0 =「自分自身による再集約」。我がサイトそのものではないか;-)
ホモ・モーベンスという黒川紀章氏の用語は「動民」という意味らしいが、今や人間は都市や建物の間を動くだけではなく、Webのネットワークを移動して情報を収集して廻るmovensとなりつつあるのかもしれない。Web Crawlerに例えれば、ホモ・クローレンス(Homo Crawlens)ということになる。
・・・自分が生きがいを求めて人間らしく生きるためには、独自のユニークな情報を求めなければならない。つまり、クリエーティブな情報の時代になる。そう言う第二次情報社会になると、いったいクリエーティブな情報というものは買えるかどうか。むしろ自分のもつ個性的な情報の代価として物々交換で手に入れるより他にないだろうと思う。そのとき、いつでもどこでも、自分の望むときに発信し、受信し、フィードバックする能力を持ったカプセルは、大きな有効性を発揮するであろう。
(黒川紀章著「ホモ・モーベンス」、中公新書、1969年、孫引きですまぬが^^;)
ここに出てくるカプセルという概念はおもしろい。建築家の言葉だから、一種の小さな書斎のようなものだったかも。
人間はどこを動くのか。自分自身<=>社会かなあ。