![]() |
zunbe |
![]() |
|
| [<<先頭] [<前へ] [ 1 2 3 4 5 6 ] [次へ>] [最後>>] | ||
2005/10/11
|
このエピソードの続き。
作ろうとしていたものは、こういう画像。
Yahoo! や goo などで、IDを新規に登録するときに表示される画像である。
こういった用途に使用する事を前提に作成する様に指示しておいたのだが、出てきたプログラムはこうだ。
・CreateImage() を呼び出すと、画像を生成して標準出力に出力する。
まったくダメである。
どこがダメだかわかるだろうか。
当然の事であるが、利用者は画像に表示されている文字をテキストボックスに入力して、送信の操作を行う。
呼び出されたプログラムでは、何らかの方法で画像の元になった文字列(上記の図では、「12020」「30918」)が取り出せるようになっていなければならない。
そうでなければ、ユーザがテキストボックスに入力した文字列と比較できない。
当然のことながら、Yahoo! であれ goo であれ、表示されている画像とは別に、セッション情報がHTML中に埋め込まれている。
つまり、<IMG>による画像の出力と<INPUT TYPE="HIDDEN"> によるセッションIDの出力は、必ずセットで出力される事になる。
社員が作成したプログラムの様な、標準出力に画像が出力されるプログラムでは、この様な事はできない。
画像を取り出すためには、以下の様に記述するしか方法がない。
<IMG SRC="createimage.cgi">
画像は生成され出力されるであろうが、どのような文字列から作成された画像であるのかをプログラムが知る術はない。
どうやっても認証を行う様に構成する事はできないのである。
最低限、以下の様な動作が実装されていなければ、WEBのシステムで使用することはできない。
(1).画像を生成してディスクに保存する。
(2).セッション情報を生成してディスクに保存する。
(3).セッションIDを生成して、プログラムに渡せるようにする。
作成したモジュールを使用して認証を行うページを作成すれば、画像を標準出力に出力するという方法では、目的を達せられない事は一発でわかるはずである。
それに気付かないという事は、社員は、画像を生成するプログラムを作っただけで、実際にそれを使用したページを作っていない事を意味している。
困ったものである。
このエピソードはいかがでしたか? ![]() ![]() | ![]() |
投稿者 zunbe : 2005/10/11 10:46:55 | コメント (0) | トラックバック (0)
2005/10/08
|
今回は、プログラミングの話ではない。
会社に電話がかかってきた。
社員が取る。
電話の相手は「御社のFAX番号を教えてください」と言っているようだ。
社員は、私に向かってこう言った。
「ここのFAX番号は何番ですか?」
へぇ? なんだって?
君は3年半もこの会社にいるんだぞ。
勘弁してくれよ。
このエピソードはいかがでしたか? ![]() ![]() | ![]() |
投稿者 zunbe : 2005/10/08 00:07:23 | コメント (0) | トラックバック (0)
2005/10/05
|
gd を使用した、簡単な画像作成プログラムを作らせた。
うちの社内のサーバは、基本的に余分なライブラリはインストールしていない。
プロジェクトによって、使用するライブラリのバージョンが異なる事があるので、ライブラリによっては、個々にライブラリをインストールしている。
また、社員には、サーバの管理権限(rootのパスワード)を渡していないので、自身の権限でインストールできるディレクトリにインストールしなければならない。
今回は gd を使用するが、gd を使用するためには、少なくとも、libpng、libjpeg、zlib くらいは必要であろう。
また、perl から使用するので、GD.pm なども必要である。
自分のホームディレクトリ配下でコンパイル、インストールを行う事になるが、インストールした後のディレクトリを見てみると…。
-----
~/lib/perl5/5.8.0/gdpm/GD.pm
~/lib/perl5/5.8.0/gdpm/Polyline.pm
~/lib/perl5/5.8.0/gdpm/Image.pm
~/lib/perl5/5.8.0/libpng-1.2.8/lib/libpng.so
~/lib/perl5/5.8.0/GD/lib/libgd.so
~/lib/perl5/5.8.0/zlib-1.2.3/lib/libz.so
:
-----
なんだこのディレクトリ構成は?
どうして、perl 5.8.0 のディレクトリの配下に libping.so、libgd.so、libz.so が置いてあるんだ?
どうして、ライブラリ群が個々のディレクトリの lib に分けて入っているんだ?
社員は、/usr/lib や /usr/local/lib の配下を見たことがないのだろうか?
それらのディレクトリが、どのように構成されていて、なぜそうなっているのか、まったく考えなた事がないのだろうか?
こんなディレクトリ構成では、configure や Makefile.PL が共有ライブラリを見つけられないだろう。
こんなディレクトリ構成では、リンクする時に、共有ライブラリのパスの指定に、死ぬほど苦労するだろう。
要するに、社員は、以下の事を知らない/わからないのである。
・「PREFIX」を指定するという事の意味。
・/usr/lib、/usr/local/lib などにインストールする時の流儀。
--prefix などでディレクトリを指定すると、UNIXでのインストールの流儀を踏まえて、コンパイル/インストールされる。
その流儀を知らないから、とんちんかんなディレクトリ構成になる。
ls、cd、mkdir などのコマンドが使えたところで、UNIXを理解した事にはならない。
セオリー、流儀を知らなければ、正しくシステムを構築する事はできないのである。
このエピソードはいかがでしたか? ![]() ![]() | ![]() |
投稿者 zunbe : 2005/10/05 07:02:26 | コメント (0) | トラックバック (0)
2005/10/04
|
数値を四捨五入するプログラムを作らせた。
出てきたコードは、これだ。
-----
# パラメータを設定
$bval = 1.4567;
$mag = 100.0;
# 四捨五入を実行。
$bval *= $mag;
$nval = int($bval);
$pval = $bval - $nval;
$pval *= 10;
if ($pval >= 5)
{
$nval += 1;
}
$bval = $nval / $mag;
# 結果を表示
print "${bval}\n";
-----
残難ながら、ずんべの脳ミソではこのコードを理解する事ができない。
それ以前に、このコードが正しいかどうか検証する気になれない。
どうしてこんな複雑なコードが必要なのだろうか。
四捨五入の基本となるコードはこれだけである。
これに、丸める桁の処理と、負の値の対応を付加すれば、四捨五入のコードはできあがる。
-----
$bval = int($bval + 0.5);
-----
おそらく、社員が作成したコードは、検索エンジンで探して、どこかのサイトから拾ってきたコードであろうが、プログラマたるもの四捨五入程度のコードは調べるまでもなく頭の中に入っているべきだ。
どう考えても、こんな複雑なコードは必要ない。
このエピソードはいかがでしたか? ![]() ![]() | ![]() |
投稿者 zunbe : 2005/10/04 01:40:02 | コメント (0) | トラックバック (0)
2005/09/29
|
このエピソードの続き。
若いモンの発想はわからん(16)
若いモンの発想はわからん(17)
社員が作っている投入プログラムで投入するデータは、各種調整を行った後の公開用データで、実はデータベースには、調整前の生データが投入されている。
一部調整が入っているので、まったく同じデータではないが、正しい観測年月日で投入されているか、正しい列に投入されているか、などの確認は十分できる。
先に作成した投入プログラムと、この仮データを比較して、データが正しく投入されている事を確認するよう、指示をした。
2ヶ月~3ヶ月程度のデータを抽出して確認するように指示したのだが、いつまで待っても確認結果が出てこない。
どうやって確認してるのかと聞くと、以下のような回答だった。
・元データをシステムの管理画面を1データづつ表示し、目視でデータを確認しています。
ダメだ…。
そんな事をやっていたら、いつまでたっても終わらない。
膨大な観測データの全レコードを目視で確認するバカがいるか。
ふたつのデータをダンプしてExcelでも貼り付け、「条件付書式」でも使って確認すれば、あっという間に確認できるだろう。
同一書式になるようにテキストファイルに出力して、diff を取る事だってできるだろう。
同一書式になるようにテキストファイルに出力して、エディタの比較機能を使って確認する事だってできるだろう。
もっと頭を使って仕事しろよ。
このエピソードはいかがでしたか? ![]() ![]() | ![]() |
投稿者 zunbe : 2005/09/29 01:49:30 | コメント (2) | トラックバック (0)
| [<<先頭] [<前へ] [ 1 2 3 4 5 6 ] [次へ>] [最後>>] | ||