bbs.cgiの開発作業をすすめていくためのスレッドです。
FOXさんの努力によりSpeedyCGIへの対応が行われ、
パフォーマンスの向上が図られたbbs.cgi。
・雪だるま作戦への対応
・さらなるカスタマイズ
・パフォーマンスの向上
・微妙な虫取り
・長いメインルーチンをより短くコンパクトに
あたりがターゲットか。
前スレ:
bbs.cgi再開発プロジェクト6
http://qb5.2ch.net/test/read.cgi/operate/1113117347/
bbs.cgi再開発プロジェクト7
■ このスレッドは過去ログ倉庫に格納されています
1root▲ ★
NGNG2005/11/02(水) 18:48:02ID:mRTXrOn10
いやー
言いたいことは 「iは使わない」という方針でやっているから
議論の意味がないということだったり
言いたいことは 「iは使わない」という方針でやっているから
議論の意味がないということだったり
25root▲ ★
NGNG28root▲ ★
NGNG sec2chdを見ている限り、大文字小文字がきちんと入るなら、
現状ならアクセスする側も実害はないかなと、思っていたり。
現状ならアクセスする側も実害はないかなと、思っていたり。
2005/11/02(水) 19:07:10ID:34OWbqDs0
use Benchmarkも良いけど、プロファイルもね。
30root▲ ★
NGNG31root▲ ★
NGNG2005/11/03(木) 05:17:16ID:nCUOBDm10
root氏めちゃくちゃおっつぃんぐ
33root▲ ★
NGNG34root▲ ★
NGNG 重そうな正規表現パターンマッチングを少しは整理できたと思うです。
html/ の下のやつ全部、この処理通っているので、
意外とばかにならないんじゃないかなと。
html/ の下のやつ全部、この処理通っているので、
意外とばかにならないんじゃないかなと。
2005/11/03(木) 11:24:31ID:iErLJGey0
37root▲ ★
NGNG >>36
大昔から、変わってなかったんでしょうね。
この4つは「私が2ちゃんねるに来た2001年〜現在まで、
一度もリンクとして使われているのを見たことがなかった」ので、
もはや不要であろうと判断したです。
大昔から、変わってなかったんでしょうね。
この4つは「私が2ちゃんねるに来た2001年〜現在まで、
一度もリンクとして使われているのを見たことがなかった」ので、
もはや不要であろうと判断したです。
38root▲ ★
NGNG &jcode::tr(\$GB->{FORM}->{'FROM'}, '#', '#');
とか、
&jcode::tr(\$GB->{FORM}->{'mail'}, '#', '#');
とかって、もうちょっと効率よくできないのかしら。
とか、
&jcode::tr(\$GB->{FORM}->{'mail'}, '#', '#');
とかって、もうちょっと効率よくできないのかしら。
41root▲ ★
NGNG BBS.CGI - 2005/11/04
動きそのものは変わりませんが、雪だるまをめざして
bbs_main のかなりの部分をサブルーチン化しました。
$GB 操作しているのでカプセル化はぜんぜんですが、
自分で読んでいて、bbs_main が長すぎて頭がうにーになってきたので、
整理の意味を込めて、いじっています。
ひととおりのテストはしてありますので、大丈夫だとは思いますが、
もし何かへんなことがあったら、知らせてくださいです。
動きそのものは変わりませんが、雪だるまをめざして
bbs_main のかなりの部分をサブルーチン化しました。
$GB 操作しているのでカプセル化はぜんぜんですが、
自分で読んでいて、bbs_main が長すぎて頭がうにーになってきたので、
整理の意味を込めて、いじっています。
ひととおりのテストはしてありますので、大丈夫だとは思いますが、
もし何かへんなことがあったら、知らせてくださいです。
2005/11/04(金) 22:11:35ID:h/nc5pj90
|∀・)<いくらー
>>40
http://search.cpan.org/src/DANKOGAI/Encode-2.00/encoding.pm
うー(苦笑)
=head1 ABSTRACT
Let's start with a bit of history: Perl 5.6.0 introduced Unicode
support. You could apply C<substr()> and regexes even to complex CJK
characters -- so long as the script was written in UTF-8. But back
then, text editors that supported UTF-8 were still rare and many users
instead chose to write scripts in legacy encodings, giving up a whole
new feature of Perl 5.6.
Rewind to the future: starting from perl 5.8.0 with the B<encoding>
pragma, you can write your script in any encoding you like (so long
as the C<Encode> module supports it) and still enjoy Unicode support.
This pragma achieves that by doing the following:
http://search.cpan.org/src/DANKOGAI/Encode-2.00/encoding.pm
うー(苦笑)
=head1 ABSTRACT
Let's start with a bit of history: Perl 5.6.0 introduced Unicode
support. You could apply C<substr()> and regexes even to complex CJK
characters -- so long as the script was written in UTF-8. But back
then, text editors that supported UTF-8 were still rare and many users
instead chose to write scripts in legacy encodings, giving up a whole
new feature of Perl 5.6.
Rewind to the future: starting from perl 5.8.0 with the B<encoding>
pragma, you can write your script in any encoding you like (so long
as the C<Encode> module supports it) and still enjoy Unicode support.
This pragma achieves that by doing the following:
2005/11/04(金) 22:49:22ID:AKcR43oSO
もしかしてjcode.pl使ってるの?
だとしたら、MakefileしたJcode.pmの方が速いんじゃ?
だとしたら、MakefileしたJcode.pmの方が速いんじゃ?
49動け動けウゴウゴ2ちゃんねる
2005/11/05(土) 08:17:34ID:oU3fQSIn0 再開発に協力したいのですが、
一般人はソースとか見ること出来ないですか?
一般人はソースとか見ること出来ないですか?
50動け動けウゴウゴ2ちゃんねる
2005/11/05(土) 09:19:57ID:cU0kVqJKP >>49
そう言うことがわからない人は再開発しなくていいで(^_^;)
そう言うことがわからない人は再開発しなくていいで(^_^;)
2005/11/05(土) 09:59:50ID:SUKMWkOMO
なぜ?
2005/11/05(土) 10:32:22ID:LYZ9MSO/0
そういうことが判らない人は(ry
53動け動けウゴウゴ2ちゃんねる
2005/11/07(月) 22:09:18ID:I44rESOi0 再開発に協力したいのですが、
一般人はソースとか見ること出来ないですか?
一般人はソースとか見ること出来ないですか?
協力するにも色々な方法があるわけでして♪
root★さんが悩んで居られるようでしたら助言をしてあげたり最適化したルーチンを提示したりとかとか♪
なんでもかでも「対等でなければならない」なんて孟宗竹なんてのは根っこから切り取らないと♪
root★さんが悩んで居られるようでしたら助言をしてあげたり最適化したルーチンを提示したりとかとか♪
なんでもかでも「対等でなければならない」なんて孟宗竹なんてのは根っこから切り取らないと♪
55root▲ ★
2005/11/08(火) 03:17:02ID:???0 1000超えの判定って、html/ の下を作るところの最初の部分でやっているのね。
ちょっと、驚いた。
ちょっと、驚いた。
57root▲ ★
2005/11/08(火) 04:22:33ID:???0 >>56
その様子は、何度かaccuse/operateを通じて見ているです。
なんか、いかにも効率悪そうで、気持ち悪くて、重そうなことをしてるんだなぁと
はじめて実際に、少しだけ気持ちがわかったわけです。
(これまでは、そこにたどり着く前に既に負けていた)
&MakeWorkFile を初めて呼ぶところの前までの整理整頓と、
できる範囲でのサブルーチン化は、それなりにやったです。
でも、そこから先が、、、。
たぶん、アイガー北壁なんだろうなと。
#==================================================
# ファイル操作(subject.txt & subback.html)
#==================================================
# 雪だるまサーバでは、以降のファイル処理はしない(bbsdが実行)
if(&IsSnowManServer($ENV{'SERVER_NAME'}))
{
&endhtml($GB);
}
####################################
# ここから先はまだカオス状態 by む #
####################################
その様子は、何度かaccuse/operateを通じて見ているです。
なんか、いかにも効率悪そうで、気持ち悪くて、重そうなことをしてるんだなぁと
はじめて実際に、少しだけ気持ちがわかったわけです。
(これまでは、そこにたどり着く前に既に負けていた)
&MakeWorkFile を初めて呼ぶところの前までの整理整頓と、
できる範囲でのサブルーチン化は、それなりにやったです。
でも、そこから先が、、、。
たぶん、アイガー北壁なんだろうなと。
#==================================================
# ファイル操作(subject.txt & subback.html)
#==================================================
# 雪だるまサーバでは、以降のファイル処理はしない(bbsdが実行)
if(&IsSnowManServer($ENV{'SERVER_NAME'}))
{
&endhtml($GB);
}
####################################
# ここから先はまだカオス状態 by む #
####################################
58root▲ ★
2005/11/08(火) 04:32:01ID:???0 まずは読んでいたりします。
ここからは思いつきで手直しすると遭難しそうなので(何せアイガー北壁)、
じっくり、やってみようかなと。
とりあえず、
$GBX->{OVER1000} = 0 ;# 1000超えフラグ(現在は未使用)
を追加してみた。
ここからは思いつきで手直しすると遭難しそうなので(何せアイガー北壁)、
じっくり、やってみようかなと。
とりあえず、
$GBX->{OVER1000} = 0 ;# 1000超えフラグ(現在は未使用)
を追加してみた。
59root▲ ★
2005/11/08(火) 05:04:58ID:???0 BBS_CONTENTS_NUMBER の意味を初めて知った私ガイル。
60root▲ ★
2005/11/08(火) 05:10:01ID:???0 BBS_LINE_NUMBER は、「省略されました」か。
61root▲ ★
2005/11/08(火) 05:14:02ID:???0 MakeWorkFile とりあえず読み終わり。
今日はもう遅いから、どうするかはいったん寝て考えるか。
とりあえず >>1 の処理と BBS_LINE_NUMBER 分のレスについての
おんなじような処理について、
べたにおんなじルーチンが2回書かれていたということはわかたです。
今日はもう遅いから、どうするかはいったん寝て考えるか。
とりあえず >>1 の処理と BBS_LINE_NUMBER 分のレスについての
おんなじような処理について、
べたにおんなじルーチンが2回書かれていたということはわかたです。
2005/11/08(火) 13:18:33ID:Im6W7Y3z0
BBS_CONTENTS_NUMBER分のレスかな。
1とそれ以外、同じようで違う。
まとめるのが面倒で放置って感じっすか。
1とそれ以外、同じようで違う。
まとめるのが面倒で放置って感じっすか。
2005/11/08(火) 13:28:47ID:wlYZz8W80
65root▲ ★
2005/11/08(火) 16:19:23ID:???0 こんなかんじかな。
#############################################################################
# 処理中のdatの現在のレス数を調べる
# 新スレの場合0、異常発生時は-1
#############################################################################
sub GetResNum
{
my ($GB) = @_;
my $resnum = 0;
# 1) 新スレなら0を返す
if($GB->{NEWTHREAD}) { return 0; }
# 2) subject.txtを調べてみる
# subject.txtはSaborin系サーバでも逐次更新されているはず
$resnum = &GetResNumFromSubject($GB);
# 3) とれなかったら仕方ないので、datの行数を読む
# 990超えている時も、安全のためdatを読む
if ($resnum <= 0 || $resnum > 990)
{
$resnum = &GetResNumFromDat($GB);
}
# 4) それも失敗したら、-1を返す
if ($resnum <= 0) { return -1; }
# 得られた結果を返す
else { return $resnum; }
}
#############################################################################
# 処理中のdatの現在のレス数を調べる
# 新スレの場合0、異常発生時は-1
#############################################################################
sub GetResNum
{
my ($GB) = @_;
my $resnum = 0;
# 1) 新スレなら0を返す
if($GB->{NEWTHREAD}) { return 0; }
# 2) subject.txtを調べてみる
# subject.txtはSaborin系サーバでも逐次更新されているはず
$resnum = &GetResNumFromSubject($GB);
# 3) とれなかったら仕方ないので、datの行数を読む
# 990超えている時も、安全のためdatを読む
if ($resnum <= 0 || $resnum > 990)
{
$resnum = &GetResNumFromDat($GB);
}
# 4) それも失敗したら、-1を返す
if ($resnum <= 0) { return -1; }
# 得られた結果を返す
else { return $resnum; }
}
66root▲ ★
2005/11/08(火) 16:23:35ID:???0 今は、毎回こういうことをやっているです。
open(RDAT,"<$dattemp");
@logdat=<RDAT>; #ログを配列に読み込む
close(RDAT);
#ログのカキコ数を取得
$lognum = @logdat;
if($lognum > 999)
{
if(open(OUT,">>$dattemp"))
{
my $b1000 = "このスレッドは1000を超えました。 <br> \
もう書けないので、新しいスレッドを立ててくださいです。。。 ";
my $p1000 = $GBA->{PATH} . "1000.txt";
(以下略)
open(RDAT,"<$dattemp");
@logdat=<RDAT>; #ログを配列に読み込む
close(RDAT);
#ログのカキコ数を取得
$lognum = @logdat;
if($lognum > 999)
{
if(open(OUT,">>$dattemp"))
{
my $b1000 = "このスレッドは1000を超えました。 <br> \
もう書けないので、新しいスレッドを立ててくださいです。。。 ";
my $p1000 = $GBA->{PATH} . "1000.txt";
(以下略)
67root▲ ★
2005/11/08(火) 16:28:33ID:???0 1000超えのdat追記部分は、Process1000ってのを書こう。
68root▲ ★
2005/11/08(火) 16:42:46ID:???0 >>65
通常の板だと、これだとコストが低くないかもなぁ。
subject.txt って、何百行とか千何百行とかあるわけで。
bbsdのように、mmap() するのもちょっとあれだし。
スレ数が少ない板は、subject.txt優先で、
スレ数が多い板は、dat優先がよさげ?
どのくらいが変更点なのかな。
通常の板だと、これだとコストが低くないかもなぁ。
subject.txt って、何百行とか千何百行とかあるわけで。
bbsdのように、mmap() するのもちょっとあれだし。
スレ数が少ない板は、subject.txt優先で、
スレ数が多い板は、dat優先がよさげ?
どのくらいが変更点なのかな。
69root▲ ★
2005/11/08(火) 16:43:22ID:???0 変更点じゃなくて、分岐点か。
70root▲ ★
2005/11/08(火) 16:45:36ID:???0 &GetHojisuu 書く必要がありそうですね。
こいつは出航時に1回だけ読めばいいだろうから、initFOXでやろう。
こいつは出航時に1回だけ読めばいいだろうから、initFOXでやろう。
71root▲ ★
2005/11/08(火) 17:40:32ID:???072root▲ ★
2005/11/08(火) 17:50:05ID:???0 で、>>65 はこうか。
#############################################################################
# 処理中のdatの現在のレス数を調べる
# 新スレの場合0、異常発生時は-1
#############################################################################
sub GetResNum
{
my ($GB) = @_;
my $resnum = 0;
# 1) 新スレなら0を返す
if($GB->{NEWTHREAD}) { return 0; }
# 2) 保持数が少ない板では、subject.txt を調べる
if ($FOX->{HOJISUU} < 200)
{
# 2) subject.txtを調べてみる
# subject.txtはSaborin系サーバでも逐次更新されている
$resnum = &GetResNumFromSubject($GB);
}
# 3) 次に、datの行数を読む (2)がしくった場合も同様)
# 990超えている時も、安全のためdatを読むことにしよう
if ($resnum <= 0 || $resnum > 990)
{
$resnum = &GetResNumFromDat($GB);
}
# 4) それも失敗したら、-1を返す
if ($resnum <= 0) { return -1; }
# 得られた結果を返す
else { return $resnum; }
}
#############################################################################
# 処理中のdatの現在のレス数を調べる
# 新スレの場合0、異常発生時は-1
#############################################################################
sub GetResNum
{
my ($GB) = @_;
my $resnum = 0;
# 1) 新スレなら0を返す
if($GB->{NEWTHREAD}) { return 0; }
# 2) 保持数が少ない板では、subject.txt を調べる
if ($FOX->{HOJISUU} < 200)
{
# 2) subject.txtを調べてみる
# subject.txtはSaborin系サーバでも逐次更新されている
$resnum = &GetResNumFromSubject($GB);
}
# 3) 次に、datの行数を読む (2)がしくった場合も同様)
# 990超えている時も、安全のためdatを読むことにしよう
if ($resnum <= 0 || $resnum > 990)
{
$resnum = &GetResNumFromDat($GB);
}
# 4) それも失敗したら、-1を返す
if ($resnum <= 0) { return -1; }
# 得られた結果を返す
else { return $resnum; }
}
73root▲ ★
2005/11/08(火) 17:55:37ID:???0 このほうがいいか。
#############################################################################
# 処理中のdatの現在のレス数を調べる
# 新スレの場合0、異常発生時は-1
#############################################################################
sub GetResNum
{
my ($GB) = @_;
my $resnum = 0;
# 1) 新スレなら0を返す
if($GB->{NEWTHREAD}) { return 0; }
# 2) 保持数が少ない板では、subject.txt を調べる
if ($FOX->{HOJISUU} < 200)
{
# subject.txtを調べてみる
# subject.txtはSaborin系サーバでも逐次更新されている
$resnum = &GetResNumFromSubject($GB);
}
# 3) 次に、datの行数を読む (2)がしくった場合も同様)
# 990超えている時も、安全のためdatを読むことにしよう
if ($resnum <= 0 || $resnum > 990)
{
$resnum = &GetResNumFromDat($GB);
if ($resnum <= 0) { return -1; }
}
# 上記により得られた結果を返す
return $resnum;
}
#############################################################################
# 処理中のdatの現在のレス数を調べる
# 新スレの場合0、異常発生時は-1
#############################################################################
sub GetResNum
{
my ($GB) = @_;
my $resnum = 0;
# 1) 新スレなら0を返す
if($GB->{NEWTHREAD}) { return 0; }
# 2) 保持数が少ない板では、subject.txt を調べる
if ($FOX->{HOJISUU} < 200)
{
# subject.txtを調べてみる
# subject.txtはSaborin系サーバでも逐次更新されている
$resnum = &GetResNumFromSubject($GB);
}
# 3) 次に、datの行数を読む (2)がしくった場合も同様)
# 990超えている時も、安全のためdatを読むことにしよう
if ($resnum <= 0 || $resnum > 990)
{
$resnum = &GetResNumFromDat($GB);
if ($resnum <= 0) { return -1; }
}
# 上記により得られた結果を返す
return $resnum;
}
74root▲ ★
2005/11/08(火) 18:07:21ID:???0 外枠を作った。
Perlがだめだめな私に、愛の手を。
#############################################################################
# subject.txtに書いてあるレス数を調べる
# 異常時は-1
#############################################################################
sub GetResNumFromSubject
{
my ($GB) = @_;
my $subject = $GB->{PATH} . "subject.txt";
my $resnum = 0;
# subject.txtを開き、中身を調べる
open(SUBJ,"<$subject");
# ここに実際の処理を入れる
# 探すためのキーは$GB->{FORM}->{'key'}に入っている
# Perlではどうやるのが高速なんだろう
close(SUBJ);
return $resnum;
}
#############################################################################
# datのレス数を調べる(行数を調べる)
# 異常時は-1
#############################################################################
sub GetResNumFromDat
{
my ($GB) = @_;
my $datfile = $GB->{DATPATH} . $GB->{FORM}->{'key'} . ".dat";
my $resnum = 0;
# datを開き、行数を調べる
open(DAT,"<$datfile");
# ここに実際の処理を入れる
# Perlではどうやるのが高速なんだろう
close(DAT);
return $resnum;
}
Perlがだめだめな私に、愛の手を。
#############################################################################
# subject.txtに書いてあるレス数を調べる
# 異常時は-1
#############################################################################
sub GetResNumFromSubject
{
my ($GB) = @_;
my $subject = $GB->{PATH} . "subject.txt";
my $resnum = 0;
# subject.txtを開き、中身を調べる
open(SUBJ,"<$subject");
# ここに実際の処理を入れる
# 探すためのキーは$GB->{FORM}->{'key'}に入っている
# Perlではどうやるのが高速なんだろう
close(SUBJ);
return $resnum;
}
#############################################################################
# datのレス数を調べる(行数を調べる)
# 異常時は-1
#############################################################################
sub GetResNumFromDat
{
my ($GB) = @_;
my $datfile = $GB->{DATPATH} . $GB->{FORM}->{'key'} . ".dat";
my $resnum = 0;
# datを開き、行数を調べる
open(DAT,"<$datfile");
# ここに実際の処理を入れる
# Perlではどうやるのが高速なんだろう
close(DAT);
return $resnum;
}
2005/11/08(火) 18:46:35ID:2de4x2Mv0
while (<DAT>) {}; $resnum = $.;
とか
とか
2005/11/08(火) 19:34:21ID:NjmJiyb00
subject.txtから読む場合は、スレのタイトルに「<>」「(」「)」とか半角スペースが
入ってるとsplitで面倒になるかもね。出来るだけsubstr使うべきなんだろうな。
datファイルの行数調べるには・・・unixのwcコマンド使うとかw
入ってるとsplitで面倒になるかもね。出来るだけsubstr使うべきなんだろうな。
datファイルの行数調べるには・・・unixのwcコマンド使うとかw
77root▲ ★
2005/11/08(火) 19:34:42ID:???0 出先に移動。10分ぐらい時間が。
>>75
ひとつ、書き忘れていたです。
どうせ必要になるので、
datを読んだ時には、つまりGetResNumFromDatが呼ばれた時には、
そのdat内の>>1と、以下の条件(*1)で抽出した行のdatは、
内容を保存しておきたいですね。
つまり、datを複数回読み込みモードでopenしたくないわけです。
(*1)if BBS_CONTENTS_NUMBERよりもレス数が多い
お尻のBBS_CONTENTS_NUMBER行ぶんのdatの内容を保存
else
頭の >>2 〜 最後の行までのdatの内容を保存
これは、html/ の下のファイルを作るのに使っているですよ。
保存は、、、そうすね、
$GB->{DAT1} 文字列変数
$GB->{DATLAST} 文字列配列変数
っていうことにするか。
で、たぶんほんとは、subject.txt 的に上位のやつだけ作れるともっといいわけですが、
(つまり実際に index.html を合成する時に使うものだけ)
今は pageview.cgi があった時のコードのままになっているです。
つまり、1000個datがあれば、html/ の下のファイルも1000個あるです。
これは、別に考えることにしよう。
>>75
ひとつ、書き忘れていたです。
どうせ必要になるので、
datを読んだ時には、つまりGetResNumFromDatが呼ばれた時には、
そのdat内の>>1と、以下の条件(*1)で抽出した行のdatは、
内容を保存しておきたいですね。
つまり、datを複数回読み込みモードでopenしたくないわけです。
(*1)if BBS_CONTENTS_NUMBERよりもレス数が多い
お尻のBBS_CONTENTS_NUMBER行ぶんのdatの内容を保存
else
頭の >>2 〜 最後の行までのdatの内容を保存
これは、html/ の下のファイルを作るのに使っているですよ。
保存は、、、そうすね、
$GB->{DAT1} 文字列変数
$GB->{DATLAST} 文字列配列変数
っていうことにするか。
で、たぶんほんとは、subject.txt 的に上位のやつだけ作れるともっといいわけですが、
(つまり実際に index.html を合成する時に使うものだけ)
今は pageview.cgi があった時のコードのままになっているです。
つまり、1000個datがあれば、html/ の下のファイルも1000個あるです。
これは、別に考えることにしよう。
78root▲ ★
2005/11/08(火) 19:38:36ID:???0 index.html 合成するところで、判定すりゃいいのか。
1000000000.dat に対する html/1000000000.html の最新版が必要になったら、
html/1000000000.html と 1000000000.dat の mtime を調べて、
(この時点では dat への追記は終わっているものとする)
もし html のほうの mtime のほうが古かったら、dat から html を合成するサブルーチンを呼べばいいと。
1000000000.dat に対する html/1000000000.html の最新版が必要になったら、
html/1000000000.html と 1000000000.dat の mtime を調べて、
(この時点では dat への追記は終わっているものとする)
もし html のほうの mtime のほうが古かったら、dat から html を合成するサブルーチンを呼べばいいと。
79root▲ ★
2005/11/08(火) 19:38:50ID:???0 さて、いったん時間切れ。
またのちほど。
またのちほど。
81root▲ ★
2005/11/08(火) 19:39:43ID:???0 で、$GB->{SABORIN} がtrueだったら、このへんの処理はキャンセルできると。
>内容を保存しておきたいですね。
それがうまくいけば楽なんですけどね、
bbs.cgi が非同期で同時に 30本とか走っているんですよ。
FIFOとかじゃなくてさ、
「どれが最後に終わるかわからない」という話だったり、
平気で後から来たのが追い越していきます。
それとの戦いの痕跡かと、
それがうまくいけば楽なんですけどね、
bbs.cgi が非同期で同時に 30本とか走っているんですよ。
FIFOとかじゃなくてさ、
「どれが最後に終わるかわからない」という話だったり、
平気で後から来たのが追い越していきます。
それとの戦いの痕跡かと、
2005/11/08(火) 20:14:25ID:2de4x2Mv0
$GB->{DAT1} = <DAT>;
@{$GB->{DATLAST}} = <DAT>;
$resnum = $.;
if ( @{$GB->{DATLAST}} > BBS_CONTENTS_NUMBER ) {
@{$GB->{DATLAST}} = splice(@{$GB->{DATLAST}}, -BBS_CONTENTS_NUMBER);
}
こんな感じになるんかな
でも>>83なのね
@{$GB->{DATLAST}} = <DAT>;
$resnum = $.;
if ( @{$GB->{DATLAST}} > BBS_CONTENTS_NUMBER ) {
@{$GB->{DATLAST}} = splice(@{$GB->{DATLAST}}, -BBS_CONTENTS_NUMBER);
}
こんな感じになるんかな
でも>>83なのね
85root▲ ★
2005/11/08(火) 21:04:50ID:???0 >>83
ですね。
今のやつは、なんでもかんでもdat読んで配列に突っ込んで、
配列の要素数数えて、
BBS_CONTENTS_NUMBERより大ならおしりから、
より小ならあたまからhtmlにして、html/html に入れ込む
みたいなことをやっているです。
で、1000行以上あったら、1000超え判定していたりするです。
つまり、datの読み込みモードでのオープンは1回で済んでいるものの、
毎回datを全行絶対なめなめしているわけです。
このへんをなんとかしたいかなぁと。
ですね。
今のやつは、なんでもかんでもdat読んで配列に突っ込んで、
配列の要素数数えて、
BBS_CONTENTS_NUMBERより大ならおしりから、
より小ならあたまからhtmlにして、html/html に入れ込む
みたいなことをやっているです。
で、1000行以上あったら、1000超え判定していたりするです。
つまり、datの読み込みモードでのオープンは1回で済んでいるものの、
毎回datを全行絶対なめなめしているわけです。
このへんをなんとかしたいかなぁと。
86root▲ ★
2005/11/08(火) 21:11:57ID:???0 で、>>83 のこころは、
「subject.txt からとろうというのは誰もが思いつくわけだけど、
それって所詮非同期なんじゃないのかしら」
ってゆうことですよね。
ううむ。
> if ($resnum <= 0 || $resnum > 990)
ここを 900 とかかなぁ。
「subject.txt からとろうというのは誰もが思いつくわけだけど、
それって所詮非同期なんじゃないのかしら」
ってゆうことですよね。
ううむ。
> if ($resnum <= 0 || $resnum > 990)
ここを 900 とかかなぁ。
2005/11/08(火) 21:23:18ID:xTFEnbVV0
subject.txt更新前に別のbbs.cgiが参照するとずれるような希ガス
っていうかずれたからdat読みになったんじゃ?(違うかも)
っていうかずれたからdat読みになったんじゃ?(違うかも)
88root▲ ★
2005/11/08(火) 21:28:11ID:???089▲ ◆cZfSunOs.U
2005/11/08(火) 21:35:48ID:+RowFQSH0 まぁ,bbs.cgi やその他各種呪文用 CGI と bbsd との I/F が完成したら,
雪だるま系鯖以外でも bbsd を使うという選択肢もあるのでしょうけど.
雪だるま系鯖以外でも bbsd を使うという選択肢もあるのでしょうけど.
2005/11/08(火) 22:05:38ID:xTFEnbVV0
92root▲ ★
2005/11/09(水) 00:55:26ID:???0 subject.txtから取ったレス数よりも実際のdatの行数がいくつか増えてしまっていてもいい、
ぐらいの感覚で書きました。
ただ、900超えたあたりからはクリティカルか。
いずれにせよ、毎回全読みするコストを何とか下げられないかな、というのが、
subject.txtからとる趣旨なわけで、それが期待できないなら、
単にサブルーチン化して、整理整頓するだけかなぁと。
# おじさん、インテンショナルな徹夜で時差調整中?
ぐらいの感覚で書きました。
ただ、900超えたあたりからはクリティカルか。
いずれにせよ、毎回全読みするコストを何とか下げられないかな、というのが、
subject.txtからとる趣旨なわけで、それが期待できないなら、
単にサブルーチン化して、整理整頓するだけかなぁと。
# おじさん、インテンショナルな徹夜で時差調整中?
>subject.txtから取ったレス数よりも実際のdatの行数がいくつか増えてしまっていてもいい、
>ぐらいの感覚で書きました。
わたしもその意見には賛成で、実は以前それを実験しました。
で、結果はというと、
惨憺たるものだったかと、たしか専用ブラウザが困ってしまうんじゃなかったかと、
もう何年も前の話で忘れちまったが、
眠くなったら寝るというみだらな作戦です。
>ぐらいの感覚で書きました。
わたしもその意見には賛成で、実は以前それを実験しました。
で、結果はというと、
惨憺たるものだったかと、たしか専用ブラウザが困ってしまうんじゃなかったかと、
もう何年も前の話で忘れちまったが、
眠くなったら寝るというみだらな作戦です。
94root▲ ★
2005/11/09(水) 01:00:45ID:???0 >>93
で、900超えたらsubject.txtを信用するのやめて、
今までの方法でdatを読んじゃおうという、日和見風見鶏作戦かなぁと。
で、900をできるだけ1000に近づける方向でがんがってみると。
で、900超えたらsubject.txtを信用するのやめて、
今までの方法でdatを読んじゃおうという、日和見風見鶏作戦かなぁと。
で、900をできるだけ1000に近づける方向でがんがってみると。
「dat と subject.txt のずれを許容してくれない」
とっても厳密に扱われているというのが問題だと思います。
900 とか 980 のことじゃなく
とっても厳密に扱われているというのが問題だと思います。
900 とか 980 のことじゃなく
96root▲ ★
2005/11/09(水) 01:02:54ID:???02005/11/09(水) 01:18:58ID:svPRiUsW0
現状でも、スレスト時にsubject.txtが変更されないため
subject.txtと実際の行数が一致しなくなり
毎回のように取得に行ってしまうクライアントもありますよ。
subject.txtと実際の行数が一致しなくなり
毎回のように取得に行ってしまうクライアントもありますよ。
98動け動けウゴウゴ2ちゃんねる
2005/11/09(水) 01:19:33ID:rY6bA6aZ0 それはそのブラウザの作りが悪い
100root▲ ★
2005/11/09(水) 01:36:13ID:???0 >>99
Saborin は確かに、結構効果ありますね。
Saborin = index.html / subback.html の更新をまばらにする
ただし subject.txt は更新する
ex系とlive系で絶賛動作中
SaborinはLAが閾値を超えると自動的に発動
cobra=30 / tiger=20 / banana=4
Saborin は確かに、結構効果ありますね。
Saborin = index.html / subback.html の更新をまばらにする
ただし subject.txt は更新する
ex系とlive系で絶賛動作中
SaborinはLAが閾値を超えると自動的に発動
cobra=30 / tiger=20 / banana=4
103root▲ ★
2005/11/09(水) 01:43:13ID:???0 で、狼やらVIPやらanimeサーバやらで 500 エラーが起こりやすい理由の一端は、
>>80 が原因の予感のもより。
>>80 が原因の予感のもより。
>>103
まだまだあちこちにありますからねぇ
まだまだあちこちにありますからねぇ
105root▲ ★
2005/11/09(水) 01:53:07ID:???0106root▲ ★
2005/11/09(水) 04:04:11ID:???0 結局、
・まずは従来通りdatから全部とることにして、クリーンナップをすすめる
ことにしました。
コストは、かわんないですもんね。
で、GetDatInfoを書きました。
>>84 さんに感謝です。
#############################################################################
# 処理中のdatの情報を$GBにセットする
# $GB->{DATNUM}, $GB->{DAT1}, $GB->{DATLAST}
#############################################################################
sub GetDatInfo
{
my ($GB, $outdat) = @_;
my $datfile = $GB->{DATPATH} . $GB->{FORM}->{'key'} . ".dat";
my $datlastnum = $FOX->{$GB->{FORM}->{bbs}}->{"BBS_CONTENTS_NUMBER"};
if($GB->{NEWTHREAD})
{
# 新スレの場合
$GB->{DAT1} = $outdat;
$GB->{DATNUM} = 1;
@{$GB->{DATLAST}} = ();
}
else
{
# レスの場合
open(DAT,"<$datfile");
$GB->{DAT1} = <DAT>;
@{$GB->{DATLAST}} = <DAT>;
$GB->{DATNUM} = $.;
close(DAT);
if (@{$GB->{DATLAST}} > $datlastnum)
{
@{$GB->{DATLAST}} = splice(@{$GB->{DATLAST}}, -$datlastnum);
}
}
return 0;
}
・まずは従来通りdatから全部とることにして、クリーンナップをすすめる
ことにしました。
コストは、かわんないですもんね。
で、GetDatInfoを書きました。
>>84 さんに感謝です。
#############################################################################
# 処理中のdatの情報を$GBにセットする
# $GB->{DATNUM}, $GB->{DAT1}, $GB->{DATLAST}
#############################################################################
sub GetDatInfo
{
my ($GB, $outdat) = @_;
my $datfile = $GB->{DATPATH} . $GB->{FORM}->{'key'} . ".dat";
my $datlastnum = $FOX->{$GB->{FORM}->{bbs}}->{"BBS_CONTENTS_NUMBER"};
if($GB->{NEWTHREAD})
{
# 新スレの場合
$GB->{DAT1} = $outdat;
$GB->{DATNUM} = 1;
@{$GB->{DATLAST}} = ();
}
else
{
# レスの場合
open(DAT,"<$datfile");
$GB->{DAT1} = <DAT>;
@{$GB->{DATLAST}} = <DAT>;
$GB->{DATNUM} = $.;
close(DAT);
if (@{$GB->{DATLAST}} > $datlastnum)
{
@{$GB->{DATLAST}} = splice(@{$GB->{DATLAST}}, -$datlastnum);
}
}
return 0;
}
107root▲ ★
NGNG BBS.CGI - 2005/11/09
雪だるまに向けたクリーンナップ大作戦 その3
・GetDatInfo (>>106) を作り、datへの追記(新スレでは作成)直後に呼ぶようにしました。
・datの情報はもっぱらここでとることにし、$GB に蓄えて使いまわすようにしました。
・html/ の下を作るところ(MakeWorkFile)では、datはオープンしなくしました。
・Over1000 をサブルーチン化して、GetDatInfo の直後に呼ぶようにしました。
・これでMakeWorkFile内から、1000超えチェックが分離できました。
雪だるまに向けたクリーンナップ大作戦 その3
・GetDatInfo (>>106) を作り、datへの追記(新スレでは作成)直後に呼ぶようにしました。
・datの情報はもっぱらここでとることにし、$GB に蓄えて使いまわすようにしました。
・html/ の下を作るところ(MakeWorkFile)では、datはオープンしなくしました。
・Over1000 をサブルーチン化して、GetDatInfo の直後に呼ぶようにしました。
・これでMakeWorkFile内から、1000超えチェックが分離できました。
108root▲ ★
NGNG subject.txt を作るところ
sage のほうが、処理工数が多いのね。
ちょっと目からうろこ。
sage のほうが、処理工数が多いのね。
ちょっと目からうろこ。
109root▲ ★
NGNG BBS.CGI - 2005/11/09a
# 051109a 雪だるまに向けたクリーンナップ大作戦 その4
# UpdateSubject (subject.txt作成) サブルーチン化
# いよいよ、神の領域の入り口に突入か by む
# 051109a 雪だるまに向けたクリーンナップ大作戦 その4
# UpdateSubject (subject.txt作成) サブルーチン化
# いよいよ、神の領域の入り口に突入か by む
110root▲ ★
NGNG # 051109b @newsub を @{$GB->{NEWSUB}} にして追放(UpdateSubjectに封じ込め) by む
本日はここまでの予定。
本日はここまでの予定。
111root▲ ★
NGNG で、わかってきたことは、
subject.txt って軽々しく作っている割に、
suback.html も index.html も /i/index.html (qb系 dso系 bbspinkのみ)も、
ぜーんぶ、これをベースにこしらえているらしいということだなぁ。
こりゃ、非同期にsubject.txtをなんてのは、とんでもない話だなぁ。
何が起きるか、予想もできないや。
というかたぶんもともと、宣撫らでの参照のために作ったんじゃなくて、
そうゆう内部処理のために、作ってるんだろうなぁ。
なぁ。
subject.txt って軽々しく作っている割に、
suback.html も index.html も /i/index.html (qb系 dso系 bbspinkのみ)も、
ぜーんぶ、これをベースにこしらえているらしいということだなぁ。
こりゃ、非同期にsubject.txtをなんてのは、とんでもない話だなぁ。
何が起きるか、予想もできないや。
というかたぶんもともと、宣撫らでの参照のために作ったんじゃなくて、
そうゆう内部処理のために、作ってるんだろうなぁ。
なぁ。
2005/11/09(水) 20:44:50ID:bCrNV8fy0
なぁ。
なぁ
その部分は歴代誰もさわっていない気がする
なぜなら太古のままの姿で残っているから、
しいていえば dat と subject のずれをなくすため
およびdjをなくすため、神か or トオルさんが2001年ころ手を加えたかと、
その部分は歴代誰もさわっていない気がする
なぜなら太古のままの姿で残っているから、
しいていえば dat と subject のずれをなくすため
およびdjをなくすため、神か or トオルさんが2001年ころ手を加えたかと、
2005/11/10(木) 00:14:57ID:QrzYKomJ0
|∀・)<そこに凶悪なすらいむが現れたっ!
2005/11/10(木) 16:46:58ID:ewPRrhz60
root探検隊2005秋
「驚愕! 未開の地bbs.cgiの奥地に謎の古代神殿subject.txt生成部を発見!?」
「驚愕! 未開の地bbs.cgiの奥地に謎の古代神殿subject.txt生成部を発見!?」
2005/11/10(木) 22:15:46ID:ww1y0hkN0
今日あたりから妙な動作をしてる気がするんだが、何かいじってる?
具体的には
・某板で、かなり時間を置いて違う内容を書き込もうとしても二重書き込みが出る
・しょうがないのでIP変えたら書き込めた
・IP変えた後、他の板に書き込んだら何故かcookie確認が出ない
出た現象としてはそれだけ。
どこの板とかは出さないので、回答には特に期待していないけど。
具体的には
・某板で、かなり時間を置いて違う内容を書き込もうとしても二重書き込みが出る
・しょうがないのでIP変えたら書き込めた
・IP変えた後、他の板に書き込んだら何故かcookie確認が出ない
出た現象としてはそれだけ。
どこの板とかは出さないので、回答には特に期待していないけど。
118root▲ ★
2005/11/10(木) 23:22:03ID:???02005/11/10(木) 23:50:38ID:r6yN1X4Qo
確認画面の話が出てるから、自分もちょっと
先日の京ぽんのID末尾o→0の関係でごちゃごちゃやってた以降
自分の味ぽんはどの板で書いても、回線切ろうが、電源切ろうが
確認画面が1度も出ないんですが、良いのでしょうか?
ごちゃごちゃの当日に指摘した時は流された気がしますが…
先日の京ぽんのID末尾o→0の関係でごちゃごちゃやってた以降
自分の味ぽんはどの板で書いても、回線切ろうが、電源切ろうが
確認画面が1度も出ないんですが、良いのでしょうか?
ごちゃごちゃの当日に指摘した時は流された気がしますが…
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- ひろゆき氏 恵方巻きフードロスに解決案「ぼったくっている。大した具材でもないのにやたら高い」「食っているやつ頭悪いって文化を…」 [muffin★]
- 【八潮】74才トラック運転手の素顔は孫家族と暮らす寡黙な仕事人「2人のひ孫とよく散歩をしていました [七波羅探題★]
- 【横浜地検】電車内で「これ以上咳をしたら殺すぞ」 19歳男性にアイスピック突きつける 逮捕の59歳医師を不起訴に [シャチ★]
- 【食品】「トッピングなしでもうまいと思う袋麺」はどれ? 全国の傾向を徹底分析! [ひぃぃ★]
- 【サッカー】週刊新潮編集者と女性を不起訴処分に 伊東純也選手が「名誉傷つけられた」と告訴 [原島★]
- トランプ大統領、ガザ地区の住民の移住先としてモロッコ、プントランド、ソマリランドを検討 ★2 [お断り★]
- 深夜のホロライブ🌃
- 【実況】博衣こよりのえちえちマイクラ🧪★6
- 【埼玉】復旧まで2~3年かかる模様 [696684471]
- 疑問なんだけど発達障害ってなんですぐ感情的になってキレ散らかすの?
- 発達障害って「パターン」から外れたら動揺受けてパニックになるらしいな
- 日本の難関国立大学の工学部 女が来ないから「女子枠」を導入する なんでこないの?🤔