Perl

2003年08月19日 火曜日

身の回りのmsblast騒ぎの顛末

さすがに我が家では無風状態。
我が家は、WindowsXP端末が1台(tulip)、WindowsMe・Linux共用端末が1台(viola)、Linuxなサーバ(cosmos)と言う3台体制(加えてPS2 BB-Unit)というLANであるが、Windows端末に対する今回のDCOM-RPC対策パッチ(MS03-026)は随分前(たぶん先月末あたり)に当てているのでまぁ対策済み。さらに万全を期すためにDCOM無効化も先月末に実施済み。だいたい_普通の家のパソコンでDCOMが使える必要は全くない。たまにCOMで遊んでいる僕の家でも_全く必要ない。
まったく何でこんな機能が_デフォルトで有効になっているのだ!_と一抹の怒りを覚えずにいられない。ちなみに会社の方ではそんなに騒ぎにならなかったが、昨日あたりは結構アレでしたねぇ。(だいたい今時どんな装置にでも、気が付かない場所にもWindows2000がはびこっているのさ。)

2003年08月06日 水曜日

今日のVBAとの闘い

前回のVBAとの闘いでは、Cで言うところのsscanf()みたいな関数がないので、テキストファイルからの入力は不便じゃのうという話だった。普通のExcelのユーザ(VBAを使いこなしている人はすでに_普通の人ではないと言う意見はあるが_)は、CSVなファイルもExcelで開いてから、VBA側でセルを参照して値を取り出すのかな? 僕はそういうデータ構造を考えないプログラムを書く趣味を持ち合わせていません。
今回の闘いは、まともにCollection系のライブラリが欲しいという話。ちょっと考えてみると、文字列をKey、構造体をValueとするHashを使えれば、一発でおしまいという話だったのだが、VBAやVBっていまいちCollection系のデータ構造がまるでないので、いかんせんいろいろと貧弱すぎだなぁと思うのよね。結局配列で非常に安直な実装にしたのだが、どうにかならんもんかね。VBプログラマはデータ構造なんて考えてプログラムをしないのかねぇ。で、あらかたプログラムを書いた後に、

2003年03月10日 月曜日

exif-touch

1月3日にExifの話をしていたと思う。最近日記を巡回していなかったのだが、高林さんの日記をつらつら読んでいたら、exif-touchを発見、しかもちゃんとビッグエンディアンに対応してあって、rubyで書いてある。
Exifの解析をrubyでやろうかなぁと思って、読み解くのが大変面倒なperlのスクリプトを眺めつつ、適当にrubyスクリプトを書き始めていたんですがいたけど、バイナリファイルの処理は書くのが面倒くさいという問題は、あっさり解決。しかもrubyで書こうかなぁと思っていたところ、全部rubyで書いてある。まさに感謝なのである。
ということで、うちのページデザインに合わせて、写真からExif情報を元に撮影データ付きアルバムページの雛形を自動生成出来そうな予感はする。(いつになるか知らないが) まぁこの辺をスタートにすれば個人的には遊べるかなぁ。うーん、最近ますますrubyが楽しいのよねぇ。

2002年10月15日 火曜日

今日はお休み

ようやくお休みになった。なんだか風邪を引いた模様。のどが痛い…

VBAを使う理由

昨日の議論の続き。じゃ_なぜにVBAを使っているのですか?_と言う話も言及しておこう。
本来VBAでできるものは、Active PerlActiveScriptRubyで書いた方がよりスマートにかける。こないだも苦労したが、VBAは文字列処理が非常に弱いので、テキスト処理を得意としている言語でやった方がスマートにかけるプログラムは多い。
じゃなぜ?と言う話は簡単で、VBAで書く物はお仕事でしか存在しないからだ。(僕は家のPC用にOffice2000のライセンスを2個持っていますが、インストールしてません。) ただみなさんに「ActiveScriptRubyをインストールしてくださいね」と言うのと、インストールしてもらう利点を説明するのが、めんどくさいからだ。(だってExcelはすでにインストールされているものね。)
ただ最近ExcelのシートにマクロをつけるよりはAddinとして配布すべきだと思い至ったので、最近僕が作るマクロはAddinになるようにしています。使っている理由はただそれだけです。VBやVBAというかMSの生成物に美しさを期待するのは愚の骨頂なので、適当におつきあい。それが正しい姿であろうと思うのだ。書きたい言語で書いていいよと言われれば、絶対選択しない物であるのは確か。

2002年09月20日 金曜日

やっぱりVBAは嫌い

今日はなにげにVBAでテキスト処理プログラムを書いてみた。汎用なカンマ区切りテキスト処理を行いたいのだが、ちょっと変なファイルで、最初の項目だけコロンで区切れられているファイルで、レコード長は最初の項目で決まるので、普通のストリーム入出力なら、

  • 一行読み込み
  • 受け用の配列に取り込み(Cで言えば sscanfとかを使うのね)
  • 内容に応じて、適当に逐次データ処理
    となりそうなものだが、そうはいかないところがVBAの凄いところ。こういう処理をする関数やステートメントが存在しないのよ。おそらく可変数の変数をもらう関数が書けないせいだと思うが、配列使えよって言う感じ。さらに連想配列がないのもつらいねぇ。(Excel VBAの場合、シート上にデータをおいた方が早かったり。何か違う気がする。) 結局、
  • 一行読み込み
  • 行の頭から1文字ずつ読み込んで、区切り記号が出て来たところで、前の区切り記号からの文字を配列に取り込み
  • 行の末尾まで繰り返し
    というなかなか楽しい処理を行う羽目に。何と素晴らしい。なぜにここまで低レベルの処理を書かないとならないんだか。さすがMS。苦労したおかげで、何とか思い通りの処理を書けそう。
    もうテキスト処理が得意な言語で書けば良いじゃんと言う話があるんだが、最終的な出力はExcel文書でrubyにしてもperlにしても、新たに処理系をインストールしてもらわないとならないので、できない状況なのよね。もっと便利にならないものかね。もっと良い方法があったりして…