Perl

2004年01月01日 木曜日

今年もみなさまよろしく。

ここを読んでくれているみなさん、僕の写真を楽しんでくださるみなさん、昨年は本当にお世話になりました。ありがとうございました。今年も変わることなくよろしくお願いします。昨年と同じですが、「一年の計は元旦にあり」と言うことなので、今年はどのような戦いを展開するか、「戦いの軌跡」と言う題にしているので、戦術や戦略について分野別に纏めておこう。

2004年の展望

はじめに概況

2004年の野望(何の?)を達成するための、戦術や戦略を述べていくことにする。上司の年賀状にも_今年は攻めと成果_と書かれていたので、アクティブに課題に当たり、しっかりとした成果を残さねばならないと思う。今まで攻めてはいたけど、成果を形にすることに拘っていなかったので、なるべく形になるように残さねばと思うのである。(これは特に本業について言える話であるが。)
経済的な状況はまぁ怪しい上に_新年早々車を買い換えることにした_ので、これを糧に仕事をするモチベーションを創出することとしよう。いやぁがんばらねば。あと多少余裕はできると思うので今年あたりからちゃんと貯蓄に励もうと思う。2月までを乗り切った後は何とかできると思う。
年末もそうだったが、やっぱり体調を壊しがちであることは否定できない。食生活はなるべく改善する方向で何とかしているので、あとは機会を見つけて運動をせねばなと思うけど。時間を作って対応するしかないか。

2003年12月20日 土曜日

ついに雪が…

ついに雪が降る季節が到来してしまいました。しがないFR乗りとしてはドラテクを鍛える時期と思って地道にがんばりましょう。今日は下記の通り仙台に行く用事があったのですが、会社が終わった時間帯では仙台に行く道はブラックアイスバーン状態で、もうつるつるでした。今日は乗って帰れないかも…

タラ・カリシェイン, ラエル・ドーンフェスト / 「Google Hacks

8月に出て以来買おうと思っていた本の1冊。ちょっとお値段がと思っていたのですが、もう我慢できなくなったので勢いで購入。Perlのソースが山のように載っているので、これをちびちびrubyやらVB.netに移植すれば結構楽しめると思う。個人的にはSearch Engine Optimaze(SEO)対策のための賢い検索方法を模索できないかなと思うのです。SEOのせいでGoogleはSEOをされた屑情報が上位にくることが多くなった気がする。屑ではないものがSEOされる分には問題ないんだけども、世の中どうして_屑情報を垂れ流す輩がSEOに夢中なんだろう…_

2003年10月27日 月曜日

.NETの呼び声

最近、VBAでのプログラムにほとほと嫌気がさしてきたのであるが、お仕事関係ではMicrosoft WindowsというかMicrosoft Officeの呪縛を逃れることは出来ない。それ故プログラム環境としてVisual Basic for Application(VBA)を使うことになるのであるが、不満は多いので使っていてなんだかだめだめだなぁと思うことを列挙してみよう。

  • _必ずExcelやWord文書の付録_みたいなものになる。文書を開くときに何となく厭な気分になる。(回避法はあるけれど。)
  • 当然コードの_履歴管理をするのが大変_。(何が楽しくてVisual Source Safeを使わねばならないのか。頼むからCVSSubversionを使わせてくださいな。)
  • 正規表現が使えない。(がーん。 かなり不便。)
  • 正規表現を差し引いてもテキスト処理がいまいち。(変形CVSなテキストを読むのがもう大変。)
  • しょっちゅう関数の名前がだぶる。(名前空間をサポートしてくださいよ。僕のボキャブラリが寂しいだけ?)
  • 使えるデータ型が_恐ろしいくらい貧弱_。(未だに基本な型と構造体と配列くらいしかなく、ハッシュやリストのような現代的な言語でサポートされているデータ型は_当然ない_。)
  • クラスは作れるが、継承は出来ない。(勘違いしている人は多いけれど継承はOOPの必須事項ではない。)
  • スレッドって何だっけ?
    という具合で、結構痛いところが満載なのである。そこまで使い込んでいるんだったらVisual Source Safeというか、OfficeのDeveloper Editionを買えばいいじゃんと言う意見もあろうが、僕はお仕事のためにわざわざOffice Developer版を買うほど酔狂な人間ではありません。 ちなみに家のPCにはOfficeをインストールしてません。家に帰って_Excelのアイコンを見るのも厭です_。ということで、会社で買ってくれないものを使う気にはならんのです。
    かといって、Windows Scriptの上で動く現代的なスクリプト言語であるActivePerlActiveRubyは、_デフォルトでインストールされない_ということもあって、プログラムを使ってもらうという前提の開発では、管理が発生するためにメインの言語として選べない。(ExcelはどのPCでもバージョンは同じであることを前提に出来るが、PerlやRubyのバージョンなどの管理は職場で誰がするの?)
    ひょっとしたらVBA自身は、Office2003でVB.netのような言語の現代化が行われるのではないかと多少期待したのだけど、VBA自身はVBA 6.3から6.4にアップデートで余り変化はないみたい。(がっかり。 まぁ無論会社ではOffice2000までしか使ったら駄目ということになっているので、Office2003は使えないのだが。)
    という状況で、なんだか良い解法は無いなぁと思っていたのだが、先日のTCP/IP勉強会で、PostgreSQL方面の高橋さんより、「そういう話なら、.NETが良いよ。」という話を聞いたので、早速試すことにした。
    よく.NETのページを眺めていると、.NET Framework SDKには、コマンドライン版のC++とC#とVBのコンパイラが付属してくるのね! てっきり、C#やVB.netで遊ぶにはVisual Studio .NETを買わねばならないのかと思っていたのであるが、僕が組むプログラムの規模ではVisual Studioには手を出さなくてよさそう。
    ダウンロード・インストールをしている間にWebをさまよえば、_フリーの統合環境は転がっている_もので、Javaの開発環境から進化して、C++やC#やPerlやRubyやXMLなどの編集が行えるJavaで書かれているEclipse(エクリプス)や、C#の開発環境に特化しつつVBの開発環境にも使えそうなC#で書かれているSharpDevelop(SharpDevelop-JP)といったオープンソースな環境が出回っているので、なんだか簡便な開発環境が整いそうである。
    今日はつらつら.NETのドキュメントとC#やVBのサンプルソースを眺めているわけだが、眺めているだけでも上記の問題は解決しそうである。例えば順に並べるとこんな感じ。
  • ソースコードは_ただのテキストファイルになる_(当然)
  • 当然コードの管理にCVSSubversionを使える。
  • Microsoft .NET Framework ではPerl5のような正規表現がサポートされている。
  • テキスト処理はようわからんが、コンソールアプリを書けるからたぶん大丈夫でしょう。(調査中)
  • 名前空間をサポートしている。(僕のボキャブラリが寂しくても_安心だ_。)
  • コレクションクラスが_充実している_。(ハッシュもリストも_当然ありますよ_。)
  • VBでも継承ができるようになった。(VB7からは継承が出来るようになりました。)
  • スレッドを考慮したプログラムも当然書ける。
    という具合。ガベージコレクションもしてくれるのですか。メモリ管理関係も結構楽になるのかしら… しばらく眺めて勉強してみることにするが、MSと仲良く付き合うには、_過度の期待はしない_ことと_仕様はどうせすぐに変わるもの_と思って、_適当に勉強すること_と言うのが重用である。どうせ勉強しても長く持たないバッドノウハウだらけになるに決まっているのだから。
    今日の日記はリンクをいっぱい付けてみた。疲れたなぁ。

2003年10月25日 土曜日

上野 宣 / ネットワーク初心者のためのTCP/IP入門

表紙がちょっとアレゲだけども、中身はしっかりと書かれているTCP/IPの入門書である。東北Linuxユーザー連合会(TLUC)の「TCP/IP勉強会」の指定教科書になっているので買ってみました。なかなか本屋で見かけなくて今日も3件回ってしまった。仙台の本屋さんもなかなか品揃えが悪くて使い物にならないなぁと思う今日この頃である。
内容はTCP/IPの階層構造でネットワーク層(IP/ICMP/IGMP/ARP)、トランスポート層(TCP/UDP)、アプリケーション層(各種プロトコル)の順に概要をわかりやすく説明していると思う。このあとにリンク層とIPv6の説明が続くので、一通りの理解をするにはこの本を読めば十分ではないかと思う。TCP/IPを理解していないネットワーク管理をこれからやる人は読んでおくべき、勧められる本の一冊だと思う。
この本を読みつつ、telnetを使いこなして各種プロトコルの振る舞いを学んで、簡単なPerl/Rubyスクリプトでサーバとかクライアントを書くことで理解が深まるものと思う。ちょっと昔までは内容がいい感じにすっ飛んでいたが、「インターネットを256倍使う本」が良い線だったのだが、いかんせん古くなってしまった巻はあるなぁ。誰か似たような本書かないかなぁ。(僕が書けと言われるかも知れない。)

2003年09月11日 木曜日

RelaxNGの勉強をしようかと。

今回のコンテンツの見直しで、元々やろうと思っていたXML化の推進をしないとやっていられない状況になってきました。ぼくはXHTML 1.0のFramesetが嫌いな人なので、今のようなページ構成になっています。しかしそれぞれのページで部品として共用している部分を書き換えることになると、手修正だけではやってられないと言うことで、XMLで書いた部品を寄せ集めてXHTML 1.1(or XHTML 2.0?)にレンダリングした方が良さそうです。
最近の流行りであれば、真面目にXMLに突っ走るならCocoon 2みたいな物を使うか、よりお手軽なZope、もっとお手軽な方向としては、XOOPSのようなWeb Applicationか、がらっと変えてtDiaryみたいな日記ツールとかblogなツールを普通、選ぶのだろう。
ただ今のところ動的なサイトにしたくないのと、JavaやpythonPHPに依存できない環境であること。Java以外は一生コードを見ないですむなら見たくないという個人的な偏見と趣味とRubyPerl(これも使いたくはない)はサーバで使える環境にあるので、選択肢はこれらのどっちかですな。
ただCGIなどでページをDynamicにページを生成するとCGI自身のメンテがかったるいので、WikiWiki Cloneは却下で、結局今のところはStaticなページ構造にして置いた方がよいかもと個人的に思うので、XML文書を書いてXSLTでXHTMLに変換するのがよいかなと思っている。最終的な目標はサーバにXMLファイルをいっぱい置いておいて、半動的生成を目指そうかと思うわけだが、しばらくはXMLで書いて、makeでStaticに作ってしまえと言う感じである。
XMLで適当に文書を書くと自分で作ったXML文法(XMLボキャブラリというのかな)を忘れてしまうと言う問題があり編集の便利さを追求するためにも、僕の場合は必ず文書型定義(DTD)を書く必要がある。ただ_DTD自身がXMLじゃないやん_とか_いまさらDTDなんて勉強しても仕方ないやん_ということで、何かしらのSchemerを勉強せねばと言うことになったわけだ。こういう用途でThe World Wide Web Consortium (W3C)御謹製のXML Schemaを使うほど暇人でもないので、Relaxを勉強かと思ったのである。いろいろ調べているうちに、Relax NGのページやTutorialを眺めていると、こっちの方がえらく簡単ということで_勉強する気になった。_(ようやく表題の話になった。)
ということで、いったんどういう事を書いているのか再分析して、Relax NGパターンを書き下して、DTDを生成してみようと思う。

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にしても、新たに処理系をインストールしてもらわないとならないので、できない状況なのよね。もっと便利にならないものかね。もっと良い方法があったりして…