雪は弱くなり、下界の雪は経験上問題がないはずなので、車を出した。ビッグで切れ掛かっているBJ S330のブラックインク、残りが250枚を切ったのでシャープのマルチユースペーパー250枚と後で述べる投げ込みBOX、塩野七生のインタビュー「ローマ、日本そしてアメリカ」を読むために現代2月号を購入。それから、女房を美容院に送って、メガを巡回して終わるのを待つ。林俊克著、「Excelで学ぶテキストマイニング入門」、オーム社開発局、平成14年10月25日第1版第1刷、237ページ、2600円を購入。「自由文の手作業によるテキストマイニング」、「形態素解析によるテキストのキーワード化」等のように実際的、具体的な話が並んでいる。形態素解析には茶筅を使っている。テキストからデータを如何にして作るかというところが参考になりそうだ。
外山滋比古著、「思考の整理学」、ちくま文庫、2002年6月5日第27刷発行、223ページ、460円。外山滋比古の本は何冊か持っているが随分昔に買ったものだ。買い物の待ち時間に緑井天満屋の本屋を漁っていて、眼に留まった。ぱらぱらと捲るとメタ・ノートという言葉が眼に突き刺さる。お買い上げ。後で見ると、古い本だ。第一刷は1986年。元になっている筑摩書房「ちくまセミナーⅠ」は1983年だから、約20年前に書かれた本だ。ロングセラーである。
実は1977年に発行された講談社現代新書「知的創造のヒント」にもメタ・ノートという言葉がある。これは家に戻ってから、どんな本を読んでいたっけと引っ張り出して調べたからわかったことだ。メタ・ノートは、手帖のメモを第一次的ノートとすると、そこから篩っておもしいろものを選択して書き写したノートだ。また、メタ・ノートに書かれていることでも2,3年経って読むとまったくおもしろくなくなるものもあるから、メタ・メタ・ノートが必要ということが書いてある。さらに篩をかける必要があるというわけだ。その際に、ノートの項目索引を作ってみると、ノートのあちこちに関連項目が散らばっており、相互の関係を把握するのが難しいことが述べられている。このためにメタ・メタ・ノートは同一項目に複数のカードが作れるのでカード化する必要がありそうだというのが、その時点での結論であった。
思考の整理学に登場するメタ・ノートは、知的創造のヒントのメタ・メタ・ノートに相当するもので、結局カード化は失敗したようだ。カードは当然バラバラで、並べ替えには強いが、元の並べ方を維持するためには管理が難しく、手軽とは言い難い。時系列でメモを管理できるノートは束ねられているために順序も狂わず、パラパラと捲れ、安心感がある。カードはコンピュータに馴染むような気がする。ソートしたり、配列しなおしたりが自在だからだ。元の状態を復元するのも容易だろう。このような知的な作業を支援する仕組みをコンピュータ上に作り上げることができるとおもしろいと思う。
ArrangeNoteは手軽なメモツールである。メモをメモグループにドラッグアンドドロップで分類したりすることは極めて簡単に行なえる。メモのカテゴリを属性として設定して、カテゴリ別のメモのリストを得たりできるとおもしろいかな。分類こそが知的な作業であり、新しい発見につながることはよく経験することだ。テキストエディタのVZを使ってメモを管理することはおそらくよく行なわれてきたことだろう。私もDanaでパソコン通信のログを管理していた時期もあった。今や、更新日記でメモを管理するアイデアを構築中だが、メタ・メタ・ノートを是非実現したい。外山さんはメモを選別したメタ・ノートを作ってから、メタ・メタ・ノートの必要性に気がつくまで20年かかったということなので、この日記を読んだあなたは幸せ者だ。20年得をしたということ(^^)しかし、メタ・メタ・ノートについて再認識するまでに20年以上を要した私ってなんだろうね(^^;)
このサイトはKent WebのAccess Reportを使って、リンク元を取得しているが、現在件数でドジ研アンテナがトップに躍り出た。これまではPyJUGの日本の Python サイトとうらのさんのScripting Laboratoryにある国内のTclサイトが抜きん出ていたのですが。有難い話です(^^)
ドジ研アンテナ @ hatena.ne.jpつーのもある。これってAWKING Projectだよね。
見ればわかるか・・・要は1バイト単位で文字コードを取り扱っており、ほとんどは"0x5C"、すなわち"\"がエスケープされていないから、このようなことが起きている。該当文字がないと、\x{fffd}で置き換えられている。Danaでカレットを文字に合わせれば、文字コードが表示される。表の文字コードはDana上で編集しながら簡単に得られるのだ。元の文字列を検索するときは、検索文字列にコピーすると自動的に"\"が挟まれる。データをタブ区切りで整理して、項目名とキャプションを書き、表データの範囲を選択して、LaunchからHTML表作成用のスクリプトをクリックすれば、あっという間に表がHTMLのテキストとして現れる。sjisのテキストを漢字コードをUTF8を選択して保存すれば、簡単にUTF8テキストが得られる。Danaは単なるエディタというよりは、テキストプロセッサーなのである。
文字化け | Code 1 | Code 2 | 元の文字 | Code 1 | Code 2 |
---|---|---|---|---|---|
楓ハ | 0x9596 | 0xCA | 表面 | 0x955C | 0x96CA |
舞w | 0x9591 | 0x77 | 表層 | 0x955C | 0x9177 |
浮\x{fffd} | 0x9582 | 0xED | 表わ | 0x955C | 0x82ED |
浮ウ | 0x9582 | 0xB3 | 表さ | 0x955C | 0x82B3 |
告ャ | 0x8D90 | 0xAC | 構成 | 0x8D5C | 0x90AC |
国「 | 0x8D91 | 0xA2 | 構造 | 0x8D5C | 0x91A2 |
高ニ | 0x8D82 | 0xC6 | 構と | 0x8D5C | 0x82C6 |
狽ニ | 0x9482 | 0xC6 | 能と | 0x945C | 0x82C6 |
狽\x{fffd} | 0x9482 | 0xF0 | 能を | 0x945C | 0x82F0 |
狽ナ | 0x9482 | 0xC5 | 能で | 0x945C | 0x82C5 |
狽ノ | 0x9482 | 0xC9 | 能に | 0x945C | 0x82C9 |
矧\x{fffd} | 0x948A | 0xEE | 能基 | 0x945C | 0x8AEE |
ャt | 0x8383 | 0x74 | ソフ | 0x835C | 0x8374 |
ャ~ | 0x8383 | 0x7E | ソミ | 0x835C | 0x837E |
\x{fffd}@ | 0x87 | 0x40 | ① | 0x8740 |
Danaはカーソル位置の文字のコードを下の枠の右隅に表示する。これを取得してカーソル位置を一つ右に移動して、タブと文字コードを表す文字列を挿入するスクリプト。エディタとしてのDanaを操作するためにはVBライクなDanascriptを使う。スクリプトライブラリにセットしておき、クリックで起動する。
Main() Dim code code = GetCurrentChar Command("CsrRight") InsertString(" 0x"+Hex(code)) End
旧年中はいろいろとお世話になりました。本年もよろしくお願いいたします。この更新日記も無事、2回目のお正月を迎えることができました。個人的なメモでありますが、最先端のパーソナルコンピューティングの動きをテキスト処理とスクリプト言語の様相から捉えていければと考えております。また、真にパーソナルな新しいコンピューティングの流れを、ささやかであってもユニークな流れを生み出せたらとも考えております。今年は、AWKING ProjectをSemantic Webと結び付けられたらおもしろいですね。OWLもワーキングドラフトの段階です。更新日記はいずれXML化させていきたいと思いますが、どのようにXMLを使うと有意義なのかを考えていきたいですね。インターネットは奥深く、情報量は膨大で、あれもある、これもあると焦ってくるぐらいですが、Webにおける発信を通じて少しずつ試しながら勉強をしていきます。よろしくお付き合いください。
さて、激論対北朝鮮外交を聞きながら、10大ニュースを考えてみよう。項目を思いつくままに上げると、Semantic Web構想がW3Cで統一具体化(Web Ontology Language (OWL)Reference Version 1.0 W3C Working Draft 12 November 2002、RDF Vocabulary Description Language 1.0: RDF Schema W3C Working Draft 30 April 2002)、Perl5.8リリース、Parrot/Perl6の開発進展、Python2.1-2.2リリース、Tcl/Tk8.3-8.4リリース、Ruby1.6.7-1.6.8リリース、ArrangeNoteのOLEオートメーションサーバー対応、Copal2リリース、WinBatchEh2.07系マイナーリリース、TSNET始動、Tcl/Tk日本語チーム発足、TS Networkサーバー始動、10個を超えてしまった(^^;)今日、FGALTSで書いたことを転載しておこう。
01245/01245 JBD01136 jscripter 謹賀新年 ( 2) 03/01/01 13:56 明けましておめでとうございます。 旧年中はいろいろとお世話になりました。本年もよろしくお願いいたします。 昨年は次のようなことを書いています。 | スクリプト言語、テキスト処理を取り巻く環境は大変おもしろい状況になってい |て、Webスクリプティングという分野が随分発展している。あまりにも様様な要素 |があるので見通しが利かない感じもあるけど、今年はそこらを整理すると大変有意 |義かもしれない。XML、SOAP、.net、Webサービス等。 | | プログラミング言語の動向としては、CLI、Perl6(Parrot)がどのような展開を示 |すかが興味深い。 基本的にこの流れは変わっていないし、その流れはさらに強くなっているように 思います。また、PerlでExcelのファイルを、Pythonでpdfファイルを直接生成した り、Tcl/TkでExcelのファイルを表示したりと、バイナリファイルへのスクリプト 言語からのアクセスもかなり高度なものになってきました。 スクリプト言語の有用性はSemantic Web等、インターネット、パーソナルコン ピューティングの発展とともに益々高まっていくものと思います。 インターネット上のコミュニティの急速な拡大に伴って、@niftyのフォーラムの 停滞は昨年特に顕著なものとなり、私自身の活動もホームページやTSNETに移って おります。インターネットにおけるコミュニティツールの自由度、表現力の高さに もかかわらず、@niftyのフォーラムの良さはあるわけですが、最早ほとんどのアク ティブのクリエイティビティをインターネットほど満足させる場ではないのも事実 です。 このフォーラムが継続する限り、私も参加しますので、引き続きよろしくお願い いたします。 03/1/1(Wed) 01:34pm FGALTS jscripter(JBD01136) TS Networkのために http://homepage1.nifty.com/kazuf/
年末から、W3Cのサイトの資料をOOWriterに貼り付けては印刷しまくっているのだが、もう400ページはいったかな。両面上質普通紙に代えてから、紙送りがおかしくなった。2枚送ってしまう場合が頻発する。我が愛機の古いPM-600Cだが、昨年は相当酷使したのでくたびれたか(^^;)、紙もエプソンの紙だしなあ。普通紙は340円、両面対応になると480円とかなり高くなるにも係わらず、安心して任せられなくなった。もとの普通紙に戻すと問題なく送る。紙との相性もあるんだよね。しかし、印刷スピードは最近のは早そうだし、新しいのを買ってきて試してみるかと、夕方、八木のヤマダ電機デジタル館に出掛けた。HPの前面給紙に惹かれていたのだが、消耗品の価格を点検して、インクの容量は大きいのかもだが、倍の価格でバツ、結局、ブラックインクの価格が安い(1,280円で2個)のと、最安値11,800円の値札が付いているキヤノンBJS330のブラック14ppm、カラーが10ppmの印刷スピードで決めた。この機種はデオデオの調査価格が表示されており、もっと低速の機種よりも価格が安いのだ。店員に声を掛けるとみんな忙しそうなので、自分で箱を探し、引っ張り出してレジに運んだ。値札より1,000円引きの本体価格10,800円、箱の外の説明をすばやく点検するとUSBケーブルは別売だ。仕方ないので、USBケーブルも頼むというと、USBケーブルは付けますと言う。おー、ラッキー。ポイント値引き520円、消費税514円、締めて10,794円也。定価は24,800円だ。さらにポイントを1337ポイント付けてくれる。ポイントが付きましたから、次も是非お越しくださいと丁寧に送り出された。最初買おうとして声を掛けた店員が適確に対応できなかったのは失格だが、レジの店員は教育が行き届いている。USBケーブルは箱にセロテープできちんと止めてくれていた。
帰って早速組み立てて試す。最近のプリンタは正にPlug & PlayでOKだ。接続してPCを起動すると自動検出する。勝手に出てくる指示に従ってCD-ROMを入れるとドライバがあっという間にインストールされる。標準で使うプリンタに設定して終わり。マニュアルを見る必要もない。最初はヘッド位置調整用に一枚だけ印刷する必要がある。印刷に斑のない箇所の数値にセットして終了。本番、22枚の両面上質普通紙をセットしてそのまま印刷してみる。問題なし。静かだし、高速。投資成功といったところか。最近はむやみやたらと印刷するので、スピードは重要だ。
雪だね。初めての本格的な積雪だ。ベランダにも相当積もっている。気温が下がっているから、道路の雪も溶けないかもしれない。明日は休みだからいいけど、車が出せないかな。ようやく冬らしくなってきた。
朝、女房が隣家の車に南天の枝が雪の重みで圧し掛かっているのでなんとかしてくれというので、鋸を取り出して枝を切った。わかっていることだが、頭から雪を被ってしまった。これぞ、雪害(^^;)道路の雪は溶けるかなあ。インクが切れてしまったので、スクリプトでも書くことにした。スクリプトにインクはいらない(^^)
大仰な題目になったが、要はPCを活かさねば損だということである。ホームページやWeb日記は重要な方法の一つである。知識を体系的に記述したり、時系列で記録していくことができる。知識の領域を拡張するためにはインターネットの検索エンジンの利用、ハイパーリンクを辿ることも有効な方法である。ハイパーリンクは記憶ともリンクする。この用語は他のページで見たことがあるぞとか、そういうことは良くある。そのような作業を通じて、次第に知識が関連付けられ、体系化していく。
無論、アナログ的な方法も合わせて重要である。以前、"note de file"というA6判のノートを紹介したが、現在も継続中である。しかし、問題がある。確かに、カテゴリー別の分類が可能だが、カード的な取り扱いが難しい。これまで読んできたファイリングや情報カード関係の古い本を読み返してみたりした。サイズや紙の固さが重要、カードは繰れないと検索が難しい。A6ノートの紙は柔だし、1ページが大きすぎる。机に並べることのできる枚数が減る。分類できるノートとしてはいいが、ちょっとしたアイデアやメモを書き付けるカードとしては適さない。そこで、メガの文房具売り場をうろつきながら、思いついた究極の方法を紹介しよう。ポスト・イット・ノートを使う。いや、今日気が付いたんだよね。ポスト・イットにノートがあるっていうの・・・これまで使っていたのにね。付箋という意識が強すぎたせいだ。75mmx75mmの654Gと76mmx127mmは655RP-Yという二種類、各100枚を手に入れた。後者は3x5inchサイズで、3x5カードとして世界標準カードサイズである。元々、デューイ10進法を編み出したデューイが図書の索引・目録を作るためのカードとして作ったものである。メモを作成してしばらく経つとA4用紙に貼り付けてファイルする。印刷した資料の整理用として沢山購入したクリアブックに差し込んであった大量の薄い紙を、D-RING FILE(2HOLES;KOKUYOフ-FD430NY)という大きく開けるファイルを購入して、ファイルした。これをA4用紙として使う。資源の有効利用。PCの廻りに無暗矢鱈に貼り付けていたポストイットや貼るところがなくなってはがして束ねていたものも貼り付けてみた。なかなか良い。すくなくとも行き場所が明確になった。KJ法的に並べ替えもできるし、散逸する心配がない。
インクジェットプリンタで印刷したインターネットから入手した資料は、ステープラーで留めて、製本テープで製本するのだが、これを整理する方法がなかった。積み重ねているので整理に困るし、アクセス性がよくない。ここで登場したのが、Nakabayashiの「なげこみBOX」だ。プラスチックの容器にA4用の紙製ファイルホルダーが8つ入っている。これを結局二つ手に入れて大雑把に分類してみた。使い心地は良い。問題はアウトプットだけどね(^^;)
暖冬で気象庁の予測は当たらないとか・・・暖冬か寒いかなんていう予想は当たるも八卦当たらぬも八卦のような気がしないでもない。正月休み最後の日に雪が降って二三日寒かっただけで、週の後半からは好天が続く。Earth Simulatorで、予測が確実に当たるようになれば大変おもしろい。
CoCoonのテレビコマーシャルが目立ってきたので、再訪。思い出して、ルームリンクも調べた。ルームリンクとCoCoonのつながりが不明だが・・・ルームリンクはVaioのGigaPocketとの連動が想定されている。PCの側から見ると、ルームリンクのほうがおもしろい。ルームリンクはPCとテレビの架け橋になる興味深い製品である。PCで録画したものを大画面のテレビで見たりということがリモコンで可能になる。逆も可能である。CoCoonはネットワークにつながるがスタンドアローン的な機器だ。しかし、いずれもソニーの閉じられた世界という感じがしないでもない。GigaPocketを外販してほしいものである。そうするとルームリンクの潜在顧客は大幅に広がるだろう。
無線LANはノート用に導入してみたので、信頼性も高いことがわかってきたし、1階に設置したアクセスポイントに2階の部屋からもつながるので大変便利である。家庭での情報センターの中核になるのはPCかテレビかということなるが、いずれもネットワークにつながれば同じことである。ハード的には似たようなものになるが、現在のPCの弱点はWindowsにしてもLinuxにしてもスイッチオンですぐに使えないところだ。しかし、PCと同様な機能を持たせればテレビであろうがなんだろうが同じようなことになってしまうはずだ。機能を削って軽い専用OSにするか、スリープ状態にしておくかぐらいしかないだろう。また、現在でもそうだが、省電力化が重要である。サーバーというのは常にスイッチオンが前提であるが、利用度が低い家庭でそれは無駄だからだ。リモートで電源が入るような仕組みも必要だろう。2階のPCにあるファイルを取り出したいと思っても、しかもネットワークにつながっていたとしても、電源が入っていなければ何の役にも立たないからだ。2階に上がって起動して立ち上がるまで待つ必要がある。ソニーのさらなる健闘を期待している。夢が次第に現実になろうとしているのは事実である。
運動不足。耐えられない寒さではないので、ニュースステーションが始まるまで散歩。夜景は少し見通しが悪い。エンジンをかけたまま停車して夜景を眺めている二台の車の横を通り過ぎながら、この散歩の負荷には慣れすぎたなと思った。
昨日の朝の太陽は、西広島バイパスを宮島方面に抜ける陸橋の曲がり角の正面に、黒い煤で曇らせたガラス板を通してみるように赤く薄い円盤を貼り付けたように見えたが、今日は有り余る光線を迸らせながら眼を射抜いた。太陽の輝きはその下の海の上で沿岸の方向に引き伸ばされて煌いていた。雲は多かったが、青空の見える空。明るい色彩の山の上を雲の影がゆっくりと動くのがわかる。太陽が隠れると少し寒かったね。陽よ、照れと散歩しながら、呟いた。今日はスクリプトネタがない(^^;)
西風新都インターは通行止めだと今朝車の中でラジオが言う。毘沙門台は屋根が少し白くなる程度の積雪だが、広島市西部の山々はこの冬最も白く化粧している。あさっての東京出張は朝一のANAだが、雪は大丈夫か心配。タイヤはノーマルしか持っていないし・・・まあ、自分で付け替えたことなんかないけど(^^;)昼からいい天気になったから大丈夫かな。
五反田で今一のセミナーを終えて、浜松町に戻ると、モノレールに乗るには早いので、本屋に入る。東京は寒かったね。コンピュータ関連書籍で眺めていると次世代AIをJavaでプログラミングする本というのがあって、パラパラと捲る。KQML(Knowledge Query and Manipulation Language)というのが目に留まる。KIF(Knowledge Intechange Format)も見える。まずはインターネットで調べてみようと本は置いて、珍しく何も買わずに羽田に向かう。帰りの着陸は機体の向きが滑走路の方向に一致したのが着陸寸前で少しやばいんじゃないかと思った。最後のランディングの衝撃は少なかったけどね。車の窓に水滴が凍ってこびりついている。ワイパーではなかなか落ちそうもないので、櫛の背のほうで掻き落としたら、強く擦り過ぎたせいか、窓に傷が残ってしまった(^^;)やれやれ・・・朝と同じく時速80kmで安全運転。無事帰宅。KQMLやKIFのページはリンクが切れたりしているが、新しい情報はAgentWebのNewsのほうにある。明日は雪かも。
例によって土曜日出勤。10時から18時過ぎまで会議だ。少し寒い日だったが、今年の冬は雪が少ない。
今日は本格的な雨。よく降るね。大寒を過ぎたばかりで、暖冬の象徴かもしれない。雨の中を横尾忠則の展覧会が最終日なので、広島市現代美術館まで出掛けた。運良く、登り道沿いの縦列駐車場が一台分空いていた。久しぶり。
先週、サティで横尾忠則を迎えて座談会を開くという話がラジオで流れた。美術館にもそのような催しをする部屋が用意されているのだが、膨大な作品を展示するために場所がなくなって、サティを使うことになったということだった。確かに相当な作品数で、そのエネルギーに圧倒される。趣味がいいとは言えない内容だが、芸術とはそのようなものでもある。上野かどこかの美術館でピカソの圧倒的な創作力に感動したことがあるが、それと同じようなものを感じた。繰り返し繰り返し飽きることなく同じような題材を描く。シュルレアリスムとポップアート、グラフィックデザイン、日本の美術の伝統が融合して独特の世界が構築されている。趣味のよさでは池田満寿夫が好きだが、横尾忠則の世界を堪能することができて満足だった。収蔵作品展2002‐Ⅲ、キュレーターズ・アイを見終わるとお昼もだいぶ過ぎたので、美術館の喫茶室のアーチで家内とフランクフルトセットを食べ、おいしいコーヒーを飲んでさらに満足した。次は、「サイバー・アジア、近未来のメディア・アート」という展覧会だ。4月6日までなので、収蔵展が入れ替わる終わりごろ見に来るかな。その頃は歩いていけるぐらい近くに住むことになる。
上空1500mが零下12℃の範囲は地上は大雪になると天気予報で説明していたが、明日の朝は中国地方がすっぽり包まれそうだ。車が出せないかもしれない。最高気温1℃、最低気温-3℃の予想。標高5500m、-36℃も大雪の目安らしい。まだ、雪は降らないみたいだけど、明け方がどうかだよね。うーむ、下に降りたのが失敗だった。給油ランプ点灯。庭から見える街灯に雪が降り注ぎ始めた。
無事に帰宅。めずらしい大雪。今朝は道路に相当の積雪、車は出せないと判断。6時46分発のバスで出発。可部線は4分遅れ。山陽本線は10分遅れ程度で、ぎりぎり間に合った。しかし、雪は降り止まず、いよいよ降り頻る。日中の積雪はめずらしい。広島も雪国と化した。これで、暖冬と言わない気象庁の予想もそれなりにリーズナブルとの結論に至るだろう。天気予報サイトへのリンクをリストしておこう。
我が家のある毘沙門台小学校付近は雪がなぜか溶けにくい。標高が高くて気温が低いせいか、高々数10m程度の違いで随分違うのである。下界は日向の部分の雪は完全に溶けて乾いている。二号線も橋の歩道部分に雪が残っているぐらいでほとんど溶けていた。堤防のお昼の散歩は新雪を踏みしめてキュッキュッと感触を楽しみながら歩いた。ところどころに鳥の足跡が残っているだけだ。日が当たると背中がポカポカする。雪が溶けてもおかしくない暖かさだった。明日は車が出せるだろうと帰ってきたのだが、バス通りを毘沙門台3丁目に向かう曲がり角付近で車が4台立ち往生している。急に雪が深くなっていて、路面の雪が溶けていないのだ。チェーンを装着したバスは右側の車線に大きく入って追い越していった。やれやれ、明日は無理かな。屋根の雪もかなり残っている。雪がどさっと落ちる音が響いた。直撃すると危ない。
ソニーのCoCoonやNECの「ホームAVサーバAX10」、Panasonicの電話付きWeb端末製品に採用されたLinuxがMontaVista Linuxだ。ヤマハはデジタル・オーディオ機器へ組み込むらしい。既にあるこのような動きの発展形が組み込みLinuxをソニー・松下が共同開発ということらしいが、GPLでソースコードは公開されるというから素晴らしい。1秒以下で起動できるLinuxが目標のようだ。
CESの基調講演、「【CES】ソニー基調講演--200万画素CLIEや1GBメモリースティックなど」と「【CES】ゲイツ氏基調講演--米MSがコンシューマー機器戦略を加速」の競争の結果は如何に・・・大手家電メーカーは完全にLinuxに向かっているのでマイクロソフトにとっては厳しい状況だ。Officeの強みを活かさないと次第に厳しさが増すだろう。
昨年から、ホームサーバーの具体的な製品が登場している。最も新しいのが、シャープのパーソナルサーバー HG-01Sである。このサーバーの特徴は本格的に外部と繋がることだ。Webサーバーにさえなる。機能をリストしてみよう。
リモコンで動くし、これで10万円なら安いかな。ただ、テレビのそばに置く必要がありそうなことが大きな問題になるかも。
1/6ぐらいから、ActiveStateがおかしい。ホームページが異常に重いし、ppmサーバーがエラーになる。なんだろう。会社のマシンにインストールしたいモジュールがあるんだけど・・・まあ、ローカルでやればいいんだけどね。
今日、まだActiveStateの調子が悪いので、CPANからモジュールをダウンロードしたのはいいが、.tar.gzを解凍できないので、Vectorから何か解凍できるものをダウンロードしようとすると.exe形式のものはうちのサーバーが撥ねてしまう。それならPerlで解凍してみるかと、Archive::Tarモジュールを動かしてみた。
use Archive::Tar; print "Archive Name: ", $ARGV[0],"\n\n"; $tar = Archive::Tar->new(); $tar->read($ARGV[0], 1); @filenames = $tar->list_files(); foreach $filename (sort @filenames){ print $filename, "\n"; }
これで覗くと、結局Cygwinをインストールしないとどうにもならないという結論。当たり前だよね。WindowsのPerl環境をサポートするのはActiveStateしかない。うーむ、むむむっと。外部からのダウンロードスピードは4-8KB/s程度しか出ないので、Cygwinをネットワークインストールするのは現実的でないしね。やはり環境を整えたノートを作っておいてネットワークにつながないと仕事にならない・・・しかしハブの位置が遠いしね。もたもたやってる閑はないのであきらめ、家でやるか(^^;)他の仕事を片付けよう・・・
帰宅してから、ppmを動かすとつながった。失ったExcel関係のモジュールをさっそく再インストール。応答はモタモタした感じは免れないが・・・がんばってよね。家にはCygwinがあるけど(^^;)
うーむ。またつながらない。早く入れ直しておけばよかった・・・
ppm> search RSS Searching in Active Repositories Error: No valid repositories: Error: 500 Can't connect to ppm.ActiveState.com:80 (connect: Unknown error) at c:/Perl5.8/site/lib/PPM/Repository.pm line 84 Error: 500 EOF instead of reponse status line at c:/Perl5.8/site/lib/PPM/Repository.pm line 84
やれやれ、回復したみたいだ。
今日は、Text::ParseWordsでCSVのファイルを取り扱ってみた。これは標準モジュールだ。クックブックに出ていたので使ったのだが、ドキュメントを読んでもブラックボックス的。機能的には、Text::CSV_XSを使ったほうが工夫ができるかもしれない。こちらならフィールドに改行を含むCSVを処理することも可能な気がする。
ActivePerl5.8環境。Perl5.8の使い方は今一な感じ。文字化けが結構出る。今日の文字化けリスト(^^;)原因究明はまだ・・・
楓ハ 表面 舞w 表層 浮\x{fffd} 表わ 浮ウ 表さ 告ャ 構成 国「 構造 高ニ 構と 狽ニ 能と 狽\x{fffd} 能を 狽ナ 能で 狽ノ 能に 矧\x{fffd} 能基 ャt ソフ ャ~ ソミ \x{fffd}@ ①
shiftjisのエンコーディングは実用的には完璧ではないということだろう。少なくともcp932を使ったほうが良いのかもしれない。JPerl並に使いこなせるのはいつのことだろう(^^;)
って、Blue Camel3に書かれている。『あとはあなたが「楽しい」という言葉を正しく定義するだけである。』ということらしいが、理由は明確でなくとも取り敢えず動けばそれが正しいとしか考えたことがない身にはつらいのである。いつもの悪い癖で考える前にスクリプトをいろいろ変えてまともに動くかどうかを確かめ続ける。有り得ると思われる組み合わせを確かめていけば正解に到達するはずだというわけである。結局、shiftjisの部分をcp932に置き換えたスクリプトを動かしてみたが、これまでとは違う文字でcp932にマッピングできないというエラーが出る。"-"が"\x{2212}"と表示されるのだ。私の持っているテキストは98文字も含まれている可能性があるし、そろそろ文字化けやマッピングのエラーの理由を明確にして問題点をはっきりさせる必要がある。BC3の15章Unicodeはいろいろと参考になりそうである。無論BC3は5.6の本だから、5.8についての情報を得る必要がある。Perl5.8のドキュメントには、"Perl Unicode Introduction"と"Unicode support in Perl"がある。ここらからスタートすべきだろう。
文字化けやエラーの出る例が集まったので次のようなスクリプトを書いて試してみた。
use encoding "shift_jis", Filter=>1; use utf8; use encoding 'shift_jis'; print <<END; 表面 表層 表わ 表さ 構成 構造 構と 能と 能を 能で 能に 能基 ソフ ソミ - Y- C- -S -V Y-S C-V END
これで、まったくエラーは出ない。スクリプトの最初にある「おまじない」の三行はどれが欠けてもまともに動かない。最初の二行はスクリプトの中にsjisコードを含めるために必要だ。次の行は入出力をsjisとするために必要である。最後の行は、"use encoding 'shift_jis', STDIN=>'shift_jis';"と書いても結果は変わらない。この場合、shiftjisをcp932に変更しても変わらない。ところが、"①"をデータに加えると、shiftjisでは、次のようなエラーになってスクリプト自体が動かない。cp932では問題なく動く。
shiftjis "\x87" does not map to Unicode at c:/Perl5.8/lib/encoding.pm line 64.
encoding 'cp932';で昨日の日記にある"-"が「"\x{2212}" does not map to cp932 at jpdb244.pl line 298.」というエラーになるのは、私が昔書いたテキストデータベースプログラム「JPDB」をCygwinのPerl5.8で動かしたケースなのだが、"/^(.+);(.+)$/"のような単純なパターンマッチングの部分で問題が出ている。encoding 'shiftjis';で問題にならないので原因はまだよくわからない。また、前述の例のように単純な入出力では問題にならない。
確認のために、問題の文字列をcsv形式のデータに入れてText:ParseWordsでparseすると、文字化けが生ずる。次のようだ。スクリプトは、
use encoding "shift_jis", Filter=>1; use utf8; use encoding 'shiftjis'; use Text::ParseWords; sub parse_csv { return quotewords(",",0, $_[0]); } open(IN, "< bake_input.csv"); while(<IN>){ chomp; @flds = parse_csv($_); print join(":", @flds); } close(IN);
出力は、
"\x{fffd}" does not map to shiftjis. "\x{fffd}" does not map to shiftjis. "\x{fffd}" does not map to shiftjis. 楓ハ:舞w:浮\x{fffd}:浮ウ:告ャ:国「:高ニ:狽ニ:狽\x{fffd}:狽ナ:狽ノ:矧\x{fffd}:ャt:ャ~:-: Y-:C-:-S:-V:Y-S:C-V
ParseWords.pmを調べるとparseするときのパターンマッチが、入力がasciiを前提としたマッチングのままになっているのが原因のようである。モジュールを使う場合には要注意である。Spreadsheet::WriteExcelも文字コードのエラーが出てうまく動かない場合がある(結局、仕事ではタブ区切りのテキストデータをExcelでユーザー自身に読み込んでもらうことにした^^;)。テキスト処理の場合、小さなデータでテストした結果は当てにならないのである。次はPerl5.8でsjis文字列のパターンマッチングをどう書く必要があるのかを調べよう。パターンにsjis文字を直接書いてもうまくマッチしない。正規表現にsjis文字列を使わずに済ませられることは多いが、前から大変気になっている部分である。最後に、Unicode、encoding関係にあるURLをまとめておこう。encodingについてはPerldocにはなぜか見つからないので、ActivePerlのほうにリンクした。
試してみた。
use encoding "shift_jis", Filter=>1; use utf8; use encoding 'shiftjis'; use Text::CSV_XS; $csv = Text::CSV_XS->new({ 'quote_char' => '"', 'escape_char' => '"', 'sep_cahr' => ',', 'binary' => 0 }); # これってデフォルト open(IN, "< bake_input.csv"); while(<IN>){ chomp; print "Input: $_\n"; if($csv->parse($_)){ @flds = $csv->fields(); print join(":", @flds),"\n"; }else{ $bad_argument = $csv->error_input(); print "Error: $bad_argument\n"; } } close(IN);
出力は、
Input: "表面","表層","表わ","表さ","構成","構造","構と","能と","能を","能で","能 に","能基","ソフ","ソミ","-","Y-","C-","-S","-V","Y-S","C-V" Error: "表面","表層","表わ","表さ","構成","構造","構と","能と","能を","能で","能 に","能基","ソフ","ソミ","-","Y-","C-","-S","-V","Y-S","C-V" Input: "Hello","world",2003,"Year" Hello:world:2003:Year
入力文字列がエラーになると、条件分岐していなくても、@flds = $csv->fields();は空になる。このモジュールは入力文字列の文字コードに問題がある場合はまったく動かないということ。
このサイトは相当詳しい。リンクも充実。参考にしよう。
dml仕様にリスト処理を追加。リストにハイパーリンクを張り込むことも可能にした。タイトルへのカテゴリー別アンカーのIDとなる数字にtime関数の数値を採用。こうしておけば新しいものほど大きい数字になるし、カテゴリー内かどうかに関係なく時系列属性を保存できる。最初からこうしておけばよかった(^^;)これで更新日記を書く機能はほぼ完璧になった。快調だ(^^)
日記マークアップ言語、DML Version 0.03のページを作った。
xlhtmlはExcelファイルをHTMLに変換するツールである。これとtkhtmlを使い、Tcl/TkスクリプトのExcel viewerはExcelファイルをHTMLに変換して表示する。
一年の計は元旦にありというが、今年の方向性を探るためのインターネット探査は続く。今日は夕方までは家に籠もっていた。Semantic WebがRDFの上に構築されるとすれば、RDFの理解なくして、先に進めない。ActivePerl5.8でRDFを取り扱うモジュールがあるかどうか、ppm3-binを起動して、searchをかけて見ると、RDF::Notation3とRDF::Coreが見つかった。Notation3とは何か。答えはW3Cのサイトにある。Semantic Web Application Platform - SWAPの中のPrimer: Getting into RDF & Semantic Web using N3である。まずはこの入門を読んで勉強しよう。SWAPのページにはCVM、Closed World Machineのページへのリンクがある。かっちょいいね、閉じられた世界の機械なんて。RDFスキームでは使う語彙を定義して世界を閉じることになることに対応してるんだろうけど。Tim Berners-LeeはPython使いらしいこともわかったし、おもしろい。RDFの解析はPythonがどうも進んでいるみたいだ。RDFやontologyを取り扱うJavaのアプリケーションはいろいろあるんだけど、やはりスクリプタにはスクリプトが似合っている。
なかなかいかしているアプリケーションと以前紹介したのだが、新しいバージョンが出ているので再度紹介しておこう。残念ながら、TS Networkのts_news_utf8.rdfは読めなくなっている。まだ原因が不明である。(バージョン2ではShift_JISで書いて、encodingを"x-sjis-cp932"とすると、うまく読み込めた。PerlのRSS:XMLモジュールと同じ。"Shift_JIS"ではダメ。IEは逆。結局、"utf-8"にコンバートして試してみたけどやはりダメ。[1/5/2003])バージョン2から内容的にかなり進歩し、Read onをクリックすればWebページの元の記事にアクセス、表示する。また、定期的にアクセスして、新しいニュースがあればタスクバーから一覧をポップアップして知らせる。実用的な素晴らしいXMLアプリケーションになったと思う。Available feedsに膨大なニュースソースが自動的にダウンロードされるのには驚いた。以前はまだ数えることができる程度だと思ったが・・・ローカライズも最初から考慮されており、全世界が対象のアプリケーションである。アプリケーションで表示される言葉もtranslation.xmlで変更できる。今後、さらに普及すると思われる。
仕事のことも頭を掠めはじめたが、年末正月連休のまとめとして日記マークアップ言語を考えてみた。名前は、"Diary Markup Language"、dml。名前は立派だが、超簡単なミニ言語。主語と述語を繰り返すだけ。すなわち、「何は何である。」例えば、上の日記は次のように記述されていた。
DA: C: diary T: 雪害 DE: 朝、女房が隣家の車に南天の枝が雪の重みで圧し掛かっているのでなんとかしてくれというので、鋸を取り出して枝を切った。わかっていることだが、頭から雪を被ってしまった。これぞ、雪害(^^;)道路の雪は溶けるかなあ。インクが切れてしまったので、スクリプトでも書くことにした。スクリプトにインクはいらない(^^)
これを処理するPerlスクリプトは次のよう。言語仕様はすぐわかるだろう。
%categories = ( "rn" => "更新履歴", "diary" => "日記", ); while(<>){ chomp; s/</</g; s/>/>/g; if(/^DA:$/){ $thisday = ("Sun.","Mon.","Tue.","Wed.","Thu.","Fri.","Sat.")[(localtime)[6]]; $mon = (localtime)[4] + 1; $mday = (localtime)[3]; $year = (localtime)[5] + 1900; print "<DT>$mon/$mday/$year ($thisday)<DD>\n"; }elsif(/^C:\s+(.+)$/i){ $category = $1; if($title ne ""){ print "<div class=\"emph\"><A HREF=\"renewal_index.html#$category\">[$categories{$category}]</A> <A NAME=\"${category}_\">$title</A></div>\n"; $title = ""; } }elsif(/^T:\s+(.+)$/i){ $title = $1; $title =~ s/\[U:\s+([^;]+);T:\s+([^\]]+)\]/<a href="/$1" target="_webapp">$2<\/a>/i; $title =~ s/\[U:\s+([^;\]]+)\]/<a href="/$1" target="_webapp">$1<\/a>/i; if($category ne ""){ print "<div class=\"emph\"><A HREF=\"renewal_index.html#$category\">[$categories{$category}]</A> <A NAME=\"${category}_\">$title</A></div>\n"; $category = ""; } }elsif(/^DE:\s+(.+)$/i){ $description = $1; $description =~ s/\[U:\s+([^;]+);T:\s+([^;\]]+)\]/<a href="/$1" target="_webapp">$2<\/a>/i; $description =~ s/\[U:\s+([^;\]]+)\]/<a href="/$1" target="_webapp">$1<\/a>/i; $description =~ s/\[I:\s+([^;\]]+)\]/<IMG src="/$1" align="center" hspace="20" alt="$1">/i; $description =~ s/^\[U:\s+([^;]+);I:\s+([^;]+);T:\s+([^;\]]+)\]$/<a href="/$1" target="_webapp"><IMG src="/$2" align="center" hspace="20" alt="$2"><\/a>$3/i; $description =~ s/^\[U:\s+([^;]+);I:\s+([^;]+);U:\s+([^;]+);T:\s+([^\]]+)\]$/<a href="/$1" target="_webapp"><IMG src="/$2" align="center" hspace="20" alt="$2"><\/a><a href="/$3" target="_webapp">$4<\/a>/i; print "<p>$description</p>\n"; }elsif(/^PRE:$/i){ print "<pre>\n"; $pre = 1; next; }elsif(/^\/PRE:/i){ print "</pre>\n"; $pre = 0; next; } if($pre == 1){ print $_, "\n"; } }
日記マークアップ言語dml仕様概説
私はDanaというエディタのラウンチャ(ボタンにカーソルを合わせるとそう表示されるので尊重しているが、おそらく発射台、launchのことだろう)にセットして使っているので、それに依存した作り方になっている。エディタ上でHTMLファイルに直接書いて、その部分を範囲指定してカレット位置にスクリプトで変換出力する。次々追加して書けるし、修正する場合はHTMLを直接編集する。要望事項等あれば、TSNETのTSfeeの会議室やメール等でご連絡ください。<おいおぃ、自分以外の誰が使うっていうの(^^;)
dmlの生まれた原因。とにかくHTMLのタグ、定式化した部分やハイパーリンクやイメージのタグを書きたくないというものぐさなニーズによるものである。きっかけは、Notation3の仕様を見て、やはりRDFのタグなんて誰も書きたくないんだと思ったこと。xtrなど他の言語の仕様も参考にしようとしたが、複雑過ぎて楽になりそうもないので止めた。Notation3を少し真似ているが、今後、構造が複雑化する時はさらに真似る必要があるかもしれない。自由度が高いと複雑になってしまう。自由度をなるべく抑えないといけない。RSSの良さはシンプルさだけど、次第に複雑になりつつある。
今後の予定。RSSによるニュースフィードに対応すること。つまりはHTMLとRDF/XMLの同時出力とおそらく日記のデータベース管理が必要になると思っている。
dmlは快調に動くみたいだ。タイトルへリンクを貼るのもうまくいったみたい。他におかしいところがでなければ、次はタイトルのアンカーを完全自動で生成するようにしたい。日記の内容以外の定式化された部分も出力できるようにすれば、これまで手作業でやってきた機能はほぼ完成だ。画像の貼り付け方もいくつか選択できるようにするかな。インデックスを現在の一年単位のカテゴリー別のものに加えて、単にカテゴリー別と時系列のものも作りたい。キーワード検索への対応も課題として残っている。もう少し動作チェックをしたら、dmlのページを作ろう。
プログラミング言語はいろいろあるけど、スクリプト言語こそが次世代の主流の言語である。スクリプト言語さえあれば、あなたはなにでも書ける。まあ、半分冗談で、半分は本気かもしれないが、プログラミングが大変楽になることは確かだ。Martin C. Brown著、㈱日本ユニテック翻訳/監訳、「Perl/Python/PHPによるXMLプロセッシング徹底解説、スクリプト言語で学ぶXML×Webプログラミング」、技術評論社、平成15年1月6日初版第1刷、427ページ、3480円。ちょっと前に購入したけど、良い本だと思う。なぜかって、立ち読みでもしてみればわかるって・・・(^^;)