PC

2005年11月23日 水曜日

勤労感謝の日

今日は世間的には「勤労感謝の日」なのだが、僕の勤労を感謝してくれるような人なんていやしない。 働いていく上で襲いかかってくるのは、最近はソフトウェアなことしかやってないから、_ソフトウェア特許_とか_アイディア特許_だとかいった考えるだけでもうんざりするようなことしかありゃしない。ちなみに勤労感謝の日は皇室の新嘗祭にちなんだ祝日なので、_一般庶民の勤労を感謝している_と言う日ではないことを忘れちゃならない。

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年10月01日 土曜日

もう10月

最近日記を書くことをさぼっているのだけど、気がついたら10月。最近本当に時間の流れの感じ方が緩やかになってしまったと言うことか・・・

FreeBSD 5.4p7にアップデート

我が家のサーバのOSをアップデート。インストールしたときにFreeBSD 5.1から5.2にアップデートしたのであったが、そのときはサーバとして実運用に入る前だった。今回はサーバ運用を初めてから初の大規模なアップデートとなる。(とはいえ、入れ替えになるのはカーネルと基礎的なユーザーランドのコマンド・ライブラリだけで、パッケージとしてインストールするようなものは、それなりに追従しているので今回は対象外。)
基本的には、「OSを最新のRELEASEに更新する」と言う記事を元に、ソースをCVSupして、ユーザーランドをmake buildworldして、カーネルをmake buildkernelして、カーネルをインストールしてから再起動し、ユーザーランドをシングルユーザーモードでインストールすると言う感じなのだが・・・
注意する点としては、この手の大規模なバージョンアップの際にはパスワードテーブルとグループテーブルの書き換えが発生する(ユーザーが増える)ので、/etc以下はちゃんと保存しておきましょう。
他は特に問題なくアップデートが完了。おかげでXはX.orgに移行(とはいえライブラリしか使わない。)できて、Linuxエミュレータもインストールできた。次はLinuxの実行環境の構築だな。

2005年09月29日 木曜日

Windows Programming in C++

流れが速すぎて、あんまりまじめに勉強したくないんだけれど、C++によるWindowsプログラミングを10年ぶりくらいに再開してみました。とはいえ、今のところはDLLが書ければよいかと言うレベル。DLLを書くのも結構かったるい。(忘れてしまった自分も悪い。)
ついでなのでGUIを持ったプログラムを書けるようにもなりたいと思いたった訳だけれど、周りの環境を調べてみてどう攻めていこうか考えてみる。学習曲線はC++の場合そんなに急ではないので、年単位で時間ががかることを前提に考えることとすると、Windowsに限定して考えれば現在身の回りで.netを使える環境は自宅のPCだけという惨憺たる状態。とてもツールとして使って貰うようなプログラムを.netで書ける状態にない。と言うことで、Win32環境でオーソドックスにC++で攻めるのも悪くはあるまいと思ったわけだ。
MFCはずいぶん前に挫折した痛い経験があるので、それ以外のフレームワークを探してみる。Doc-Viewというスタイルは感銘はするが、常にDoc-Viewを必要としているわけでもないので、今回はこれを迂回してATL(Active Template Library)/WTL(Windows Template Library)で遊んでみようと思う。すっかり廃れてしまった感のあるATLなんですが、ATLだけでGUIなプログラムはかけなかったなと言う記憶があって敬遠していたが、ATLを補うGUIテンプレートライブラリがWTL(Windows Template Library)として、いまやMSのオープンソース戦略の一環として配布されているので、これでいいのかもと思っています。(ATLはそうではないので困ったなあと言う問題はあるのだけど。) MFCと比べると、Doc-Viewを強要されない(ViewはあってもDocはない)、ヘッダだけで構成されている(templateだから当たり前か) 喞ぢでプログラムを書いていた時代を知っていれば何とかプログラムが追える、というようなもので、何とか遊べそう。後はなんと言っても、_多重継承とtemplateを使いまくり!_というC++フリーク向けのライブラリであったりもするので、サンプルのソースを読んでいても楽しい。ぼちぼち勉強してみよう。参考となりそうなサイトをメモ。

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で書くべきだと思う。いろいろ悩ましいけど。