[AWK] UTF-8でgawkを動かす

ちょっとgawkを調べていたら、Gawk for WindowsLibIconv for Windowsを見つけた。以前紹介したJurgen Kahrsが元になっているわけだけど、iconvが有効に動作するので、日本語Windows環境で使う意味が出てきた。テスト的なスクリプトだけど、こういうのをコマンドラインで動かす。正規表現エンジンは1バイト単位で文字を認識している。シフトJISで正規表現を書くとエラーになるので、実はUTF-8でスクリプトは書いている。従って、コマンドラインでは盛大に文字化けする。TeraPadエディタからコピーして貼り付ければ、シフトJISになる。

BEGIN{
	print "Hello world"
	print "ハローワールド"
}
/ハロー/{print}
/Hello/{print}

C:\anhttpd\cgi-bin>gawk -f gawk310u.awk gawk310u.awk
Hello world
繝上Ο繝シ繝ッ繝シ繝ォ繝
        print "Hello world"
        print "繝上Ο繝シ繝ッ繝シ繝ォ繝・
/繝上Ο繝シ/{print}
/Hello/{print}

のように化ける。これをコマンドラインで次のように動かす。

gawk -f gawk310u.awk gawk310u.awk | iconv -f UTF-8 -t CP932

png/gawk_icov_s.pnggawkとiconvの実行画面

実行画面の上部は、UTF-8で出力したrenewal.xmlをiconvでCP932に変換して標準出力したところ。その下が、gawkのUTF-8出力をiconvでCP932に変換して表示したところ。GnuWin32、お見事。gawkがインターネット時代に適応する形態がパイプとはね。gawkらしい。

[AWK] gawk+iconvでインターネット

さて、iconvの有効性を確認したところで、GnuWin32のGAWK3.1.0-2でインターネットへアクセスしようとすると、

gawk: geturl.awk:24: fatal: `|&' not supported

おかしいなあと、いろいろチェックしたがだめ。結局、Cygwinに戻る。現在Cygwinでは最新の3.1.3が動いていて、iconvも恐る恐る動かすと見事に動く。Cygwinで行こう。なんて、節操がないユーザーだろう。iconv -lの出力を載せておく。

$ iconv -l
ANSI_X3.4-1968 ANSI_X3.4-1986 ASCII CP367 IBM367 ISO-IR-6 ISO646-US ISO_646.IRV:
1991 US US-ASCII CSASCII
UTF-8
ISO-10646-UCS-2 UCS-2 CSUNICODE
UCS-2BE UNICODE-1-1 UNICODEBIG CSUNICODE11
UCS-2LE UNICODELITTLE
ISO-10646-UCS-4 UCS-4 CSUCS4
UCS-4BE
UCS-4LE
UTF-16
UTF-16BE
UTF-16LE
UTF-32
UTF-32BE
UTF-32LE
UNICODE-1-1-UTF-7 UTF-7 CSUNICODE11UTF7
UCS-2-INTERNAL
UCS-2-SWAPPED
UCS-4-INTERNAL
UCS-4-SWAPPED
C99
JAVA
CP819 IBM819 ISO-8859-1 ISO-IR-100 ISO8859-1 ISO_8859-1 ISO_8859-1:1987 L1 LATIN
1 CSISOLATIN1
ISO-8859-2 ISO-IR-101 ISO8859-2 ISO_8859-2 ISO_8859-2:1987 L2 LATIN2 CSISOLATIN2
ISO-8859-3 ISO-IR-109 ISO8859-3 ISO_8859-3 ISO_8859-3:1988 L3 LATIN3 CSISOLATIN3
ISO-8859-4 ISO-IR-110 ISO8859-4 ISO_8859-4 ISO_8859-4:1988 L4 LATIN4 CSISOLATIN4
CYRILLIC ISO-8859-5 ISO-IR-144 ISO8859-5 ISO_8859-5 ISO_8859-5:1988 CSISOLATINCY
RILLIC
ARABIC ASMO-708 ECMA-114 ISO-8859-6 ISO-IR-127 ISO8859-6 ISO_8859-6 ISO_8859-6:1
987 CSISOLATINARABIC
ECMA-118 ELOT_928 GREEK GREEK8 ISO-8859-7 ISO-IR-126 ISO8859-7 ISO_8859-7 ISO_88
59-7:1987 CSISOLATINGREEK
HEBREW ISO-8859-8 ISO-IR-138 ISO8859-8 ISO_8859-8 ISO_8859-8:1988 CSISOLATINHEBR
EW
ISO-8859-9 ISO-IR-148 ISO8859-9 ISO_8859-9 ISO_8859-9:1989 L5 LATIN5 CSISOLATIN5
ISO-8859-10 ISO-IR-157 ISO8859-10 ISO_8859-10 ISO_8859-10:1992 L6 LATIN6 CSISOLA
TIN6
ISO-8859-13 ISO-IR-179 ISO8859-13 ISO_8859-13 L7 LATIN7
ISO-8859-14 ISO-CELTIC ISO-IR-199 ISO8859-14 ISO_8859-14 ISO_8859-14:1998 L8 LAT
IN8
ISO-8859-15 ISO-IR-203 ISO8859-15 ISO_8859-15 ISO_8859-15:1998
ISO-8859-16 ISO-IR-226 ISO8859-16 ISO_8859-16 ISO_8859-16:2000
KOI8-R CSKOI8R
KOI8-U
KOI8-RU
CP1250 MS-EE WINDOWS-1250
CP1251 MS-CYRL WINDOWS-1251
CP1252 MS-ANSI WINDOWS-1252
CP1253 MS-GREEK WINDOWS-1253
CP1254 MS-TURK WINDOWS-1254
CP1255 MS-HEBR WINDOWS-1255
CP1256 MS-ARAB WINDOWS-1256
CP1257 WINBALTRIM WINDOWS-1257
CP1258 WINDOWS-1258
850 CP850 IBM850 CSPC850MULTILINGUAL
862 CP862 IBM862 CSPC862LATINHEBREW
866 CP866 IBM866 CSIBM866
MAC MACINTOSH MACROMAN CSMACINTOSH
MACCENTRALEUROPE
MACICELAND
MACCROATIAN
MACROMANIA
MACCYRILLIC
MACUKRAINE
MACGREEK
MACTURKISH
MACHEBREW
MACARABIC
MACTHAI
HP-ROMAN8 R8 ROMAN8 CSHPROMAN8
NEXTSTEP
ARMSCII-8
GEORGIAN-ACADEMY
GEORGIAN-PS
KOI8-T
MULELAO-1
CP1133 IBM-CP1133
ISO-IR-166 TIS-620 TIS620 TIS620-0 TIS620.2529-1 TIS620.2533-0 TIS620.2533-1
CP874 WINDOWS-874
VISCII VISCII1.1-1 CSVISCII
TCVN TCVN-5712 TCVN5712-1 TCVN5712-1:1993
ISO-IR-14 ISO646-JP JIS_C6220-1969-RO JP CSISO14JISC6220RO
JISX0201-1976 JIS_X0201 X0201 CSHALFWIDTHKATAKANA
ISO-IR-87 JIS0208 JIS_C6226-1983 JIS_X0208 JIS_X0208-1983 JIS_X0208-1990 X0208 C
SISO87JISX0208
ISO-IR-159 JIS_X0212 JIS_X0212-1990 JIS_X0212.1990-0 X0212 CSISO159JISX02121990
CN GB_1988-80 ISO-IR-57 ISO646-CN CSISO57GB1988
CHINESE GB_2312-80 ISO-IR-58 CSISO58GB231280
CN-GB-ISOIR165 ISO-IR-165
ISO-IR-149 KOREAN KSC_5601 KS_C_5601-1987 KS_C_5601-1989 CSKSC56011987
EUC-JP EUCJP EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE CSEUCPKDFMTJAPANESE
MS_KANJI SHIFT-JIS SHIFT_JIS SJIS CSSHIFTJIS
CP932
ISO-2022-JP CSISO2022JP
ISO-2022-JP-1
ISO-2022-JP-2 CSISO2022JP2
CN-GB EUC-CN EUCCN GB2312 CSGB2312
CP936 GBK
GB18030
ISO-2022-CN CSISO2022CN
ISO-2022-CN-EXT
HZ HZ-GB-2312
EUC-TW EUCTW CSEUCTW
BIG-5 BIG-FIVE BIG5 BIGFIVE CN-BIG5 CSBIG5
CP950
BIG5-HKSCS BIG5HKSCS
EUC-KR EUCKR CSEUCKR
CP949 UHC
CP1361 JOHAB
ISO-2022-KR CSISO2022KR
CP856
CP922
CP943
CP1046
CP1124
CP1129
CP1161 IBM-1161 IBM1161 CSIBM1161
CP1162 IBM-1162 IBM1162 CSIBM1162
CP1163 IBM-1163 IBM1163 CSIBM1163
DEC-KANJI
DEC-HANYU
437 CP437 IBM437 CSPC8CODEPAGE437
CP737
CP775 IBM775 CSPC775BALTIC
852 CP852 IBM852 CSPCP852
CP853
855 CP855 IBM855 CSIBM855
857 CP857 IBM857 CSIBM857
CP858
860 CP860 IBM860 CSIBM860
861 CP-IS CP861 IBM861 CSIBM861
863 CP863 IBM863 CSIBM863
CP864 IBM864 CSIBM864
865 CP865 IBM865 CSIBM865
869 CP-GR CP869 IBM869 CSIBM869
CP1125
EUC-JISX0213
SHIFT_JISX0213
ISO-2022-JP-3
ISO-IR-230 TDS565
RISCOS-LATIN1

前、紹介したgeturl.awkとiconvを使う。

gawk -f geturl.awk http://homepage1.nifty.com/kazuf/renewal.xml | iconv -f UTF-8 -t CP932

[Computing] 文字コードの問題とAprotool TM Editor

Windows環境でどの文字コードを使うかという問題を考えるに、UTF-8を使うという選択肢について考えてみた。なぜなら、Perl5.8はUTF-8の使用が前提なのだ。UTF-8の文字コードの編集については、最近のエディタは既に対応しているものが多い。しかし、問題はコマンドラインでのデバッグだ。コマンドプロンプトではUTF-8は文字化けするのだ。

それで思い出したのが、日本最初のUnicodeエディタ、前寺さんのAprotool TM Editorだ。このエディタ上で動くコマンドラインはUTF-8の表示に対応できる可能性がある。動かしてみた。OK。

しかし、UTF-8ですべてを取り扱うのはやはり問題がある。外にあるデータはすべてシフトJISだし、不便だ。Windowsのアプリケーションのように内部だけでUnicodeを使い、表にはシフトJISしか見せないという透過的な仕組みにしてほしい。

[Computing] cmd prompt here

Windows2000用のPowerToysがMSのサイトからなくなって、困っていたのだが、今日ググっていると、おもしろいサイトを見つけた。D-COT DAC's Collection Of Textsだ。レジストリファイルがその正体なんだということがわかった。なーるほどと思った。このサイトにはWindowsユーザーにはいろいろと参考になる情報が満載である。無事、Windows2000にcmd prompt hereを設定できたことは言うまでもない。

[日記] 暖かい大晦日、元旦

あけましておめでとうございます。

今年も良い年になりますように。

新年早々、カテゴリインデックスの更新を失敗してしまった。修正しないと・・・月が変わるとか、年が変わる時は慎重に作業しないとまずい。スクリプトは正常に動作しているのだが、作業手順を間違ってしまった。深夜は、新年早々月変わりに正常に動作しないスクリプトに気付いて修正。アルゴリズムが間違っていてはまったく駄目だね。

[日記] 2003年10大ニュース

2002年の10大ニュースを参考まで。10大ニュースは年末に考えたほうがよいのかも。それに基づいて、一年の計は元旦にありということになるのだろうね。既に、「註釈」を考えようということにしたのだが、更新日記そのものが、ある意味では註釈なので、註釈の註釈とか、註釈の体系化表示とか、そういった仕組みと見せ方を考えようということである。

カテゴリ別インデックスの作成を失敗したというのは、今年になってからインデックス作成スクリプトを起動したので、昨年のインデックスファイルに今年のインデックスが自動的に上書きされてしまったというものである。大晦日に作って、ファイル名をリネームすればよかったのだが・・・結局そのような仕組みは面倒なので、CGI化して、年毎のインデックスを作成できるようにした。年を指定しなければ従来どおり、その年のインデックスを作成する。これで、この問題に遭遇することはなくなった。作業はいつでもできるし、内容を変更した場合はいつでも作り直すことができる。

話を戻そう。あまり思いつかないので、昨年のカテゴリ別インデックスを眺めてみた。順不同、思いつくまま。


プライベートな10大ニュース。

2005年に向けて、W3Cの標準化とSemantic Webの動向、Oxygenプロジェクト(Haystackも含めて)とMyLifeBits+Longhornの動向がどうなるか、Linux+オープンソース世界の動向、スクリプト言語、特にPerl6/ParrotとRubyの新しい正規表現エンジン、Pythonを使った新しいアプリケーションとWebへの応用、Tcl/Tkの応用の動向(Tclkitあたりかな)、それから機械学習、自然言語処理と合わせて人工知能研究の動向に今年も注目していきたい。

自作のシステムについては、dml/memolの「註釈」拡張と、エディタや、Tcl/Tk、その他のGUIツールキットとの連動を考えてみよう。

下手な俳句も捻る。

[日記] 非可換幾何学

日経サイエンス新年2月号に「エレガントな宇宙」の著者のブライアン・グリーンへのインタビューがある。「ブライアン・グリーンが語る11次元の世界とひも理論の未来」である。この中に、非可換幾何学という耳慣れない言葉が出てきたので、ブライアンが上げているAlain Connesを調べてみた。

ホームページに論文が公開されており、DownloadsのページにA Short Survey of Noncommutative Geometry. (2000)という論文がある。最後のほうに非可換ゲージ理論と弦理論についてまとめられている。ブライアンは非可換幾何学では空間の点が行列で記述される幾何学的対象になると説明している。点という概念は雑な近似であり、素粒子レベルでは点は無意味ということになる。確かに点は大きさを持たないのだから、いくら集めても空間を構成できない。空間は、空間を分割したある単位の集合と考える必要がある。その究極まで分割した微細な空間は素粒子あるいは「弦」そのものが生成する場であろうし、それは行列で表現できるものなのだろう。新しい幾何学と弦理論(なぜ最近はひもと訳すのだろう)の出会う場所は、空間と物質が出会うところなのだろうか。

[日記] モネ・ルノアールと印象派展

昨日、広島県立美術館に出かけた。展覧会最後の休日なので、すごい人出だった。駅前のジュンク堂にも行く予定だったので、結局エリエールに車を止めて、1時過ぎて、11階のberettoで食事をした。お得なペアランチで、2400円。サラダに、ピザが1品、パスタが2品。シェアして食べる。3種のケーキとコーヒーがそれぞれ。パスタはボリュームがあるので、お腹一杯。パスタが少し汁っぽいのがどうかなというぐらいで満足。ジュンク堂でしばらく二人で本を漁って、歩いて県立美術館へ。

そこまでは良かった。それからが大変だった。入り口前の広場でぐるぐると列が回って、入り口に入っている。なかでも、目一杯行列が回っている。結局待ち時間1時間。見る前に疲れてしまった。印象派展は待ち時間の割には数が少ないという印象。まあ、悪くはなかったが・・・わかりやすい絵ばかりで人気は出るよね。2.5ヶ月で累計10万人を越えた。この日は前例のない行列だったらしい。

[日記] 螺旋

昨年の初めの更新日記を読んでいると、なにか同じようなことを書いているなと思いながら、興味は変化していないということだと結論付ける。同じところを回りながらも少しは上昇しているのだろうか。

[日記] ニューヨーク公共図書館

菅谷明子著、「未来をつくる図書館-ニューヨークからの報告-」、岩波新書、2003年9月19日第1刷、230ページ、700円。おもしろい。こういうところは真似るべきところだろう。The New York Public Library。NYPLのプログラミング言語のリンクを辿ると、scriptsearch.comがある。10000以上のリソース。なぜか、Rubyがない。だめじゃん。おせっかいで、Please look at http://www.ruby-lang.org/en/.と書いておいた。[modified: 2004-01-18]

[日記] Fish Games

4回目でクリアした(^^)vゲームをしてから、実は今日ようやくFinding Nemoを見てきた。Crushが亀で、EACがEast Australian Currentのことだとわかった。ストーリーは、Toy Storyのほうがよくできていたかもしれないが、例によって人畜無害で悪くはなかった。アニメーションはどんどん進歩してきて、これがどれだけ大変なことかを忘れてしまいそうだ。最後のCreditには開発関係のメンバーの名前が数多く記されているのが目を引いた。アニメはコンピュータがいくら進歩してもまだまだ労働集約型産業である。

png/finding_nemo_game_s.pngCrusin' with Crushのクリア画面

[日記] インターネットのキラーアプリケーション

オライリーにとっては、インターネットのキラーアプリケーションは、Google、AmazonやeBay等のサイトそのものということらしい。私は、インターネットそのものがキラーアプリなんだと思うけどね。最近は、インターネットから情報を摂取して生きている生物のような気がしてきた。

梅田望夫・英語で読むITトレンドはおもしろい。梅田さんは、フォーサイト誌に「シリコンバレーからの手紙」を連載している。フォーサイト2月号もグーグルの話。ページランク・アルゴリズムというけど、これはアルゴリズムじゃないと思うんだけど・・・有効な方法なんだよね。しかし、これには、みんながグーグルに頼れば頼るほど、ランクの高いサイトをより高めるという作用があるはずで、程度問題かもしれないが、ランクの低いサイトで有用なサイトを見つけるというのが、今後は重要になると思う。必然的に、異なるアルゴリズムで動く検索エンジンが必要ということになる。自作する?(^^;)一種しかないというのはまずいんじゃない。

[Perl] Perthon -- Python to Perl Language Translation

Perthon -- Python to Perl Language Translationなんてのがあるけど、需要はあるのだろうか。Pythonで動かせばいいじゃないと思う。どのPerlに翻訳するのっていうのもある。

[Ruby] ruby-lang.orgがRSS1.0配信を開始

RSSが急激に普及を始めた。我がサイトも一昨年ぐらいからXMLの利用を検討してきたが、結局RDFの採用に落ち着いた。RSSリーダーの普及も後押ししている。新しいWebの読み方が始まったということだろう。ruby-lang.orgが昨日からRSS配信を開始した。ニュースの収集をRSS経由でということが現実的な選択肢になってきたと感じるこの頃である。

[XML] 「註釈」のために

今年のキーワードは「註釈」。Web上で註釈を記述するための仕組みをどう作るかを考えていきたい。無論、更新日記に反映されなくてはならないわけだ。重要なリンクをリストアップしておこう。


XBELは以前取り上げたが、まだ身に付かない。結構おもしろいJavaScriptか何かを使ったXSLがあって、XBELデータを高機能なHTMLに変換して表示させることができる。えーっと、http://homepage1.nifty.com/kazuf/xml_bookmarks.xmlですね。ここで使っているxbel-1.0.xslは大変おもしろい。これは上のXBELの中のリンクにあったはず。

XPointerも昨年リコメンデーションになって、Mozillaもサポートを始めたという話が、上のリンクのどこかに書いてあった。ブラウザが新しいマークアップ言語をサポートするまで待つ必要はなく、パーソナルな表現のレベルでは、註釈をHTMLでいかに表示させるかを考えれば済むのかもしれない。

と言いながら、W3CのRSSをチェックすると、Extensible Stylesheet Language (XSL) Version 1.1 W3C Working Draft 17 December 2003がある。すごいボリュームだ。本格的なフォーマット言語である。しかし、この方向性はHaystackのAdenineやMicrosoftのXAMLと同じような気もするが、どのように融合していくのか興味深い。W3CのRSSにはxslが指定されていて、直接開くと表形式でニュースが表示される。いよいよXML+XSLの時代になるのか。XML+XSLでWYSIWYGのエディタなんて作れるのだろうか。Amayaはチェックしておくべきだろうが、使い方がクリックしていくだけではわからん(^^;)

しかし、一般ユーザーには手軽さに欠けるだろう。はてなダイアリー@niftyのCocologのサービスを使うのではとは思うが、大変な勢いで伸びているみたい。ニーズはある。Cocologのページはxhtmlで書かれていて、文字コードもutf8だ。@niftyはhttp://www.typepad.com/と提携している。

むむむっ、CSS3 Paged Media Module W3C Working Draft 18 December 2003もおもしろい。やはりWebページは通常の文書としては使いにくい。それは印刷するときに問題があるからである。ページがきちんと表現できると大変素晴らしい。これも楽しみ。デスクトップの作業すべてがWebブラウザ/エディタ上で行われる時代が近づいている。

おーっ、Tim Berners-LeeがKnightの称号(a Knight Commander of the Order of the British Empire (KBE))を受けた記事が出ている。さもありなん。