Hatena::ブログ(Diary)

真のエンジニアはこんなこと書かない

2016-06-10

IP競合

01:13

ネットワーク機器がうまく通信できないときの常套手段と言えばPingですね。

最近は割と、システム系じゃない方でもPingコマンドはさっと試せる方が増えてるなぁ〜って思います。(ちょっと前は、コマンドプロンプトの真っ黒な画面を見ただけで、下手するとPCが爆発するんじゃないかと思ってた方が多かったような)

なので、最近はLAN関連の問い合わせを受ける時も、Pingまでは既に試しているという方が多いのですが、割とPingは通るのに通信できないという相談も結構受けます。なので、それだと不十分な点を以下もう少し突っ込んで。

1.「Pingが通る」→「対象の機器は正常に繋がっている」は間違い

これは、対象の機器とIPが競合している機器が他に存在する場合にも上記の結果になり得る為ですね。なので、

Pingが通る」→「対象の機器のLANを切断したらPingが通らなくなる」というプロセスも必要です。ですが

2.「Pingが通る」→「対象の機器のLANを切断したらPingが通らなくなる」→「故に対象の機器は正常に繋がっている」も間違い

これはちょっとした落とし穴ですが、対象の機器とIPが競合している機器がネットワーク上に存在し、かつその機器がファイヤーウォール等でPingをブロックしている場合にも起こり得てしまいます。なので、あと一歩踏み込んで

3.「Pingが通る」→「対象の機器のLANを切断したらPingが通らなくなる」→「続いてarp -aコマンドを叩いた際に表示されたIPMACの組み合わせが、対象の機器である、もしくは組み合わせそのものが表示されない」→「故に対象の機器は正常に繋がっている」

・・・まで行けばかなり堅いですね。競合機器があった場合、ファイヤーウォールがかかっていようがいまいがIPMACの紐づけだけはされるので、ここで対象機器のIPが唯一か否かが判定できます。

あとは、Pingの調査をしている時に競合機器の電源が落ちていたとか、訳の分からん設計のMACアドレスフィルターがかかっていたとかでもない限りは大丈夫でしょう。


今日は大したことないことを大したことあるように見せるために真面目モードです。

2016-04-25

履歴テーブルというもの

02:06

ちょっとソフトの検証を手伝うことになりまして。

自分のが検証されるのは嫌ですが、人のを検証するのは大好きです(性格悪)

ソフトの内容は、まあよく有る作業の計画をインプットしてその実績をとっていくというだけのものなので、一通り業務イメージと同じ手順で作業をしてみて、実際に履歴が取れているかを確認・・・うん、取れてるね。

で、念の為ソフトの画面からだけではなく、データベースの中も確認して…


……あれぇ……?


何故だ?履歴テーブルのフィールド数が、履歴画面に表示されているフィールド数より圧倒的に「少ない」

……これは嫌な予感。とりあえず他の検証結果を見る以前にプログラマに連絡。

僕「あのー、この履歴画面って、この履歴テーブルからどーやって作ってるんです?」

プ「ああ、履歴テーブルと計画データテーブルをJOINし……」

僕「おおおおおおおおおおい!!!」

プ「何か?」

僕「いや、じゃあ計画データ消したらどうなるの?」

プ「それはデータ不整合を起こすので、やらないで下さい」

僕「いや、でも仕組み上計画データは割とすぐ消すし、システム上も計画データを先に消すことはできるんですけど」

プ「それは運用でカバーしてください」


・・・・・・えーと


ちょっと自分の常識がおかしいのかどうかが分からなくなったので以下愚痴。


まずそもそも履歴とは何か。それは業務を行った結果、システムで言えばログであって、仕様として特別に許可された場合を除き改変されてはならない物だと思ってる。それはつまり、設計時点で他の作業や動作において極力影響を受けないように考慮するということで、そう考えると必然的に履歴テーブル一つで、履歴に関する全ての情報が網羅できるように作るのが一番安全なんじゃないかなぁと思ってる。(大きいシステムでは知らないけど)

それはつまり、履歴テーブルのあるフィールドが別のテーブルに依存する形をとらないようにするということで、ましてやJOINなんてそうそうするもんじゃないのではと思ってる。(履歴テーブルを履歴以外の目的で転用する場合は別ですが)

例えば、履歴に担当者を残したいと思ったら、やっぱり担当者コードと担当者名両方を履歴テーブル内に別個のフィールドで持つ方がデータ的には安全だと思う。担当者コードだけを持ち、逐一担当者マスタを参照して担当者名を表示させた方が、データ量的には少なくて済むのは分かるんだけど、例えばその社員コードという概念には臨時社員コードという意味も含んでおり、短期間に同一コードが使いまわされるケースもあるとしたらどうだろう。これは、ある時期には入社している筈の無い社員名がその時期の履歴画面に表示されてしまう。これは「履歴」としての価値を持たないデータだと思う・・・んだけどなぁ・・・。

要件定義として「こんなデータが履歴データとして表示されてほしい」というところまでは提示してあったみたいだけど、データベースの設計までは提示していない・・・ってか、そこの設計って一般的に言ってSEの仕事なのかしら、それともPGの仕事なのかしら・・・

まあ、PGは仕様通りにソフト作るのが第一だけど、自分がそもそも何をどのような目的で作っているのかを全く意識しなくていいってわけじゃないと思うんだけどなぁ・・・

てかこんな危険な設計で「運用でカバー」とかしれっと言わんで欲しいなぁ・・・ってこれって贅沢?

2015-04-07

OSがインストールできない

23:32

Windows7インストールして貰いたい!

と言われてしまったので、やりました。

出来ませんでした。

・・・なんでクソ忙しいときにこういうのにぶつかるかね。

以下エラーメッセージ

「このディスクにWindowsインストールすることはできません。このコンピューターのハードウェアでは、このディスクでの起動がサポートされていない可能性があります。このコンピュータBIOSメニューで、このディスクのコントローラーが有効になっていることを確認してください」

うーん、意味が分からない。

取り敢えずHDDをフォーマットしてみた。

出来ませんでした。

・・・え、フォーマットできないって・・・

とりあえずディスク一覧にはちゃんとHDDは表示されているので、ドライバが無いとかそういう話ではないし・・・

仕方ないので、BIOSを起動してHDDの状態を調べてみた。

ちゃんと認識されてるしなぁ・・・ちゃんとMASTERにもなってるし。

仕方ない、HDDドライバを入れ直してみればいいのかしらと思ってやりました。

出来ませんでした。

・・・オイコラ。いい加減にせいよ。

ってか、HDDじゃなくてSSDだったのね。まあそこは特に重要ではないけど。

仕方ない、別のPCでSSDのフォーマットができるかと思って、PCを開けてみた。

ガラン

・・・はて?何か落ちた・・・うを!SSDだ!

おいおい、しっかり取り付けとけよ

・・・ってか、

ガムテープで留めとくなよ!

SSD用のブラケットが無かったからって凄い事するな。誰だこれ組み立てたの。

ん?あれ?もう1つSSDがついてるな・・・って、あ、RAIDね。

・・・こっちのSSDもガムテープで留められてた。

あー、つまりこういうことですか。

RAID1の為にSSD2基の構成にした

→けど、ブラケットが無かったのでガムテープで固定した

→そしたらPCを移動した際に片方外れてしまった

→その為、ディスクとして認識はするけど稼動させられないという状態になった

→結果、OSインストールできねぇ

SSDをちゃんと接続したら、あっさりOSインストールできました。ちゃんちゃん。

しかし、これ後で車で運ぶんだけど大丈夫かしら・・・

いちおー、ガムテープで留めなおしたけど・・・

2014-11-16

久々にバッチVBSのお仕事

22:03

「テキストデータ内の特定の条件に合致するレコードを除去して再テキスト化して欲しい。」

・・・なんて依頼を受けてしまった。

そのテキストデータをシステムに取り込む際、余分なデータは排除したいらしい。そんなのそのシステムの開発者に言えばいいのに・・・って、はいはい予算ですね。

まあ、エクセルVBAで取り込んで除去して吐き出し直せばいいやって思って中を見てみたんだけど

・・・固定長でやんの・・・

さて困った。可変長だとばっかり思ってたので

1:エクセルに取り込む

2:要らんレコードフィルタリングで除外する

3:その上で再度出力する

ってのを考えてて、15分くらいで終わるだろうと思ってたんだけど……

いや、取り込むのは対したこと無いんだけど、出力がね……。ファイルレイアウト通りに各セルをスペース補填やら前ゼロやらしてあげないといけないし、1レコードの項目数が70近くあるので、そんなにソース内に項目定義作るのもやってらんない。

・・・こりゃ、テキストデータ内を直接調べて、除外したくないレコードだけを随時別のテキストファイルにまるごと書き出す方が楽だし安全だな。(コーディングミスって下手にバイトずれでもしたら目も当てられないし)

だったらいちいちエクセルも起動させないで、VBSファイルをダブルクリックする方が、使うほうも楽よねぇ(ファイルパス固定だし)

ってことで、

1:ファイル開く

2:1レコードを読む

3:除外条件となる特定のバイト目を調べる

4:除外条件でなければ、別のテキストデータに書き出し

5:次のレコードを読む(以降3〜5繰り返し)

6:最後に、元のファイルを別の場所に置き、新たに書き出したファイルを元のファイルにリネームでおk

うん、これならたいした時間も食わんだろう。

・・・と思ったんですけどねぇ・・・

途中に全角文字入ってるの忘れてた。3の処理をやるのに、単純にMid関数じゃダメだ。とはいえ、テキストデータがシフトJISなので、MidB関数も使えない。えーっと確か、別件でバイト数をカウントする処理を作るのに同じ問題にぶち当たったよなぁ・・・あのスクリプトどこに行ったかなぁ・・・そっからコピーして作り直せば問題ないよなぁ・・・

って、探すのに1時間かかってしまったorz

エクセルで取り込んで固定長で吐き出すやり方より時間かかっとるんじゃなかろーか・・・まあ、レコード丸写しの方が精神的には楽だからいいけど。

まあ、取り敢えず見つかったスクリプトを抜き出して、関数化して動作確認してと・・・あーできたできた。ほんと固定長嫌い。

なお、シフトJISのバイト数変換は、Left関数で左から1文字ずつ調べていき、その1文字が1バイトか2バイトかを判定し、その結果を累積していけば良い。

1バイトか2バイトかの判定は、アスキー変換したその文字に対して0xFF00で論理積をとれば、それが1バイトだったら論理積は0、2バイトだったら0以外になることで判別できる。

If Asc(その文字) And &HFF00 = 0 Then

その文字のバイト数 = 1

Else

その文字のバイト数 = 2

End If

的な(まともに書け)

2014-11-13

WindowsCE

22:47

ちょっと仕事でWindowsCEを使ったPDAに関わった。

初めてって訳じゃないけど、ちょっとクセがあるので余り関わりたくなかったんですが・・・まあ、仕事なんでしょうがないですかね。

このWindowsCEWindowsというだけあって、それなりに普通のWindowsと似ているところも多い。

WinCEのいいとこ】

デスクトップ、コントロールパネル、Program Filesと言った基本概念が通常のWindowsと同じ。

アイコンやウィンドウメニュー名称等がWindowsと同じ。

Windowsのファイル共有(SMB)が使用できる。

・.NETで普通にアプリケーションを開発できる。

OFFICE関連ファイルを扱える。

SQLServerに直接接続できる。

リモートデスクトップが使える。

Windowsターミナルサービスを利用できる

などなど

しかし、そんな見た目にだまされてはいけない。結構システム屋泣かせである。

WinCEの悪いとこ・ダメなとこ・信じらんないとこ】

1:ネット上に殆ど技術情報が落ちていない

2:共有フォルダの指定にIPアドレスが使用できない

3:トラブルシューティングツールが貧弱

4:販売メーカによって実装がバラバラ

5:充電しないまま放置すると工場出荷時状態に戻ってしまう

まず1。

そもそも、MicroSoftのサポートページが無い。組み込み式OSだからなのか、TechNetのような一般向けサイトが無い。おかげで、何かトラブッたら、大概手探りから始めなければならない。

その2。

結構みんな良くやってると思う、共有フォルダ指定時の「\\192.168.xxx.xxx」のような指定の仕方ができず、全部「\\[コンピュータ名]」で行う必要がある。

DNSが無い環境では、IP直指定を信条としている人も多いと思うけど、それが出来ない。なので、ワークグループ環境で使うのが不安。すっごく不安。

Windows7では知らないけれど、WindowsXPのワークグループ環境で、ネットワーク上のPCのブラウジングがたまに失敗する(ネットワーク上のPC名の一覧を取りまとめるPCが不在になってしまう現象)を経験している人にとってみれば、勘弁して欲しい仕様である。

その3。

上の仕様を踏まえたうえで、何故かnslookupが標準でサポートされていなかったりする。何故だ。それとも俺が関わった機器の実装がたまたまそうだったのか(だとしてもアホな仕様だと思う)。

※仕方ないので、名前解決されているか否かは、DOSプロンプト起動後に Ping [コンピュータ名] で確認しているんだけど、なんかもっと正規の方法無いんかしら

その4。

これも結構困る。特に、無線LANの設定に関してはかなりバラバラで、同じものを見たことが無い(CEのバージョンにもよるのかもしれないけれど)WinCE無線LAN環境下で使われることがほぼ当たり前だと思っているので、OS内に標準設定画面を持てない物なのかしら。

普通のWindowsでも、専用設定ツールプレインストールされていたりする場合もあるけれど、あえてソレを使わずにWindowsが持っている設定画面が使えるわけだし

その5。

これも困る。なんせ、機械が壊れた場合の予備端末を用意しておくことが出来ない。壊れたときを想定した予備端末を常に充電状態には普通しない。

フラッシュディスク側にアプリケーションやデータを置くようにすればある程度被害は防げるが、それにしてもデスクトップスタートアップ等や各種設定は平然とクリアされてしまう。

実装によっては、バックアップリストアツールが用意されているが、それにしたって面倒だし、すんなり予備端末と入れ替えと言う訳にはいかない。

うーん、せめて2と3はどうにかならんものなのかなぁ。

・・・まあ、WinCEがいつまで存在するのかも分からないけどさ。

Connection: close