Perl

Perl 5.14.2とImageMagick/PerlMagickのアップデート

毎年年末年始に帰省しないせいか、いつも休みに入るとサーバー関係の更新作業を行っているのだが、今年は長らく懸案事項となっていたPerlのバージョンアップとImageMagick/PerlMagickのアップデートをやってみることにした。Perlのバージョンアップ自体はたいした作業ではないのでメモレベルなのだが、PerlMagickが異様に難しいので、バイナリパッケージをインストールって言う人は手を出しちゃいけません。
ImageMagick/PerlMagickは最後にうまくビルドできた6.4.1からバージョンを上げることができず、それでいながらMovableTypeでは必須。ということで、今回も懲りずに6.7.4-2にアップデートしてみてから、PerlMagickにトライすることにした。今回の作業をまとめると、いままでPerlMagickがインストールできなかったのは、どうもImageMagickやPerlMagickだけでなく、Perlのコンパイルオプションにも秘密が隠されていた。(おそらくamd64環境で問題になりそうで、x86だと問題ないと思う。) 我が家のOS環境はFreeBSD9.0RC3であるが、OS付属以外のユーザーランドはFreeBSD7環境なので、作業自体はFreeBSD7を導入しているマシンで行い、rsyncでバイナリを同期している。GCC周りで問題もあろうと思うので、いつかの段階でLLVM/Clangに乗り換える必要がありそう。CPANライブラリはMovableTypeが動かせるようにそろえるというこれまで通りの方針で進める。

2006年04月02日 日曜日

向井 淳 / 入門Haskell - はじめて学ぶ関数型言語

Perl6-Pugsの登場以来(で正しいと思う)、純粋関数型言語のHaskellが熱いと言うことで、何か良い入門書はない物かと思っていたのだが、なんだか書店の棚を見ていると目にとまったので購入してみた。Haskellも入門書が出る時代になったということで、全く持って素晴らしい。
ただこの本はさらっと読んでみて、さらっとおしまいという感が強く、入門書として_何が何でもHaskell_という押しがないのは事実かも。なんだか説明がちっとも頭に入ってこない。熱意は感じるんだけど空回りしているかなと思うのである。あと入門書を読んでいつも思うのだけど、あとで説明するという言葉はのは書かない方がよいと思う。さらっと書いて知らんぷり(どうせそこでは本質的ではないのだから呪文としちゃうでも良い、たいてい書かなければ気が付かない)をして、あとで説明すればいいと思うのだが、「あとで説明する」と来るとイライラしてしまうのである。
とりあえずおもしろいので、ざくざく読んでいる。手も動かすべく処理系もインストールしたから、ぼちぼち手を付けてみよう。あと青木さんが「ふつうのHaskellプログラミング」を執筆中なので、こっちにも期待したいところ。

2005年11月24日 木曜日

続・なんでもかんでもExcel症候群

Unixな機械からテキストファイルを直接持ってくると、改行がWindowsと異なるので、Excelで扱うのがちょっとめんどくさい。FTPできるときは、ASCIIで持ってくればDOS/Windowsなテキストファイルになるのだけど、世の中FTPできなくて専用のクライアントを共用されることもあって涙が出てくることがもうしょっちゅうあって困る。で、そんな_だめだめクライアント_に泣く泣くつきあわなければならないのだが、この際_なんでもかんでもExcelにお任せ_なのだ。
これからはASCIIモード転送のことは忘れて、すべてBINARYモード転送にしてしまいましょう。DOS/Windowsの世界ではUnixで作成したテキストは何行あっても、_たった1行のテキストファイル_と見なせるから、これを全部1つの文字列に取り込んで、ばらす方向で考える。ソースを示す。

2005年11月22日 火曜日

なんでもかんでもExcel症候群

何でもかんでもPowerPoint症候群の弊害を日記で書いたのだが、それよりも世の中に広く広まっている病的な物と言えば、_なんでもかんでもExcel症候群_であろう。とにかく通常の表だけに飽きたらず、提出書類から報告書まで_何でもかんでもExcel_なのである。つまり「何でもかんでもExcel症候群」とはExcelだけですべての仕事が完結してしまう恐ろしい病気なのだ。
その病巣の由来を簡単に予想するとすれば、子供の頃に升目の入ったノートで漢字の書き取りをやらされ(つまりカーニングとかに無頓着になる)、読書感想文などの類は原稿用紙で書かされ、漢字は少ない文字数で情報量を詰め込めることからすっきりとした表が書きやすく、何でもかんでも_表にしないと気が済まない_という日本人の悲しい習性に由来する物であろうと思うのだ。
まぁUnixでEmacsしか使わないというのと似たような話ではあるのだが、典型的なEmacsユーザーが扱うのは汎用的なテキストファイルであり、Emacs LISPでがんがんプログラムを書く(設定ですらLISPを書かねばならないので、多少は誰でも書く物だ)人が多い用に思われる。Excelの場合は、XLS形式という特殊なフォーマット(最近のはXMLなのか?)を用い、適当なワークシート関数などを表層的に使いこなしている人が多く、Excelの基本技とも言えるピボットテーブルとかソルバーを使いこなしている人がどの程度いるかと問えば、結構怪しい物だ。
まぁ会社で働いているとこういう病的な世界と常に隣り合わせであり、いつも精神汚染を受けているのであるが、これを前向きに楽しむにはどうすればいいか? ということに焦点を絞り込んで生活しないとやってられないと言うことになるであろうか。
そんなわけでExcelをちゃんと使いこなすにはVBAで遊びまくればいいのであるが、テキストファイルとのつきあいもやめられない。Unixな環境に一度でも触れてしまうと、VBAのお気軽さを楽しんでいても感じる最大の問題点は_正規表現が使えない_と言うところがなやましい。これまで正規表現(とハッシュ)を使うためにVBAからだと駄目だと思い、Active PerlとかActive Rubyとか非VBAでCOMオブジェクトをさわれる言語を選択していたのであるが、書いたプログラムを使ってもらうのに_わざわざPerlだのRubyだのをインストールしてもらわねばならない_という痛い問題があった。Windowsで全然閉じていないのである。Mac OSXみたいにPerlとかRubyがインストールされていればこんなことは考えなくて良いのだが、PerlやRubyを使うのは_Windows的なやり方ではないのである_と言う結論に落ち着いた。
Windows的にどうすればいいのかと言う話なのだが、結局のところ現在のほぼすべてのオフィスにあるWindows環境で前提として良さそうな物は、Internet Explorer 6 SP2とExcelであろうと言うことになる。いろいろ調べているとIE5以降だと、WIndows Scripting Hostが使える。_まてよWSHにはたしか正規表現オブジェクトがあったぞ_と思い出して、さらにCOMで呼び出せるじゃんと言うことを思い出したので、一気にこの方面の悩みが解消した。要はWSHの正規表現オブジェクトをVBAのオブジェクトにしてしまえばいいのである。なんてこったい。こんなので数年悩んでたよ。とりあえず、あるディレクトリにある複数のファイルを選択して、そのすべてのファイルに、入力したパターンマッチをして置換を行うVBAプログラムを書いてみよう。

2005年08月27日 土曜日

Lightweight Language Day (and Night)

今年もLightweight Languageの年に一度のお祭りであるLightweight Language Day (and Night)に参加してきました。チケットの発売に気がつかなかったので、何とか買えた昼間の部のみ参加。
今年の僕が感じた目玉のひとつ目は、GNU awk(gawk)のXML拡張であるxmlgawkであろうか。僕がgawkやnawkを使っていたのは学部の4年目のころで、あのころは日本語化パッチを当てたjgawkをメインに使っていた。(今にして思うとperlのプログラムも結構書いたけどawkほど使ってないな。) 気がつけば国際化されて、キーワードが増えてXML文書をSAXっぽく扱えるようだ。この拡張はgawkの先端開発版という位置づけで、コンパイルオプションで無効にできるそうだ。awkは行指向ツールとしてはperlやrubyより使いやすいところはあるので、まだ開発が行われていて進化が続いているのかと言う驚きとともに、昔師匠のawkの技でうんざりしてしまいやめてしまったawkであるが、再び遊んでみたいなあと思ったのである。(僕の師匠(指導教官ともいう)はawkとかPostScriptのプログラムをサクサクと・・・)
二つ目は全然追いかけてもいなかったけどPerl6周辺の話。昨年のLLでは北京オリンピック頃と言っていたPerl6であるが、この1年でPerl6のHaskellによる実装(Pugs)を行ったという天才が登場して、突如として開発が加速しているようだ。それにしても1ヶ月でHaskellを覚えて、Perl6の仕様を具現化してしまうとは。若い天才的な人物の登場というのはなかなかエキサイティングなことだったのだと思う。小飼さんのPerl6のデモを見ていたのだけれど、Perl5との互換性を捨てているせいか、言語自身がリファインされて、どことなくrubyに近づいているような・・・ 似たような機能を影響しながら追加していくと、結局PerlとRubyとPythonを足して3で割ったような言語ができるのだろうか? もうちょっとPerlの良いところであり悪いところでもある毒々しさを残して置いて欲しいのだけれど。
他の言語に関しては特に進展があったわけではないのでここで述べる必要もないと思う。ざっと10個の言語プレゼンを聞いたのであるが、聞いた結論としてLightweight Languageとは何だろうかと思ってしまう。個人的なLightweightであることの定義付けであるが、まず最初に軽い記述で高度な処理ができること、次にたいていの人にとって理解しやすい概念のみでプログラム可能であることかなと思う。そういう点でエヴァンジェリストの方々には大変申し訳ないが、monadsとか、Curry化とか、継続とかが一般に理解されるようになるとはとうてい思えない。(一応分かりやすいと思う解説へのリンクは貼った。) むろん関数型プログラミングの威力は理解できるのだが、果たしてLightweightなのか? 誰しも知っていて当たり前なのか? と言うあたりが僕は知りたい。(Scheme的にはSICPを読めと言う話だと思うのだが、みんなしなければならないもんでも無かろう。) ちなみに僕自身はLightweightに関係なく関数型な言語の1つはプログラマを志す人は教養レベルでも良いからやっておくべきだと思ってはいる。第一、面白いし。
フレームワーク対決については、Kahuaは昨年のLLで面白いツールだと思っていろいろ調べていたので、面白くデモを拝見したのだが、もう少しうまく説明できればなという場面が多かったかも。Ruby on Railsについては、一度デモを見ておきたいと思っていたので、今回のプレゼンは参考になった。みんなが凄いというだけあるな。うちのサーバにインストールというのはバックエンドDBをインストールしたくないので保留としても、試験動作環境のDebianマシンには入れてみてもいいかも。ちょっと検討してみよう。Sledgeについては今更Perl Baseなシステムを持ちたくない(我が家の環境でPerl依存なものはもうほとんどない)ので、意見は保留。
「君ならどう書く」というセッションは、漢数字を扱う電卓ということで、面白く眺めさせてもらった。今回の漢数字の定義自身が、一般的ではない(世間的には無量大数まで万進のはず。今回はどの桁か忘れたけど万万進に切り替わる)こともあり、パースをどうするかというところが面白かった。(万万進の場合は人間が聞いてもよくわからなくなるので、少なくとも国内では廃れている。) 桁数が多くなれば誰しもがやるように、下の桁から勘定すればいいのよね。今回は個人的にはプログラム可能な電卓を作りこんでいたPythonのチームが秀逸であったと思う。
あと自由演技のsfの小林さんなのだが、科学技術計算という論点では特に行列計算ができる計算機という位置づけだったかと思う。この手の計算は特に実験系の人は常に悩ましいと思うのだが、測定器が吐き出すテキストデータをなんとかパースして、どう配列に取り込むかという点でいつも悩むところがあるが、このプログラムの場合データを表のようなものに落としこんでテキストファイルとして、テキストファイル自身が行列やベクトルをあらわして、ファイル名を記号として使えるような計算に特化したシェルのようなものという風に読めたのであるが、あの場で量子力学の固有値計算をするのはどうかと思う。説明によっては面白いと思うのだけど。ちなみに僕はあの規模の計算は普通にCで書くべきだと思う。いろいろ悩ましいけど。

2004年08月08日 日曜日

Lightweight Language Weekend 2日目

2日目の前半は最近はやりのblogな話題。僕は基本的に興味がないのだが一応お勉強のため… 大きなblogサイト(Livedoor Blog)やはてなダイアリーなど)の方が来ていたので、個人的には「(政府や各種圧力団体などから圧力がかかりそうな)非常にまずい記事の削除要請があった場合にどのように考えるかの立ち位置」を効きたかったのだが、LLには関係ないし、契約で乗り切れる話かもしれないし、あまりにダークなんで聞けなかった。聞いておけば良かったかな? LLの最も巨大な応用先であることは認めるが、blogだけでこんなに時間を取るんだったら他の話が聞きたかった。
Lightning Talkは詳細はあまり覚えてない。(なんせ半分くらいBitKeeperと話をしていたので。) 平内さんの「木のマッチ」では、Schemeを使用した木構造のデータに対して正規表現みたいなパターンマッチをする話。さくっとXML VallidatorがかけるあたりがSchemeのマクロらしい。久井さんの「Gauche-glによる、3次元図形言語」では、Gauche-GLとストリーム(SICP Chap3の後半)を使ったアニメーションによるプレゼンでGaucheではこんなこともできるのかと言うこともあってこれまた面白かった。
高橋さんの「日本Rubyの会設立」の話は要点とをついたインパクトのあるプレゼンで、こうあるべきかと思ったり… 早川さんの「LL侍」は最初は照れが見えたが、吹っ切れたあとはかなり面白かった。(もう一段切れが欲しかったかな。)

2004年08月07日 土曜日

Lightweight Language Weekend 1日目

行ってきました。ざっくりとした的確な要約は、まつもとゆきひろさんのMatzにっきを参照。(こんな手抜きで良いのかな。)
あまりに手抜き過ぎなので、印象深いところをかいつまんで。今回はPerlにしてもRubyにしてもPythonにしても大きな変化がなかった1年なので、逆にマイナーな言語の存在が目立つカンファレンスでした。特に、SchemeやHaskellと言った関数型言語の人が目立ったなぁ。
今回特に面白かったなと思ったのはSchemeの1実装であるGaucheですかね。ここ数年Schemeは忘れ去られていた感がある(入門的な書籍類が全て無くなっていたので)のだけども、国内的にはGaucheのおかげで復権したと考えて良かろう。またどの言語でもキラーアプリがあれば動き出すのであるが、Gaucheは継続ベースのWebアプリケーション・フレームワークであるKahuaが最近広まってきていて、その紹介などがあった。HTMLをさくっとS式で書けるのは良いかもしれない。あとSchemeを勉強していてサッパリ分からないものの一つが継続で、これはいったいなんじゃろ?と言うあたりが今回少し解決した。今日あたりから「何でも継続」を読んで、真面目にSchemeで遊んでみようと思います。SICPでは凄く後のほうに載っていますが、LISPとは根本的に違うScheme特有の概念だと思います。
あとGroovyの話も面白かった。(「Javaの奇妙な冒険」と題した後半は爆笑物だったが。絵は補完すること。) JavaVMの上でJavaのSyntaxに似た言語で、Ruby-Likeなクロージャー(一昔前までイテレータと呼んでいたもの)を書ける言語で、出かける前にこれはなんじゃろねと言う話をしていたが、なるほどなと思いました。(出かける前までは_またよく分からない俺言語誕生かと揶揄していたので_)まぁよく考えれば、JavaVMのパフォーマンスがあがれば、何の変更もなくパフォーマンスが良くなるわけだし、もっとも多くのVM開発者がいるのはJava周辺ですから、こういうアプローチはアリかもしれない。(JavaのAPIをそのまま使えるというのはおまけだろう。)
「LLでお仕事」のBOFではいろいろと悲しい話を聞く。まぁ今回のカンファレンスではJavaは明らかにアウェーであるのは確かなのだが、LL全体としてはCやC++、VB、Javaに比べると立場が弱い。あとLLの中でもPerlは割と認知されているが、「Rubyで書いた検証プログラムを顧客の無理解から泣く泣く書き換えた」というかなりショッキングな話もあって、三浦さんとPerlで書き直したソースを解読するよりrubyを勉強する方が時間かからんだろうなどと言っていたのだが、何とも切ない話だ。クライアント側で考えると選択できる言語の幅は狭いので泣く泣く環境を選ぶことはあるのだが、サーバーサイドなら何とか選べるんじゃないと言う意見もあった。あと印象的だったのは、まつもとさんの_「秘密兵器」としてサクセスストーリーを積み重ねるしかない_というもっともな意見で、僕もそう思う。まぁこういう便利なものは便利と悟った人が効果的に使えばいいのかなと思う。
「君ならどう書く」のセッションでは前半は「ls-lRシェル」、後半は「n-Queen」ゲームと言うことだったが、前者は各種言語の考え方は分かるのだが、デザパタに当てはめるのは結構無理があるような… 後者はプロトコルは格好いいんだけども、ゲームバランスが… HTTPでなくて独自プロトコルの方がまだ良いかもしれない。あとルール的には誰かが負けるとおしまいでなくて、最後まで残ったものが勝ちとすべきだったかもしれない。まぁ来年以降の課題ですな。

2004年04月06日 火曜日

エリザベス・ヘイドン / 「ラプソディ -血脈の子-

最近何人かの人に面白いよ〜と宣伝されていたので、電車通勤になった事もあって、久しぶりに長編ファンタシイ小説に手をつける事にした。本当はもっと以前に購入するつもりで目を付けていたのだけど、読む時間が無くて放置していた。今日は購入しただけ。

Lightweight language magazine - ライトな言語でプログラミングを楽しもう!

Lightweight Languageって何だ?と言う話はあるけれど、PerlやpythonやPHPやRubyと言った軽量で抽象度の高い記述ができるインタープリタ言語と言う物が分類されるらしい。本の内容は昨年夏のLightweight Language Studayをまとめた内容と言うところが的確か。内容はある「お題」を出して各言語で書いたらどうなるかとか、先にあげた書く言語の紹介、便利な使い方等が書かれていて面白そうだったと言うところが即買いの理由。まぁじっくり読み込もうと思う。

2004年01月12日 月曜日

久しぶりにLaTeXをインストール

広瀬さんの日記にTeXの話題が載っていたので、久しぶりにLaTeXをインストールしてみることにした。まぁLaTeXじゃないと書けそうにない文書はそれなりにたまっていると言うのもあるので、ちょうど良いかというきっかけだった。
ということで、家でもPDFを生成できるようになったのだが、久しぶり(おそらく7年ぶり)にLaTeXを触って思ったのは、_こんな物をよく使いこなしていたな_と思わざるを得ない奇怪なTeXマクロ(まだPerlの方がマシかも)とバッドノウハウとしか思えないソースの断片であった。自分の修士論文のソースを読んでも、よく書いたなというマクロのオンパレードでびっくりなのである。
しかも当時はちゃんとMakefileを書いてmakeしていたようだ。(platex main.texを3回実行するより、makeで一発というあたりを買っていたらしい。) なんだか昔の苦闘のかけらを掘り起こしたような気がする。とりあえず昔のIsing模型の勉強ノートとかこれから手を入れたい光学の勉強ノートとかを書いてみようかなと思う。やっぱり数式はTeXよねと言うあたりをPDFで表現できるかな。

2004年01月11日 日曜日

GNUの20年

ずいぶん前の話になるが、昨年はrmsがGNU Projectへの呼びかけ(翻訳,後の「GNU宣言」の元になる文書だと思う)から20年目の年だったそうな。昨年の9月末の話なので何をいまさらという話であるが、1月5日のNewsforgeにrms自身による「The Free Software Community After 20 Years: With great but incomplete success, what now?」という記事(和訳)が掲載されていたので、読んでみて思い出したかのように日記の記事にすることにした。
ソフトウェアにそれなりに踏み込んでつきあうようになると誰でもそうであると思うが、GNUの成果物の恩恵に預かっていることに気づかされることが多い。僕の場合は今年で11年目になると思う。最初の出会いはテキスト処理をするために使い始めたawkであるが、MS-DOSで使っていたので当然GNU版のawkであるgawk(の日本語版jgawk)だったように思う。当時書くのもめんどくさいテキストファイルのフィルタ処理がこんな簡単な言語でできるもんだと感動して使った記憶がある。(その後、awkの使いこなしでは師匠に絶対勝てねえと思ってperlを使うようになりawkを忘れ、今はテキストの処理の需要があまりないのでなんにもやってないが。)
その後、数値計算でCでプログラムを書く機会が多かった(Fortran嫌いなんで)ので、MS-DOSでMS QuickCを使っていた。Cを始めた頃はこの処理系でよかったが、当時積分計算をすることが結構多くて処理速度を稼ぐために最適化をかけたいことがよくあった。ただMS-Cのような処理系は_学生時代には絶対買えないお値段の処理系_(今も買えませんが)で、とても手を出せる状態にはなかった。またMS-DOSの制約以上の大きなメモリ空間を計算上必要としていたこと(こっちの方がより重大だった)ため、どうしてもMSのツールじゃ駄目だった。そんなときに大学のFTPサーバを覗いていて発見したのが、GNUのCコンパイラGCCのMS-DOS版であるdjgppでした。DOS-Extenderという妙な環境で動く何ともしれないコンパイラだったが、結構長い間愛用していた。
その後のLinuxの登場によりMS-DOSという妙な環境ではなく、何の制約もないUnix互換環境でGCCを使えるようになったので、ソースファイルごとLinuxの環境に移行してしまい、それ以来何かツールを作る環境はLinuxの上でやってきているし、こんな素晴らしいものはないと言うことでLinuxや*BSDの普及活動に時間があったら手間を惜しまず関わっている。まぁ最近はC/C++でプログラムを書くこともなくなったので、すっかり一利用者になってしまったけども。(お仕事上のVBAは除く。あれは選べない環境なので。)
最近の風潮ではGNUのGPLによる配付の縛りがきつすぎて、_GPL嫌い_な人を結構見かけるが、近年のオープンソースムーブメントのよりどころは_Linusによるバザール的開発手法の発明_とESRによる精緻な再定義によるものだとかんがえられる。しかし実際にはそれ以前の_rmsのFree Softwareの運動が基礎として存在_しており、GNU嫌いな人も_アンチテーゼとしての存在としてのGNU_なしには語れない訳だから、すべてに対して影響を及ぼしていると考えて良いと思う。改めて凄いことだと言わざる得ない。
さて、最初のrms自身の記事にもどるが、ちょっと過激なところはあると思うが大いに刺激を感じる記事かと思う。たしかに僕自身も特許やら企業秘密の中に生活している人なので、特許や企業秘密に依存するソフトウェアがどうしてもclosedでものでproprietaryな物にならざる得ないのは理解できるので、「Non-free software carries with it an antisocial system that prohibits cooperation and community.」は、ちょっと言いすぎだろうと思うが、先鋭的な意見を述べて戦い続けなければならない立場を考えると、確かにそう言い切ってしまわねばならないのだと思う。
さらに読んでいくと、