コンピュータ環境 (2009/07)

最初の書き込みへ

基本の環境はこちら

2009年06月の環境
2009年08月の環境
戻る


時系列・環境の変遷


 

2009/7/31 (Frisday)
Perl アプリケーションの すごい バグ

 このところずっと取り組んでいるデータ処理のアプリケーションですが、深刻なバグが2個出てしまいました。

 一つは文字化け。これは、データは一貫して Shift-JIS なんですが、扱う Perl が、UTF-8 前程の仕様になっているのが原因と思われ。

 もう一つは何だっけ(^-^)\バキッ☆、思い出した、今思い出した、クエリーの発行でエラー・メッセージを出していたんでした。

 どちらから手をつけるか迷いましたが、文字化けしたデータを処理して成果物を作成してもむなしいだけだと思い、まず文字化け対策からはじめました。
 ネットでいろいろとぐぐるってみますと、いろんな書き込みがあってみんな苦労しているんだなとひしひしと実感しつつ原状を解決するのに一番いい書き込みを捜しました。
 その結果、USE UTF-8 宣言したうえで、データが i/o 処理されるごとに decode、encode コマンドで文字コードを Shift-JIS と UTF-8 の間で適宜書き換えるのが最適解と思われました。

 そこで、100行足らずのスクリプトなので、目を皿のようにして1行ずつ追いながら、ファイルから取り込む時、書き出す時、shift-JIS のデータで回す外部サブルーチンに渡す時、戻り値を処理する直前のタイミングを見定めながら次々に encode、decode コマンドを発行していき、こんなもんだろうと試験実行したところ一発で通ってしまいました。

 試験実行の結果を調べてみますと一見よさそうにみえました。何よりあからさまな文字化けがなくなっています。よぉし、これで行こう、と続いて VBA で記述しているクエリー発行エラーの調査に移ります。

 実行時エラーは何度も実行させながら原因を潰して行きましたが、最後にどうしても消えない結果の変なデータ・エラーが残りました。
 ううむ、とうなってしまいました。
 この処理では、器になる空のテーブルを複写して一時テーブルとし、そこに追加クエリーを発行してデータを挿入、さらに出来あがったレコードの別フィールドを更新クエリーで埋めていくというものです。それが、どういうわけか、存在していないはずのフィールドがいつも古いデータで上書きされているのです。

 なにげなしに、器になっているテーブルを開いてみました。何ということでしょう。キタ━━━━(゚∀゚)━━━━!!ー何ということでしょうキタ━━━━(゚∀゚)━━━━!!ー
 空のはずのテーブルにデータがはいっているではありませんか。
 原因はこの古いデータがそのまま残っていたことでした。あほらしい。
 器のテーブルからレコードを全部削除して問題解決です。

 Perl のスクリプトのバグ取りでは、別の予想もしていなかったバグを発見しました。すでに処理済のレコードの最後の番号を取って来て、その次のレコードから処理するようにコーディングしていた「つもり」だったのですが、この判定ルーチンをまちがえており、Perl をご存知の方なら噴飯物のコーディングをしていたのでした。

 こんなふうに: if ($n=0){ 最初から処理} else {$n+1 から処理}

 もちろん if ($n==0) でなければならないわけであり、つまりはいつも「最初から処理」していたわけで、処理内容は追加クエリーで、インデックスは1から取り直していますから当然ながらすでに存在するレコードの追加はことごとく失敗しつつ、新しく追加したレコードの分から初めて正しく追加していた、これが毎日のように実行時間が長くなっていた原因でした。

 ここを正したところ、実行時間は一日分しか持っていなかった当時の5時間から3時間に短縮され、別々のハード・ディスクを使って i/o している効果が間違いなくでていることを確認できました。

 やはり使いなれない言語で作業するのはつらいものがあります、マジで。

2009/07/29 (Wednesday)
Quark の すごい ファン

 大分苦心して取りつけたファンはいい仕事してくれてどうやら昨夜は熱暴走をしなかったようです。

 でも、どこか筐体に当っているらしく、「カンカンカンカン」という耳ざわりな音が小さく響きます。

 早くすり減って当らなくなるのを待つ…っていうのは明らかに邪道ですね(^-^)\バキッ☆

2009/07/31へ

2009/07/28 (Tuesday)
Quark の すごい ファン増設

 暑くなって Quark を組んでから初めての夏です。
 あっという間に熱暴走するようになってしまいました。

 なにしろマイクロATX の筐体に Athlon ですからたまりません。隣に Morgan le Fay が並んでいるのも災いしているのでしょう。

 とりあえず少し位置をずらして Morgan le Fay と離してみましたが大して効果はありませんでした。
 しかたない、無理矢理のファン増設です。

 筐体を開けてみると、底面に少しすき間があり、元々はハード・ディスクを設置するために作られた空間のようで、底面には小さいながらも穴が規則的に開けてあります。

 ヨドバシカメラで 9.2センチのファンを .98K でゲトー、手持のボルトとナットでムリムリに固定してみました。5V の電源ソケットを持っているので、余った IDE のコンセントに挿して通電してみます。無事廻転開始。手を当てても果して風が流れているのかさだかではありませんがこれが精一杯。

 今夜の録画予約、果してうまくいきますか、今から運転開始して様子見です。

2009/07/29へ

2009/07/26 (Sunday)
アプリケーションの すごい チューニング

 このところ開発しているプログラムですが、扱うデータ量が半端なく多くて実行に7時間とか8時間とかかかるわけです。

 それも、ディスク・ファイルから読み込んで処理してディスク・ファイルに書き出しているのですがこれが同一ディスクなのでシーク音がすごくて。こんなこと毎日続けていたらハード・ディスクの寿命たまらんなという。

 プログラムそのものは安定して稼働し始めたのでそろりチューニングにはいりました。

 入力ファイルを置くハード・ディスクと出力ファイルを置くハード・ディスクを物理的に別物としてみたのです。

 理論的に言えばシーク時間の分だけ早くなる「はず」です。

 実際に実行してみましたらシーク音が全くしなくなり実に静かです。これはいいとほくそ笑みながら終了を待ちましたが、これが終らない。いつまでたっても終らない。しかたない、実行させたまま寝てしまいました。

 今日になって起きてきてログを調べたら何という事でしょう、キタ━━━━(゚∀゚)━━━━!!ー何という事でしょうキタ━━━━(゚∀゚)━━━━!!ー10時間かかっていました。なんなんだもう訳わからん。

 まあしかし、精神衛生上いいのでこのままもう少し動かしてみる事にするつもりです。

 しかし、データの量が半端なく多いというのは MS-ACCESS の限界容量である2GBに容易に達してしまうということであり、これやばいよマジやばいと対策を講じる必要があるなと戦々恐々です。

2009/07/28へ

2009/07/24 (Friday)
128MB の すごい スマート・メディア

 さて今更感ありありのスマート・メディアですが、ヨドバシカメラのポイントで購入するのは、ヨドバシカメラでスマート・メディアをすでに扱い中止しているために断念。どうせならこれを機にカメラの買い替えもありかもと、一応売場で物色してみました。

 条件はふたつ。

  • 充電式単3電池使用
  • 焦点距離 28 mm

とたったこれだけの仕様を満たす機種が新型でヨドバシカメラに在庫しているのがオリンパスの OLYMPUS SP-590UZ しかないとは…しかもお値段は 48 K と、予算 35 K をはるかに凌駕しています。

  BEST GATE では、

とこれくらいヒットするのですがどれも「いつもにこにこ現金払い」となりまるで手が届きません。

 しかたない、スマート・メディア現金で買うか、と秋葉原でメディアと言えばここしかない「若松通商」に行くとこれが 128 MB しかなく、お値段は 5K。ううむ、現金で 5K 払うんなら、ヨドバシのポイントと合せてあと 5K あれば SP-590UZ に手が届くではないかと少し躊躇しましたが、結局購入。

 カメラ (C-2040) が古いので、果して 128 MB のメディアを認識するのか少々不安でしたが、セットしてみると何の問題もなく認識してくれて、これまで 64 MB メディアで 128 枚撮影可能だったのがあっさり 257 枚撮影可能になりました。電池持つのか心配になりそうです。

 カメラ発売が 2000/12 で、購入したのが記録によれば 2001/2/8。メディアを購入したのはそれより升後のこと。8年間に修理3回まだまだ現役、となるとあと8年は使えるかな…

2009/07/26へ

2009/07/21 (Tuesday)
10年目の すごい スマート・メディア

 64MBの、カメラで使用していたカードですが、日曜日についに壊れました。

 まあ、10年以上使いましたから寿命かと思いますが、それにしても撮りためていた画像をパソコンにバックアップしていなかったのがくやまれます。

 ここで、この10年物のカメラを新品にするか、という問題がありますが、昨今の経済事情をかんがみ、f=1.8というレンズの性能も勘案すると、とても現在の財力では新品を調達するだけの余裕はないという結論に到らざるを得ず。

 せめて、新品は128MBにでもするかとか思っていますが。

 調べてみたら、SDカードなんか 2GB で @1.5K なのに、スマート・メディアは扱い店舗がそもそも限られていて、128 MB で @5K ともう圧倒的な価格差。何か泣けてきます。

2009/07/24へ

2009/07/17 (Friday)
MS ACCESS の すごい マルチ・アクセス

 perl で記述したモジュールでとある MS-ACCESS のテーブルに追加処理をしていました。

 別の ACCESS データベースのテープルを参照してこれに処理をくわえ、加工した結果を追加しているのですが、この作業にざっと4時間強かかっています。

 昨日は、作業終了を待てずに、その追加中のテーブルのある ACCESS データベースのモジュールに VBA をがしがしと書きこんでいました。
 一番最初に「占有状態でないから、保存できないかもよ」という不吉なメッセージを表示したので、覚えておいて、最後にモジュールのコードを丸ごとコピペして一時待避させ、いったんデータベースを閉めてから改めて開いてペーストすればいいだろうくらいに考えて作業をしました。

 すると、そのモジュール内からコピペして一部変更したコードが「パラメータ異状」みたいなエラー・メッセージで停止してしまうのです。
 原因が分からず、クエリーが複雑過ぎるのかとも思い、別の方法でコーディングしてみたりしました。

 そのうちに、perl モジュールの作業が終了したので、いったんデータベースを閉めて開きなおしたところ、データベースのサイズが 2 GB を越えていて、これは MS-ACCESS の限界です。
 これはいかんとデータベースの最適化を実行しました。すると、いきなり何だったかのエラー・メッセージがポップアップして、これには選択肢がありませんでしたからそのままクリックすると一応最適化は終了して、サイズも 200 MB 程度にもどったのですが、4時間かかって追加したレコードは全部どこかにいってしまいました。

 今、その追加作業を再度実行中ですが、今度は開発の続きは別の場所に複写したデータベースで継続する予定です。

 一つの ACCESS データベースに複数ユーザーが同時にアクセスすると、後から閉めた変更が有効になり、もう一つの方がくわえた変更はご和算になるとはこのことかと実感しました。

2009/07/21へ

2009/07/15 (Wednesday)
クエリーの すごい 日付指定

 昨日の作業は午後が余りに暑いのでスケジュールを完全にまちがえてしまい、約束の納品ができたのは日付が変っていました。

 暑いと脳味噌が干上がってものが考えられなくなるんだったと去年の夏を思い出したりします。今日も作業の第2弾が控えていますので、クーラーつけて作業しようかと思っています。

 昨夜は作業に没頭していて時計を見ていませんでしたが、突然追加クエリーを実行してもデータが生成されなくなりました。

 ついにぶっ壊れたかとよくよく調べてみたら日付が変っていたせいでした。where 句に、format$(now(), "yyyy/mm/dd")を指定していたので、真夜中になり日付が変ったら対象レコードがなくなってしまったのでした。

2009/07/17へ

2009/07/14 (Tuesday)
Olive の すごい 現役復帰

 新しい作業の専用ベンチにいいんじゃね?ということで、ノートの消費電力が少ないという利点を活用することにしました。

 とはいえ、ハード・ディスク 30 GB では絶望的に容量が足りませんから、外付けのハード・ディスクボックスを調達。
 これに、Rei が内蔵していて使用していない 500 GB ハード・ディスクを抜去して取りつけ、使用することにしました。

 いましがた、Rei からハード・ディスクを抜去してきましたが、MARSHAL 製のボックスに入れて試すのはこれからです。

 うまく動いたら、日長一日インターネットをアクセスしまくるアンテナとして使用する予定です。

2009/07/15へ

2009/07/ 3 (Friday)
Rei の すごい データ移動

 仕事に使っていたマシンですからいろいろとヤバいデータがはいったままです。ということでハードディスクのクレンジング。

 起動ドライブのほかに、データ用に500GB、80GB、60GB、80GBとハード・ディスクを5台も登載していました。これは、主に同人誌の表紙をスキャンしたイメージをそのまま保存しておくために泥縄式に買い足したものです。結局内部で500GBのハード・ディスクと重複して保管していました。

 消すのはあんまり惜しいので、全部 Morgan le Fay の空き領域に移動です。
 一晩かかりました。
 これできれいになったと、今度は、80、60、80の3本を SPAN かけて200GBにまとめました。

 やっと受入れ側の準備が調い、Olive の個人データを移動です。
 まず、ユーザーを作ってログインしてもらい、Documents and Settings にディレクトリを作ってここにデータを移動。調べてみましたが、結局全てのデータが Documents and Seettings\ユーザー の配下に格納してあり、C: ドライブだけで運用していたことが判明しました。
 これまでの努力は何だったんだと。

 それからプリンタをネットワーク越しに接続して作動を確認、まーこんな感じですかねとユーザーに下げ渡しました。

 何しろわが家で最速の 3 GHz Athlon 64 X2 6000+ プロセッサですから動きにストレスなんかまるでありません。

 Olive はまだまだ使えますから、ノートの消費電力が少ないという点を利用して、レーダーの実動機にしようかと思っています。ハード・ディスクの容量が全然足りないので外付けを追加する必要がありそうですが。

2009/07/14へ

最初に戻る
戻る