2010年7月23日金曜日

日曜プログラマ

 英語には“Do it Yourself”と言う表現があるように、欧米では何でも自分でやったり、作ったりしようとする習慣がある。“DIY”と略記して、そういう生活態度や考え方そのものを指す場合もある。日本語では“日曜大工”がそれに当たるが、少しスケールが違うかもしれない。欧米では自分で家を建ててしまう人がいるくらいだから、日曜だけのお遊び程度では到底実現できそうにないものにも挑戦するようである。

 “昔プログラマ”を自称する私めも、会社勤めをしている頃は“日曜大工”ならぬ“日曜プログラマ”をしばしばやっていたものだ。定年後は、一応仕事は大学教師ということになっているが、ナニ毎日が日曜日(サンデー毎日)と言ってもよい状態である。であるからして、大掛かりに日曜プログラマができそうなものだが、もう若い頃のような大掛かりなソフトウェア開発を試みる気力は、残念ながら持ち合わせていない。

 それでも、日頃使い慣れたアプリケーションで少しでも使い勝手に不満が出てくると、すぐさまその解決策を求めてプログラム作りを始めてしまうのである。既存のソフトウェアに後から機能追加することを、普通“プラグイン”とか“アドイン”などと呼ぶ。追加したプログラムが、アプリケーションと連携して動作はするが、一体となって動作するわけではない場合はアドインとは呼ばない。単なる“ツール”と呼ぶべきであろう。
 最近のアプリケーションは、アドインされることを前提として設計されているものが多い。したがって、私めのような“老プログラマ”でも挑戦する場はたくさん存在するのである。

 私が作ったアドインソフト、あるいはツール類を以下簡単に紹介することにしよう。

(1)アクセス数の一覧表(ツール)
 私のホームページ内には、色々な場所にカウンターが設定されていて、そのページ内容がどの程度読者に読まれているか記録されるようになっている。最近は検索エンジン経由で(トップページを通らず)直接アクセスしてくる人が多いから、トップページにだけカウンターを設定しておいても意味がない。そのようなカウンター設定場所が年々増えていって、今では170個所を超えている。それらの個所をいちいち見ている訳にはいかないから、一覧表にして表示できれば便利であろう。そう思って作ったのが「Knuhsの書斎・アクセス数の一覧表」(図1)である。
 ①「タイトル」………掲示内容、
 ②「Access日時」……最近のアクセス日時、
 ③「Access数」………昨日までの総アクセス数、
 ④「最新値」…………現時点の総アクセス数

がそれぞれの列の枠内に表示される仕組みになっている。
 Access日時の表示がだとその日にアクセスされたことを意味し、だと前日にアクセスされたことが分かる。前日の記録からどう変化しているかが一目了然で分かるように工夫されている。

 このツールは、Perl言語で記述されている。出力はHTMLファイルで、ブラウザ上で結果を見ることができるようになっている。この表を毎朝最新のものに作り直してアクセス状況の変化を観察しているのである。時々刻々と変わっていくカウンター値(最右欄)を見るのは、なかなかのものである。

 このHTMLファイルは私のローカルなマシン上に置かれているが、実は、私のホームページ上にもこれと同類の“allcount.html”というファイルがあり、上記③が「月頭Access数」つまり「月始めの総アクセス数」に固定されて表示されている。これを見れば、月始めからどう変化しているかが分かるようになっている。 http://beam.to/knuhs で簡単にアクセス表示できるから、関心のある方は見てください。

(2)スパムメールの整理・後始末(アドイン)
 私めのところには、毎日200通あまりの迷惑メールが届く。メイラーのフィルター機能だけでは対処しきれないので、スパムメールキラーというアプリケーションを用いて一挙にそれらを排除することにしている。排除すると言っても、その中に間違って受け取るべきメールが紛れ込むこともあり得るから、一応は私的なごみ箱(1か月間は保管しておく)へ捨てる前にざっと目視で確認する必要がある。慣れてくると2~3分で済む作業である。

 スパムメールキラーでは、メールの発信月ごとに特定のフォルダー上にスパムメールをまとめてくれる。たとえば、2010年7月だと“201007”という名のフォルダーが作られ、その上に置いてくれるのである。新しい月の初日は“201006”と“201007”という二つのフォルダーに分けて保管してくれる。親切で、よくできた仕様だと思う。
 ところが、最近のスパムメールには発信日時を詐称するものが増えている。そうなると目視チェックを複数のフォルダー上で実施しなければならなくなり効率が悪い。そこで手作業で1つのフォルダー上にまとめてから目視チェックを行うことにした。面倒だがその方が早く済むのである。

 しかし発信日時を詐称するメールは増え続け、多い日には10個の偽フォルダーが作られたりする事態になってしまった。たとえば6月のある日の例では、
偽フォルダー名 詐称された年月(*1)
 200611    2006年11月
 201003    2010年 3月
 201004    2010年 4月
 201012    2010年12月
 202606    2026年 6月
 203006    2030年 6月
 203306    2033年 6月
 203406    2034年 6月
 203706    2037年 6月
 203801    2038年 1月

といった具合である。これでは手作業での対応は限界がある。そこで以下のようなバッチファイル(xmvfx.bat)をPerl言語で作りだすことにした。
【注】(*1)発信年月を詐称する(誤記する。あるいは“欺記する”と言うべきか)理由はよく分からないが、多分受信メールの一覧の先頭に表示させることを狙っているのではないかと思う。
●xmvfx.bat ファイルの内容例
@echo off
if (%1)==(1) %then% goto clear
move /y 200611\*.* 201006>nul
move /y 201003\*.* 201006>nul
move /y 201004\*.* 201006>nul
move /y 201012\*.* 201006>nul
move /y 202606\*.* 201006>nul
move /y 203006\*.* 201006>nul
move /y 203306\*.* 201006>nul
move /y 203406\*.* 201006>nul
move /y 203706\*.* 201006>nul
move /y 203801\*.* 201006>nul
echo:* 全メールを 201006 に集めました。
echo:* 内容をチェックしてください。
goto exit
:clear
echo:* 圧縮ごみ箱に移動してもよろしいですね?
pause
move /y 201006\*.* 圧縮ごみ箱>nul
cd 圧縮ごみ箱>nul
c:\tools\lha m 201007-pack *.txt *.001>nul
:exit

 これを
  xmvfx [Enter]  で呼び出せば一か所への“移動”を、
  xmvfx 1 [Enter] で呼び出せば“ごみ箱”へ、となる。
 この呼出し系列をスパムメールキラーのツールとして登録し、スパムメールキラーの中で利用するのである。もちろん、現在年月や詐称年月などは毎日変わるから、このバッチファイルも毎日作り直さねばならない。それを工夫するのがPerlプログラミングの面白いところである。ここでやりたい作業自体は一連のコマンド列で書き下せる程度のものだから、バッチファイルの形で簡単にツール類を作成しアドインできることになる。あなたも試してみませんか。

 ここで、ごみ箱の中身を圧縮したのは、スパムメールにはウイルスが付着していることが多いので、そのまま私的な“ごみ箱”に(少なくとも1か月間)置いておくと、ウイルス対策ソフトが「ウイルス発見!」と騒ぎ出すことがあるからである。圧縮したり、更にはパスワード付きで封印保管すれば万全であろう。

(3)ソースプログラム集(ツール)
 大学のプログラミングの授業で用いるプログラムのソーステキストを取り出すためのものである。毎回の授業に出席し、その場で指定された秘密のキー(*2)を入力すれば自動的にソースイメージが引き出せるようになっている。授業中にそのプログラムを用いて実行したり、改造したりして利用するためのものである。ただし、授業中しか引き出せないように工夫されているところがミソである(正確に言えば、その日の内なら授業の時間内でなくても引き出せるようにはなっている)。随分と意地悪な先生だと思われていることであろう。ただ、欠席して引き出せなかった学生も、プログラム自体は教科書に載っているのだから自分でシコシコとキー入力すればよいだけのことである。それ程意地悪とは思わないが、どうであろうか。
 このプログラムは、PerlとC/C++とを用いて作られている。
【注】(*2)この秘密のキーは、一定の規則に則って定められているが、今まで誰もそれに気が付いた学生はいない。

(4)課題提出状況の表示(ツール)
 授業では、毎週課題が出る科目もある。その回答を、期日までにメールで送付することになっているが、その管理が結構面倒なのである。少しずつプログラム化して自動処理化しようとしているところである。
 私は表計算ソフトで提出状況を管理しているが、学生の方も受理されたのかどうか知りたいから、提出状況の一覧がウェッブ上に表示されれば便利であろう。 そこで、私はメイラーから取り込んだデータをPerlで処理し(学籍番号と課題番号を抜き出す)、その結果を表計算ソフトへ入力する。表計算ソフトではVBマクロのプログラムを用いて管理表に登録(締切前か後か、1週間以上遅れているか等を判断)する。その一覧を定期的にHTML化して出力し、再びPerlで変換して表示形式を整えてウェッブ上にアップする。この一連の処理をPerlとVBマクロプログラムで半自動化しているのである。学生の回答が、締切日に遅れたり、誤って何度も同じ文面のメールを送ってしまったり(そういう例が結構多い)しても少しも驚かない体勢になっている。

 老プログラマにとって、アドインソフトやツールの作成は、ぼけ防止に最適であるように思う。

【追記】本文のリライト版【素歩人徒然】「日曜プログラマ」も参考にしてください。

2010年7月18日日曜日

書斎のテレビ

 最近、書斎で見るテレビをポータブルな物に入れ替えた。
 それまでは、パソコン1台でコンピュータ使用とTVを見るのとを兼用にしていたのである。コンピュータと兼用と言っても1セグのような解像度の悪い画面では満足できないので、普通のTVと同じ画質とサイズのものである。場合によっては、TV画面を小さくして(“ながら見”モード)コンピュータ作業を並行して行うこともできる。かねてから、こういう環境を構築したいと思っていたのでそれなりに満足して使ってきたのである。

 不満があるとすれば、TV画面の立ち上げに時間が掛かることであろう。使っているOSの Windows Vista の立ち上げには勿論時間が掛かるが、それはレジューム機能を利用してカバーすることができる。しかし、更にTV環境の立ち上げにもかなりの時間が掛かるのである。書斎に入って直ぐTVを見たいと思ってもそうはいかない。決定的な画面を見逃してしまうこともあるのを覚悟しなければならない。

 “ながら見”では、普通はメールチェックとか簡単な作業しかやらないから問題はないが、段々と複雑で大掛かりな仕事を始めてしまうことがある。それなら“ながら見”など止めればよいのだが、もともと「ながら族」なのでそれができないのである。特にTV側で録画の指定をした時などは、コンピュータ側で大掛かりな仕事をはじめてしまうとレスポンスが悪くなり、録画される画面の質にも影響してくることになる。

 これでは困ると思い、Windows 7 マシンが売り出されたのを機会に、もう1台コンピュータを購入してコンピュータ作業はそちらに移行させることにした。実は、意識的に移行させたのではなく、Windows Vista 環境より Windows 7 の環境の方が、はるかに使い勝手が良いので自然に使用環境が移って行ったというのが本当のところである。その結果、書斎の机の上は、左側に作業用コンピュータ、右側にTV用コンピュータという何とも贅沢(?)な環境になってしまった。大型の机なので2台も置くことができるが、このエコの時代にこんな電力の無駄づかいをしていてよいのだろうかという忸怩たる思いもあった。

 そこで、TV用コンピュータをやめて、専用のTVを購入して使用することにしたのである。電力もたいして掛からないし、見たい時には直ぐ電源オンできるのも良い。私の寝室にはTVを見る環境がないので、そちらで寝ながら見たい時は持って行ける程度のポータブルなものである。書斎で1台のコンピュータですべてを満たすという長年の夢は、実際にやってみると色々な問題があるということを学んだのであった。

【追記】本文のリライト版【素歩人徒然】「書斎のテレビ」も参考にしてください。