先日のことだ。保守を行っているサイトでの話。
顧客からある調査依頼を受けその結果を返す必要があったが、これまでに発生したことがないエラーだったので、保守チーム内で確認のうえで結果を返そう、ということにした。
作業はこの保守チームに一番長くいる、年齢的には確か30台後半のA氏が担うことになった。

しかし、事件は起こった。

・調べた結果を勝手に送付
・通常は資料を別の方法(宅ふぁいる便みたいな方法)で送るルールなのに、抜粋したログをメールにベタ貼り(暗号化されていない平文)
・貼り付けたログの中に個人情報が含まれていた

ログの中に個人情報?そう思うだろう。おそらく開発時に確認のためにいれたものがそのまま残っているのだろう。しかし、せめてDEBUGレベルになって居る必要があるだろう。INFO以上にあってはいけない。それを知らなかった、なら不幸なのかもしれない。

しかし、だ。

少なくとも「ログに個人情報が出ている」ということは5月くらいに確認したところであるし、いずれ出力を避けるようにする、という話も出ていたので、意識していれば気づいたであろう。意識していなかった、といえばそれまでだ。
また、本人は「個人情報が含まれていることに気がつかなかった」と主張していたが、ログを抜粋する際にログの内容は読んで「ここを抜き出そう」とするだろう。なぜ気がつかないのかは分からないが、気がつかなかったらしい。
会社によってはクビとかあるんだけれど、今回は始末書の作成。


まあ、ここまではいい。

これについて、さすがに問題なので温厚(だと思うよ)な私も叱った。そりゃ、決まり事を守らないうえ、結果として個人情報が漏れるかもしれないことをやらかしているのだから。
しかし、説明を求めても答えられない。糠に釘状態。おまけに返事がない。
私:「分かってます?」
A:「分かってます」
私:「何やったか説明して」
A:「(返答無し)」
私:「本当に分かってる?」
A:「分かってるって言ってるじゃないですか(語気強め)」
アホらしくなってそのへんにしておいた。

うちの運用では週一で週のインシデントとか反省点とかを述べ、改善策を述べさせるし、反面教師的として「明日は我が身」を感じてもらうつもりでもいる。
しかし、A氏の口から、その週の始末書が出るレベルの件について、述べられることはなかった。


実は、その後、私は上長に呼ばれている。
上:「身の上の危険を感じるほど私から怒られた、とAから聞いたが、どうなん?」
私:「私より周りに聞いてみたら客観的意見が分かると思いますよ」


上記のようなエンジニアって今どき普通なのだろうか?だとすると日本の将来は暗いなと思ってしまう。
AD
最近はミドルウェアの設定とかもしている。
で、最近知人がはまったこと。

httpdを2.2から2.4にしたら、BASIC認証でエラーが出るようになった。
困ったねえ。

2.2のパスワードファイルを見ると平文。今時これはないよね。で、調べたら2.4は暗号化されているらしい。

[apacheのパス]/bin/htpasswd -c -b [apacheのパス]/conf/htpasswd [ID] [PASS]
で設定して、解決した。
先日、東京メトロで一日券を買おうとしたら、ない。代わりに24時間券というものになっていた。利用開始から24時間有効、というもの。

従来は朝に購入しようが、夕方に購入しようが、その日の終電までしか使えなかった。それが「東京を一泊する出張がある」というような方にも有り難いだろう。


昔は目で確認する切符、それが磁気になり、ICへと移り変わった。
阪急電鉄だったかがまず磁気にどこの駅から乗ったかの記録をするようにして不正利用(いわゆるキセル)を防止するしくみを導入し効果が高かったらしく、それが各電鉄会社に普及していった。記憶では2000年前後だったように思う。
そのときに時分秒の記録も改札機に入れていたのかは分からないが、JRのイオカードというプリペイド方式で改札機を通せる磁気カードには入札、出札の駅とその年月と時まで(分はなかったかと)カードにプリントされていたように思う。

時はICカードではJR東日本が出入りの駅とその時刻(秒まであったかは定かではない)を外部利用できるようにしようとして問題になったことがあるが、つまりはその時点でかなり細かい情報を吸い上げて溜め込む仕組みはできていた、ということで、改札機はネットワークで接続されているということに「そうだろうな」と思いつつも「どのくらいの規模のネットワークなんだろう?」と思ったことを覚えている。

さて、今回の24時間券は磁気券であるが、改札機側に使用開始を記録する、使用終了をチェックする、の機能を備えていることになる。
システム的にはそれほど難しくないようにも思うが、機器にプログラムを組み込んでいたら対応する改札機がそろうまでサービスできない。そうすると、このシステムって組み込みではないだろう。
では、クライアントサーバーやWebなんだろうか?いや、遅延は許されないだろうから配信されているのでは?と考えたりしている。

どこの鉄道会社のでもいいので、知っている人が居たら教えて欲しい。あ、もちろん、機密ならいいです。
Excelシート 印刷時の微妙なずれの調整

2001.11.15

Excelの印刷プレビューで余白ボタンを押し、余白の境界線を動かすと、0.1 きざみで調整ができる。
ところが、その値が同じであっても出力結果が異なることがある。
どういうことだろう?と余白を調整してみた。すると
・余白を調整し、ページ改行位置が変更になったが、設定値は変わらない
という事象が出た。原因はこれだろう。

こういう事象はVBAで解決することが可能だ。
VBAだと、0.1より細かい値を設定/取得することが可能である。

つまりは「画面UIでは四捨五入なりして調整した値を表示している」ということだろう。

もし、「余白を画面上でこの値になるよう調整する」という指示を出すのなら、そういうことも考慮する必要があるだろう。
印刷ページ数を取得する Excel編 Part1

2001.11.15

データベースのテーブル定義書を生成するツールを作った際のことである。それまでは手作業で作成していて、チェックのため数週間会議室を占有/数人を作業にあてがう、ということを毎年行っていた。
これを、データベース自身の定義から取得し、Excelの表にまとめていくツールを作成するようにした。
このときに見つけた問題。

納品物には通しのページ番号を振る必要があった。当初、Excelに標準であるフッタにページ数を付与する方法で対応しようとしていたが、うまくいかないケースがあった。その原因を追及した際のメモ。

---------------------

Excelで印刷プレビューをした後は、シート上に垂直/水平の改ページ位置が線で表示されるようになる。
この改ページの線の数のうち、印刷範囲のものは、シート名のプロパティで取得できる。
[シート名].VPage 縦の改ページの線の数
[シート名].HPage 横の改ページの線の数

1ページに収まる場合は VPage, HPage とも 0 になる。

よって、ページ数は
( VPage + 1 ) と ( HPage + 1 ) の積
で求まる、と書籍やネット等で紹介されている。

しかし、試してみると間違った値にあるケースがあった。

データベースよりレコードを取得し、その結果をExeclシートに貼り付け、そのレコードが出力された行まで書式を調整(罫線や行の高さ)するものを作ったことがある。

このとき、印刷プレビューをしたとき、ページからぎりぎりあふれないが、後ほんの少しであふれるぞ、というページがあると、上記の ( VPage + 1 ) と ( HPage + 1 ) の積 では想定より数字が大きくなることがあった。つまり、「実ページ数より計算されたページ数が大きい」という状態だ。


やむなくほかの方法を使ったのだが、それはこの記事の Part 2 にて紹介する。
Excelのファイルサイズが大きくなっていく対策

2001.11.14

Excel97においてVBAの修正を繰り返すと、ファイルサイズがどんどん膨らんでいく事象がある。
以下の手順で対応可能である
・Excel2002 SR2 以降でファイルを開く
・VBAを少し修正する(空白をひとつ削除、でもよい)
・保存する

なお、Excel2002 SR2 より前のバージョンで、VBAにてブックを開く/閉じるを繰り返すとリソース不足が発生したことがあった。メモリ管理も含め、Excel2002 SR2 以降は改善されたようだ。

Accessのファイルサイズが大きくなっていく対策

2001.11.15

Access97 でInsert/Delete を繰り返すとファイルサイズがどんどん大きくなる。全く件数がなくても2Mを超えていたるする事象がある。
この場合「データベースの最適化」を行うと良い。
Access2002(Office XP)では「最適化の強化」が謳われていたが、この事象は発生する。
Accessの項目名の制限

2001.11.27

Accessでテーブルを作成する際、項目名(列名)に Date とか Time を使ってはいけない。
テーブルは作成できるのだが、selectしようとするとエラーが発生する。
おそらく、それらはAccessの予約語だからだと思われる。

ExcelからAccessを呼び出す

2001.11.14

ExcelからAccessを呼び出すとき、接続方法を比較した。
1.Jet
2.ODBC(MS-Accessドライバ)

結果、Jetの方が高速であるが、空白値を認めない項目へ空白を設定しようとしたとき、Jetではエラーが戻らないがODBCではエラーが戻ってくる。

デバッグ時はODBCの方がよいようだ。

開発の準備

テーマ:
部屋を片付けていると古い資料が出てきた。手書きのVBAの資料だ。紙は処分したいのでこちらのブログに若干修正しつつ展開する。なお、書いた日付も記載している場合はそれも掲載する。


開発準備(基本の規約)

2006.3.7

現場、経験言語により若干個々人の常識が違う。統一しておくことがメンテナンス性の向上に役立つ。

変数のハンガリアン記法を揃える
・long は lVal なのか lngVal なのか。
・Const 値はどう表記するか。
・変数のスコープがグローバル、モジュール/クラス内の共有、プロシージャやファンクションのローカルでプリフィクスをどう分けるか。
・long や int の範囲を確認しておく。