プログラム質問箱一括表示
[表示範囲:617〜667][スレッドモード]
[NEW]
フォロー記事投稿
記事のキャンセル
From: 三葉工房の管理者
<nature-create@amy.hi-ho.ne.jp>
Subject: エラーの原因(黒幕的存在がいた!)
Date: 1999/02/05 17:10:59
エラーの原因(黒幕的存在がいた!)
エラーの原因(黒幕的存在がいた!)
|
---|
先程の三葉工房です。色々とアドバイスありがとうございます。 ようやく,ユーザーパスワードのエラーの原因を突き止めました。
foreach文
foreach $keymatch(@keymatch){
($mail,$yourname,$date,$gurl,$hpagename,$coment,$password)=split(/&&/, $keymatch);
$password=~ s/\n//g;
if($in{'pawin'} eq $password){
$keyflag=$keyflag+1;
}}
という形の投稿前の書き方で正しかったです。では,何がいけなかったか?
それは,全く予想のない存在でした。
それは,キーワードでした。
私の場合,
"$in{'要素1'}&&$in{'要素2'}&&$in{'要素3'}\n"で,unshift方式で
いきなり,書き込みファイルから新規記事が最上段にプリントされる書き方を
してますが,パスワードの要素の位置がラストと$in{'要素3'}に当り,
その要素の右側に改行コードが書かれてして,それを,ボードに出力する場合,
foreach文とsplitを使いますが,splitの分割対象が"&&"で"\n"では,無く,
それにより,$in{'要素3'}に\nと一体になった要素が作られてしまい,そして,
その要素の一番最後のにだけ\nがないので,その最後のパスワードだけしか
マッチせず,他のは,"要素3"と"要素3\n"なので,一致せず,それに気付く事
なく,数日も立ち往生していました。
それに,気付きのその\nを$password=~ s/\n//g;で省いて目的のユーザーパスワード
システムは,動かす事が出来る様なりました。
今は,変更システムの研究に励んでいますが,変更記事をunshiftを利用して,
トップに新たに上書きする形は簡単に出来るそうです。
それでは,又,不明な点がありましたら,今度こそ謙虚な態度で,投稿させていただこうと
思います。
御迷惑お掛けしました。 |
[RE]
フォロー記事投稿
記事のキャンセル
From: Yasu.F
<yasuf@big.or.jp>
Subject: Re: エラーの原因(黒幕的存在がいた!)
Date: 1999/02/07 02:35:34
Reference: mesh.program/00617
余計なHTMLタグは書かないでください。非常に読みにくいです。
以下、邪魔なタグは全て削除して引用します。
それから、#614でにあさんがおっしゃった
| 関連する話題は、新たにスレッドを起こさずに、フォローアップ記事として書いて下さい。
という文章はお読みになったのですか? 理解できないなら質問してください。
これに従うことができないのであれば、何故できないのか説明してください。
もしくは、ひとの話を聞く気が無いのならそうおっしゃってください。
そうすれば、今後わたしがあなたの投稿なさった記事を一切読まずに無視する
ことができます。
わたしは#607や#613で、「あなた」に対して、「三葉工房の管理者さんに対して」、
いくつかの質問を投げかけているのですが、あなたはそれに対して何ひとつ
答えようとしませんね。
2月5日に、三葉工房の管理者さんは書きました。
>先程の三葉工房です。色々とアドバイスありがとうございます。
そのアドバイスを生かそうという気は起こらないのですか?
>foreach文
もういちど、#607で書いたことを引用します。
| それと、ブロック("{" と "}" で囲まれた部分)などは
|
| sub hoge {
| if ($foo == $bar) {
| &baz(q{I said, "You said, 'She said it.'"});
| }
| else {
| &zot('abc', 'def', 'xyz',
| $something[$foo + $bar] / $anythong{$qux . $quux});
| }
|
| @sorted_array = sort { $a <=> $b } @array if $todo{'sort'};
| }
|
| のように字下げして書くことを強くお勧めします。ブロックの中を全く字下げ
| していないと、プログラムの制御構造の流れが追いにくく、とても読みにくいです。
こうすると不都合であるという理由があるのでしたら、後学のためにもご教示
いただければ幸いです。
>という形の投稿前の書き方で正しかったです。では,何がいけなかったか?
あなたが、Perl(というより、プログラミングに必要な基礎知識そのもの)を
ほとんど理解できていないのに、いきなり本格的なCGIプログラミングを
始めてしまったことでしょう。
>それは,キーワードでした。
何の「キーワード」ですか?
>"$in{'要素1'}&&$in{'要素2'}&&$in{'要素3'}\n"で,unshift方式で
「unshift方式」とは?
>してますが,パスワードの要素の位置がラストと$in{'要素3'}に当り,
何の「ラスト」?
「要素の位置」がハッシュ(連想配列)の要素に「当る」とは?
>その要素の右側に改行コードが書かれてして,それを,ボードに出力する場合,
どの「要素の右側」?
「要素」の「右側」ってどこ?
>それにより,$in{'要素3'}に\nと一体になった要素が作られてしまい,そして,
>その要素の一番最後のにだけ\nがないので,その最後のパスワードだけしか
どの「要素の一番最後」?
どの「最後のパスワード」?
>マッチせず,他のは,"要素3"と"要素3\n"なので,一致せず,それに気付く事
「"要素3"」と「"要素3\n"」って、それぞれどこから出てきた文字列?
…お願いですから、あなただけが理解できるような暗号や隠語や暗喩や
略記表現を乱発するのはやめてください。
# いや、何が言いたいか何となく分かる部分もあるのですが、
# 日本語として意味不明な個所が多すぎます
## 言うなれば「-wで警告がぼろぼろ出るPerlプログラム」のようです:)
>それに,気付きのその\nを$password=~ s/\n//g;で省いて目的のユーザーパスワード
別にそれでもいいですけど、まずラクダ本を chop や chomp などを
キーワードに探してみてください。
>今は,変更システムの研究に励んでいますが,変更記事をunshiftを利用して,
Perlの「研究」には励まないのですか?
ラクダ本を読むとか、そこに書いてあることを手許のマシンにインストール
されたPerlで試してみるとか、参考書のコード例をちょっとずつ変えて実行
してみるとか、変更前後で実行結果が変化したら(あるいは変化しなかったら)
それはなぜなのか考えてみるとか、他人の書いたコード(例えばうぇぶ会議室)を
読んでみるとか、そこで使われているテクニックを盗むとか。
>それでは,又,不明な点がありましたら,今度こそ謙虚な態度で,投稿させていただこうと
>思います。
まずは「Perlに対して」もっと謙虚になったほうがいいような気がします;)
[NEW]
フォロー記事投稿
記事のキャンセル
From: 三葉工房の管理者
<nature-create@amy.hi-ho.ne.jp>
Subject: Yasu.F様へ(アドバイスを提供していただいた方達への御報告をしただけなのに)
Date: 1999/02/07 10:58:14
エラーの原因(黒幕的存在がいた!)と言う記事は,今回の質問の対象であった
長い事完成出来なかったユーザーパスワードのマッチプログラムが出来る様に
成った事をただ,アドバイスをしていただいた方達へ御報告の為だけの投稿です。
配列の此処が不都合な性格と言う自分本位にプログラムが出来ない感情的な
記事とは,全く違います。
不明な点を質問して,それが出来る様になった事を報告するのは,質問者と
しての礼儀です。ですから,ただそれだけの事を行っただけです。
アドバイスを提供していただいた方達に対して,礼儀でもある御報告を
投稿して何がいけなかったのでしょうか。
確かに,まだ駱駝本は,うまくなじめませんが,それを読み学ぶと言う意見には,
私も賛同で,片道1時間以上の電車の中でも読んでいます。
そして,split(" ",$hoge)=$rehogt;と言う関数の使い方も試して見ました。
改行で区切られている配列には,有効です。
確かに,プログラムが出来ないからって,配列の此処が不都合な性格と言う様な
記事を投稿するのは,悪かったと反省してます。
それでは,失礼します。
[RE]
フォロー記事投稿
記事のキャンセル
From: Yasu.F
<yasuf@big.or.jp>
Subject: Re: Yasu.F様へ(アドバイスを提供していただいた方達への御報告をしただけなのに)
Date: 1999/02/08 02:47:11
Reference: mesh.program/00619
2月7日に、三葉工房の管理者さんは書きました。
> 不明な点を質問して,それが出来る様になった事を報告するのは,質問者と
>しての礼儀です。ですから,ただそれだけの事を行っただけです。
>
> アドバイスを提供していただいた方達に対して,礼儀でもある御報告を
>投稿して何がいけなかったのでしょうか。
どうも勘違いなさっているようですね。
わたしが言っているのは「報告記事なんて書くな」ということではありません。
「他人に分かりやすい記事の書き方をしてほしい」ということと、もうひとつは
「自分に向けられた質問には答えてほしい」ということです。
「他人に分かりやすい記事」というのは、例えば「分かりやすい日本語で書く」
「自分たちの周囲だけでしか通じないような "方言" は、なるべく使わない」
「相手が自分と同じ知識や価値観を持っていることを前提にしない」などと
いったことはもちろんですが、それだけではありません。
例えば、
○○というソフトをインストールしてみましたが動きません。
どうすれば動くようになるのでしょうか? 教えてください。
という質問記事は「最悪」なもののひとつです。
この記事の中には、有用な情報が何ひとつ含まれていません。
# これは極端な例ですが、しかし最もよく見られる「悪い質問記事」の一例でも
# あります
この手の質問を受けた場合、それに答える側にとっては、
1. 質問に対する適切な回答を、いろいろな資料の中から探すなどして調べる
2. それを、質問者にも分かりやすいような形の文章にまとめる
という通常の手順の前に、
0. 「どういう環境で、どういう操作をしたら、どう動かないのか」などの、
回答を見つけるために必要な情報を、質問者とやりとりしながら引き出す
という余計な手間が増えてしまうことになります。
質問者が最初から必要な(必要だと思われる)情報を提供していれば、こんな
手順は発生しないのですから、これは「質問者としての礼儀」に欠けています。
答える側としては、いちいちこんな非生産的なことのために労力や時間を浪費
したくはない、ということで
1'. 答えない
という手順を踏むひとも少なくありません。これでは、質問する側にとっても
結局損ですよね。
「読みづらい質問記事」に関しても同じことが言えます。
もうひとつ。あなたは#618の
| わたしは#607や#613で、「あなた」に対して、「三葉工房の管理者さんに対して」、
| いくつかの質問を投げかけているのですが、あなたはそれに対して何ひとつ
| 答えようとしませんね。
という「*あなた*への」問いかけにも、全く応じようとしませんね。
そして、#614の
| 関連する話題は、新たにスレッドを起こさずに、フォローアップ記事として書いて下さい。
という要請(あるいは「アドバイス」)も、相変わらず無視したままですね。
あなたは「質問者」、「質問をする側」なのだから、自分が受けた「質問」に
答える必要は無い、ということでしょうか? せっかく受けた「アドバイス」を
無視しても構わない、ということなのですか?
あなたは相手に対して質問しているのですから、相手があなたに質問した
ときには、可能な範囲で答える、というのが、「質問者としての」最低限の
「礼儀」ではないですか?
> 確かに,まだ駱駝本は,うまくなじめませんが,それを読み学ぶと言う意見には,
>私も賛同で,片道1時間以上の電車の中でも読んでいます。
おお。がんばってください。
ラクダ本にはPerlの非常に多様な機能のほぼ全てが記述されているため、
他の解説書と比較してもレベルが高く、難解な一面もありますが、それだけに
有用な情報がぎっしり詰まっています。
読破は大変でしょうが、健闘を祈ります:)
ちなみに、いきなりラクダ本ではきつい、という向きのために、姉妹篇として
R.L.Schwartz,T.Christiansen,近藤嘉雪訳,「初めてのPerl 第2版」,
オライリー・ジャパン,1998,ISBN4-900900-81-8
という入門書もあります(わたしは別にO'Reillyの回し者ではありません)。
ラクダ本自体は、プログラミングなどに関するそれなりの基礎知識を必要と
しますので、まずはこちらで基本的なPerlプログラミングの手法を身に
付けてからラクダ本に進む、という手順もいいかも知れません。
> そして,split(" ",$hoge)=$rehogt;と言う関数の使い方も試して見ました。
よくわかりませんが、splitって代入式の左辺に置けるものなんですか?
おそらく、やりたいのは
@fields = split(" ", $hoge);
では?
[RE]
フォロー記事投稿
記事のキャンセル
From: 三葉工房の管理者
<nature-create@amy.hi-ho.ne.jp>
Subject: Re: Yasu.F様へ
Date: 1999/02/08 10:57:05
Reference: mesh.program/00621
YASU様へ,
三葉工房です。
つい,この様な記事を投稿して済みません。
投稿後,もう一度,YASU様の記事を読み,おっしゃってる事が理解出来たので
消去しようとしましたがパスワードをメモしなかったので,そして,にあ様へ
も昨日の午前中にこの記事を消去する様に頼んだのですが,結局,一日中残っ
てしまいYASU様の目に触れてしまう結果なりました。
おっしゃてる事は良く理解出来ました。
1.質問に答える
2.次の処理プログラムの開発の前にPerlについての勉強会(学習)を行い
perlの基礎を理解する。
3.分かり安い記事で投稿する
ですね。
時間を作り,"例えば,変更システムの$***が出来ない"と言う様な質問を
投げかける前に,質問に関しての回答を必ずしようと思います。
自分本位のコメントばかりで本当に済みませんでした。
[RE]
フォロー記事投稿
記事のキャンセル
From: 三葉工房の管理者
<nature-create@amy.hi-ho.ne.jp>
Subject: Re: Yasu.F様へ(回答コメントを2月3日の辺りにフォロー投稿しました。)
Date: 1999/02/08 12:44:52
Reference: mesh.program/00622
2月8日に、三葉工房の管理者さんは書きました。
>YASU様へ,
>
>三葉工房です。
YASU様の御質問への回答コメントを2月3日の辺りにフォロー投稿しました。
わかににくい位置投稿されたので,それをお知らせする為だけに投稿しました。
[RE]
フォロー記事投稿
記事のキャンセル
From: 三葉工房の管理者
<nature-create@amy.hi-ho.ne.jp>
Subject: Re: 不都合な配列の性格に阻まれて(回答します。)
Date: 1999/02/08 12:40:46
Reference: mesh.program/00607
三葉工房です。既に5日前の投稿ですが,YASU様の御質問にお答えします。
A.に続く文章が回答です。
色々と,本当の礼儀の大切さについていい勉強になりました。
どうもありがとうございました。
>>簡易スクリプト(配列の性質)
>
>martとかgghとかsdとかdfrとかは何か意味のある単語や略語なんでしょうか。
>何のための変数なのか、もっと分かりやすい名前を付けたほうが読みやすいし、
>保守やデバッグが楽じゃないかと思うのですが…。
A.これは,MacParl上のテスト用で,適当にmartとかgghとかの名前を付けただけです。
>>print "$dfrのはずが$gghの$nrの$dhy\n";
>
>というのをぱっと見て、どういう情報を出力しようとしているのか分かりますか?
A.適当な称号を使っているので,自分か,若くは,よほど簡単なプログラムでなければ
分からないと思います。
>それと、ブロック("{" と "}" で囲まれた部分)などは
>
> sub hoge {
> if ($foo == $bar) {
> &baz(q{I said, "You said, 'She said it.'"});
> }
> else {
> &zot('abc', 'def', 'xyz',
> $something[$foo + $bar] / $anythong{$qux . $quux});
> }
>
> @sorted_array = sort { $a <=> $b } @array if $todo{'sort'};
> }
>
>のように字下げして書くことを<STRONG>強く</STRONG>お勧めします。ブロックの中を全く字下げ
>していないと、プログラムの制御構造の流れが追いにくく、とても読みにくいです。
>
># 少なくとも、前に投稿された例えば「<A href="00580.html">徹底的な…</A>」などのスクリプトを
># 目にしたときは、ぱっと見ではどこからどこまでがひとつのサブルーチン
># なのかすらさっぱり分からず(今でもあまり把握していませんが)、読む気も
># しませんでした
A.そうですね。プログラムは,分かり易く書くべきと思います。だんだん,プログラミングに
慣れるに従ってメチャクチャになりましたので。
>
>ラクダ本の第2版(背表紙の青いほう)をお持ちなら、いちど「8.4 プログラミングの
>書法」(pp.626-)あたりに目を通してみてください。
>初版(背表紙の赤いほう)にも同じような内容があったはずですが、いま手許に
>無いので何処に載っていたかはわかりません。
A.プログラミングの書き方の基礎が記述されていました。
$dfr=@newmartと言う形で,$dfrの値は,しっかり配列の値の合計値の16と
>>出力され,その配列を更に@fft=@newmartと言う記述で@fftに代入して,$dhy=@fft;で
>
>16は「配列の値の合計値」ではなく、単に配列の要素の数ですね。
>
># 三葉工房の管理者さんにとってはそういう意味なのかも知れませんが、
># 少なくともプログラミング上の一般的な用語としては、両者は違うものを
># 意味します
>
># ちなみに、何故「17」ではなく「16」なのか理解してます?
A.配列は,C Languageと同じく0から数えるから。17は,$arrycnt=@arryと言う
形の配列の値の合計値を数えている。
>>という書き方の様に$martの変換前の状態を文字変換タグで配列の('値','値')に変換して,
>>変数のみで配列に代入するだけだと,$ggh=@martと言う形で配列の合計値を算出すると
>>値は1で,@mart=@mart,$nr=@martとしても$nrの値は1で,スクリプトの終わりの方の
>
>いくら文字列としてリスト(配列)に見えるように加工しても、依然として
>それは単なる文字列にすぎないからです。
>
># @array = $scalar という式が一体どういうことをやっているのか、
># よ〜く考えてみてください
>
># @array = (123, 456, 789);
># $scalar = @array;
># @array = $scalar;
># $scalar = @array;
># とすると @array と $scalar の内容はそれぞれどうなるのか、それは何故なのか、
># よ〜く考えてみてください
A.上記の
>同様に、$scalar = @array;をMacperlで実行してみました。
@arrayを$scalarへの1回目の代入は,@arrayの配列が記述されていますので,
3が返ります。
しかし,更に@arrayの入った$scalarから更に配列へ代入すれば,それは,単なる
1要素に過ぎないとみなされますので,@arrayを$scalarへの2週目の代入で値は
1が返ります。
>
> $program = "print 1 + 2;\n";
> $program;
> print $program;
>
>は、3 とは表示せずに print 1 + 2; とだけ表示します。「プログラムっぽく
>見えるもの」は、必ずしも「プログラム」ではありません。
>
># しかし、eval($program); は 3 と表示します
># 何故なのかはマニュアルや本やWebをどうぞ
A.MacPerlで実行してみたら3が返ってきました。$evalは,プログラムの要素と要素
の計算をする関数らしいですが,駱駝本を読んだらやや初心者には,難解な解説が
書かれていました。ちなみに,駱駝本の他に購入したperl本は,技術評論社の
「CGIのための実践入門perl」ですが。
>では、どうやって文字列を配列に変換すればいいかは、いしどうさんの<A href="00605.html">投稿</A>を
>参照してください(そしてマニュアルや本やWebを探してください)。
>
>>foreach $keymatch(@keymatch){
>>($mail,$yourname,$date,$gurl,$hpagename,$coment,$password)=split(/&&/, $keymatch);
>>
>>if($in{'pawin'} eq $password){
>>$keyflag=$keyflag+1;
>>last;}}
>>だと,ファイルの最下段の記事のパスワード名(mailmg)しか出力せずに,そのパスワード
>>名の以外のパスワードは,一致しません。
>
># これだけだと、例えば @keymatch に何が入っているのか、もとのスクリプトを
># 読まなければ分かりません。必要に応じてそれなりに説明を加えてください
>
>「出力」というのは、何がどう「出力」されるのですか?
>引用された部分には「パスワード名」の「出力」と呼べるような処理は含まれて
>いないようですが。
>
>$keyflagの値が増えていたら「出力」されたことになるということでしょうか。
>
>>}でプリントアウトしています。foreachで直接プリントアウトすれば,$passwordで
>>全て出力されますが,それ以外の方法,例えば$passwordを@***に代入したりすると
>>@***は,(mailmg)しか出力しません。
>
>どういうふうに「代入」したのですか?
> @array = $password;
>
>なら、最終的に @array に入っているのは当然ひとつの要素だけでしょう。
>代わりにpushなどを使ってください。詳細はマニュアルや本やWebを見てくださいね。
>
>>その様に,ユーザーパスワードを利用しての削除.変更を行うには,どうしても
>>$in{'pawin'}($in{'pawin'}は,変更.削除のページのパスワードを入れる記入項目
>>から受け取った値)と$passwordの全ての値と一致させなければそれは出来ません。
>
>何故?
>$passwordの値は @keymatch の各要素(つまりはファイルの各行)に応じて変化
>するのではないのですか?
>
>もしかしたら「一致」とは「比較」のことかも知れませんが、「全ての値」との
>「比較」は(foreachループを使って)なされていますよね…。
>
># そもそも、目的の記事を「パスワード」をキーにして探すという仕様自体が
># とても不自然に感じるのですが…
A.上記の質問は,黒幕的存在という記事で答えました。本来は
foreach $keymatch(@keymatch){
($mail,$yourname,$date,$gurl,$hpagename,$coment,$password)=split(/&&/, $keymatch);
if($in{'pawin'} eq $password)
{
$keyflag=$keyflag+1;
last;}
}
で全ての$password)にマッチしますが,mailmgを除いてのパスワードに改行文字が付加
されていて,一致せずにそのような結果になりました。$keyfragは,パスワードが
マッチすれば,1たされ,削除or変更の対象記事が出力されます。
ですから,$passwordの値は @keymatch の各要素(つまりはファイルの各行)に応じて
変化します。
>
>質問というものは、他人が読んで理解できるように書かなければ、誰も答える
>ことができません。三葉工房の管理者さんに限ったことではありませんが、
>
> 「<EM>答えてもらいやすい質問をしてください。</EM>」
>
>質問記事の読みやすさは、プログラムの読みやすさより数倍重要です:-)
A.その様に次回から心がけます。(これだけ無作法な行為をして投稿する資格は
あるはずないのですが。)
後,余談なのでずか,もし手が空いていたら教えて下さい。本来とは,関係の
ない質問もございますが,関心がありますので,失礼な事聞いて済みません。
1.YASU様は,perlを始めて何年になりますか。
2.perlのプログラミングで一番つまづいた経験はなんですか。
3.回答者の方々は,ふだんは,どんな事をしているのですか。そして,
TAD様とかにあ様と石堂様とかはかお知り合いですか。
にあ様と石堂様は,文章から見て女性の方だと思いますが。
[RE]
フォロー記事投稿
記事のキャンセル
From: いしどう
<ishidou@po.iijnet.or.jp>
Subject: Re: 不都合な配列の性格に阻まれて(回答します。)
Date: 1999/02/09 00:25:11
Reference: mesh.program/00623
いしどう です。
とりあえず、関係あるとこだけ (^^)
2月8日に、三葉工房の管理者さんは書きました。
>2.perlのプログラミングで一番つまづいた経験はなんですか。
正規表現でしょうか。
Perlを使い始める前に UNIX を使ってたもんで、その時のクセが抜けずに
何回もPerlに文句をいわれた記憶があります。
>3.回答者の方々は,ふだんは,どんな事をしているのですか。
とりあえず、わたしはここの会社に勤めてます。企業ユーザの
皆様にコンピュータを売る仕事をしてます。
>そして,TAD様とかにあ様と石堂様とかはかお知り合いですか。
えと、ここの会議室の上だけでの知り合いです (^^) (多分)
直接あった事はないはずです。
>にあ様と石堂様は,文章から見て女性の方だと思いますが。
いちおー、わたし、男ですけれど (^^;;
(一人称が「わたし」だからかなぁ。でも、昔っからこういう風に
書いてるもんで)
[RE]
フォロー記事投稿
記事のキャンセル
From: にあ
<nir@mvg.biglobe.ne.jp>
Subject: 余談だけ (^^;
Date: 1999/02/09 00:29:23
Reference: mesh.program/00623
2月8日に、三葉工房の管理者さんは書きました。
>3.回答者の方々は,ふだんは,どんな事をしているのですか。そして,
>TAD様とかにあ様と石堂様とかはかお知り合いですか。
他の方はともかく、にあは計算機とはあまり関係の無い職場ですね。
# 業務以外でサーヴァの面倒を見てたりはしますが。(^^;
「お知り合い」と言うのが、会って酒飲んだりする関係だとすると、答えはNoです。
この会議室とか、オンラインでのコミュニケーションを取るだけの間柄ですね。
あたしはそう言うのも十分「お知り合い」だとは思っていますが。(^^)
>にあ様と石堂様は,文章から見て女性の方だと思いますが。
...では無いですね。(^^;
# 自分では、まだまだ若いつもりではいますが、世間一般の基準からすると、
# 既におじさんの部類に入りつつある、と言ったところでしょうか。(^^;
## 石堂さんもあたしより1つ上だから、やはり (以下自粛)
ちなみに、三葉工房さんはMacユーザなのでご存じ無いのでしょうが、石堂さんは
Windowsでは定番のニュースリーダ、WinVNの日本語化などもなさっている方ですよ。(^^)
[RE]
フォロー記事投稿
記事のキャンセル
From: TAD
<hotani@mua.biglobe.ne.jp>
Subject: Re: 不都合な配列の性格に阻まれて(コメントおよび回答)
Date: 1999/02/09 15:05:48
Reference: mesh.program/00623
2月8日に、三葉工房の管理者さんは書きました。
>>martとかgghとかsdとかdfrとかは何か意味のある単語や略語なんでしょうか。
>>何のための変数なのか、もっと分かりやすい名前を付けたほうが読みやすいし、
>>保守やデバッグが楽じゃないかと思うのですが…。
>
>A.これは,MacParl上のテスト用で,適当にmartとかgghとかの名前を付けただけです。
テストとはいえやはりわかりやすい名前を付けた方が良いと思いますよ。
あるいは、せめて他人に質問するときだけでもわかりやすい名前に変えるとか。
>>というのをぱっと見て、どういう情報を出力しようとしているのか分かりますか?
>
>A.適当な称号を使っているので,自分か,若くは,よほど簡単なプログラムでなければ
>分からないと思います。
そうです。そこが、「他人に分かりやすい記事」ではないとYasu.Fさんも言っているところですね。
>># そもそも、目的の記事を「パスワード」をキーにして探すという仕様自体が
>># とても不自然に感じるのですが…
>
>A.上記の質問は,黒幕的存在という記事で答えました。本来は
そういう仕様だと同じパスワードを設定しているものがあったら、
先にヒット(キーが一致)したものが目的の記事となってしまいますが、
そういう動きはおかしいですよね。
普通(というか絶対に)、ある項目をキーにして目的のひとつのものを探す場合、
そのキーにする項目というのは、ユニーク(一意)な値でないとダメです。
普通は記事番号とかを設定してそれをキーに使うでしょう。
>1.YASU様は,perlを始めて何年になりますか。
ちなみに私は1年半くらいです。
はじめは他の人の書いたスクリプト(perlプログラム)を参考に、どんな風に
プログラミングされているのか見てみたのですが、perlは見ただけでは何をしている
のか判りにくい言語だったので、まずは「perl入門」を一通り読みました。
>2.perlのプログラミングで一番つまづいた経験はなんですか。
一見記述は簡単に見えて、その実すごい処理をしているところですか。
$aaa = @bbb; なんて、最初見たときは何してるのか判りませんでした。
>3.回答者の方々は,ふだんは,どんな事をしているのですか。そして,
一応、コンピュータメーカ系グループの会社でSEやっています。
仕事上でのプログラミングはもう4、5年やってません。
C言語経験はゼロです。(^^;;
>TAD様とかにあ様と石堂様とかはかお知り合いですか。
他の方がすでに書いているとおりです。
#ちょっと遅かったか。(^^;;
[RE]
フォロー記事投稿
記事のキャンセル
From: Yasu.F
<yasuf@big.or.jp>
Subject: Re: 不都合な配列の性格に阻まれて(回答します。)
Date: 1999/02/10 07:21:16
Reference: mesh.program/00623
丁寧な回答をありがとうございます。
フォローが遅くなってしまって申し訳ないです。
2月8日に、三葉工房の管理者さんは書きました。
>A.これは,MacParl上のテスト用で,適当にmartとかgghとかの名前を付けただけです。
ちょっとした(簡単な、短い)コードのテストでしたらこれでも問題は無い
でしょうけど、少し込み入ったことをしようとすると途中で何が何だか
わからなくなる可能性もありますので、
- 適切な名前を考える手間
- いい加減に付けた名前が何を意味しているのか考える手間
- 上記のどちらのほうがコストが掛かるか考える手間:)
などを比べたうえでのバランス感覚でしょうね。
# いつでも適切な名前を考えろ、と言っているわけではないです
# わたしもone-liner(“一行野郎”、シェルのコマンドラインで、
# "perl -e" の引数として直接入力して実行するような単純なプログラム)を
# 書くときなどは、面倒くさいので変数には大抵いい加減な名前を付けます
>A.適当な称号を使っているので,自分か,若くは,よほど簡単なプログラムでなければ
>分からないと思います。
それだと、他人に見せるためのプログラムとしては不親切ですよね。
相手が知りたいのは、「あなたがどんな文字列をタイプしたか」ではなく、
「あなたがどんなコードを実行しようとしたのか」なのですから。
>A.そうですね。プログラムは,分かり易く書くべきと思います。だんだん,プログラミングに
>慣れるに従ってメチャクチャになりましたので。
たぶん逆だと思います。というより、逆でないと将来きっと困ることになります。
よい癖でも悪い癖でも、身に付けるのは簡単ですが、取り除くのは至難の
技です。同じ癖なら、よい癖のほうを最初から身に付けておいたほうが幸せに
なれるでしょう。
>># ちなみに、何故「17」ではなく「16」なのか理解してます?
>
>A.配列は,C Languageと同じく0から数えるから。17は,$arrycnt=@arryと言う
>形の配列の値の合計値を数えている。
# 「配列の値の合計値」って、どういう意味で使ってます?
# 「配列に含まれる要素の数」ではないですか?
そうではありません。
元の記事のプログラムを、目を凝らしてよぉ〜く読んでみてください。
# ヒント:
# $foo = "one
# two" .
# "three";
# $bar = "four";
# print $foo,
# $bar;
# は何を表示するか?
>A.上記の
>>同様に、$scalar = @array;をMacperlで実行してみました。
# まずご自分で考えてみて、それから実際に実行して、結果を比較して
# いただけると、もっとよかったのですが;)
>@arrayを$scalarへの1回目の代入は,@arrayの配列が記述されていますので,
>3が返ります。
>しかし,更に@arrayの入った$scalarから更に配列へ代入すれば,それは,単なる
>1要素に過ぎないとみなされますので,@arrayを$scalarへの2週目の代入で値は
>1が返ります。
だいたい合っていると思います。
# キーワード: 「スカラコンテキスト」「リスト(配列)コンテキスト」
>A.上記の質問は,黒幕的存在という記事で答えました。本来は
>foreach $keymatch(@keymatch){
(snip)
# おや、「プログラミングの書法」はどうなりましたか? ;)
>A.その様に次回から心がけます。(これだけ無作法な行為をして投稿する資格は
>あるはずないのですが。)
そんなことはありません。
ほんとうに嫌がられるのは、間違った内容を投稿することでも、分かりづらい
文章を投稿することでもありません。
それらを指摘されても改善しようとせず、同じような投稿を繰り返すことです。
「過つは人の常」。大事なのは、そのあとどうするか、です。
>1.YASU様は,perlを始めて何年になりますか。
最初にPerlに触れたのは、NEC PC-9801DAという古いマシンで動く、MS-DOSという
これまた今となっては古くさい(しかし何故かWindows98の根幹を成している:)
OSに移植された 日本語化Perl 4.036 というバージョンです。
これが、既に曖昧になってきている記憶を辿ると、1995年のことだったと
思います。
ですから途中のブランクを無視すれば、Perl歴は約4年ということになる
でしょうか。
>2.perlのプログラミングで一番つまづいた経験はなんですか。
そうですね… いちばん苦労したのは、Perlの「TMTOWTDI (There's More Than
One Way To Do It; それには何通りもの方法がある)」というスローガン
そのものを体に馴染ませること、でしょうか。
自由度が高いということは、裏を返せばそれだけ節操の無い書き方ができると
いうことでもあります。TMTOWTDIだからといって、「どれでも結局同じ
なんだから適当に選んどけばいいや」とやってしまうと(もちろんこれでも
いい局面もありますが)、あとで誰かが(あるいは自分自身が)プログラムを読む
ときに、作者がどういう意図を持ってそのコードを書いたのかが伝わりにくく
なってしまいます。
# ある意味では、「名前の付け方」と同じ問題がここにもある、とも言えます
例えばPerl5では、次の3つの文はほぼ同じ働きをしますが、それぞれの持つ
「意味合い」は少しずつ異なっています:
foo("bar") or baz($zot, @qux);
baz($zot, @qux) unless foo("bar");
baz($zot, @qux) if not foo("bar");
「TMTOWTDI、じゃあこの局面ではどうするのがベストだろう?」そういった
自分なりのプログラミングスタイルを見出すまでの間、たくさんの「読み出し
不能な」プログラムが、ハードディスクの中に現れては消えていきました。
>3.回答者の方々は,ふだんは,どんな事をしているのですか。そして,
普段はhacking(と自分では思っている行為)をやってます:)
ほかに、とあるISP(いわゆるプロバイダ)のサーバのお守りをしていることも
あります。
>TAD様とかにあ様と石堂様とかはかお知り合いですか。
知り合いといえば知り合いです。もちろんお互いの顔や声も、ひとによっては
本名も全く知りませんが、立派な知り合いです。
―そして、三葉工房の管理者さんとも「知り合い」なのかも知れません(^^)
[RE]
フォロー記事投稿
記事のキャンセル
From: 三葉工房の管理者
<nature-create@amy.hi-ho.ne.jp>
Subject: Re: 不都合な配列の性格に阻まれて(回答します。)
Date: 1999/02/10 17:22:11
Reference: mesh.program/00628
興味本位の質問に回答者の方達全てからお返事をいただきました。
ありがとうございます。
回答者の方達は,にあ様のサイトに遭遇して,perlの質問に対して,回答コメント
をお書きになっているだけという関係ですね。全員男性の方で?
ちなみに,私は,N.S.E2.75のプログラムの検索処理のサブルーチンの辺りに,
にあ様のサイトのURLが記されていてそれで知りました。
>ちょっとした(簡単な、短い)コードのテストでしたらこれでも問題は無い
>でしょうけど、少し込み入ったことをしようとすると途中で何が何だか
>わからなくなる可能性もありますので、
>
> - 適切な名前を考える手間
> - いい加減に付けた名前が何を意味しているのか考える手間
> - 上記のどちらのほうがコストが掛かるか考える手間:)
>
>などを比べたうえでのバランス感覚でしょうね。
>
># いつでも適切な名前を考えろ、と言っているわけではないです
># わたしもone-liner(“一行野郎”、シェルのコマンドラインで、
># "perl -e" の引数として直接入力して実行するような単純なプログラム)を
># 書くときなどは、面倒くさいので変数には大抵いい加減な名前を付けます
>それだと、他人に見せるためのプログラムとしては不親切ですよね。
>相手が知りたいのは、「あなたがどんな文字列をタイプしたか」ではなく、
>「あなたがどんなコードを実行しようとしたのか」なのですから。
>たぶん逆だと思います。というより、逆でないと将来きっと困ることになります。
>
>よい癖でも悪い癖でも、身に付けるのは簡単ですが、取り除くのは至難の
>技です。同じ癖なら、よい癖のほうを最初から身に付けておいたほうが幸せに
>なれるでしょう。
A.それ通りだと思います。一番分かり易く一番のてっとり早い。
もちろん,人に見てもらうのに適切な変数名では。
>>># ちなみに、何故「17」ではなく「16」なのか理解してます?
>
># 「配列の値の合計値」って、どういう意味で使ってます?
># 「配列に含まれる要素の数」ではないですか?
A.そうですね。要素数です。合計値は,私の場合,掲示板の記事数のカウント
する目的で算出して使っています。
>
># ヒント:
># $foo = "one
># two" .
># "three";
># $bar = "four";
># print $foo,
># $bar;
># は何を表示するか?
A.one
twothreefour
># まずご自分で考えてみて、それから実際に実行して、結果を比較して
># いただけると、もっとよかったのですが;)
>
>>@arrayを$scalarへの1回目の代入は,@arrayの配列が記述されていますので,
>>3が返ります。
>>しかし,更に@arrayの入った$scalarから更に配列へ代入すれば,それは,単なる
>>1要素に過ぎないとみなされますので,@arrayを$scalarへの2週目の代入で値は
>>1が返ります。
>
>だいたい合っていると思います。
>
># キーワード: 「スカラコンテキスト」「リスト(配列)コンテキスト」
>
>>A.上記の質問は,黒幕的存在という記事で答えました。本来は
>>foreach $keymatch(@keymatch){
>(snip)
>
># おや、「プログラミングの書法」はどうなりましたか? ;)
A.foreachの構文の書き方が荒かったですか?駱駝本の8.4は読みました。
勉強になりました。どの様に構文を書くべきかですね。
>
>>A.その様に次回から心がけます。(これだけ無作法な行為をして投稿する資格は
>>あるはずないのですが。)
>
>そんなことはありません。
>
>ほんとうに嫌がられるのは、間違った内容を投稿することでも、分かりづらい
>文章を投稿することでもありません。
>それらを指摘されても改善しようとせず、同じような投稿を繰り返すことです。
>
>「過つは人の常」。大事なのは、そのあとどうするか、です。
A.いくらなんてだも折角御忙しい時間をさいてコメントしたいただいた方達へ
の口答え的な,「報告のつもりだったのに」と言う投稿には非常に反省してます。
>
>>1.YASU様は,perlを始めて何年になりますか。
>
>最初にPerlに触れたのは、NEC PC-9801DAという古いマシンで動く、MS-DOSという
>これまた今となっては古くさい(しかし何故かWindows98の根幹を成している:)
>OSに移植された 日本語化Perl 4.036 というバージョンです。
>これが、既に曖昧になってきている記憶を辿ると、1995年のことだったと
>思います。
A.私は,3か月です。
>>2.perlのプログラミングで一番つまづいた経験はなんですか。
>
A.ユーザーパスワードの設定法(こないだの黒幕的...というforreach文,とか
実行しはじめの頃,何百回ともサーバーエラー500を食らった事です。あの時は,
本当に辛かった。(多分,サーバーのバージョンが4.036なので,perl5の
orやnotでの条件指定が出来なかった事らしい。)。
あの時は,本当にperlプログミングの才能があるのかとも感じました。
そのorやnotをそれぞれ||と!に変えてから,macperlのエラーチェックも
行う様になり,サーバーエラーに遭う確率も減りました。
>
># ある意味では、「名前の付け方」と同じ問題がここにもある、とも言えます
>
>例えばPerl5では、次の3つの文はほぼ同じ働きをしますが、それぞれの持つ
>「意味合い」は少しずつ異なっています:
>
> foo("bar") or baz($zot, @qux);
> baz($zot, @qux) unless foo("bar");
> baz($zot, @qux) if not foo("bar");
>
>「TMTOWTDI、じゃあこの局面ではどうするのがベストだろう?」そういった
>自分なりのプログラミングスタイルを見出すまでの間、たくさんの「読み出し
>不能な」プログラムが、ハードディスクの中に現れては消えていきました。
A.じっくり研究してみます。
>
>>3.回答者の方々は,ふだんは,どんな事をしているのですか。そして,
>
>普段はhacking(と自分では思っている行為)をやってます:)
>ほかに、とあるISP(いわゆるプロバイダ)のサーバのお守りをしていることも
>あります。
>
>>TAD様とかにあ様と石堂様とかはかお知り合いですか。
>
>知り合いといえば知り合いです。もちろんお互いの顔や声も、ひとによっては
>本名も全く知りませんが、立派な知り合いです。
>
>―そして、三葉工房の管理者さんとも「知り合い」なのかも知れません(^^)
=================
最後に
perlでCGIのスクリプトを作成する上で,一番大切な事の1つは,私なりの私的
な意見で,済みませんが,配列を必要に応じて,全方向から動かせる様になる
事だと思います。それが,出来かによって,スクリプトも作成しやすくなる。
色々と全方向からperlを推察して,上達の為に全力をつくそうと思います。
これからも色々とお世話になりますが宜しくお願い申し上げます。
[NEW]
フォロー記事投稿
記事のキャンセル
From: Shige
<t_shigetome@muf.biglobe.ne.jp>
Subject: core dumpは見れないものか?
Date: 1999/02/22 17:04:20
Mail送信用のscriptを刷新して
localでのTest(と言ってもsendmailはtestできないが)を終えて
いざ upして動作確認に入るとcore dumpを吐いて死んでしまいます。
問題と思われる個所までは特定できたのですが、
何故NGなのかが分からない・・・
同一のサブルーチンを2回callしているところがあって
一回目はOKなのに二回目で死んでしまう。
順番を入れ替えると2回目で死ぬところから引数には関係していないと思われる
そのサブルーチンの中で怪しいと見られるのが
jcode'convert()とMIME::Base64::encode_base64()の使い方です。
jcode'convert()は他にも多数同script内でcallしていますし
encode_base64()は単体では問題無し(直前のjcode'convertをコメントアウト)
因みにerror.txtには
Attemp うんたら とかで開放しようとしたら既に参照カウントが0だった
というメッセージが残ります
ラクダ本を参照しましたが ???です Perl onlyのscriptなのに・・・
今のところは次のような事を疑っています
・しょうもない文法ミスを犯している(ありがち・・・)
先の被疑サブルーチンにreturnを追加しただけで少し進んだ所からして怪しい
・メモリ不足?(通常はout of memoryのlogが残るはず)
・応答時間が遅い?(他にもっと遅いものもある Benchmarkで確認した)
動作確認は
ActivePerl 5.005?とCPANからWin95へportingされていた5.004を使用し
両方で問題なさそうに動いています
サーバーのPerlは 5.003です
#・・・5.003に戻せば再現できるんかな?
以上
長々と書きましたが、問題解決するには情報不足で
ほとんどグチみたいなもんですねf(^_^;)
でも、これでもう少し頑張ってみようという気になれました。
[RE]
フォロー記事投稿
記事のキャンセル
From: Shige
<t_shigetome@muf.biglobe.ne.jp>
Subject: Re: core dumpを吐く解決策は・・・(jcode.plの使い方)
Date: 1999/02/27 17:21:26
Reference: mesh.program/00630
2月22日に、Shigeさんは書きました。
>Mail送信用のscriptを刷新して
>localでのTest(と言ってもsendmailはtestできないが)を終えて
>いざ upして動作確認に入るとcore dumpを吐いて死んでしまいます。
>
> 略
>
>そのサブルーチンの中で怪しいと見られるのが
>jcode'convert()とMIME::Base64::encode_base64()の使い方です。
>
これが当たりでした jcode.plのsubroutineの使い方を変えたら
dumpを吐かなくなりました。
なんとなくそんな気はしていたんですが認めたくなかった(^_^;
で,具体的には
「jcode subの引数となる変換またはチェック対象となる文字列変数の参照を
レキシカル変数の参照からグローバル変数の型グロブに全て変えた」
です。オプション等はレキシカル変数のままです。
(どっかのFAQにも書いてありそうな結末ですね)
どうしてそうなるのかまでは面倒なので調べていませんが
2回目のコールにおいて既に開放されたデータを参照しようとしたため
dumpを吐いたのかな?と考えています が ちょっと違うような気もします
#jcode.plを見てもその様な所は私には分かりませんでした。
>
>因みにerror.txtには
>Attemp うんたら とかで開放しようとしたら既に参照カウントが0だった
>というメッセージが残ります
こちらは何故か Biglobeにcore dumpについて質問を投げかけたら
でなくなっちゃいました。
因みに core dumpはPerlの場合は見てもしょうがないよ
と言うような解答でした。
#にあさんからも以前そのような事を教えてもらったような・・・
#でも,手がかりがないとすがりたくなる・・・
[NEW]
フォロー記事投稿
記事のキャンセル
From: 三葉工房の管理者
<nature-create@amy.hi-ho.ne.jp>
Subject: アクセスカウンタ作成法他(訂正再投稿)
Date: 1999/02/28 17:00:00
お世話になっています。三葉工房です。
今日まで,アクセスカウンタの製作に取りかかって来ました。
実は,私のperlスクリプト製作の今回の最終地点は,バナー一体型アクセス
カウンタです。
それは,画像を連結させ,
<img src="****.cgi">と言うタグで出力する技術が必要です。
ちなみににあ様のアクセスカウンタも画像一体型カウンタですが,ダウンロード
して解凍いたしました所,C言語で記述されていた様です。こないだの「うぇぶ
会議室」は,ようやく解凍出来ました。日本版のエクスパンダーでなければ,
開けない様です。
残念ながら,うちのサーバーでC言語のスクリプトは,不可です。
ですから,perlでそれを実行させてます。
いろいろと,その画像一体型アクセスカウンタのスクリプトを探し回った所,
T's CGI-BIN Tools - TcounT Ver.4.XX
からgif-cat.plと言うGIFファイル連結ライブラリをコピーで,手にする事が出来,それ
を自分で記述したスクリプトと併用すれば,簡単に画像一体型アクセスカウンタの実行が出来ます。
そして,ログファイルも作成しました。
その,アクセスカウンタのスクリプトは,cgi-libと gif-cat.plとそして,自分で
作成したライブラリで動いています。ライブラリの末尾に1;がなければエラーにされ
てしまうのですね。面白い事に,そのスクリプト内に3つ程のサブルーチンが記述され
ていまして,その実行記号(&サブルーチン名;)をスクリプト本体に記述せず例の手作り
のライブラリに記述されていてそのライブラリを呼んで,実行記号も読み取って本体の
サブルーチンを実行してしまうプログラムです。
本題に戻ります。実は,そのログファイルの件ですが,そのログのページを見て頂ければ
分かると思いますが,日別カウントの 2月27日のカウントが有りません。スクリプトが実行されない(訪問無し)日のカウントは書かれません。つまり,日が変わると日別カウント
のファイルに新たな日付けの行が追加され,その日(今日)のカウントが実行の度に増えて
行く方式です。ですから,実行の無い日のカウントは記録されないのです。その
実行の無い日のカウントも0でファイルに記録する方法ですが,それには,日付の引き算
が出来る事が必要になると思います。よく表計算では,dateと言う関数でA年月日からB年月日までは,どれくらいの日数があるかを計算出来ます。しかしperlでは,どうやらdate
と言う関数は無いようです。localtimeでは,実行した時の時間情報しか手に出来ません。ところで,その様にperlにてA年月日からB年月日までどれくらいの日数があるかと
言う計算はどのように行うのでしょうか。
ちなみにそのログのページは下記からリンク出来ます。
ログファイル
次に,バナー一体式アクセスカウンタの作り方の件ですが,よく上がアクセスカウンタ
で下がバナーというカウンタとバナーが一体になっているのを見かけますよね。
それを作りたいのです。そのスクリプトは何処にも公開されていません。
ですが,画像連結プログラムを理解して,イメージマップも理解すれば夢では無いと思います。
先程のgif-cat.plの内容を読んだところ処理が数多く書かれていまして,どうやらGIF
を連結するプログラムの技術は大変らしいです。
ですが,その話しは別にしてperlプログラムで,GIFファイルを連結して,一体化
されたGIFを作成するには,どの様に行うのでしょうか。
後,アクセスカウンタの貼られている掲示板は,こないだ悪質ないたずらがあった様な
ので,スクリプト名を変更してアクセス出来ない様にして公開出来ない事をお詫び申し上げます。
御忙しい所,度々すみませんが,どうか御回答宜しくお願いします。
[RE]
フォロー記事投稿
記事のキャンセル
From: にあ
<nir@mvg.biglobe.ne.jp>
Subject: Re: アクセスカウンタ作成法他(訂正再投稿)
Date: 1999/03/03 05:58:50
Reference: mesh.program/00635
2月28日に、三葉工房の管理者さんは書きました。
>実行の無い日のカウントも0でファイルに記録する方法ですが,それには,日付の引き算
>が出来る事が必要になると思います。よく表計算では,dateと言う関数でA年月日からB年月日までは,どれくらいの日数があるかを計算出来ます。しかしperlでは,どうやらdate
>と言う関数は無いようです。localtimeでは,実行した時の時間情報しか手に出来ません。ところで,その様にperlにてA年月日からB年月日までどれくらいの日数があるかと
>言う計算はどのように行うのでしょうか。
localtime()の逆関数でtimelocal()と言うのがあります。
前に記事268でも書いたことがありますが、perlの標準添付ライブラリにありますので、まず、
require "timelocal.pl";
で、timelocal.plを使えるようにしておいてから、
$time = &timelocal($sec, $min, $hour, $mday, $mon - 1, $year - 1900);
の様にして、指定時間の内部的な値(秒数)を得ます。
日付の引き算がしたいなら、得られた秒数で引き算して、日にちに換算すれば良いでしょう。
>次に,バナー一体式アクセスカウンタの作り方の件ですが,よく上がアクセスカウンタ
>で下がバナーというカウンタとバナーが一体になっているのを見かけますよね。
>それを作りたいのです。そのスクリプトは何処にも公開されていません。
以前、記事455でのりーさんが紹介してくれたカウンタがまさにそれだったのですが、
今見たらリンク先が無くなっていますね。
# のりーさんペーヂ移っちゃったのかなぁ
>先程のgif-cat.plの内容を読んだところ処理が数多く書かれていまして,どうやらGIF
>を連結するプログラムの技術は大変らしいです。
> ですが,その話しは別にしてperlプログラムで,GIFファイルを連結して,一体化
>されたGIFを作成するには,どの様に行うのでしょうか。
gifcat.plでは同じ大きさのGIFファイルを横につなげる機能しか提供していない様ですが
画像を横につなげるのもバナーの下に並べるのも、単に置く場所の指定を変えるだけで同じ事です。
まあ、その辺を変えるためにはGIFのフォーマットに付いて知っておかなければならないので
チョット面倒ですが、トホホさんのgifcat.plはそんなに見づらいソースでは無いので
ソースとGIFフォーマットの規格とを見比べていけば変更できると思います。
ちなみにGIFフォーマットに付いては、GIF89M規格の日本語訳などを見ると良いでしょう。
# って、さっき見つけたばかりなのだが。(^^)
[RE]
フォロー記事投稿
記事のキャンセル
From: 三葉工房の管理者
<nature-create@amy.hi-ho.ne.jp>
Subject: Re: アクセスカウンタ作成法他:timelocal.plに必要なライブラリ
Date: 1999/03/08 17:12:35
Reference: mesh.program/00636
三葉工房です。
にあ様のおっしゃられた通り timelocal.plを取り寄せました。しかし,1つ問題が
有りました。それは,更に3つのライブラリを入手しなければならない点です。
timelocal.plに更に取り込まなければライブラリは下記の3ライブラリです。
require 5.000;
require Exporter;
use Carp;
Exporterと Carpはどうにか簡単に入手出来ましたが 5.000は,サーチエンジンで
探しても難しいです。もし,そのライブラリの入手方法がお分かりでしたらお教え
願います。
後,例のgif-cat.plですが,上級レベルなのでじっくり時間を掛けて勉強しようと
思います。
色々と画像一体型アクセスカウンタスクリプトのページを見ましたが,やはり誰もが
gif-cat.plとサーフレスキューと御プログラムnpc.cgiの3スクリプトのいずれかを
ライブラリとして行っている様です。
gif-cat.plは等幅横一列のみ実行可能条件らしく,それに合致するイメージなら下の
様に画像連結出来ます。
ところで,にあ様のnpc.cgiと言う御スクリプトの画像結合処理プログラムも,
GIFイメージの仕様を勉強してスクリプトを作成されたのですか。
私としては,GIF連結プログラムをどのようにして作成されたか一番知りたい所です。
後は,最終的には,バナー一体型カウンタを目指しているので,そのタイプのカウンタ
を提供しているサイトへ「スクリプトを譲って頂けませんか」とメールしました。
結構,GIFイメージの仕様 自体も色々と習得しなければならない点があり覚え切るには大変だと思いますが面倒くさがらず学んで行こうと思ってます。
最後に余談ですが,perlと言う言語は,情報処理用語とは,あまり関係の薄い言語
だと思いますが,その言語は,どの様な言語のジャンルに当てはまるのでしょうか。
(例えば,高水準言語,手続き型言語等の振り分け方)
そして,perl言語に関する検定試験等あればいいですね。
最後に,去年の暮れからperlを学び始めた訳ですが,ここまで日が経つとある程度
スクリプトが出来る様になりました。
最近では,掲示板の変更記事を従来と同じ位置に書き直せる処理プログラムが出来る様に
ました。つまり,書き込みファイルの途中に上書きする処理です。
そして,先日紹介したログファイルも先輩のプログラムを見ず今まで覚えたperlの知識
を活用するプログラムを自分で発案して出来る様になりました。始めの頃,サーバエラー
100回とかのたうち回ってましたが自分なりのperlへの熱意でここまで出来るようになった
のも,にあ様をはじめとするアドバイザの方達のおかげてもあると思っています。
それでは,色々,perlに関する話題を書いて済みません。
宜しくお願いします。
[RE]
フォロー記事投稿
記事のキャンセル
From: にあ
<nir@mvg.biglobe.ne.jp>
Subject: Re: アクセスカウンタ作成法他:timelocal.plに必要なライブラリ
Date: 1999/03/13 02:14:15
Reference: mesh.program/00637
3月8日に、三葉工房の管理者さんは書きました。
>timelocal.plに更に取り込まなければライブラリは下記の3ライブラリです。
>require 5.000;
>require Exporter;
>use Carp;
>
>Exporterと Carpはどうにか簡単に入手出来ましたが 5.000は,サーチエンジンで
>探しても難しいです。もし,そのライブラリの入手方法がお分かりでしたらお教え願います。
requireの後ろは、文字列なのかパッケージ名なのか数なのかで意味するところが違います。
文字列とかパッケージ名とかはお分かりでしょうが、数が指定された時は、その名前の
ライブラリが有るわけではなく、perlのバージョンがその数以降で有ることを指定しているのです。
つまり、
require 5.000;
なら、perl5.000 やそれより新しい perl を使いなさい、と言うことなのです。
古いヴァージョンを使うと正常動作しないような場合に、必要最低限のヴァージョンを
指定するものです。
>ところで,にあ様のnpc.cgiと言う御スクリプトの画像結合処理プログラムも,
>GIFイメージの仕様を勉強してスクリプトを作成されたのですか。
えーと、どちらかというと逆ですね。(^^;;
以前PC-9801用のGIF loader/saverを作っていたこともあって、GIFの仕様については
良く知っていたので、Netscapeがserver pushと言う機能をサポートして、画像の
アニメーションが可能になった時に、すぐにカウントアップアクセスカウンタというネタで
プログラムが書けるな、と思いついたわけです。
# と言うわけで、元々 npc.cgi は自分が技術的困難さ無しに簡単に書ける、
# 単なる一発ネタの冗談プログラムだったわけです。(^^;;
もちろん、GIF loader/saverを作っていた時には、GIFの規格について必死になって
調べましたけど、実は肝の部分のLZW圧縮については、昔々学生の頃にいじり倒した事が
あるので、これまた、良く知っていたのでした。(^^)
# と言うことで、効率良くプログラミングを進めるためには、自分が今どこまで理解していて、
# どれだけのものを加えれば上手く行くかを把握出来る事が大切なんじゃないかと思います。
>最後に余談ですが,perlと言う言語は,情報処理用語とは,あまり関係の薄い言語
>だと思いますが,その言語は,どの様な言語のジャンルに当てはまるのでしょうか。
まあ、分類で言えば、手続き型の高級言語、でしょうね。
>そして,perl言語に関する検定試験等あればいいですね。
ああ言う検定試験って実際役に立つんですかねぇ まあ、自分の実力を何らかの形で
評価してみたい、と言う用途には向いているとは思いますし、試験があれば包括的な
勉強はするでしょうけど。
# あたしも仕事では、X線取り扱い主任者なんちゃら、とか、レーザ取り扱いなんちゃら、
# とかの資格を取らされたけど、そう言う機会でもないとチャンと勉強しないからなぁ (^^;;
## 何て書いて良いのか? (笑)
[RE]
フォロー記事投稿
記事のキャンセル
From: 三葉工房
<nature-create@amy.hi-ho.ne.jp>
Subject: timelocal.plを使いこなせない
Date: 1999/03/14 11:20:46
Reference: mesh.program/00638
お世話になります。
にあ様のおっしゃられた通り,reuire5.000の事情が分かりましたので,
早速,MacPerl5.0で実行して見ましたが,結局エラーにされて成功出来ません。
require 'timelocal.pl';
$time =&timelocal($sec,$min,$hours,$mday,$mon,$year);
print "現在時刻:$time\n";
様に記述しましたが,エラーにされました。
駱駝本の591ページを読んで見ましたが,
$time =&timelocal($sec,$min,$hours,$mday,$mon,$year);
を理解する事も困難で,plを利用出来ません。
テストスクリプトの&timelocalの文の上に例の
($sec,$min,$hour,$day,$mon,$year,$wday)=localtime(time);を付け加えて見ても
&timelocal の後にprint "現在時刻:$mon\n";と変えても
require Exporter;
use Carp;を外しても
やはりうまく行きません。
$time =&timelocal($sec,$min,$hours,$mday,$mon,$year);
をその後,どの様に使えばよろしいのでしょうか。
何度も質問責めで済みませんがアドバイス宜しくお願いします。
[RE]
フォロー記事投稿
記事のキャンセル
From: にあ
<nir@mvg.biglobe.ne.jp>
Subject: Re: timelocal.plを使いこなせない
Date: 1999/03/16 00:51:36
Reference: mesh.program/00639
3月14日に、三葉工房さんは書きました。
>$time =&timelocal($sec,$min,$hours,$mday,$mon,$year);
>print "現在時刻:$time\n";
>様に記述しましたが,エラーにされました。
良く間違えるのは、$mon の範囲が[0〜11]であることと、$yearが(西暦-1900)な
事でしょうか。他は特にハマリそうな所は無いですね。
[RE]
フォロー記事投稿
記事のキャンセル
From: こん
<PXC06010@niftyserve.or.jp>
Subject: Re: アクセスカウンタ作成法他:timelocal.plに必要なライブラリ
Date: 1999/03/14 22:01:19
Reference: mesh.program/00638
3月13日に、にあさんは書きました。
こん%チャチャです。
># あたしも仕事では、X線取り扱い主任者なんちゃら、とか、レーザ取り扱いなんちゃら、
># とかの資格を取らされたけど、そう言う機会でもないとチャンと勉強しないからなぁ (^^;;
>## 何て書いて良いのか? (笑)
公の場では・・・。(笑)
私も本職の方の勉強は「そういう」機会がないと最近は、勉強しないな〜。
# でも「そういう」機会はない・・(^^;A
不況だしな〜、ちゃんと勉強しないと、、。(笑)
[NEW]
フォロー記事投稿
記事のキャンセル
From: 三葉工房
<nature-create@amy.hi-ho.ne.jp>
Subject: CGI機能 とインターネット接続機能の精度の優れた充実したプロバイダ
Date: 1999/03/17 20:45:44
度々質問して申し訳ございません。
色々とお世話になります。
始めにtimelocal.plのアドバイスありがとうございます。
報告は後にしようと思います。
実は,1つ思い当たった事がございましたが,私の加入しているプロバイダ
はPanasonic Hi-Hoですが,本格的にCGIスクリプトの運営を考えています。
ですが,Panasonic Hi-Hoでは,perl4.036が装備されて自分の作成したプログラム
を実行出来ない事はないのですが,以下の出来ない機能もございまして,本格的
なCGIスクリプトの運営(BBSやアクセスカウンタをユーザー登録形式で提供する等)
するには,少し向かないかなと思います。
Panasonic Hi-Hoで使用出来ない機能は以下の通りです。
perl5は無し
sendmailがコンパクト化(機能を限定)された ssendmaiiにされている。
c言語プログラムは無し
NACAのサーバーサイド方式のクリティカルプログラムが装備されていない。
nkf,シェル不可
SSIの<!--#exec cmd="./cnt.pl"-->不可
以上の理由から,本格的にCGIスクリプトを運営するには,やはり,CGIプログラミング
の能力をフルに生かせるCGIに関する装備が多いプロバイダに変えようかなと思っています。色々と,CGIに関するサイトを見た所,にあ様の所もそうなのですが biglobeが一番多いみたいですね。そして,Infowebも色々とCGI機能が充実していました。
私は,1.CGI機能が充実,2.アクセスポイントが充実,3.料金が手頃,4.CGIスクリプト
の読み書きファイルを別サイトのサーバー(どこのサーバーにでも格納可能)に格納可能
なサーバーを提供するプロバイダを探しています。
もし,CGI機能 とインターネット接続機能の精度の優れた充実したお勧めのプロバイダがございましたら御紹介願います。
宜しくお願いします。
[RE]
フォロー記事投稿
記事のキャンセル
From: にあ
<nir@mvg.biglobe.ne.jp>
Subject: Re: CGI機能 とインターネット接続機能の精度の優れた充実したプロバイダ
Date: 1999/03/20 15:27:24
Reference: mesh.program/00643
3月17日に、三葉工房さんは書きました。
>を実行出来ない事はないのですが,以下の出来ない機能もございまして,本格的
>なCGIスクリプトの運営(BBSやアクセスカウンタをユーザー登録形式で提供する等)
>するには,少し向かないかなと思います。
>以上の理由から,本格的にCGIスクリプトを運営するには,やはり,CGIプログラミング
>の能力をフルに生かせるCGIに関する装備が多いプロバイダに変えようかなと思っています。色々と,CGIに関するサイトを見た所,にあ様の所もそうなのですが biglobeが一番多いみたいですね。そして,Infowebも色々とCGI機能が充実していました。
その前に、通常、Web領域の又貸しは出来ないような契約になっているところが多いのじゃ
無いかしら? そうでなくても、他のユーザに BBS 領域の貸し出し等をする予定があるなら、
あらかじめプロヴァイダに連絡とって許可をもらっておいた方が良いのでは?
# ここのカウンタ(npc.cgi)のお試しが、biglobeユーザに限定されているのも、
# そう言う理由です。
[RE]
フォロー記事投稿
記事のキャンセル
From: OZAKI'S
<toshi@cyber-oz.com>
Subject: Re: CGI機能 とインターネット接続機能の精度の優れた充実したプロバイダ
Date: 1999/03/22 23:36:38
Reference: mesh.program/00643
3月17日に、三葉工房さんは書きました。
>以上の理由から,本格的にCGIスクリプトを運営するには,やはり,CGIプログラミング
>の能力をフルに生かせるCGIに関する装備が多いプロバイダに変えようかなと思っていま
>す。色々と,CGIに関するサイトを見た所,にあ様の所もそうなのですが biglobeが一番
>多いみたいですね。そして,Infowebも色々とCGI機能が充実していました。
以上のような条件なら,レンタルサーバー/ホスティングサービスを選択肢にいれられたら
いかがでしょうか?
YAHOO! Japan ウェブサービス
[NEW]
フォロー記事投稿
記事のキャンセル
From: 三葉工房
<nature-create@amy.hi-ho.ne.jp>
Subject: サーバの排他処理について
Date: 1999/03/26 10:35:49
三葉工房です。
プロバイタに関してのアドバイスありがうございます。
やはり,どこもセキュリティの事情にて,書き込みファイルの別サーバ
参照は不可の様です。
自分も色々とプロバイダを考えた結果,Inter-Qメンバーを第一に検討して
います。そこは,無料ホームページ50MBで,商用ページOKで,perl5とsendmailが用意
され,最寄りのアクセスポイントも設置されているからです。
又度々,質問して済みません。こんなに,しょっちゅう質問されては,
嫌になるかと思います。自分で考えろと言う感じに!
ですから,私もその記事についてサーチエンジンで探索しましたが
難しかったです。その探している記事の内容は以下の通りです。
CGIの配布を行う上で,アクセスの頻発に対する排他対策は大事な
問題なので,是非とも知りたいです。
やたらと質問が多すぎて大変済みませんが,よろしければお教え願い
ます。
実は,アクセスカウンタやバナークリックカウンタ等の開発を行って
おりまして,1つ問題があります。
それは,もしアクセスが頻発した時のことです。そこで,私は,同じ
ページファイル(htmlページやcgiスクリプトの事)を複数作成して,
アクセスの排他対策を考えておりまするつまり,ミラーサイトを作る
と言う事です。もし,それをする場合,同じサーバにそのページファイル
を複数おく場合,同一サーバに,複数のページが存在して,もし,その
サーバ内のある人は,Aページ,もう一人は,Bページをアクセスした場合
同じサーバの場合,どのような処理をするのかが大きな問題になります。
同じサーバ内でも同時アクセスしたページが別々なら,並列処理をしてく
れるのか,それとも,別々のページとは言え,サーバが同一なので,アク
セスの早い方から処理するのかを知りたいです。
サーバの性質により,これからの作業をどうするかも2分岐されます。
お忙しいところ,恐れ入りますが,サーバの排他処理について宜しくお願いします。
[NEW]
フォロー記事投稿
記事のキャンセル
From: nez
<nez@mud.biglobe.ne.jp>
Subject: ネスケ2でJavaScriptによる別窓がうまく動かない
Date: 1999/04/25 02:17:49
にあさん、皆様こんばんは〜。
ここで質問させて頂くのは久々です(^^)
さて、うちの久石譲&宮崎駿フォーラムで、「ダイジェストニュース機能」という
いわゆるJavaScriptで小窓を開いてそこに情報を表示するっていうプログラムを使
っているんですが、ネスケ2.02(Mac)の方から上手く動かないと言う報告を
頂きまして色々やっていたんですが、手詰まりになってしまいました(^^;;
元々JavaScriptなんてあまり知らない自分がいじっているので、も〜お手上げです
(^^;
---
function news(loc) {
var wnd="news";
var width='350';
var height='300';
var myWindow = window.open("", wnd, 'resizable=yes,scrollbars=yes,
status=0,width='+width+',height='+height);location.href=loc;
}
---
<A href="javascript:news('news.html')">ダイジェストニュース</A>
---
こんな風に(実際はもうちょっとあるのですが)したらうまくいきませんでした。
ネスケ2のwindow.openにはバグがあって、URLの部分にURLを書いても上手く動か
ないということらしいので、ネスケ2では上の通りの処理になるようにしてみたん
です。上の例ではウィンドウは開きますがそこに内容が表示されず、元になるウィ
ンドウにURL記述した部分が反映されるようです。
うまく動くにはどうしたらよいのでしょうか?或いはもしかするとネスケ2では小
窓開いて云々って元々無理なのでしょうか?お教えいただければ幸いです。
尚、「久石譲&宮崎駿フォーラム」の「Testの部屋」443〜454番目の記事でこの問
題について問答やっていますので参考にしていただければ・・・と思います。初歩
的な質問かもしれませんが、よろしくお願いしますm(_ _)m
[RE]
フォロー記事投稿
記事のキャンセル
From: Yasu.F
<yasuf@big.or.jp>
Subject: Re: ネスケ2でJavaScriptによる別窓がうまく動かない
Date: 1999/04/25 04:41:34
Reference: mesh.program/00647
4月25日に、nezさんは書きました。
>元々JavaScriptなんてあまり知らない自分がいじっているので、も〜お手上げです
>(^^;
わたしもJavaScriptにはあまり明るくないのですが…(^^;
>---
>function news(loc) {
> var wnd="news";
> var width='350';
> var height='300';
> var myWindow = window.open("", wnd, 'resizable=yes,scrollbars=yes,
> status=0,width='+width+',height='+height);location.href=loc;
myWindow.location.href = loc;
じゃないでしょうか。
せっかく「新しく開いた窓」(というオブジェクト)に myWindow と名付けたのです
から、それに対して何かをしてもらうときは myWindow に対して呼びかけなくちゃ
いけないと思います。
もちろん、myWindowという変数を介さずに直接
window.open(...).location.href = loc;
と書いても(「myWindowよ」ではなく「新しく開いた窓よ!」ってな具合に
呼びかけても)いいはずですが。
>}
>
>---
><A href="javascript:news('news.html')">ダイジェストニュース</A>
>---
[RE]
フォロー記事投稿
記事のキャンセル
From: nez
<nez@mud.biglobe.ne.jp>
Subject: Re: ネスケ2でJavaScriptによる別窓がうまく動かない
Date: 1999/04/26 19:39:22
Reference: mesh.program/00648
4月25日に、Yasu.Fさんは書きました。
>わたしもJavaScriptにはあまり明るくないのですが…(^^;
十分明るいですよ〜(笑)
> myWindow.location.href = loc;
>
>じゃないでしょうか。
ああ、やはり初歩的ミスだったんですね(^^;;
早速変えてみたところ、ネスケ4.5では上手く動いているようです。2ではまだ
確かめてはいませんが多分うまく行くと思います。有り難うございます!!!
・・・で、ついでにもう一つ質問させて下さい(^^;
自動的に別窓を開くために。
−−−
<SCRIPT language="JavaScript">
<!--
function WinOpen(){Wina02=window.open('news.html','news','scrollbars=1,
resizable=1,width=350,height=300');
if(navigator.appVersion.charAt(0)>=3){Wina02.focus()}
}
//-->
<body onLoad="WinOpen()">;
−−−
こんな感じで記述しているのですが、ネスケ2ではうまくいかないみたいです。何
故なんでしょう・・・?(^^;
onLoad="..."ってダメなんでしょうか・・・。
[NEW]
フォロー記事投稿
記事のキャンセル
From: 三葉工房
<nature-create@amy.hi-ho.ne.jp>
Subject: ネットスケープでのランダムイメージの無限リロードが出来ない!
Date: 1999/05/04 13:18:43
また三葉工房です。 お世話になります。
たびたびすみませんが,投稿させていただきます。
SSIではなくCGIでの<img src="***.cgi">でのイメージ出力では
1度きりしか再読み込みをしてくれません。ですから,ランダム
イメージが3点以上ある場合は,普通にネットスケープで,リロ
ードボタンを押しただけでは,1度目の読み込みから数えて,2
点目までしか読み込みません。私もランダムイメージを作成して
いますが,今後は,ネット上に公開する予定なので,ネットスケープ
で,shiftキーも押さなければ,ランダムイメージが1度しか読み込め
ないのは,ちょとみっともないので,SSIでは無いCGI方式で普通にネ
ットスケープで,リロードボタンを押しただけで,1度きりではなく
無限にランダムイメージを入れ替えられるプログラムをCGIスクリプト
に記述する方法をどうかお教え願います。
[RE]
フォロー記事投稿
記事のキャンセル
From: にあ
<nir@mvg.biglobe.ne.jp>
Subject: Re: ネットスケープでのランダムイメージの無限リロードが出来ない!
Date: 1999/05/11 01:33:47
Reference: mesh.program/00652
5月4日に、三葉工房さんは書きました。
>SSIではなくCGIでの<img src="***.cgi">でのイメージ出力では
>1度きりしか再読み込みをしてくれません。
通常、画像読み込みは文書に比べてバイト数が多いので、極力再読み込みを
しないような作りになっていることが多いようですね。
[Reload]ボタンの押下で再読み込みさせたいなら、画像出力のヘッダ部に
Expires: Mon, 10 May 1999 16:08:27 GMT
のような、コンテンツが無効になる時間を入れておけば良いと思います。
もちろん、その時間には現在の時間等を入れておけば、[Reload]を押した時には
既に過去の時間になっているので再読み込みされるでしょう。
# よく Expires: 0 とすれば良い、などと言う解説がありますが、文法的に
# 間違っていますので、ダメです。また、現在時より昔の時間が Expires に
# 入っていると無効になる/誤動作する、と言う話があるので、現在時を入れて
# おくのが無難でしょう。
[RE]
フォロー記事投稿
記事のキャンセル
From: 三葉工房
<nature-create@amy.hi-ho.ne.jp>
Subject: Re: ネットスケープでのランダムイメージの無限リロードが出来ない!(再サポート依頼)
Date: 1999/05/13 21:14:47
Reference: mesh.program/00653
5月11日に、にあさんは書きました。
>5月4日に、三葉工房は書きました。
>
>>SSIではなくCGIでの<img src="***.cgi">でのイメージ出力では
>>1度きりしか再読み込みをしてくれません。
>
>通常、画像読み込みは文書に比べてバイト数が多いので、極力再読み込みを
>しないような作りになっていることが多いようですね。
>
>[Reload]ボタンの押下で再読み込みさせたいなら、画像出力のヘッダ部に
>
>Expires: Mon, 10 May 1999 16:08:27 GMT
>
>のような、コンテンツが無効になる時間を入れておけば良いと思います。
>もちろん、その時間には現在の時間等を入れておけば、[Reload]を押した時には
>既に過去の時間になっているので再読み込みされるでしょう。
>
># よく Expires: 0 とすれば良い、などと言う解説がありますが、文法的に
># 間違っていますので、ダメです。また、現在時より昔の時間が Expires に
># 入っていると無効になる/誤動作する、と言う話があるので、現在時を入れて
># おくのが無難でしょう。
*********************************************
アドバイスどうも有難うございます。
失礼もうしああげて,申し訳ございませんが,
Expires: Mon, 10 May 1999 16:08:27 GMT
をどのように画像出力のヘッダ部に記述するか分かりません。
色々と試してみました。
Expires: Mon, 10 May 1999 16:08:27 GMT
print "Content-type: image/gif\n";
様に書いたり,これは,COOKIEの設定にもでて来ますので,いままでのライプラリの"Cookie.pl"に頼るCOOKIE設定をやめて$ENV{'HTTP_COOKIE'}と手書きに変更して
print "Set-Cookie: $cookname=imgID\:$Cookies{'imgID'}; Expires=Mon, 10 May 1999 16:08:27 GMT\n";
print "Content-type: image/gif\n";
と
しかしながら,今までと変わらず,"再読み込みボタン"だけのCGIからの処理による
<img src="***.cgi">の画像出力では,2回までしか,画像を
取り直してはくれません。
ところで,
Expires: Mon, 10 May 1999 16:08:27 GMT
年月日付の境目に半角の変わりにハイフンを用いた書き方
Expires: Mon, 10-May-1999 16:08:27 GMT
(ちなみに私は,"Monday"と言う様に週の欄は,フル書きで記述して,月の欄は,
上記の書き方と全く同様に英語の月名を3文字に省略して,書いています。)
は,どのように画像出力部に記述するのか,もしくは,COOKIE設定の中で,
記述するのかを大変くどい様で済みませんが,もう少し詳しくお教えいただけません
でしょうか。
どうか宜しくお願い申し上げます。
[RE]
フォロー記事投稿
記事のキャンセル
From: にあ
<nir@mvg.biglobe.ne.jp>
Subject: CGIでのヘッダ出力
Date: 1999/05/15 00:14:53
Reference: mesh.program/00654
5月13日に、三葉工房さんは書きました。
>失礼もうしああげて,申し訳ございませんが,
>Expires: Mon, 10 May 1999 16:08:27 GMT
>をどのように画像出力のヘッダ部に記述するか分かりません。
あー、CGIで独自のヘッダを生成したり、サーヴァが付けるはずのヘッダを変更したり
する場合は、Content-type: 等と同じ所、つまり、コンテンツ自体を出力する前に
入れます。
例えば現在時刻を Expires: にセットしたいなら、
@wday = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
@mon = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
($sec, $min, $hour, $mday, $mon, $year, $wday) = gmtime;
$ctime = sprintf("%s, %02d %s %04d %02d:%02d:%02d GMT",
$wday[$wday], $mday, $mon[$mon], $year + 1900, $hour, $min, $sec);
print "Content-Type: image/gif\r\nExpires: $ctime\r\n\r\n";
などとしてから画像を出力すれば良いですね。
# Expires: は必ず GMT なのに注意。
>(ちなみに私は,"Monday"と言う様に週の欄は,フル書きで記述して,月の欄は,
>上記の書き方と全く同様に英語の月名を3文字に省略して,書いています。)
HTTP手順で用いられる日時の書き方に関してはチョット前に「うぇぶ会議室の部屋3」の
2000年問題に関する記事でふれたのでそちらを参照して下さい。
[RE]
フォロー記事投稿
記事のキャンセル
From: 三葉工房
<nature-create@amy.hi-ho.ne.jp>
Subject: Re: CGIでのヘッダ出力(投稿者からの報告)
Date: 1999/05/21 12:24:58
Reference: mesh.program/00656
三葉工房です。
報告が遅れて済みません!
アドバイスどうもありがとうございました。
とても分かり易かったです。
下記の通り
>print "Content-Type: image/gif\r\nExpires: $ctime\r\n\r\n";
で,色々と,$ctimeのフォーマット(WEEK_NAMEを3文字略(san等),若くはフル書きに
したり等),色々とRCEのフォーマットを替ながら,そのスクリプトのHTMLで出力される
サブルーチンにフォーマットその物をプリントアウトして確認出来る様にして,フォーマットのミスが無い事を確認しながら試して見ましたがやはり無理でした。
おそらく,NET-SCAPE4.5では,Expires: $ctimeの実現は,ちょっと難しい気がします。
ですから,残念ですがその再起動ボタンのみでイメージをネット上から読み直せる処理は,潔くあきらめようと思います。
後,余談ですがスクリプト処理で気付いた事に関してお話しさせていただこうと思い
ます。
最近は,ファイルの読み書きの際に,ファイルの内容を読み落としたまま,配列に代入
して,処理を完了してそのファイルに上書きする際に空白のリストを書き込むトラブル
が起こっています。ですから,自分もアクセスが多くなるのに踏まえて色々と,
ファイルの排他制御について勉強しなければいけないと思っています。
後,こんなのもありました。
perl4.306では,print文での文字列の末尾が"表"等の文字化け処理だとサーバエラー
になるそうです。"\表"で出力出来る様になりました。
そして,SENDMAILの処理は,随分と処理時間を費やすものですね。一度に,7つの
メッセージを作成する処理がありましてつくづくそう感じました。
それでは,又質問がありましたら投稿させていただきます。
失礼します。
[RE]
フォロー記事投稿
記事のキャンセル
From: にあ
<nir@mvg.biglobe.ne.jp>
Subject: Re: CGIでのヘッダ出力
Date: 1999/05/22 00:24:48
Reference: mesh.program/00659
5月21日に、三葉工房さんは書きました。
>で,色々と,$ctimeのフォーマット(WEEK_NAMEを3文字略(san等),若くはフル書きに
>したり等),色々とRCEのフォーマットを替ながら,そのスクリプトのHTMLで出力される
>サブルーチンにフォーマットその物をプリントアウトして確認出来る様にして,
>フォーマットのミスが無い事を確認しながら試して見ましたがやはり無理でした。
うーん、どんなスクリプトになったのか分かりませんが、例えば以下のように
(大胆にエラー処理などを削除してある(^^;;)簡単なスクリプトを実行してみましょうか。
#!/usr/local/bin/perl
@wday = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
@mon = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
srand;
($sec, $min, $hour, $mday, $mon, $year, $wday) = gmtime;
$ctime = sprintf("%s, %02d %s %04d %02d:%02d:%02d GMT",
$wday[$wday], $mday, $mon[$mon], $year + 1900, $hour, $min, $sec);
print "Content-Type: image/gif\r\nExpires: $ctime\r\n\r\n";
open(IMG, sprintf('%s/ba%d.gif', '/home3/nir/public_html/icons/ball', int(rand(6))));
$/ = undef; print <IMG>;
close(IMG);
exit(0);
これを実行すると、ba0.gif〜ba5.gifのどれかが「」の様に表示されます。
どうですか? リロードしても違うボールになりませんか? (^^)
[RE]
フォロー記事投稿
記事のキャンセル
From: TAD
<hotani@mua.biglobe.ne.jp>
Subject: Re: CGIでのヘッダ出力(ボールイメージの件について)
Date: 1999/05/28 11:59:15
Reference: mesh.program/00663
5月27日に、三葉工房さんは書きました。
>ボールイメージの件なのですが,残念ながらNetscapeでは,私の
>質問した問題のイメージプログラムと同様に,リロードボタンでは
>1回きりしか,オンラインからイメージをリロードしません。
#ちょっとあきらめが早すぎるのではないでしょうか。
#なぜ、にあさんが言っている動きをしないのかの理由をブラウザのせいにして終わりなのですか。
#もっと自分を疑ってみましょうよ。
結論から言うと、私の使用している以下のブラウザではちゃんとリロード(再読み込み)
するたびに違う画像が表示されましたよ。
NetscapeCommunicator 4.5
NetscapeNavigator 3.01
但し、最初試したときはすぐにリロードすると何回やっても変わらなかったので
おかしいと思い、しばらく経って(1分程度)からリロードしたらちゃんと変わりました。
どうしてこうなったのかと少し考えてみましたが、以下のような理由ではないかと思います。
三葉工房さんの場合も同じ理由じゃないでしょうか。
<理由>
サーバから画像が送られるときに有効期限(Expires:)はサーバでの現在時刻が設定されてきます。
それで、クライアント側の時計がサーバと同じ時刻であれば、
ブラウザでリロードする時点では当然すでに有効期限が過ぎているので
ブラウザは再度、画像を要求するというのが想定した動き(正しい動き)ですが、
クライアント側の時計が例えば1分くらいサーバより遅れている場合、
すぐにリロードしたのでは、クライアント側ではまだ有効期限を過ぎていないので
ブラウザは再度、画像をサーバに要求することなく自分のキャッシュ上の前の画像を
そのまま表示してしまうため、何度やっても画像が変わらない、ということになってしまう。
そこで私は自分のPCの時刻を確認してみたところやはり時刻が1分程度遅れていたので
117に電話して、正しい時刻に設定しました。
そうしてやり直してみたところすぐにリロードしても画像が変わるようになりました。
>又,分からない事が思いつきましたら改めて宜しくお願いします。
別に、思いついたときすぐに質問に来る必要はないですよ。
考えて考えて考えてもわからなかった時に初めて、質問するようにした方が
自分のためにもなるしみんながハッピーになれると思います。
では。
[RE]
フォロー記事投稿
記事のキャンセル
From: にあ
<nir@mvg.biglobe.ne.jp>
Subject: Expiresの動作
Date: 1999/05/28 22:58:24
Reference: mesh.program/00664
5月28日に、TADさんは書きました。
>クライアント側の時計が例えば1分くらいサーバより遅れている場合、
>すぐにリロードしたのでは、クライアント側ではまだ有効期限を過ぎていないので
>ブラウザは再度、画像をサーバに要求することなく自分のキャッシュ上の前の画像を
>そのまま表示してしまうため、何度やっても画像が変わらない、ということになってしまう。
そうなんですよね。Expiresレスポンスヘッダと言うのは時計が狂っていると
キチンと動作しなくなって扱いづらいんですね。
そこで、HTTP/1.1(長文注意450kB)では、Expiresでは無く、Ageと言うレスポンス
ヘッダが使えるようになっています。
これは文字どおり賞味期限を示す物で、
Age: 600
とか書けば、600sec=10min後に賞味期限が切れるようになります。
これなら、サーヴァとユーザエイジェントで時計が狂っていても正しい動作が見込めるわけです。(^^)
# もう、HTTP/1.1を正しく認識出来るユーザエイジェントってあるのかな?
[RE]
フォロー記事投稿
記事のキャンセル
From: TAD
<hotani@mua.biglobe.ne.jp>
Subject: Re: Expiresの動作
Date: 1999/05/29 00:06:52
Reference: mesh.program/00665
5月28日に、にあさんは書きました。
>そうなんですよね。Expiresレスポンスヘッダと言うのは時計が狂っていると
>キチンと動作しなくなって扱いづらいんですね。
ちゃんとご存じでしたか。(^^;;
>そこで、HTTP/1.1(長文注意450kB)では、Expiresでは無く、Ageと言うレスポンス
>ヘッダが使えるようになっています。
>
>これは文字どおり賞味期限を示す物で、
>
>Age: 600
>
>とか書けば、600sec=10min後に賞味期限が切れるようになります。
>これなら、サーヴァとユーザエイジェントで時計が狂っていても正しい動作が見込めるわけです。(^^)
なるほどそんなものがあったんですね。
勉強になります。
># もう、HTTP/1.1を正しく認識出来るユーザエイジェントってあるのかな?
どうなんでしょうね。
IE5あたり、やってそうでやってない、かもしれないし
やってなさそうで実はやってたりして。<-未確認
[RE]
フォロー記事投稿
記事のキャンセル
From: 三葉工房
<nature-create@amy.hi-ho.ne.jp>
Subject: Re: Expiresの動作(ついに成功しました!)
Date: 1999/05/29 13:45:44
Reference: mesh.program/00666
にあ様&TAD様
お世話になります。
熱心なExpiresのアドバイスどうもありがとうございました。
こないだは,クライアント側とサーバ側の時刻のズレを忘れて,イメージ
が変わらないと記述して,本当に済みませんでした。とても反省してます。
TAD様に言われた通り,3~4分時間を置いたらイメージは変わりました。
そして,根拠となる記述を得て,早速自分のスクリプトのイメージプログラム
の Expiresのデバックをした末に自分のプログラムでも Expiresの動作が出来る
様になりました。
その Expiresの動作を成功させるには,gmtimeで時刻を得る事が条件でした。
時刻のズレを見込んで,gmtime(time-60*5)とクライアントの時刻の後にならない
様にして実行すれば,ランダムイメージを読み込んだ時点で直ぐに イメージをオン
ラインリロードする事が可能です。まるでSSIのランダムイメージの感覚を得られます。
それでは,又質問したい事柄が思いつきましたら改めて宜しくお願いします。
[NEW]
フォロー記事投稿
記事のキャンセル
From: Shige
<t_shigetome@muf.biglobe.ne.jp>
Subject: Web server間のアクセス
Date: 1999/05/14 12:29:11
www2s.biglobe.ne.jpから他のWeb Serverへのアクセスは
禁止されているんでしょうかね?
connectionが確立できないみたいなんですが、
スクリプトの問題かどうか切り分けがちょっと面倒だなぁって (^_^;;
他のサーバーや自宅マシンからの動作テストではうまく行ってるので
抑止されているんだと信じたい所
Biglobeに問い合わせて薮蛇になってもアレだし・・・
どなたかご存知無いでしょうか?>ALL
[RE]
フォロー記事投稿
記事のキャンセル
From: にあ
<nir@mvg.biglobe.ne.jp>
Subject: Re: Web server間のアクセス
Date: 1999/05/15 00:43:52
Reference: mesh.program/00655
5月14日に、Shigeさんは書きました。
>www2s.biglobe.ne.jpから他のWeb Serverへのアクセスは
>禁止されているんでしょうかね?
うーん、どうでしょうか?
S号機は分かりませんが、すくなくとも1号機からは問題無く出られますが...
Shigeさんとこの会議室はログ取ってましたっけ? こんな感じで読めました。
|$ ./Kagami -a 'http://www2s.biglobe.ne.jp/%7Et_shige/cgi-bin/forum/index.cgi'
|
|HTTP/1.0 200 OK
|Server: Netscape-Enterprise/2.01b
|Date: Fri, 14 May 1999 15:32:29 GMT
|Expires: Fri, 14 May 1999 15:47:29 GMT
|Last-modified: Fri, 14 May 1999 15:12:26 GMT
|Content-type: text/html
|
|<HTML>
|<HEAD><TITLE>井戸の蛙</TITLE></HEAD>
| ...以下略
meshsv14.tk.mesh.ad.jpからのKagami/0.5とか言うユーザエージェントが残るはずですが。
# って、1号機の事書いてもしょうがないのかな? (^^;
[RE]
フォロー記事投稿
記事のキャンセル
From: Shige
<t_shigetome@muf.biglobe.ne.jp>
Subject: Re: Web server間のアクセス
Date: 1999/05/15 09:51:19
Reference: mesh.program/00657
5月15日に、にあさんは書きました。
>5月14日に、Shigeさんは書きました。
>
>>www2s.biglobe.ne.jpから他のWeb Serverへのアクセスは
>>禁止されているんでしょうかね?
>
>うーん、どうでしょうか?
>S号機は分かりませんが、すくなくとも1号機からは問題無く出られますが...
>
>Shigeさんとこの会議室はログ取ってましたっけ? こんな感じで読めました。
>
>|$ ./Kagami -a 'http://www2s.biglobe.ne.jp/%7Et_shige/cgi-bin/forum/index.cgi'
>|
>|HTTP/1.0 200 OK
>|Server: Netscape-Enterprise/2.01b
>|Date: Fri, 14 May 1999 15:32:29 GMT
>|Expires: Fri, 14 May 1999 15:47:29 GMT
>|Last-modified: Fri, 14 May 1999 15:12:26 GMT
>|Content-type: text/html
>|
>|<HTML>
>|<HEAD><TITLE>井戸の蛙</TITLE></HEAD>
>| ...以下略
>
いえ うぇぶ会議室ではログを取っていません
#誰がアクセスしているか見えちゃうと気になって記事が書けなくなる(^_^;)
>meshsv14.tk.mesh.ad.jpからのKagami/0.5とか言うユーザエージェントが残るはずですが。
>
># って、1号機の事書いてもしょうがないのかな? (^^;
そうですねBiglobeでもwww2hは接続出来る事を既に確認しています。
#www2hは私のアカウントではないので色々やるにはちょっと手間が掛かり
#先方(素人)にも手を煩わせてしまふ
[NEW]
フォロー記事投稿
記事のキャンセル
From: massa
<m.fujii@dream.sse.bch.ntt.co.jp>
Subject: ファイルのアップロードについて
Date: 1999/05/26 22:34:43
ファイルのアップロードについて質問させてください。
ファイルのアップロードについてHTML本をみながら作成しているのですが、
トリガーボタンが”参照”と日本語でブサイクにでてきてしまいます。
どうやら、HTMLの仕様のようですが、
INPUTタグで、TYPEをFILEにすると
日本語版Windowsでは参照...ボタンになり
英語版Windowsでは英語になるようです。
<INPUT TYPE=”FILE” VALUE=”ABC”>と入力しても
ボタンには「ABC」とではなく、「参照...」ボタンになってしまいます。
どなたかよい解決方法をしりませんでしょうか?
突然お邪魔して申し訳ございませんがよろしくお願い致します。
以上51記事(キャンセル分を含む)
ホームペーヂに戻る
nir@mvg.biglobe.ne.jp
Last Update: 7 March 1998