X

bbs.cgi再開発プロジェクト6

■ このスレッドは過去ログ倉庫に格納されています
2005/04/10(日) 16:15:47ID:a6rtBqIi0
peko鯖の稼動によりボトルネックの一つである事がより明らかになった
bbs.cgi作り直しプロジェクトです。

【開発環境の工事現場】
また挑戦。@2ch掲示板  http://dso.2ch.net/myanmar/
また挑戦2。@2ch掲示板 http://dso.2ch.net/yangon/

関連スレなどは >>2-5 くらい
479476
垢版 |
2005/06/08(水) 12:25:18ID:DTGWGuO70
>>477
NGワード内って正規表現交じりですか?そうでないならばっさりquotemetaすれば良いし、
Shift_JIS部分だけquotemetaするコードくらいなら書きますよ。

あと、済んだことだけど、

# 読み込む。。。 
# my @Rock_word = @FOX_Ro54; # メモリの無駄なので省略してみました。 

こういう場合は参照使えばメモリ食わないんではないかと。
性能には一切貢献しないと思うけど、

my $In_Strings = $GB->{FORM}->{'MESSAGE'}; # 長いので代入 

こういうのも

my $In_Strings = \$GB->{FORM}->{'MESSAGE'}; # 長いので代入 

こうして$$In_Stringsで使った方が若干メモリ(と文字列コピーにかかるコスト)はお徳。

もう一点。eval使ってるのは正規表現エラー回避のトラップでしょうか?
コケるような正規表現が混じってる可能性があるなら、

>>474
の策は、@FOX_Ro54に1つでも不備があると全部のチェックがコケますね。

NGワードに正規表現が一切ないという仮定なら、事前に@FOX_Ro54の中身を
丸ごとquotemetaすれば、正規表現でコケないはずなのでevalは外せるのでは。
480476
垢版 |
2005/06/08(水) 15:50:17ID:DTGWGuO70
> Shift_JIS部分だけquotemetaするコードくらいなら書きますよ。

とか言うほどの事じゃなかった。むしろテストの方が大変だった。
必要な作業だったのかどうか謎だけど一応上げておきます。
perl5.00503でテスト。

(票表十){2}

とか問題ありそうなShift_JIS + 正規表現交じりでやってみたけどOKでした。

foreach my $NG_word_ref (@FOX_Ro54){
  my $NG_word = $NG_word_ref->[0]; # エスケープしたままじゃ他で使えないのでコピー
    next unless $NG_word; # 空文字列ならスキップ
  $NG_word =~ s/((?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])+)/quotemeta($1)/geo;
  if (my $matched = eval{$In_Strings =~ m<$NG_word>}) { return $NG_word_ref } # 合致したらリファレンスを返す。 
  # 不正 NG ワードがあったり引っかからなければスキップ 
}

○チェック文字列1 - (票表十){2}
○チェック文字列2 -  十予約表
○In_Strings - ああ票表十票表十予約表いい

■裸の場合。
> /([\){2}/: unmatched [] in regexp at ./check.pl line 22.
> /\驅/: trailing \ in regexp at ./check.pl line 22.

■正規表現を噛ませた場合
> found.
> found.
NGNG
リストは、正規表現文字列が連なっております。
例えば。
(\.|.|/|/)(3|3|4|4|6|6|8|8|9|9 ...長いので省略。
↓Shift_JISですと、こうなります。
Unmatched ( in regex; marked by <-- HERE in m/( <-- HERE .|.|/|/)(3|3|4|4|6|6|8|8|9|9 ...長いので省略。
/が、バけていますよね♪([/] = 0x815E)

→こういう場合は参照使えばメモリ食わないんではないかと。
それ以前に、IsKoukokuでしか利用されていませんので、そのまま利用しました。
リファレンスにしろグローバルを触っちゃいますし。

→こうして$$In_Stringsで使った方が若干メモリ(と文字列コピーにかかるコスト)はお徳。
でもって、こう書いちゃうと中の人が呑み屋さんに繰り出しちゃう恐れがあるので避けていたりもしますです(w

→もう一点。eval使ってるのは正規表現エラー回避のトラップでしょうか?
ですです。
発行元でもチェックを行っていますが、以前と同じ失敗(すべてRockされる)を繰り返さないようにと、あえてそのようにしてあります。
2005/06/08(水) 19:06:25ID:DTGWGuO70
>>481
その文字列でチェックしてみたんですが、
5.00503ではエラー起きませんね。省略部分に何かあるんではないでしょうか?

> (\.|.|/|/)(3|3|4|4|6|6|8|8|9|9

これの8ビット目が立ってるバイトを「#」に置き換えると↓こんな感じです。

(.|#D|/|#^)(3|#R|4|#S|6|#U|8|#W|9|#X

「^」は一応メタキャラですが文頭にないので素通りのようです。最後、括弧が閉じてないので
勝手に閉じ括弧付けて実験しました。

もし全文か、他のお題があればこっちでチェックしますよ。
でもこの手のエラーはおそらく>>480のコードで全部解決するんじゃないかと思います。

参照とevalに関しては了解です。
483476
垢版 |
2005/06/09(木) 12:03:19ID:NnR04xax0
evalってコスト高いんじゃ……?と思ったのでベンチ取ってみた。
@FOX_Ro54が2048個のチェックを1000回。

Benchmark: timing 1000 iterations of with_eval, with_noeval...
 with_eval: 159 wallclock secs (158.80 usr +  0.02 sys = 158.82 CPU) @  6.30/s (n=1000)
with_noeval: 155 wallclock secs (154.28 usr +  0.05 sys = 154.33 CPU) @  6.48/s (n=1000)

誤差の範囲内なので、運用上の安全を考えると現状維持で良いと思った。>>480のコードのベンチも取ってみた。
ついでにJcode.pmで双方ともEUCに変換した時の結果も。

Benchmark: timing 1000 iterations of with_jcode, with_noreg, with_reg...
with_jcode: 493 wallclock secs (490.95 usr +  0.07 sys = 491.02 CPU) @  2.04/s (n=1000)
with_noreg: 124 wallclock secs (123.99 usr +  0.04 sys = 124.03 CPU) @  8.06/s (n=1000)
 with_reg: 159 wallclock secs (158.80 usr +  0.02 sys = 158.82 CPU) @  6.30/s (n=1000)

割と予想通りの結果。落としどころとしては悪くないんでは。>Shift_JISのquotemeta
"Rock54_List"ファイルにquotemetaしたものを突っ込んでおくというのもアリだけど、目視やエディタでの編集ができなくなります。
IsKoukokuでしか使わないのなら、Rock54読み込み時に先にquotemetaしとくってのはアリかも知れません。
NGNG
>>483
エロエロとありがとうですm(_ _)m深謝
ただ、、、今、家にあるメインの林檎機が昇天されましたので、対応が出来ないで居ますですぅぅぅ(滂沱)
♪実はすべての作業を林檎機でやっているものでして・・・
2005/06/09(木) 18:20:52ID:b8qRY6Z90
quotemetaを使わずに
s/(?<=[\x81-\x9F\xE0-\xFC])[\[\\\]\^\{\|\}]/\\$&/g
とかでも(やってることはあんまり違わないか)
486476
垢版 |
2005/06/09(木) 20:08:30ID:NnR04xax0
>>485
それだとエラーが出ますね。例えば、

"ワ[a]"

だと「ワ」は2バイト目も8bitが立っているので検索がスキップされますよね。
で、2バイト目と3バイト目の組み合わせをShift_JISの「充」と間違えて開き角括弧
「 [ 」をエスケープしてしまいます。
2005/06/09(木) 20:50:47ID:b8qRY6Z90
>>486
おお、そうだ。
2005/06/09(木) 23:45:12ID:b8qRY6Z90
もしかしてこうすればいいのか?(未テスト)
s/([\x81-\x9F\xE0-\xFC])([\[\\\]\^\{\|\}\x81-\x9F\xE0-\xFC])/$1\\$2/g
489476
垢版 |
2005/06/10(金) 00:51:10ID:C8+6ZCy40
>>488
30秒考えた限りでは問題なさそう。ただ、ベンチ取った結果、quotemetaとほとんど
コスト同じなんだよね。2、3回やってみたけど誤差前後1秒以内。

 with_reg1: 146 wallclock secs (144.33 usr +  0.05 sys = 144.38 CPU) @  6.93/s (n=1000)
 with_reg2: 145 wallclock secs (144.18 usr +  0.05 sys = 144.23 CPU) @  6.93/s (n=1000)

となるとquotemetaの方が安全かなとは思う(自分贔屓ですんません)。
2005/06/10(金) 01:11:38ID:Mm/OM+6u0
>>489
はやさの問題ではなくて気分の問題だったり.
>quotemetaの方が安全かなとは思う
同意w
2005/06/10(金) 08:39:08ID:klkomdbB0
>>483ナイスゥ

中の人が呑み屋さんに繰り出しちゃわないようにまとめてみます。

Shift_JIS の場合、エスケープする必要あり。
エスケープしておくと、リストの編集がはげしくめんどい。

解決方法
 1、encodingプラグマでエンコードする
 2、Shift_JIS文字列だけquotemetaする (エンコードよりはコストが安いはず)
後者のほうが処理コストが安い。
492476
垢版 |
2005/06/10(金) 11:20:46ID:C8+6ZCy40
>>484
ご愁傷さまです。早い復活を祈ってます。

>>480
あと若干ソースを変更。空文字チェックは直前の方がより安全ってのと、evalの結果の代入は
必要ないかと。

foreach my $NG_word_ref (@FOX_Ro54){
  my $NG_word = $NG_word_ref->[0]; # エスケープしたままじゃ他で使えないのでコピー
  $NG_word =~ s/((?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])+)/quotemeta($1)/geo;
    next unless $NG_word; # 空文字列ならスキップ
  eval{$main::In_Strings =~ /$NG_word/} and return $NG_word_ref; # 合致したらリファレンスを返す。  
  # 不正 NG ワードがあったり引っかからなければスキップ
}
493476
垢版 |
2005/06/10(金) 11:23:23ID:C8+6ZCy40
×   eval{$main::In_Strings =~ /$NG_word/} and return $NG_word_ref; # 合致したらリファレンスを返す。
○   eval{$In_Strings =~ /$NG_word/} and return $NG_word_ref; # 合致したらリファレンスを返す。

失礼。
NGNG
えっと、エスケープ処理は基地側で執り行おうと思っておりますので、IsKoukokuはそのままで桶になるかと♪
495root▲ ★
垢版 |
NGNG
>>494
りよかいです。
496476
垢版 |
2005/06/11(土) 01:23:50ID:VA/kMcZN0
>>494
お疲れ様です。とりあえず、

 next unless $NG_word; # 空文字列ならスキップ 

これはevalの直前に入れた方がいいと思うです。evalと同じくfail safeってことで。
極端な話、use strictしてないんだったら、quotemetaをtypoしただけで
NG_wordが全部空文字列(投稿が全部エラー)になるわけで。
NGNG
s/([\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])(?<!\\[^$\$\(\)\*\+\-\.\?\[\|\]\^\{\|\}])/quotemeta $1/ego;

が、今のところいー感じです♪
NGNG
>>497
が、今のところいー感じです♪→×
が、今のところいー感じです♪@基地内での実験
2005/06/11(土) 20:59:51ID:SiXhhBIF0
>>498
んでは、エスケープされたリストを配布する段取りをしてみるです。
不具合が出たらでたで。。。
2005/06/11(土) 22:35:39ID:SiXhhBIF0
>>499
エスケープされたリストを配布してみました。
何かあるようでしたら何かしらのレスポンスよろしこですですm(_ _)m
2005/06/12(日) 09:37:16ID:rq4KONmV0
klistに不具合がでていたその要因がわかりました。
IsKoukouの中にある、、、
if (my $matched = eval{$In_Strings =~ m<$NG_word>}) { return $NG_word_ref } # 合致したらリファレンスを返す。
を、、、
if (my $matched = eval{$In_Strings =~ m<$NG_word>}) { $NG_word_ref->[0] = $&; return $NG_word_ref; } # 合致したらNGワード部分の摘出とリファレンスを返す。
のように$&を返すようにしていただけるとありがたいですm(_ _)m
2005/06/12(日) 17:28:29ID:/I3kxr/A0
【Project peko】2ch特化型サーバ・ロケーション構築作戦 Part18
http://qb5.2ch.net/test/read.cgi/operate/1115133136/741 より

741 名前:root▲ ★[sage] 投稿日:2005/06/12(日) 17:17:42 ID:???0 BE:3831067-##
bbs.cgi 暴走対策として、RLimitCPU を 10 から 5 に変更。
どうも、スレ立てに暴走へと繋がる爆弾がひそんでいるような気がするですね。

だそうですが。
2005/06/12(日) 18:07:45ID:uT21qpVz0
今は subject.txt や index.html の更新時にロックしてないらしいので,
競合した時に意図せぬ動作につながっている,とかも考えられなくもないですね.
subject.txt のレス数について,単純にインクリメントするだけだとずれてくので
dat 中のレス数を毎回数え直さないといけないってのも,ロックしてない故の
競合によって起きてるような気もします.

で,対策ですが,まず考えられるのはきちんとロックするということですね.
それ以外の方法としては,message queue を利用して,bbs.cgi からは
subject.txt 等の更新要求を mq に放り込んで,別途走らせておく
更新用デーモンが mq から要求を取り出して処理する,って感じでしょうか.
mq を利用する方法なら,ロックしなくても処理がシリアライズされますし,
その更新用デーモンを C で書いて subject の並べ替えを例えば mmap() して
memmove() するような処理にすれば,今の Perl の処理よりも軽くできると思います.
504root▲ ★
垢版 |
NGNG
>>501
BBS.CGI - 2005/06/13
505root▲ ★
垢版 |
NGNG
移動しました。

>>499-500
なるほど、これですか(今頃気づくやつ)。

さて、まずは原因をつかまないと。
506root▲ ★
垢版 |
NGNG
むこうで聞いてみるか。
507root▲ ★
垢版 |
NGNG
さて、どうも配布用DBがこわれてるっぽいと。
で、配布用DBを作っているやつがおかしくなったらしいと。

質問・雑談スレ174@運用情報板
http://qb5.2ch.net/test/read.cgi/operate/1118562549/625-646
508root▲ ★
垢版 |
NGNG
ということで、この問題は後で別途ということに。
2005/06/13(月) 20:11:46ID:omwZrjjJ0
>>501
if (my $matched = eval{$In_Strings =~ m<$NG_word> ? return $& : return undef}) {
$NG_word_ref->[0] = $matched; return $NG_word_ref
} # 合致したらNGワード部分の摘出とリファレンスを返す。

もしかするとこうかもしれませんですm(_ _)m深謝
2005/06/13(月) 20:13:27ID:omwZrjjJ0
>>509
訂正前に送信しちゃってごめんなさいです。

if (my $matched = eval{ return $In_Strings =~ m<$NG_word> ? $& : undef }) {
$NG_word_ref->[0] = $matched; return $NG_word_ref
} # 合致したらNGワード部分の摘出とリファレンスを返す。

ですm(_ _)m深謝
511root▲ ★
垢版 |
NGNG
>>510 を qb6 に入れて試して、エラーがなかったら配布するです。
512root▲ ★
垢版 |
NGNG
if (my $matched = eval{ return $In_Strings =~ m<$NG_word> ? $& : undef }) {
$NG_word_ref->[0] = $matched; return $NG_word_ref;
} # 合致したらNGワード部分の摘出とリファレンスを返す。

これを配布しました。
NGNG
>>512
今のところ無事そうですよね。。。
よかた・・・(泪)
NGNG
名前欄に山崎渉が入ってるとfusianaになる機能とか、
そんな感じのいろんな過去の遺物を取り払ったら負荷が減ったりしないかな
515root▲ ★
垢版 |
NGNG
>>514
塵も積もれば(りゃ ってかんじですか。

また暇を見てプロファイリングしてみて、重いところを重点的に、
ってかんじですかね。
516root▲ ★
垢版 |
NGNG
ちなみに某京ぽんから「む山崎渉」って名前欄に入れているので、
この機能なくなると、ちょっと困っちゃったりして(w。
NGNG
fusianasanじゃないのかw
2005/06/15(水) 13:16:52ID:XFl23xTO0
だったら

fusianasanでリモホ表示を無くし、
もっと簡単な文字でリモホ表示ができるようになれば良いじゃないか、とか思った。

誰も使わんような文字とかで、被害が出ない程度に。
2005/06/15(水) 21:00:21ID:u+DtC+Eo0
>>518
> fusianasanでリモホ表示を無くし、

それをやった場合、

・メリット = もしかしたら軽くなるかもしれないが、不明
・デメリット = もしかしたら何が起きるか、不明

最低限でもメリットがデメリットを下回らないことが確実であることが
開発の条件だと思うです。
2005/06/16(木) 01:15:09ID:/BCKYOVZ0
>>518
・デメリット = たくさん考えられたフューザネイザン等のコピペが意味を成さなくなる。
2005/06/16(木) 14:39:21ID:X1yfjbM90
>>520
それは過去の遺物として残ったりして良いんじゃないのかな・・・?
522root▲ ★
垢版 |
NGNG
Perlのできない私が(りゃ。
とりあえず、LAとれそうなことはわかった。

#! /usr/local/bin/perl

use strict;

sub mumumuGetLA
{
use Sys::CpuLoad;

my ($GB) = @_;
my @load;

@load = Sys::CpuLoad::load();
$GB->{LOADAVG} = $load[0];
}

my $GBX = {};
$GBX->{LOADAVG} = 0.0;

mumumuGetLA($GBX);
print $GBX->{LOADAVG}, "\n";

exit 0;
523root▲ ★
垢版 |
NGNG
#! /usr/local/bin/perl

use strict;

sub mumumuGetMaxLA
{
my ($GB) = @_;
my $servertype = "";

if($servertype = /cobra/) { $GB->{MAXLOADAVG} = 30.0; } # cobra
elsif($servertype = /tiger/) { $GB->{MAXLOADAVG} = 20.0; } # tiger
elsif($servertype = /banana/) { $GB->{MAXLOADAVG} = 4.0; } # banana
else { $GB->{MAXLOADAVG} = 4.0; } # unknown
}

sub mumumuGetServerType
{
use Sys::Hostname;
my $hostname = "";

$hostname = hostname();
if($hostname =~ /cobra/ ||
$hostname =~ /oyster/) { return "cobra"; }
elsif($hostname =~ /tiger/) { return "tiger"; }
elsif($hostname =~ /banana/) { return "banana"; }
else { return "unknown"; }
}

# main

my $GBX = {};
$GBX->{MAXLOADAVG} = 0.0;


&mumumuGetMaxLA($GBX);
print $GBX->{MAXLOADAVG}, "\n";

exit 0;
524root▲ ★
垢版 |
NGNG
あ、呼ぶところを入れてないね。
525root▲ ★
垢版 |
NGNG
こんな感じか。
サーバタイプとってくるところは、外出ししといたほうがよさそうだから、
ちょっと冗長だけど、こうしておこう。

#! /usr/local/bin/perl

use strict;

sub mumumuGetMaxLA
{
my ($GB) = @_;
my $servertype = "";

$servertype = &mumumuGetServerType;
if($servertype =~ /cobra/) { $GB->{MAXLOADAVG} = 30.0; } # cobra
elsif($servertype =~ /tiger/) { $GB->{MAXLOADAVG} = 20.0; } # tiger
elsif($servertype =~ /banana/) { $GB->{MAXLOADAVG} = 4.0; } # banana
else { $GB->{MAXLOADAVG} = 4.0; } # unknown
}

sub mumumuGetServerType
{
use Sys::Hostname;
my $hostname = "";

$hostname = hostname();
if($hostname =~ /cobra/ ||
$hostname =~ /oyster/) { return "cobra"; }
elsif($hostname =~ /tiger/) { return "tiger"; }
elsif($hostname =~ /banana/) { return "banana"; }
else { return "unknown"; }
}

# main

my $GBX = {};
$GBX->{MAXLOADAVG} = 0.0;

&mumumuGetMaxLA($GBX);
print $GBX->{MAXLOADAVG}, "\n";

exit 0;
2005/06/17(金) 16:35:12ID:DURZUdCm0
>>525
乙です。

全体に言えることなんだけど、$GBみたいなグローバル変数的な参照変数を
あちこちの関数で持ちまわるよりも、関数はLoadAve. だけ返すようにして、
呼び出し元で明示的に$GB->[MAXLOADAVG]などに格納してやる方が
トレースはしやすいかと思います。

&mumumuGetMaxLA($GBX); 

だと、$GBXのどこをどういじられたのか見当つかないわけでして、

$GBX->[MAXLOADAVG] = &mumumuGetMaxLA();

の方が明示的かな、と。それから

if($servertype =~ /cobra/) { $GB->{MAXLOADAVG} = 30.0; } # cobra 
elsif($servertype =~ /tiger/) { $GB->{MAXLOADAVG} = 20.0; } # tiger 
elsif($servertype =~ /banana/) { $GB->{MAXLOADAVG} = 4.0; } # banana 
else { $GB->{MAXLOADAVG} = 4.0; } # unknown 

おせっかいだとは思うんだけど、こういう書き方はタイプミスで泣きやすいです。
連想配列のキーの場合、綴りが間違っていてもwarningが出ないので。

perl5であることが前提だけど、理想的には$GBのようなものは用途別に分けて
それぞれblessしてやって、getMaxLAのような関連関数はパッケージに全部突っ込んで、
new関数でイニシャル時にガツガツ値を入れていく方がすっきりするとは思うんだけど、
1から作り直しになるやね。んでもそろそろClassの概念を入れる時期には来てるかと。あと

mumumuGetMaxLA
mumumuGetServerType
mumumuGetLA

こういう命名規則に頼るならpackage宣言しちゃった方が早いんではないかと思います。
527root▲ ★
垢版 |
NGNG
MAXLOADAVGは1回だけ調べればいいので、ぐろーばるー(FOX)のほうに入れよう。
528root▲ ★
垢版 |
NGNG
>>526
うわあ。ありがとうです。

Perlって、ぜんぜんやったことないんですよ。
shで暮らしていたので。
2005/06/17(金) 16:41:23ID:xq5cod4F0
>>528
つか、場合によってはshでも十分でしょう・・・
2005/06/17(金) 16:47:02ID:DURZUdCm0
>>528
Perlの前はawk使いだったのでshは苦手ですw
参加できるのか分からないけど、できることがあればやりますよ。言い出しっぺの法則ですし。
全体のソースは見てないのですが、グローバル変数をあちこちに引きずる方式で
拡張を続けるといずれ破綻するような気がします。
531root▲ ★
垢版 |
NGNG
$FOX->{MAXLOADAVG} = &mumumuGetMaxLA();

にしました。
これは、船が出港する時に1回だけ実行。

で、$GB->{LOADAVG} (こっちは毎回調査)と $FOX->{MAXLOADAVG} を比較して、
$GB->{LOADAVG} 以上だったら、特殊処理っていうかんじで。
532root▲ ★
垢版 |
NGNG
で、
$GBX->{LOADAVG} = &mumumuGetLA();

にした。
確かにこのほうが、わかりやすいですね。
533root▲ ★
垢版 |
NGNG
で、mumumuMaxLACheckを作った。

sub mumumuMaxLACheck
{
my ($GB) = @_;

if($GB->{LOADAVG} ge $FOX->{MAXLOADAVG}) { return 1; }
else { return 0; }
}

これで、処理部分からこれを呼んでチェック。
534root▲ ★
垢版 |
NGNG
基本的に、$FOX が船が出航する時に1度だけ作られて、
$GB が船に乗る客ごとに作られているようです。

何せ、ドキュメントも仕様書も何にもないので(そういうもんらしいです)、
ソースからおじさんの心を、読み取っていくしかないわけで。
2005/06/17(金) 17:56:52ID:DURZUdCm0
>>533
> if($GB->{LOADAVG} ge $FOX->{MAXLOADAVG}) { return 1; } 

数値比較なら

if($GB->{LOADAVG} >= $FOX->{MAXLOADAVG}) { return 1; } 

にしないとマズいんではないかと。

>>534
なるほど。ソースは基本的に非公開なんでしょうか?
536root▲ ★
垢版 |
NGNG
>>535
そうなんですか(何も知らないのです)。
変えておきます。

>>534
ひ(りゃ の方針により、全面公開することは控えています。
広告チェック部分とか、公開できるところは公開していますです。
537毒さぼ
垢版 |
2005/06/17(金) 18:37:31ID:JW+0RdvC0
geだと文字列比較になるね。(>=が一般の数字比較)
例えば、$aaaが'100'、$bbbが'25' だとしたら、
($aaa >= $bbb) は真になる(100のほうが25より大きい)けど、
($aaa ge $bbb) は偽になっちゃう。('1'より'2'のほうが辞書で後に出てくる)
538root▲ ★
垢版 |
NGNG
>>537
直したです。
というか、私がいじるようじゃ、まずいんですよ。(す)

BBS.CGI - 2005/06/17
2005/06/17(金) 18:43:35ID:xq5cod4F0
>>536
というより、クリティカルなところは公表しないほうが無難かと
540root▲ ★
垢版 |
NGNG
>>539
むろんひ(りゃ の「公開しない」は、そういう方針からですね。
2005/06/17(金) 18:48:53ID:JW+0RdvC0
>>538
│_A
│・−・) ふふふ。。。(無表情で
↓ ⊂)
2005/06/17(金) 18:53:11ID:MsktfovF0
むぎゅ。
2005/06/17(金) 19:18:23ID:6y9xGyFjO
>>530
ふむ。
544root▲ ★
垢版 |
NGNG
>>543
あ、プログラミングをしたさそうな人が。
545root▲ ★
垢版 |
NGNG
>>530
…下2行は、確かにそうですね。

というかこの問題は、なかなかに難しい(テクニカルにじゃなくて)のかもなと。
2005/06/17(金) 19:29:32ID:Oo+hRM1L0
マミ… クリィミーマミ…
yasuさんか
2005/06/17(金) 20:35:24ID:6y9xGyFjO
>>545
グローバル変数はまだ使い慣れてないので、
頃合いの勘が働かないです。
たった数ファイルなのに「どこで定義されているんだー!」状態です。

>>546
まみらですよ。
2005/06/17(金) 20:51:21ID:DURZUdCm0
>>545
経験上、一度拡散したグローバルスコープな変数や関数は収拾するのが大変だし、
それで破綻しちゃったシステムもたくさん見てるので……。

スコープを意識せず書かれたソースコードは、全体を見渡さないと構造が把握できないように
なっているものが多く、ソースコードの総量が1人の人間が把握しきれる量を超えた時点で
誰も理解できない代物になってしまい、保守が不可能に→破綻となっちゃったりするわけです。

>>547
グローバルスコープな書き方の欠点がまさにそれですよね。てことは、グローバル変数は
実装上止むを得ず使ってるんでしょうか?
2005/06/17(金) 21:03:43ID:6y9xGyFjO
>>548
携帯用c.2chのphpを解読中でーす。
2005/06/17(金) 22:20:48ID:LI9OTnlL0
そろそろ引退の時期?
2005/06/17(金) 22:55:06ID:6y9xGyFjO
>>550
ん?私の事ですか?
人員を増やしても良いと思ってはいます。
2005/06/17(金) 23:18:54ID:DURZUdCm0
>>551
人員増やすなら立候補したいんだけど、その場合どうればいい?
携帯は経験浅いが、Perlなら10年以上Webプログラムとして書いてる。
2005/06/17(金) 23:28:12ID:Oo+hRM1L0
聡明期からか
すげえな
2005/06/17(金) 23:44:30ID:g+uG/BcP0
perlerさん並の理解力と柔軟性を期待
2005/06/17(金) 23:57:14ID:DURZUdCm0
>>553
Web自体はもっと前からあったけど、Mosaicの普及で一気に火がついた頃です。

>>554
大きくは裏切らないと思う。
2005/06/18(土) 01:18:32ID:P97ComF00
なんか詳しそうな人キタ━!

念のため関連スレ
http://qb6.2ch.net/test/read.cgi/operate2/1108090447/l50
2005/06/18(土) 07:52:36ID:lPNKO7CS0
KヨNTさんとかRes9ueとかですよねぇ。。。@グロ引きずりまわして破綻
この辺の改造依頼は基本的には断っていたりしてして(苦笑)

さてと、そろそろ林檎機がくるのでまずは基地の修繕かなぁ。。。
(SweepさんとBBRさんがごきげんななめ@coreをエレエレ中)
558555
垢版 |
2005/06/18(土) 09:59:40ID:FstfHQuj0
>>556
上がってないと専用ブラウザでも見れないっすね……。

>>557
お疲れです。

いや、Webに限っては大手企業でも結構そういう事があるんですよこれが。
まあ自分で蒔いた種なんですが、保守しきれなくなったプログラマが夜逃げとか。
……で、今その夜逃げしたプログラマが書いたとされるWebプログラムの再構築を
やってたりしますw

あとフリーウェアの開発が途中で止まっちゃって、かといってソースコードも開示しないって
事例が多いのもそういうのが原因だったりすることが多いんじゃないかな。
NGNG
>>558
再構築おつです。
人の書いたPerlの保守って、Cとかと比較してもなんか相当大変みたいですね。
(「みたい」っていうのは、感覚では理解しているが単に自分が体験していないってことです)

本業方面の知り合いのところに約10年近く「つぎはぎんぐ」されてきた
約37,000行のPerlとかありますが、もう、すごい状態みたいです。
ブログにも少し書きましたが、もう「神の領域」ってやつらしく。

そのPerlは主に書いたやつ(二人)が現役だそうで、
今でもきちんとメンテされてるみたいですが、
その二人がいなくなると(以下略。
2005/06/18(土) 15:24:40ID:AVxh77pL0
>>559
> 約37,000行のPerlとかありますが、もう、すごい状態みたいです。

・・・・・・・・・すげぇ>その知り合い
NGNG
・LAが基準値以上なら、IsKoukokuを船が死ぬまでスルーにした。
・animeサーバは、subject.txt/subback.htmlさぼりを発動させるレベルを
他のtigerサーバよりやや低めにした(基準値に対する率が違う)
2005/06/18(土) 20:03:56ID:FstfHQuj0
>>559
> 人の書いたPerlの保守って、Cとかと比較してもなんか相当大変みたいですね。 

CはCで大変だと思うけどね。C書く人ってPerlに比べてトリッキーなコード好む人多いし。

> 約37,000行のPerlとかありますが、もう、すごい状態みたいです。 
すごいっちゃーすごいけど、その前になんとかならなかったのかなあ……。

しかし今目の前にある「破綻しちゃった」大量のコードを読んでると、多分どうにもならなかったんだろうなあ
という空気が伝わってきたり。

>>561
乙です。ここじゃスレ違いだとは思うんだけど、Apacheのセッションタイムアウトって
やたら長いけどこれ攻撃に使われたりしない?あるいはブラウザの誤動作でゾンビコネクションで
MAX_CONNECTが埋まっちゃったりとか。
さっきqb5.2ch.netに繋いだまま放置プレイ食らわせたら7分50秒も回線あけて待っててくれたよ。
2005/06/18(土) 20:16:09ID:mpr8OfG00
>>562
>C書く人ってPerlに比べてトリッキーなコード好む人多いし。
いやいや、一行でいかに複雑なコードをかけるか競ってるのなんてPerlだけですし。
NGNG
>>551
いへいへ私のことです(照)
2005/06/18(土) 22:35:00ID:ApFHTIkz0
│_A
│・−・) なんかローカルルールのリンク変更をしても、
↓ ⊂)  livenhkのindex.htmlがちっとも更新されないんだけど(head.txtは更新されてる)
      LAが高い時にindex.htmlも更新されないようになってますか?
      (この時間のlive16のLAはそんなに高くない気もするけど)
      ちなみにdomeも微妙にしばらくindexが更新されてなかったっす。
2005/06/18(土) 22:40:11ID:ixn9Ucb10
>>561
LA見て制御変えるの実装されてるのか。
なら、Sambaの時間をLAに応じて可変にできないかなあ
2005/06/18(土) 23:44:03ID:P97ComF00
>>565
これ?
http://qb5.2ch.net/test/read.cgi/operate/1103495887/843
843 :FOX ★ [sage] :2005/03/23(水) 03:46:03 ID:???0
index.html subback.html の更新をたまにサボるようにした。
subject.txt は従来どおり更新してます
対象サーバ
ex10 live20 live16 live15
2005/06/19(日) 00:11:28ID:7GiTNm0Z0
>>567
│_A
│・−・) うん、、まぁ、本当はそのルーチンを流用してると思うんだけど、
↓ ⊂)  subback.htmlとsubject.txtって書いてあるし、
      なんかLAがそんなに高くなさそうなのにそうなったのが気になって、
2005/06/19(日) 00:20:42ID:HonutV4K0
>>568
subject.txtは更新されてるみたいだったから>>567は生きてるんじゃないかと思った
どういう基準でサボるんでしたっけ、これ?
570root▲ ★
垢版 |
NGNG
>>568
>>567 ということですね。はい。

私はそこの部分に、LAが高い時という処理を「追加」したので、
>>567 はやはり生きているです。

>>562
セッションタイムアウトについては、peko作戦スレでやりますか。
571root▲ ★
垢版 |
NGNG
で、subject.txt / subback.html ではなく index.html / subback.html なので、
bbs.cgi の私が書いたコメントを直しておいたです。

なにせ、Perl も bbs.cgi も、未知の世界がたくさん。
2005/06/19(日) 20:00:38ID:7GiTNm0Z0
│_A
│・−・) あれ、>>567が原因ってことっすか?
↓ ⊂)  いちおう言っておくと、昨日は22:30になっても、index.htmlが22:01ころのままずっと変化なしだったのね、、
      その間に700レスくらいついてたはずだけど、index.htmlは更新されてなかったと。。
      で、それ全部が>>567起因とは考えにくいので追加したが効いてるのかなぁ、、と。
      でもその時間のlive16のLAが、1.0以上な様子もなかったので。
2005/06/19(日) 23:51:07ID:???0
>>440-443
tmp5のIskoukokuですが
戻す予定はないのでしょうか

板の性質上(というと語弊があるかな?)
どうしても大量になりがちなので、、

まだ、様子見筒という
段階でしょうか?
2005/06/20(月) 05:32:32ID:idSWnAhx0
>>573
まぁそのうち
なんとかなるでしょ。
575root▲ ★
垢版 |
NGNG
live系は、pidをある一定数で割った余りが0の時だけindex.html/subback.htmlを書き換える、
という実装になっているようです。

>>573
わたし的にはシステム負荷以外に特に止めておく理由はないので、
今夜あたりに復活してみるかも。
576root▲ ★
垢版 |
NGNG
tmp5のIsKoukokuを復活しました。
山田ウイルスを撃退した、おじさんに感謝で。
2005/06/21(火) 00:39:06ID:dkib8z350
>>575
│_A
│;・−・) 了解いたしました、pidが10で割り切れるとき、ですか、、
↓ ⊂)   なんか更新される時はとことん更新されなくなるのね、、
       秒数がint(LA+1)とかで割り切れたとき、とかそんな感じのほうがいいような気がするけど、、まぁいいか、、
>>576
感謝感謝。。
578root▲ ★
垢版 |
NGNG
>>577
なるほど。

でもLAは所詮リアルタイムじゃないんで、
こっち(index.html / subback.html)は、あまりこれではやりたくなかったり。
(そもそもlive20等はIsKoukokuチェックなし)
2005/06/21(火) 15:26:54ID:x2Bt2xzo0
そういえばやっているかもでしょうけど、
スレ立てやdat落ちのタイミングとindex/subback更新を同期にできませんかね?

・sageなしスレ立てまたはdat落ちがあったらindex/subback更新
・sageスレ立てしたらsubbackのみ更新
・sageレス投稿時に更新しない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況