![]() |
zunbe |
![]() |
|
| [<<先頭] [<前へ] [ 1 2 3 4 5 6 ] [次へ>] [最後>>] | ||
2005/08/03
|
今日も、こんな事があった。
先日から作成しているバックアップ・プログラムで、目的のファイルを取得するのに、社員はこんなコードを書いていた。
-----
@files = grep(m/^.*.tar.gz$/, @files);
-----
「これでは、"ABCDEFGXtarXgz"でも対象になってしまうのではないか」と指摘したところ、こんなコードが出てきた。
-----
@files = grep(m/^.*\.tar\.gz$/, @files);
-----
これはいい。
ところが、プログラムの他の部分をよくみると、なぜかこんな修正が入っている。
-----
`tar czf ABCDEFG\.tar\.gz hoge auau`;
-----
何でやねん。
正規表現と単なる文字列を区別できんのか。
このエピソードはいかがでしたか? ![]() ![]() | ![]() |
投稿者 zunbe : 2005/08/03 06:00:56 | コメント (0)
2005/08/01
|
今日も、こんなことがあった。
簡単なバックアップ・プログラムを社員に書かせたのだが、バックアップ対象とするファイルを取得するのに、以下の様な指示を出した。
(1).バックアップの対象はファイルのみ。
シンボリックリンクなどは対象としない。
社員が書いたプログラムは、こうだ。
-----
$folder = '/hoge';
chdir($folder);
opendir(FOLDER, $folder);
@files = ();
while (defined($file = readdir(FOLDER))
{
next if (! -f $file);
push(@files, $file);
}
closedir(FOLDER);
-----
ちょっと待て、何で chdir なんかしてるんだよ。
社員に聞いてみると、こうのたまう。
ファイルかどうかの検査を -f で行っているのですが、うまくできませんでしたので、この様にしました。
当たり前だろう。
readdir で返ってくるのはファイル名だけだ。
パスを加えて -f をしなければ、正しく動作するはずがないではないか。
それを解決するために、chdir するとは、いったいどういう発想やねん。
若いモンの発想はわからん。
このエピソードはいかがでしたか? ![]() ![]() | ![]() |
投稿者 zunbe : 2005/08/01 20:27:19 | コメント (1)
2005/07/27
|
今日も、こんな事があった。
PostgreSQL 7.2.3 の pg_dump で出力したデータを、PostgreSQL 7.4.3 に読み込ませるためのコンバータを書かせた。
コンバータといっても、たいしたことはない。
CR と LF を、適切に変換するだけである。
具体的には、こうだ。
以下のデータを、7.4.3で読み込めるようにコンバートしたい(カッコ内は、生コード)。
----- 7.2.3 データ -----
COPY "table_hoge" FROM stdin;
AA
BB(CR)\
CC
\.
-----
このデータは、2レコードを投入する。
1レコード目は、「AA」
2レコード目は、「BB(改行)CC」
これを、7.4.3 で読めるようにするには、以下の様に変換すればよい。
----- 7.4.3 データ -----
COPY "table_hoge" FROM stdin;
AA
BB\r\nCC
\.
-----
この程度のフィルタ・プログラム、30秒で書ける。
ところが、社員は、3時間かけてこんなプログラムを書いた。
-----
#!/usr/bin/perl
foreach (<STDIN>)
{
s/\r//g;
s/\\//g;
s/\n/\\n/g;
print;
}
-----
ぜんぜんダメである。
(1).s/\r//g;
勝手にデータを削除するなよ。
(2).s/\\//g;
なんでデータから、すべての「\」を削除してしまうんだよ。
(3).s/\n/\\n/g;
こんな事をしたら、全部の行がくっついてしまうではないか。
要するに、社員は、以下の事が理解できていないのである。
・2レコード目のデータ中に含まれている改行は、「\」でエスケープされている。
こんな程度の事、プログラムを作成するときに、説明など必要なのだろうか?
あまりにも基本的な知識が無さすぎる。
このエピソードはいかがでしたか? ![]() ![]() | ![]() |
投稿者 zunbe : 2005/07/27 23:30:30 | コメント (0)
2005/07/20
|
いかん、独り言のはずが、だんだんダメダメ・プログラム集になってきた。
このページを読んでいる皆さん、「こんなプログラムを書くヤツがいるんだな。あっはっは。」程度で笑い飛ばしてくれ。
先に指示したフィルタ・プログラムで、特定の情報をエラーに出力するように指示しておいたのだが、社員はこんなコードを書いた。
-----
print FILE sprintf("%07d", $no).":".sprintf('%X', $b)."\n";
-----
何だこの記述は?
「正しく sprintf() を使ったコードに書き直しなさい。」と指示。
次に出てきたコードは、こうだ。
-----
print FILE sprintf("%07d:%X\n", $no, $b);
-----
まぁ、当然、こうなるな。
そして、「変数 $b の出力は、ケタ数をきちんと合わせて出力しなさい。」と指示。
その指示に対して出てきたコードは、こうだ。
-----
print FILE sprintf("%07d:%02s\n", $no, sprintf("%X", $b));
-----
いったいぜんたい、何をどう考えたらこうなるのだろうか。
若いモンの発想は理解できん。
このエピソードはいかがでしたか? ![]() ![]() | ![]() |
投稿者 zunbe : 2005/07/20 09:46:28 | コメント (2)
|
最近、年のせいか、愚痴っぽくなった。
しかし、あまりの発想の貧弱さ、あまりの知識の無さには、正直言って腹が立つ。
今日も、こんな事があった。
先に指示したフィルタ・プログラムで、社員は以下の様なプログラムを書いた。
-----
open(EOUT, '>hoge.txt');
foreach (<STDIN>)
{
:
if (エラー発生?)
{
print EOUT "エラーの内容";
}
:
}
close(EOUT);
-----
ずんべは、このプログラムに対して、以下の様な修正指示を出した。
エラーの出力がバッファに溜まったままプログラムがこけると、エラーのダンプが無いまま終わってしまい、発生したエラーの状況が把握できない。
エラーの出力はバッファリングしないように修正しなさい。
この指示に対して、社員が行った修正は、こうだ。
-----
foreach (<STDIN>)
{
open(EOUT, '>>hoge.txt');
:
if (エラー発生?)
{
print EOUT "エラーの内容";
}
:
close(EOUT);
}
-----
我が目を疑った。
正気で書いたコードとは思えない。
何百メガもあるデータを1行読むたびに、エラーファイルを毎回オープンし直すだと?
これでは、処理速度が遅すぎて、使い物にならんではないか。
マシンにも余計な負荷がかかる。
若いモンの発想は理解できん。
このエピソードはいかがでしたか? ![]() ![]() | ![]() |
投稿者 zunbe : 2005/07/20 09:05:19 | コメント (0)
| [<<先頭] [<前へ] [ 1 2 3 4 5 6 ] [次へ>] [最後>>] | ||