今朝は娘を英検の試験に鈴峯まで車で連れて行った。帰りの時間まで待つこと約二時間、井口のサンデーサンと中央書店で過ごした。モーニングトーストセットとセルフサービスのドリンクでネットランナー2月号の自宅サーバー運営マニュアルをじっくり読んでコーヒー3杯目を飲み終えると中央書店に移動。文芸春秋創刊80周年記念二月特別号に立花隆が「地獄の黙示録」22年目の衝撃を書いているのでしばらく立ち読み、結局ゲットすることに・・・時間があるのでスイング・ジャーナルなどご無沙汰の雑誌を立ち読み、トム・クランシーやSF関係などコンピュータ関連以外をじっくり調査。結局、グレッグ・イーガンの「宇宙消失」と「祈りの海」をさらにゲット。グレッグ・イーガンは「順列都市」で注目していた作家、J.P.ホーガンと同様、ハードSF系の作家だが読ませるね。最近は忙しくて最後まで読みきる小説というのは少ない、積読にならないように・・・「順列都市」もホーガンの「ミクロ・パーク」もまだ読み掛けだ。アシモフなきあと、読むべき作家が一人増えたのはうれしい。
昨年末にリリースされたα2を動かしてみた。我が愛機にはちと荷が重いが動いた。Project: KDE on Cygwin File Listから次のものをダウンロードしてインストールしよう。
binutils-20011126.tar.bz2 libtool-2001-12-14.tar.bz2 perl-5.6.1-p1.tar.bz2 perl-5.6.1-p2.tar.bz2 kdebase-2.2.1-a2-u1.tar.bz2 kdebase-2.2.1-a2.tar.bz2 kdegames-2.2.1-a2.tar.bz2 kdelibs-2.2.1-a2-u2.tar.bz2 kdelibs-2.2.1-a2-u3.tar.bz2 kdelibs-2.2.1-a2-update1.tar.bz2 kdelibs-2.2.1-a2.tar.bz2 startkde
Windows2000上のKDE2.2.1 on Cygwin α2
デザインは当然、1.1.2よりは良いがはるかに重い。高速のPC環境で使うことが前提だ。WebブラウザのKonquerorはまだ起動しなかった。焦らずβになるまで待ったほうが良いかもしれない。
本サイトにリンクを張っていただいたページを発見(^^)このサイトのリンク集は凄い!必見
XSLTプロセッサはいろいろあるようだが、Sablotronが紹介されている本を読んだので試してみた。既に0.80が出ており、Perlから制御するためのモジュールもあるが、残念ながら、Win32版は不完全な出力しか得られなかった。特にgenerate-id()関係がおかしいし、害はないが含まれない項目が出力されたりする。スクリプト言語が関連するツールに興味があるので、CPANをXSLTで検索して探してみた。XML-LibXSLTというのがxmlとxslからhtmlを出力できるモジュールのようだ。このモジュールはXML-LibXMLも使うのでそちらもゲット。これはGnomeのXML C libraryであるlibxmlもインストールする必要があるので、Cygwinにインストールすることにする。結局、
次のようなPerlスクリプトがhtmlを出力する。これってSYNOPSISそのままだけど(^^;)出力をIE6で読み込むとxmlとxslの場合とまったく同じ結果が得られる。素晴らしい。入力がShift_JISでも出力はUTF-8になる。
use XML::LibXSLT; use XML::LibXML; my $parser = XML::LibXML->new(); my $xslt = XML::LibXSLT->new(); my $source = $parser->parse_file('ts_news2.xml'); my $style_doc = $parser->parse_file('ts_news2.xsl'); my $stylesheet = $xslt->parse_stylesheet($style_doc); my $results = $stylesheet->transform($source); print $stylesheet->output_string($results);
ニュースの更新を開始した。当面、XML/XSL版だけだが、HTML版にも拡大していく予定。XML/XSL版はXMLについてのノウハウを獲得するための実験のようなものだが、プログラミングとしても結構おもしろい。IE6しか読めないのが難点だ。NN6.2で読めない。XMLからHTMLを自動生成してアップロードするようなスクリプトを書いてHTML版は作る予定。XMLデータ作成ツールが問題。それからニュース・データのフォーマットをどうするのかという問題もある。インターネットを探すと、
News Industry Text Format
がおもしろそうだ。貴重なプロのデータに溢れているサイト、プロのフォーマットはさすがに万能だ。
ちょっと英語のお勉強。
Parrotはインタープリタ言語、特にPerl6のためのバイトコードを効率的に実行するのに使われる仮想マシンである。未来のために、他の言語のためにドアを開けておくつもりだけれども。それ自体で、ParrotはPerlインタープリタの核になる。Perl6のコードをコンパイルして実行するためのターゲットプラットフォームになるだろう。
Parrotのソースコードは2001年9月10日月曜日に世界にリリースされた。その時以来、開発者部隊は猛烈にそれをハッキングしてきた。現在、我々はParrotアセンブリ言語をアセンブルしてバイトコードにするとテストインタープリタで実行できる。文字列、整数、浮動小数点の操作が現在実装されている。まもなくスカラーとリストを実装することを望んでいる。 また、Parrotアセンブラにコンパイルできる「中水準言語」のJakoがある。
おもしろそうな話。マークしよう。
The Open Hyperdocument System Home Page
ニュース関係は更新日記にすべて移行しているが、昨年五月で更新の止まっていたニュースページをXML化で蘇らせようというプロジェクトにしてしまおう(^^)・・・ということで、まずはタイトルリストを作って各記事へのリンクを張るにはどうすればよいか。generate-id()関数を使う。これはノード毎に一意で決まるidを出力する関数である。記事毎のノード(/ts_news/news)のidを使ってタイトルリスト側から記事にハイパーリンクを張ればよい。xslは次のようなものになる。
<?xml version="1.0" encoding="Shift_JIS" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" encoding="Shift_JIS" doctype-public="-//W3C/DTD XHTML 1.0 Strict//EN" doctype-system="DTD/xhtml1-strict.dtd" /> <xsl:template match="/"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <title>News on TS Network</title> <link href="ts_news2.css" rel="stylesheet" type="text/css" /> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> </head> <body> <p><i><b>News on TS Network</b></i></p> <hr /> <p><i><b>Table of Contents</b></i></p> <ul> <xsl:for-each select="ts_news/news"> <li><a> <xsl:attribute name="href"> #<xsl:value-of select="generate-id()"/> </xsl:attribute> <xsl:value-of select="title"/> </a></li> </xsl:for-each> </ul> <hr /> <xsl:for-each select="ts_news/news"> <p><div class="title"><a> <xsl:attribute name="name"> <xsl:value-of select="generate-id()"/> </xsl:attribute> <xsl:value-of select="title"/> </a></div></p> <p><div class="source"><xsl:value-of select="source"/></div></p> <p><div class="date"><xsl:value-of select="date"/></div></p> <p><div class="content"><xsl:value-of select="content"/></div></p> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>
なかなかおもしろい。もう少しXMLの詳細について書かれた本が欲しいものだ。まだ、規格が確定していないことやブラウザに実装されていない機能も多いことから良いテキストが出にくいのかもしれない。
お正月休みも終わりだ。さて、年越しはParrotではじまりParrotで終わろうとしているが、気になっているXMLを取り上げよう。XMLは確かにデータを使いまわすためには有効な方法論だろう。テキスト処理フリークにとってはどのようなデータでも如何様にでも変換してしまうというのが得意技であるので、別にインプットはXMLである必要もないかもしれない。しかし、XMLでWebページを書けば、データと表現を分離できるというのは魅力ではある。HTMLはCSSを使ったとしても完全に表現を分離できない。どうすればxmlファイルをWebブラウザで表示できるのだろう。それが疑問だ。XSLTという言葉は知っていても具体的に試したことはない・・・・・よく調べると、うーん、これってXML2HTMLコンバータ、それじゃあまりおもしろくないね。xmlファイルをそのまま表示させたい。すると結局cssを使うということらしい。へーっ、そうなのか。それは知らなかった。(・・・その後、xslを使って表示可能であることがわかったが、IE5.5ではうまく表示できない。インプレスの「実例で学ぶXML」を推薦したが、さすがに情報が古くなっている。やはり新しいものを選ぶのがよい。私が持っているものなら秀和システムの「XMLツールキット」は新しくて、例が豊富だ。他にも探せばいろいろな本がありそうだ。)
まず、ts_news.htmlのニュースデータをXMLに変換して取り出すスクリプトを書いた。まだ適当だから、IEに読み込ませてエラーにならないレベルまでスクリプトを修正していく。IEはエラーの位置を表示するXMLのデバッガとして使える。最後に問題になったのはURLに含まれる&だ。取り合えず、&に置換したが、URLとして使いたい場合はどうするのだろう。まあ、それは次の課題としておこう。出来上がったts_news.xmlはこんな具合だ。
<?xml version="1.0" encoding="Shift_JIS"?> <?xml-stylesheet href="ts_news.css" type="text/css"?> <ts_news> <news> <title>Apocalypse 2 by Larry Wall May 3, 2001</title> <source>http://www.perl.com/pub/2001/05/03/wall.html</source> <date>2001/5/4</date> <content> 黙示録第2弾。 </content> </news> ... </ts_news>
それから、cssを適当に書いてみた。
ts_news { font-size: 10pt; matgin: 5px; } ts_news, news, title, source, date, content { display: block; margin-bottom: 10px; } title { font-size: 12pt; font-style: italic; color: blue; background-color: silver; }
こんな具合に見えるようになる。問題はXSLTで実現できるようなもっと複雑なインテリジェントな表現をしたい場合、例えば記事タイトルのリスト表示を加えるとかしたい場合はどうするのかということだ。もう少し調べよう。
xml/xslをIE5.5で試したが、表示されない。秀和システムの「XMLツールキット」のサンプルも表示されないのでどうしようもないなと、Googleで検索してみたが、特にそのような報告もないようだ。仕方ないので、IE6をインストールしてみると表示されるようになった。原因不明のままだ。XMLツールキットにはIE5.5が同梱されているのに・・・取り合えず、いつも取り合えずだが、cssの表示と同等レベルにまでなるようにxslを書いてみた。
<?xml version="1.0" encoding="Shift_JIS" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" encoding="Shift_JIS" doctype-public="-//W3C/DTD XHTML 1.0 Strict//EN" doctype-system="DTD/xhtml1-strict.dtd" /> <xsl:template match="/"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <title>News on TS Network</title> <link href="ts_news2.css" rel="stylesheet" type="text/css" /> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> </head> <body> <xsl:for-each select="ts_news/news"> <xsl:sort select="date" order="descending" /> <div class="title"> <p><i><xsl:value-of select="title" /></i></p> </div> <div class="source"> <p><xsl:value-of select="source" /></p> </div> <div class="date"> <p><xsl:value-of select="date" /></p> </div> <div class="content"> <p><xsl:value-of select="content" /></p> </div> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>
意図通りに動かすのには結構慣れる必要がありそうだ。cssも併用しているが、表示はフォントの種類が違っているだけだ。
div.title, div.source, div.date, div.content { font-size: 10pt; display: block; matgin: 5px; margin-bottom: 10px; } div.title { font-size: 12pt; font-style: italic; color: blue; background-color: silver; }
よく考えてみるとおかしい。出来上がっているParrotの名前がtest_progのままだし。フォルダの種類も昔のままだ。CVSでの更新がうまくいっていないのか、PS2 Linuxの作業と混同してしまったか。再度CVSの更新をしてみるとフォルダも増えた。だが、Configure.plで山ほどエラーが出る。Configure.plの中味を覗くと、作業の途中で止まったようなファイルだ。書き換えのためのマークが入っていて、Perlのスクリプトとしてはエラーが出るのが当然だ。Cygwinではファイルシステムが特殊になるし、ルートにparrotのフォルダを作っているのがまずいのかもしれない。どうも/usr/localに置くのを想定して動いているようなメッセージも出るので、/usr/localにcdしてCVSからやり直し。これでmake testまですべてうまくいった。
$ ../../test_parrot mops.pbc Iterations: 10000000 Start time: 1010028433.955000 End time: 1010028439.432000 Count: 10000000 Elapsed time: 5.477000 Estimated ops: 30000000.000000 Elapsed time: 5.477000 op/s: 5477451.161301 Mop/s: 5.477451
jako.pasmをアセンブルする際に必要なPerlライブラリは-Iオプションでなぜか付加できない。結局、/lib/perl5/site_perlにPerlライブラリの入ったParrotフォルダをコピーして動かした。エラーメッセージを見ると@INCには/lib/perl5/site_perlが/usr/lib/perl5/site_perlとして入っているみたいだ。これもインストールの場所が悪いのかも・・・PS2 LinuxよりもCygwinのほうが多少速いかな。
Parrotについてはちょっと古いがSimon CozensのParrot : Some Assembly Requiredを読むと大体わかる。Simon Cozensはエイプリルフールの張本人。今年はネタに苦労するだろう。jakoについての説明も僅かだがある。最新の情報はParrot examplesを参照。
元旦の雨から一転して雪。お正月らしくなった。道路の上まで降り積もっている。今日はゆっくりしよう。
Linuxでは日本語環境が不自由なのでというか、エディタもDanaが使えないし(^^;)使いこなすのが面倒なので、それでいつまでたっても使えないのだが、再度Cygwinに挑戦。要は、新しいバージョンを試すだけなんだけど(^^;)最新バージョンの1.3.6をセットアップすると、あっけなく./Configure.plも正常に動いた。makeも無事終了。できあがったフォルダの種類や実行形式のプログラムの名前が大分Linuxとは違うんだけど・・・結局、正常にjakocでコンパイルして、assemble.plでバイトコードにアセンプル。バイトコードインタープリタも正常に動いて完了。
# # helloj.jako # # ObHW # # Copyright (C) 2001 Gregor N. Purdy. All rights reserved. # This program is free software. It is subject to the same # license as Perl itself. # # $Id: hello.jako,v 1.2 2001/09/17 12:51:27 gregor Exp $ # Modified by Kazuo Fujioka # print("ハローワールド!\n"); end;
試したかったのはShift_JIS日本語が通るかどうか。初めて書いたjakoのプログラム(^^;)Win32コンソールのbashでは当然か見事にハローワールド!が表示された。
旧年中はいろいろとお世話になりました。本年もよろしくお願いいたします。昨年最後の記事はParrot関係です。新年のページに早く更新し過ぎたので、12月分の更新日記を是非読んでください。
元旦は朝方は雨が降っていたが昼から雨が上がったので日が落ちる前に女房と歩いて恒例の毘沙門天参り。人出が例年より少ない感じだ。新しい年の無事を祈って御神籤を引いた。多宝塔まで細い道を登ると少し霞がかっているが広島市内への眺望が素晴らしい。南に遠く高層のリーガや瀬戸内の海も識別できる。午後4時になると太陽の高度が低くなっている。破魔矢を求めて帰宅の途に。つるべ落としで沈んでいく日、燃えるような鮮やかなオレンジ色が白い雲に映えて美しい。
Parrotのlanguagesディレクトリにはjakoとminiperl、schemeのサブディレクトリがある。jakoはParrot上で動くことを意図した最初の言語である。このディレクトリだけにサンプルがある。jakocというのがコンパイラ。jakoのソースをParrotアセンブラに変換することができる。それをバイトコードにアセンブルして、Parrotで実行する。次のような具合だ。
[root@ps2linux jako]# pwd /root/parrot/languages/jako [root@ps2linux jako]# ./jakoc mops.jako > mops.pasm [root@ps2linux jako]# perl -I../../ ../../assemble.pl mops.pasm > mops.pbc [root@ps2linux jako]# ../../test_parrot mops.pbc Iterations: 10000000 Start time: 1009880651.775667 End time: 1009880657.951470 Count: 10000000 Elapsed time: 6.175803 Estimated ops: 30000000.000000 Elapsed time: 6.175803 op/s: 4857667.850285 Mop/s: 4.857668
Perl6がどのように動作するのかが垣間見えてきた。バイトコードにアセンブルすると圧倒的なスピードが得られる。既にスクリプト言語の範疇では捉えられない言語に変貌しつつある。Perl6を早く見てみたい。
フレームを利用してホームページのデザインを変更。トップに置いていた各ページへのリンクが使いにくいので、リストにしてフレームのページに移した。index.htmlをnewindex.html に変更してアクセスすること。