goo blog サービス終了のお知らせ 

限りなくmoonshine...

GarageBandなどDTMネタとバンドネタと甘いもの中心に。たぶん。

茫然自失な。

2008-05-20 23:39:11 | work

昨日のエントリのようないきさつの後、そのまま開発になだれ込んで数日目。
相変わらず、打っても響かない仕様確認を何度もやり取りしながら、最小限の戻りだけで
食い止められるように策を練ってコーディング中の先日のこと。

ところで、Windows Me や XP Home Edition でオートログインしている人にはあまり
馴染みの無いことだと思うけど、会社で使っている Windows 2000 Professional では、
パソコンに電源を入れて起動したらまず最初に

  「Ctrlキー」+「Altキー」+「Delキー」

という、片手で押さえるには少々無理のある3つのキーを同時に押す事で、ログインする
ユーザとパスワードを入力するダイアログが現れる。
Mac や Linux の場合は、起動した時点で、ユーザとパスワードを入力する画面が出る。
なんでこんな面倒くさいことをしなきゃならないのか、よくわからない。
誤操作防止のためわざわざ押しにくいキーの組合せにしているような気がしなくもないが、
起動直後でこれをやらなきゃならない意味が良くわからないうえに、そもそもこれ自体が
時代に反して、ユニバーサルデザインなんてこれっぽっちも考えていないような操作だ。
「ユニバーサルデザイン、上等!パソコンには無縁!」ってカンジなのかな。

で会社では、機密情報漏洩防止やプライバシーポリシーに則って、離席する時は、たとえ
数分でも必ず「コンピュータのロック」を掛ける事になっている。
さらに、スクリーンセーバーは5分で起動するように設定をしなければならず、加えて
そのスクリーンセーバーから復帰する時にも、パスワードを要求するように設定をして
おかなければならない。セキュリティ強化のためには、例え利便性を損なうような設定
であったとしても、守らなければならない。

さて、この「コンピュータのロック」を行うには、

  「Ctrlキー」+「Altキー」+「Delキー」

という、片手で押さえるには少々無理のある3つのキーを同時に押す事でダイアログが
表示されるので、そこにある「コンピュータのロック」をクリックしてロックする。
ちなみに、ここに「シャットダウン」というボタンも有り、ショートカットキーとして
「S」が割当てられている。
こっちを選ぶとシャットダウンするということだ。
たとえそのときに、編集中のドキュメントがあろうと、実行中のプログラムがあろうと、
そんなものはほっぽって最優先で Windows をシャットダウンする。
解除する時には、また、

  「Ctrlキー」+「Altキー」+「Delキー」

という、片手で押さえるには少々無理のある3つのキーを同時に押す事で、再度ログイン
するユーザとパスワードの入力を求められるので、入力すると解除される。
スクリーンセーバーが起動しているときも同様で、スクリーンセーバー起動中にマウスや
キーボードを操作すると、ロック解除を促すダイアログが表示されるので、

  「Ctrlキー」+「Altキー」+「Delキー」

という、片手で押さえるには少々無理のある3つのキーを同時に押す事で、再度ログイン
するユーザとパスワードの入力を求められるので、入力すると解除される。

また、Windows アプリ共通のショートカットキーとして、

  「Alt」+「F4」

というのがある。
これを同時に押すと、現在アクティブ(一番手前)なウインドウを閉じることができる。
しかし、何もウインドウが開いていない状態で、この

  「Alt」+「F4」

を同時に押すと、「 Windows のシャットダウン」というタイトルのダイアログが表示
されて、デフォルトでは「シャットダウン」が選択されている状態になっている。
他の選択肢は、「再起動」「ログアウト」である。
ここで慌てて Enter など押してしまうと、そのまま Windows がシャットダウンする。
たとえそのときに、編集中のドキュメントがあろうと、実行中のプログラムがあろうと、
そんなものはほっぽって最優先で Windows をシャットダウンする。

そんなわけで Windows のショートカットキーというのは、そのときの状態によって、
全く同じ組合せのキーを押してもその時々で動作を変えるという、ありがたい?仕様に
なっている。
また逆に、ある動作を行うためのショートカットキーが、いくつものパターン存在すると
いうことになる。
コンピュータのロックやスクリーンセーバーの解除など、非常に多用する動作であるにも
かかわらず、場合によってはいとも簡単に Windows をシャットダウンさせることが可能
ということは、常に危険と隣合わせであるということであり、気軽にやると痛い目に遭う
ことも考えられる操作であるとも言える。

Mac をシャットダウンする場合には、画面一番上のツールバー左端にあるリンゴマークを
クリックし、プルダウンメニューの中にある「システム終了」を選ぶ。
他の場所に Mac をシャットダウンさせるメニューは無いので、ここ以外からはできない。

閑話休題。
ああ、もうオチが。
そうです。やってしまいました。その、隣合わせの危険なほう。
スクリーンセーバーが起動していると勘違いして、まずロック解除のため例の3つのキーを
同時に押し、その後ささっとパスワードを入力、Enter キーを叩く。
いつもの慣れた一連の動作なので、特に改めて画面を注視する事も無く隣の後輩と世間話を
しながらキーを叩いていた。ふと気がつくと、目の前には「 Windows を終了しています」
というダイアログが。この時点で、後輩の「あっ」という声と共に茫然自失。

つまり、スクリーンセーバーが起動していなかったので、ロック解除したつもりが、実は
その時点でロックを掛ける動作になっており、上記の通り「「コンピュータのロック」や
「シャットダウン」などを選択するダイアログが表示されていた、と。
かつ、パスワードの一部に「S」の文字があるため、パスワード入力だと思って入力して
いたキーが「シャットダウン」のショートカットキーになってしまった、と。かつ、最後に
Enter を押したもんだから、それが「選択/決定」の動作となり、実行された、と。

そのときに開いていた書類は、MS Project のスケジュール、excel で作成中の設計書等が
いくつかと、サーバへ接続しているターミナルソフト、メモ代わりに使っていたエディタ、
それに調べ物をするために開いたブラウザが何枚か。
さらに、使っていたパソコンは、ファイルサーバ代わりにして大量のファイルを共有して
いたので、他のメンバが編集中の何かのファイルが幾つか。
スケジュールも設計書も、珍しく長時間保存していなかった。
自動バックアップにすると動作が重くなるので設定を外してるんだけど、普段は結構マメに
「 Ctrl+S」を押す癖があるから、そうそう大事には至らないのに、何故か今日は。
少なくとも、今の客先に来てからここ3年くらいは、そんなミスをやった記憶が無い。
以前いたメンバが、デスク下に這っているパソコンの電源ケーブルを足で引っ掛けて抜いて
しまい、いきなりパソコンが落ちたと騒いだ事件以来のような気がする。

で、ただでさえ仕様が決まらなくてイライラしてたトコに、この仕打ちだ。
詳細設計書の損失だけでも相当なのに、他人のファイルまで壊してしまってるし。
そんなわけで茫然自失、モチベーションもダウン、今日は早く帰ろう、な気分だった。
なんでコンピュータのロックとロック解除、それにシャットダウンまでもが、同じ操作で
できちゃうのか、と。

ところで、ユニバーサルデザインの7原則というのは、
  ・どんな人でも公平に使えること
  ・使う上で自由度が高いこと
  ・使い方が簡単で、すぐにわかること
  ・必要な情報がすぐにわかること
  ・うっかりミスが危険に繋がらないこと
  ・身体への負担が少ないこと
  ・接近や利用するための十分な大きさと空間を確保すること
だそうだ。少なくとも、3、5、6番目なんて完全に眼中に無いといった感じだな。
特に、5番。

茫然自失5分前。

2008-05-19 23:41:46 | work

いや、まあ、不注意だった自分が悪いんだけども。
久々に、茫然自失という言葉が似合う場面だった。

先日、仕事でのこと。
連休明けに急に客先で会議が入り、サブシステムの新規開発依頼が来たが、詳細仕様が
決まってないからということで概算見積を出すことに。
ところが、これを見た依頼元から「工数を水増ししすぎだろう」との指摘有り。
あたりめーだ、仕様も決まってないのに厳密な工数が出せるか、って言いかけた言葉を
ぐっとこらえて、得意げに「私がサンプルで作ったものでもたった8日だった。スキルの
高い君たちならもっと早くできるはずだ」などと、個人が趣味でちょいちょいと作った
ような工数を言うエンドユーザに対して、「きちんと詳細設計書を起こしてから開発に
入りますからね、運用テストも考えたら妥当な数字でしょう、ハハハ」なんてテキトーに
返しつつ、とりあえず「再見積を」と言われて持ち帰り。
昔ならその場で即、笑顔で強気な厭味をまくしたてて反論するトコだが、大人になった
ものだと自画自賛。
それはおいといて。

で、概算で 12人月(念のため、1人でこの開発をすると 12ヶ月掛かりますよ、という
意味。計算上では2人なら6ヶ月、3人なら4ヶ月で完了するが、実際は優先順なども
あって同時に行うことができない作業もあるので、単純に人数割りした日程では終らない)
の作業を、モジュール分割のレベルまで落とし込んで9人月まで減らした。
依頼元の希望は、これを7月頭にリリースしたい、と。
対して、こちらのメンバは2人。
使える工数は、2人×1.5ヶ月=3人月程度のところに、9人月の作業。
サーバとのデータ送受信手段さえ決まってないので、これ以上は削れないと伝えたら、
「設計書はリリース後の後付けでいいから。それから、テストも、とりあえず動きさえ
すればいいから。テスト項目書なんて最後最後。」だって。
まともな IT 屋が聞いたら発狂しそうな返事だ。いや、自分も発狂しかけたけど。

設計書は後からと言っても、要所要所で何かしらのドキュメントを作っていかなきゃ、
開発なんてできない。テストも、常識的なレベルや「システムを止めない」というのは
当然としても、バグの無いシステムは有り得ないし、項目書を作らないとテストを実施
することはできない。最終的にはテスト結果報告書も提出するし。
しかも、「とりあえず動けば」なんて言ってても、障害が発生したらまず文句を言って
くるのは間違いなくこの人だ。そもそも要求仕様だって口頭のみでロクなドキュメントが
ないのだから、絶対に後で「これはいくらなんでもおかしい」と難癖つけてきて、無償で
直せと言ってくるに違いない。いや、言ってくる。過去の経験からも。
なので、設計書を作ったうえで依頼元の承認を得てから開発に入るのが常識だ。
趣味でプログラミングしてる訳じゃないんだから、とりあえず「ちょこちょこ作りながら
おかしいところを直していけば良いじゃん」的なノリはやめて欲しいよ全く。

しかし、見積上は「詳細設計」「結合テスト」「システムテスト」「運用テスト」などと
フェーズごとに別項目として記述しているので、フェーズ単位で各工数を引き算した上で、
「ちょっと残業を多めにすれば7月のリリースに間に合うだろう」という判断らしい。

いやいや、おっさん、ちょっと待て。
机上の数字合わせだけで開発を依頼するなよ。
「これとこれを削ったら、なんとか7月頭に間に合うね」って、何の計算だよ。
しかも、いくら残業しても、あんたが金をくれるわけじゃないだろう。
そもそも、残業前提で考えるなよ、と。40歳台後半のマネジャークラスの言うことか。

と、本来ならここで「受けられません」と開発依頼を却下しても良さそうなものだが、
実に世の中は不条理というか、会社の力関係やしがらみがどこまで悪影響を及ぼすんだ、
と、ため息の出るような状況に追い込まれ、結局その開発依頼を受けることになった。

とは言え、これ自体は実は結構よくある話で、「ちっ、またかよ」というレベルだ。
じゃあ、茫然自失というのは何かというと、それはまた明日に。
こんな具合なので、やらなきゃならないことが他にも。

あ、もうひとつ。
php で開発することについて、「別に何でも構いませんが、インターネット向けである
このシステムが php で作られたと聞いたら、大抵の人は ”え!? php ですか?”って
(あり得ないという意味で)言うと思いますけどね」と言われた。
そりゃまあセキュリティ的にもベストだとは思ってませんが、この短期間で立ち上げる
ということと、本番サーバが何かすら決まってない状態でどうしろと。
仮に、この人が好んで使うC言語と shellscript で構築したとして、本番サーバがもし
PCサーバだったらどうすんのよ。そのくらい、本番環境が決まってないというのに。
だいたい、文句を言ったり批判をする人に限って、その解決策を言わない。
「じゃ、何で開発しましょう?」と聞き返したときの「だから何でもいいですよ、別に
php で良いと思うなら php でやってください」という返事が、無責任さを増してる。

言っちゃ悪いが、独りで全てをやってしまおうとする――或いは独りでできる、独りの
方が早いと思っている―― SE 気取りの職人プログラマ然とした人ほど、こんな傾向が
強い気がするのは気のせいか。

私的備忘録。

2008-05-10 02:04:23 | work

仕事で、インターネットから接続可能なセキュアなサイトを構築しなければならなくなったので、
工数見積もり前の調査の備忘録。

サーバは unix、Solaris8。
ここに、Apache と php と Perl の環境。
データベースは Oracle9i。

サーバを改めて調べたところ、Apache に OpenSSL は当たってないがソースはある、という
状態。前担当者が、やろうとして断念した模様。なんだそりゃ。
開発サーバが、別システムの本番環境という、実にあり得ない環境。しかし、それしか環境が
ないためにやるしかない。このサーバが現状ではイントラのみ接続可であることが救いか。
開発機の用意をお願いしたが、「大丈夫だよ、君たちだし」という言葉が一番信用ならない。
でもまあ、愚痴っても出てこないものは出てこないので諦めよう。
24時間稼働のシステムのため、アクセスの最も少ない日曜日にこっそりとインストール予定。
認証局も自分で立ててかまわないという事だったので、このサーバ内に構築する事にする。
どうやってやるんだったかな、と思い出すも、全く覚えてないので @IT に頼る。
たぶん、以前もここを参考にした気がするが、それを元に作成した資料は他の顧客用のもので、
資料などの持ち出し/現在の客先への持ち込みが禁止されているため、流用不可。
なんだかなぁ。
というわけで、Linux 向けの記事なのだが、読み替えれば問題ないので↓参照。

インストール:
http://www.atmarkit.co.jp/flinux/rensai/apache04/apache04a.html

次に、開発を行うサイトの構成だが。
仮想ディレクトリや cgi 実行ディレクトリ等は、すでに現在運用されているシステムで定義を
行っているため、そこに間借りする形の開発環境用にパスを切る。
ああやっぱり危険だ。絶対に想像つかないような、ランダムなパスにしなきゃな。
ついでに、access_log を監視して、自分たち以外で開発環境にアクセスしてきた人がいたら
警告メールを飛ばすように設定しておこう。

で、認証局の方だが、こっちも OpenSSL コマンドのパラメータをすっかり忘れた。
したがって、またまた @IT にお世話になる事にする。↓参照。

http://www.atmarkit.co.jp/flinux/rensai/apache12/apache12b.html

最終的には、ベリサインなり自社 CA 局なり使うだろうから、本番サーバ移行時には、また
このへんの調整が必要だな。工数を上乗せしとかなきゃ。

php に関しては、PEAR の Auth パッケージをと思っていたが、どうもインストールされて
ないっぽい。このくらいの追加は良いだろうと思って顧客に確認したら「 NG 」だって。
てか、そもそも pear コマンドを which しても find してもいないところを見ると、まったく
インストールされてないのか。明日、手があいたら調べること。

にしてもだな、とりあえず Single Sign On した後のシステムで SSL だから盗聴される事は
そこまで心配しなくて良いとしても、ブラウザの入力項目を全て隠して送信しろってのは面倒。
いいじゃん、普通に post で、って言ったらちょっと難色示してた気がするので、一体顧客は
どこまでやるのを望んでいるのか、次回打ち合わせで詰めておかなきゃ。

ここんところずっとイントラ内部のシステムばかり弄ってて、また過去データを参照する DWH
のようなシステムだったということであまりこの辺のことを気にしてなかったので、暗号化に
ついて調べたら何と奥の深いコトか。最近は色々あるのね。Ajax 使ったログインとか。
環境と予算が許せば、このあたりの技術を使って実装するってこともやってみたいけど、どうも
そういう訳にもいかなさそうなので、手持ちのシステムで頑張るしかなさそうだ。

APPENDIX。
色々検索してた途中で、PEAR::Auth 使う上でのネタといくつかのリンクを見つけた。
この内容自体はちょっとズレてる気もするが、後輩たちへの資料作成に使えるかもしれないので
残しておく。研修ネタは無理か?

http://q.hatena.ne.jp/1132304878

あと、思いついた事はここに追記予定。



今日の一言。

2007-10-16 04:13:50 | work

誰が見ても明らかに「白」のものを「黒だ」という上司に対して反発するのを「食ってかかっている」と
言われる筋合いは無い。
まして、謝る必要も、折れて「黒でした」と訂正する気も、微塵も無い。
そもそも、そんなたわけたヤツを上司とも先輩とも思ってない。
メールの文体がどうだとか、先輩に対する態度がどうだとか言う前に、本質を見極めろ。
さらに、この「下っ端」をなだめようとする周囲の姿の、なんと情けないことか。

Solarisのawkは。

2007-05-15 20:54:13 | work

Solaris 8 の awk、使えない。
仕事で次のような文字操作を行おうと思い、いつものように「 awk でサクッと」の
つもりでスクリプトを書き始めました。

 1.あるディレクトリ以下にある、4ヶ月以上前に作成/更新されたファイルを
   取得する。
   このディレクトリにあるファイルは、一定の命名規則に則ってファイル名が
   付けられていて、ファイル名のどこかに特定の文字列が存在する。

     ex) aaabbb.ccc.M200701.dddeee.Z
        (a,b,c,d,e の長さはそれぞれ不定)

   なんとなく判るかもしれないが、「M」の後ろに西暦4桁、月2桁が来る。

 2.別ディレクトリに、M+年月をディレクトリ名とする新たなディレクトリを
   作成し、そこにこれらのファイルを移動する

たったこれだけのことがしたいだけである。
1は、普通に for 文に find をかましてるだけ。つまり、

   for fname in `find . -type f -mtime $TWK`
   do
     (ここに2の処理を書く)
   done

こんなだな。mtime の引数は、実際はこの前の処理で正確に日数を求めてる。
で、ファイル名に規則があるのだから、楽勝だと思いつつ、簡単に awk コマンドを
作成して shell 上で実行してみた。こんな感じに。
つまり、取得したファイル名から年月の部分を切り出し、その名前のディレクトリが
無かったら mkdir と mv、あれば mv のみ、という感じにしたいので、とりあえずは
年月を切り出す部分をテストしてみた、ということで。
もちろん、実行前に $fname にはダミーでファイル名をセットしている。

  $ echo $fname | awk '{ match($1,/M[12][0-9][0-9][0-9]/); print RSTART }'

ところが。

  awk: 構文エラー (1 行目の周辺)
  awk: 不正な文を検出しました。 (1 行目の周辺)

なにをー。
あれ、正規表現の書き方を間違ったかな?なんて思いながら、

  $ echo $fname | awk '{ match($1,"M2007"); print RSTART }'

とやってみたが。やはり、

  awk: 構文エラー (1 行目の周辺)
  awk: 不正な文を検出しました。 (1 行目の周辺)

となる。おかしいなぁ、と思いながら、身近にある Red Hat Enterprise Linux に
ログインして、同様に実行してみる。

  $ echo $fname | awk '{ match($1,/M[12][0-9][0-9][0-9]/); print RSTART }'
  17

お。正しく返ってくるじゃん。
なんだよぅ、Solaris は使えないのかよぅ。
それじゃあ、ってんで、nawk 使ってみる。

  $ echo $fname | nawk '{ match($1,/M[12][0-9][0-9][0-9]/); print RSTART }'
  17

なんだ、ちゃんと返ってくるんじゃん。
てことで解決。
まあ、確かに「 New version AWK 」で「 nawk 」ですが。
普段、awk で馴染んじゃってるので、驚いたじゃないですか。まったく。

そんなわけで、

  $ echo $fname | nawk '{print substr($1,match($1,/M[12][0-9][0-9][0-9][01][0-9]/),7)}'
  M200701

な感じで、望む結果が返ってきたのでした。
んー、でもなんかカッコ悪いなぁ。
もうちょっとスマートにならないかな。



#ちなみに、コンマ何秒の世界を争ってないですし、可読性重視でスクリプトを作成
 しているので、「 FizzBuzz問題」を少ない文字数でプログラミングし、「短い方が
 エライ」みたいに盛り上がってる内容は、ちょっと好きになれないな。
 別に、何行に渡って書いてもいいじゃん。この程度だったら。と思いますが如何。
 こういう後輩がいたら、すげー使いにくいだろうな。
 そんなことよりも、ちゃんとコメント入れろよ、とか(笑)。
 趣味のプログラマじゃない、ってことだな。


心が荒んでる。

2007-05-07 01:41:09 | work

諸般の事情により、ゴールデンウイークは本職に内緒のバイト三昧。
行楽地に繰り出す老若男女を尻目に、某駅前でサンプリングなどなど。

しかしまあ、なんと荒んだ心の持ち主が多い事か。
色んな意味で空しくなって来ると言うかアタマに来ると言うか。
自分には無縁の他人の事なので、別に無視してしまえば済む話なのだろうが、やはり
イヤな気分がどこかに残ってしまう状態は、精神衛生上よろしくない。

某日、ある新築マンションの営業バイトで、ビニールの透明封筒にマンションの広告と
ポケットティッシュを入れたチラシの配布を行っていたのだが。

「○○です、よろしくお願いします」って笑顔でチラシを渡そうとしたその時。

  「両手が塞がってて持てないんだよ!バカ!」

って、大声で吐き捨てるように怒鳴られた。
歳の頃50前後くらいのブレザーにチノパンのオッサン。
まあサラリーマンなら、鬱陶しい面倒でイヤミな上司、ってカンジか。
脂ぎった七三分けに、メガネから覗く爬虫類のような目。
確かに、羽田のタグが付いたアタッシュケースとお土産と思われるビニール袋を数個、
両手に持っていたのはいたが。その言い草はなんだ。

また、ちょうど駅から出た交差点で信号待ちのために立ち止まった30代くらいの男性。
良くわからない柄の入ったポロシャツにジーパン姿、昔の柳沢慎吾みたいなパーマ頭。

  「ジャマなんだよ、どけ!」

って、差し出したチラシを手で払いのけられ、チラシは車道の方へ飛んでいった。

こちらは、真夏日の中スーツのボタンも掛け、胸にはマンションのネームまで付けて、
とびきりの笑顔(笑)でチラシを配布してるのである。
勿論、駅前といった人通りの多い中なので、極力通行の邪魔にならないように、電柱の
影になる部分や車止めの間などのわかりやすい位置で立ってるし、販売会社からもまた
同様に立ち位置や配布時の注意は受けた上で行ってるのである。
同じような場所で、まるでホームウェアではないかというようなだらしのない格好で、
若い女の子を中心にテレクラのポケットティッシュを配っていたり、あるいは同様に、
ホストみたいな格好でサラ金のポケットティッシュを配ってる連中のように、見境なく
歩行を妨害しながら、通行人にぶつかっても逆に文句言うくらいの勢いでティッシュを
目の前でチラチラさせながらついて行くようなことはしていないのに、である。

そりゃまあ、たかがサンプリングごときで何の違いがあるんだ、何のプライドを持って
やる必要があるんだ、と言われた事はあるが、大手不動産会社の名前を背負ってる上に
数千万円~1億にも手が届こうかという様な物件のチラシを配っているのである。
こちらとしては、それを念頭にキチンとやっているつもりである。
「バカ」とか「ジャマだ」とかまで言われなきゃならないのか。

などと思ってているうちに、今度はさっき受け取ってくれた人が、目の前で封筒の中から
ティッシュだけ取り出して、残りのビニール封筒と広告をその場で道路に捨てて行った。

これって、たまたま1人2人って訳じゃないんだよな。
1日で、かなりの人数にこの手の暴言を吐かれたり、暴力とまでは行かないが通りざまに
背中を押されたり、目の前で道路にそれを捨てて行ったり。

そんなことでしか、立場が上になれないのか、エラそうにしたいのか。
道路にこれ見よがしに捨てるのは、どんな意味があるのか。
もう、心が荒んでるというか病んでいるというか。

まだ、完全無視でスルーされる方がマシだと思う。
なんだかなぁ。


連休でした?

2006-11-05 18:09:01 | work

貴重な祝日を使って、この週末は色々と予定を考えていた。

Guppy and the Droppings の新曲作成とか、
自分の曲の歌入れとか、
Telepaths のドラム打ち込みとか、
ドラムの個人練習とか、
以前作った知人のサイトの更新とか、
弟の PowerMac 7300 再生計画手伝いとか、
PMP の受験対策とか、
部屋の掃除とか、
車のワックス掛けとか。

11/3 午前9時頃、仕事で私が担当しているサーバがシステムエラーを吐いているのだが
どうして良いかわからない、と、パートナー会社の当チーム担当者から電話が入った。
どうやら、午前3時前頃に運用チームからシステムエラーの連絡が入り、運用チームの
担当者と色々と手を尽くしていたらしい。
契約上、休日に障害が起きても出勤しなければならない義務は無いし、連絡先にしても
会社から携帯を貸与されていないので個人の携帯番号を保険で伝えているレベルである。
が、パートナー会社の担当者はホスト担当で、サーバのことは殆ど知らない。
かつ、今私が担当しているサーバをそれなりに知っているのは私だけ、という状況下で、
「知りません」と言う訳にもいかず、とりあえず出勤。
サーバを止めるわけにはいかないために、本番環境稼働状態で作業を行い、とりあえず
夕方には正常に戻した。
結果から言うと、大した障害が発生していた訳ではないのだが、運用チームの人たちも
色々と頑張っていたようで不要なファイルがあちこちに多数作成されていたり、設定の
ファイルをバックアップも取らずに修正していたり、結構笑える状況になっていたので
それを元に戻したりしていて時間を取られたカンジ。
さらに、障害発生時刻は日時処理が走っているため、11/4 の午前3時に正常動作した
という状態を見届けないと、対応完了とは言えないため、じっと待機。

てなことをやっていたら、この休みもやっぱり何も出来ないまま終了。
これでいて、時間精算みたいな契約体系なんだよなぁ。割に合わないなぁ。
開発中心の保守チームってのが曖昧なんだよなぁ。


ご意見募集。

2006-10-05 23:57:48 | work

手前のスキルと経験の無さを晒して申し訳ないのだが、unix サーバの運用保守、管理、
またはそれらの開発に携わっている方々がいたら、ご意見を頂戴したい。

私は、unix サーバ数台のあるシステムの保守チームに属している。
一応、このサーバ上で動作するアプリの開発を行っており、その流れで保守もしている
といった状況で、所謂「運用」は経験が殆どない。どちらかと言うと開発が主である。

で、日時処理の中に次のようなものがある。1つの shellscript の中に3つの処理があり、

  1・事前にホストが PUT している CSV ファイルからDBへデータロード
  2・上記1のファイルを別のディレクトリへ移動、移動後に圧縮
  3・別の CSV ファイルからデータベースへのデータロード

このうち、1と3はログを出力するように作成している。
この shellscript 自体は、ホストのジョブでサーバに telnet ログインして実行されている
のだが、ホスト側でログは何も取っていない。
また、2で作成された圧縮ファイルは、決まった時間に別のサーバが FTP GET しに来る。
こちらのサーバからは PUT していない。

ある日、2で作成された圧縮ファイルを FTP GET しに来るサーバの担当者から、該当の
ファイルの取得に 11:10 の時点で失敗しているようだ、原因を報告してください、との
連絡が入った。
連絡があったのが 11:15。原因を調べていたところ、次のことが判明した。

  ・1のログファイルのタイムスタンプは 10:48 である。
  ・3のログファイルのタイムスタンプは 10:52 である。
  ・2のファイルは、移動後にあるべき場所に、圧縮ファイルとして存在した。
  ・2のファイルを FTP GET しに来るのは 10:30 らしい。

ちなみに、通常ならば 10:30 には余裕でファイルが存在しているはずだが、この日は
この処理より前の処理に遅延が発生し、通常よりも2時間程度遅れて処理が開始されて
いたようである。アラートが上がるわけではないし、常時監視しているわけでもないので、
遅れてることには気がつかなかった。
なお、2のファイルは mv と compress を実行しているので、タイムスタンプ自体は
CSV ファイルがホストから PUT された時間(この場合 10:09 )のまま変わらない。

以上の状況から、私は次の結論を出して、担当者へ報告すれば良いと判断した。

  「2のファイルを GET しに来た時に、所定の場所にはまだファイルが存在して
   いなかった。そのため、GET に失敗した。しかし、10:50 頃に処理がされて
   所定の場所にファイルが作成されているので、再取得を行って頂きたい。」

ところが、「それはおかしい」と制止された。
まず、先方の担当者は「 11:10 の時点で失敗している」と言っているので、その時間に
2のファイルは存在していたかどうかは怪しい、と言うのだ。
さらに、「処理がされて」とあるが、どこに処理がされた証拠があるのか?と。
しかし、ログを見る限り、10:48~10:52 の間に所定の場所に移動、圧縮されたことは
間違いない(と思っている)。
私は、単に先方の担当者が FTP GET のログを確認したのが 11:10 であり、その時間に
こちらのサーバにファイルがあるかどうかなど確かめていないと判断した。
事実、その時間には FTP も telnet も、先方がログインした形跡はどこにもなかった。
なので、先方の言ってきていることはとりあえず無視して、こちらの事実を報告すること
にしたのである。

しかし、「 FTP や telnet 以外の、何らかの方法でこちらのサーバの中を確認したのかも
しれないし、相手が”無かった”と言っているのだから無かったと思うしか無い」と。
(ここで思わず「ありえねー」って笑っちゃったので、制止した人を怒らせたようだ。)

確かに、移動と圧縮はログを出力していないため、私が推測した時間で実施されたか否か
確実ではないと言われたらそれまでだ。実施されたと言う証拠はない。
しかし、そこでしか処理される場所が無く、かつファイルが正常に存在している以上、
私の推測したタイミング以外で作成される方法など存在しない(と思っている)。

結局、私を制止した人は「いつ該当のファイルが作成されたのか全く見当もつかないが、
とりあえず今は作成されているようなので、FTP GET の再実行を行ってください」と
先方に伝えたようだ。

「いつ作成されたのか、全く見当もつかない」と。
なぜなら、ログなどの「事実」が無いため、全ては「推測でしかない」から、と。

まあ、きちんとログを出力するような作りになっていないのが問題なのだろうが、この
処理の部分は私のチームが作ったわけではなく、引継ぎすら行われなかった状態で保守を
担当しているため、今更言っても仕方が無い。

というわけで、保守チームに向けて「原因を報告してください」と言われたのに対して、
「全く見当もつきません」と返したわけだ。保守チームの自覚はあるのか?と私は思った。

しかし、例によって「お前の考えはおかしい。事実も無いのに推測をあたかも事実の様に
言うことは、やめろ。信頼を失うだけだ」と諭された。
「それならば、テスト環境を作成してこの shellscript を実行し、どのように動作するか
確認すればどうか?」と言ったが、「仮にテストで推測通り動作したとしても、本当に
今日その通り動作したかどうかは、保証できない」と。

じゃ、世の中の「テスト」なんて、何の意味もないですね。ってイヤミ言ったのだが、
「それとこれとは違う」だってさ。何が違うのよ。
「今日だけ違う動作をしていたかもしれない」だってさ。
そんなことを疑っていたらキリがない、というか、疑う場所じゃないだろ、と。
そこまで言うなら、「 11:10 に失敗したと言っているが、本当にその時間にファイルが
存在していなかったか」先方に確認すればどうかと提案したが、「それは失礼だ」だって。
こちらの動作がおかしくてファイルが取れなかったと言っているのに、そんなことを聞く
ことはできない、ってさ。

てことで、「お前、いい加減その考えを改めろ」って、怒られて説教されて諭された。

私が先方に報告しようとした内容は、そんなにマズい?


行為と結果と頑固一徹。

2006-06-21 23:59:59 | work

先月のエントリで、「バカヤローなんて、書くくらいなら先に後先考えず言う」的な
ことを書いたが。ここ2ヶ月くらい、ちょっとバカヤローなエントリが続いている。
勿論、本人を目の前にしてケンカした結果、ほとぼり冷めたから書いているのだが…。
あまり毒づかないようにしよう。どちらかと言うとこれは呆れた出来事ネタってカンジ。


最近またリーダと意見が対立することが多いのだが、リーダが一歩も引いてくれない。
それはそれでリーダの意見も理解できるし、そこまで強く言われると、こちらとしても
「てこでも動かない」というほどのポリシーも何もないため、受け入れることも多い。

さて、unix のコマンドで「 rm 」というのがある。ファイルを削除するコマンドだ。
ある日、作成から1週間以上過ぎた古い特定のファイルを削除してくれ、と依頼が来た。
仮に、そのファイルを「ファイル名がAで始まるプレーンファイル全て」としよう。
OS は solaris 8 なのだが、大抵はこんなカンジで削除するだろう。

  % find . -name "A*" -type f -mtime +7 -exec rm -f {} ¥;

これで、"AAAA" も "ABCD" も "ABBB" も "AZZZ" も削除できる。
間違っても、"BAAA" や "DCBA" や "BABB" や "ZZZA" を削除することは、ない。
勿論、保守運用の鉄則である作業前後のエビデンスを取得するため、このコマンドを実行
する前に ls コマンドで対象ディレクトリのファイル確認、および該当ファイルリストを
ログ出力して保存することは当然行う。

当チームでは、実行する予定のコマンドを一度テキストファイルに書き出し、リーダの
チェックをしてもらった上で、その書き出した通りに実行する。
しかしこのコマンドをリーダにチェックしてもらったところ、「こんな一括削除のような
コマンドでは、きちんと削除できたかどうか判断できないので却下」とのことだった。
実行前後でファイルの確認を行うので問題ない、と反論したのだが、

  「このコマンドで削除したとして、例えばユーザから "AABB" というファイルを
   削除したかどうか確認されたとき、"削除したはずです" としか答えられない。
   確実に "削除しました" と言えない。」

とのことだった。実行前後でファイル確認をしたとしても、「実行前にあったファイルが
実行後に無くなっているから、たぶん削除されているはず」でしかない、と言うことだ。
rm コマンドで削除されたのか、サーバに不具合が起きてたまたま消えたのか、それとも
実はユーザがタイミングよく勝手に削除したのか、わからないではないか、と。
曰く、

  「 rm コマンドが、間違って対象ではないファイルを消してしまったり、対象の
   ファイルをきちんと削除できないかもしれないじゃないか。実行した時に
   エラーが出なかったからといって、確実に削除されているという保障はない。
   そういった確認ができないようなコマンドではダメだ。信頼性がない。」

と。
unix のコマンドが、「時々間違って動作しちゃう」ってことらしい。
これを真顔で言うのだから、冗談ではないのだろう。

ではどうするのか?というと、その回答は「1つずつファイル削除コマンドを書く」。
つまり、

  % rm AAAA
  % rm ABCD
  % rm ABBB
   : :

とまあ、こんなカンジで、1つずつ削除対象を書け、ということだ。
こうすれば、「 "AABB" というファイルは確かに削除しました」と言える、とのことだ。

そりゃ、削除対象が5件や 10件なら書くかもしれないが。
この日削除対象となったファイルは、100件近くある。
日によっては、削除対象が 1,000件とか 5,000件になる。
だが、リーダによると「それでも1つずつ書かなければ、確実に削除したという保障が
できない」ので、全部書きなさい、とのことであった。

何のためのコマンド、何のための shellscript だ。

そもそも、「 rm コマンドが時々間違って動作しちゃうから」ダメだってことならば、
たとえ1行ずつ削除対象を書いたとしても、削除時にエラーが出なかったとしても、
やっぱり「時々間違って動作しちゃう」ことだってあるということにはならないか?

  「おまえのコマンドは、実行した結果、望む形になっているように見えるから
   正しく処理した、と独断で決め付けているだけで、結果オーライの処理だ。
   そうではなくて、確実に削除するという行為を経た結果、望む形になるのだ。
   順番が逆だろ。結果よければ全て良し、だなんて何を考えているんだ。
   結果的にそうなったというだけだから、"削除されたはず" としか言えない。
   それに比べ、1行ずつ削除を実行すれば、"削除した" と言える。」

と言い始めた時には、私はどう説明すれば良いのかわからず、途方に暮れてしまった。
実行前後にきちんとファイルの存在有無を確認する、と言っているのに、コマンド自体に
問題があるのだから、実行前後の確認以前の問題だと言って、取り合ってくれない。
「確実に削除するという行為」って何だろう。
だって、rm コマンドが本当に削除してるか信用できないって言ってるワケでしょ。
だから、私が実行しようとしたコマンドでは危険だと言ってるワケでしょ。
何が違うのよ。
1行ずつ「なんまんだぶ」とか言いながら実行すれば、気まぐれな rm コマンドも
気分を良くしてくれて、間違って動作することは無くなる、とでも?

このおかげで、数分もあれば実行可能であった処理は、半日以上掛かることとなった。
事前の実行コマンドチェックで、100行弱の削除コマンドが並んだテキストファイルを
リーダと2人で眺めながら、そのファイルが実際にサーバに存在するか、ファイル名は
正しいか、1文字ずつ画面を指差して確認していたのだから。
これ、来月以降に削除対象が 10,000件になったとしても、同じ事を言うのだろうか?

実は、このコマンドを実際に実行するときにまたひと悶着あったのだが、それはまた
次の機会があったらにしようと思う。


#ちなみにこのリーダ、2つのファイルの内容を比較して、その差分を出力してくれる
「 diff 」というコマンドに対しても、「 diff コマンドの出力結果が正しいかどうか、
2つのファイルをパソコンにダウンロードして、windows のコマンドプロンプトで
FC コマンドを使用して再度確認すること」と言った人である。
unix のコマンドは信頼できないが、windows のコマンドなら信頼できる、と。


休日出勤中。

2006-06-18 21:18:29 | work

休日出勤中。
他システムの作業が完了するまで、待ち。
その間に、鈍った手首をほぐすべく、軽くストレッチ中。
グゥ、パーの繰り返し 70 回くらいで腕がつってきた。
どういうことだ。鈍り過ぎ。