peko鯖の稼動によりボトルネックの一つである事がより明らかになった
bbs.cgi作り直しプロジェクトです。
【開発環境の工事現場】
また挑戦。@2ch掲示板 http://dso.2ch.net/myanmar/
また挑戦2。@2ch掲示板 http://dso.2ch.net/yangon/
関連スレなどは >>2-5 くらい
bbs.cgi再開発プロジェクト6
■ このスレッドは過去ログ倉庫に格納されています
2005/04/10(日) 16:15:47ID:a6rtBqIi0
2005/05/30(月) 22:46:17ID:UtFyGIqu0
2005/05/30(月) 23:17:01ID:31RcjPGy0
亜種の出る速度から考えて正直対症療法に意味があるとは思えないけど
2005/05/30(月) 23:17:38ID:31RcjPGy0
参考になる実験結果も持ってないのにどうしてそんなphpを力いっぱい押せるんだか
2005/05/30(月) 23:47:10ID:cvk6biLo0
っていうか、どんな言語でも(たとえ水平マイクロアセンブラでも)、今から新規に作り直せば、
今のbbs.cgiよりきれいに違いない
そんなの自慢にもならん
今のbbs.cgiよりきれいに違いない
そんなの自慢にもならん
2005/05/30(月) 23:55:23ID:RGXs7Ntx0
作り直せというのは大分前からのこと。
仕様変更だって、1ヶ月前から告知したら専ブラも対応できるのに。
面倒なんですと。
仕様変更だって、1ヶ月前から告知したら専ブラも対応できるのに。
面倒なんですと。
2005/05/31(火) 00:08:01ID:NuMPfTs10
個人的な負荷実験結果でこの際100万アクセスって言われてる
ここでPHPの有効性を実際に実験したいってのが本音です。
ここでPHPの有効性を実際に実験したいってのが本音です。
2005/05/31(火) 00:26:27ID:jGPtv+4B0
口でいう奴よりも手を動かす奴のほうがすごい法則
2005/05/31(火) 03:42:02ID:TIbffBNl0
しこしこ
2005/05/31(火) 11:10:12ID:86o0U8t20
どのみち山田対策のからみもあって大幅な仕様変更やらなきゃいけないような悪寒がするけど・・・・
2005/05/31(火) 11:12:53ID:pIF7DXcf0
PHP使ってるサイトを良く見ますけど、どのサイトもクソ重いです…。
いかにPHPが優れていようと今の2chのcgiより重かったら何にもならないです。
いかにPHPが優れていようと今の2chのcgiより重かったら何にもならないです。
2005/05/31(火) 11:21:28ID:0jYZZ9Q30
phpも便利な言語だし好きだけどperlと比べてそれほどメリットはないよ。
perl捨ててphpにしようとかphp妄信者の寝言はもうたくさん。
それでもphpにしようとかいうひとはphpでbbs.cgi,read.cgi相当の祖体ぐらいだしてからにしてくれよ。
perl捨ててphpにしようとかphp妄信者の寝言はもうたくさん。
それでもphpにしようとかいうひとはphpでbbs.cgi,read.cgi相当の祖体ぐらいだしてからにしてくれよ。
2005/05/31(火) 11:24:48ID:0jYZZ9Q30
2005/05/31(火) 11:32:53ID:jGPtv+4B0
>214
御託はいいからさ
>213を嫁。
御託はいいからさ
>213を嫁。
2005/05/31(火) 11:36:19ID:0jYZZ9Q30
2005/05/31(火) 11:50:14ID:86o0U8t20
確かにphpは3.0が出た当時はまだperlに比べてアドバンテージがあった。
apacheモジュール実装然り、初心者にわかりやすく多くのDBとの連携のあるAPI群。
この当時ってperl5がでるかでないかぐらいじゃなかったかしら。
基本的にperlとjavaの弟分みたいなところがあるし、
両者がチューンがすすみ、PerlもSpeedyCGIやmod_perlなどのラッパーが充実してきた今、あまりアドバンテージは感じられないな。
apacheモジュール実装然り、初心者にわかりやすく多くのDBとの連携のあるAPI群。
この当時ってperl5がでるかでないかぐらいじゃなかったかしら。
基本的にperlとjavaの弟分みたいなところがあるし、
両者がチューンがすすみ、PerlもSpeedyCGIやmod_perlなどのラッパーが充実してきた今、あまりアドバンテージは感じられないな。
2005/05/31(火) 11:53:50ID:86o0U8t20
スクリプト言語の位置づけとコンパイル言語の位置づけを比較すると
shはアセンブラ
perlはC
rubyはC++/Java
phpはVB
ってところなのかな。
shはアセンブラ
perlはC
rubyはC++/Java
phpはVB
ってところなのかな。
2005/05/31(火) 12:01:03ID:0jYZZ9Q30
2005/05/31(火) 12:09:41ID:QiMRSrT20
言語の優位性語るスレじゃないのに
根本的な解決策にはならんでしょ
根本的な解決策にはならんでしょ
2005/05/31(火) 12:20:06ID:86o0U8t20
2005/05/31(火) 16:56:28ID:iy9dpxZMO
Perl信者テライタスwwwwwww
224stream ◆ap/yuix/tw
NGNG またいつものパターンですか
225root▲ ★
NGNG >>215
今は全部、speedycgiにしました。
perlccはしょせん、単なる毎回ロードするバイナリ。
で、ここでは「中身を何で書くか」といった、手段のことを言うんではなくて、
まずは目的のことを話してほしいなと。
まずは目的があったうえで、それにあった手段を選ぶわけで。
今は全部、speedycgiにしました。
perlccはしょせん、単なる毎回ロードするバイナリ。
で、ここでは「中身を何で書くか」といった、手段のことを言うんではなくて、
まずは目的のことを話してほしいなと。
まずは目的があったうえで、それにあった手段を選ぶわけで。
2005/05/31(火) 17:13:26ID:86o0U8t20
で、現状の問題点
・より確実な山田対策
・IsKoukoku
違ったら指摘よろ
あとなんかありましたっけ?
・より確実な山田対策
・IsKoukoku
違ったら指摘よろ
あとなんかありましたっけ?
227讃岐フォアンフォアン▲ ◆MylTDX..QI
NGNG それでおk
2005/05/31(火) 21:18:29ID:xnXA6jy30
山田について説明希望
2005/05/31(火) 21:20:19ID:aHPOndkO0
検索して
2005/05/31(火) 21:22:59ID:2uvrcdmn0
こんやが、
231ヾ(゚パ)ノ ◆f0.zuburi6
2005/05/31(火) 21:24:50ID:X5FkKZ+T0 武田
2005/05/31(火) 22:10:01ID:J6kC1tX50
233タソキ@妄想系統 ◆Ver7J.....
2005/05/31(火) 22:50:24ID:9aqh9O8n0 cgi 外部での対策
ウイルスの対策告知・啓蒙
http://tmp5.2ch.net/download/ の head.txt に、
山田ウイルスなんとかかんとかですです。。 とか。
# この板書けるのかしらはグローバルに
YamadaBarbon() # ブロック10回超えたら 12時間 これにかかると閃き。パラメータ適当
barbon
bbq bbm
samba
@GB # 格納
@GB =~ # 変換 重いと思われる。
# 一般的なエラーはここでまとめて
IsKoukoku # 重いと思われる。
# このスレッド書けるのかしら
# 書き込み確認/書き込み警告
負荷対策として
正規表現と文字列と eval の処理コストが高いので、
正規表現はコンパイルし、文字列はグローバルにする。
eval は外に出す。
# speedycgi のご利益はこういう風に受けるものだろうと思われる
@rMESSAGE = (qr/\r//g,
qr/\n/ <br> /g;
);
if (/MESSAGE/) {
$FORM{$_} =~ /@rMESSAGE[0]/;
$FORM{$_} =~ /@rMESSAGE[1]/;
ウイルスの対策告知・啓蒙
http://tmp5.2ch.net/download/ の head.txt に、
山田ウイルスなんとかかんとかですです。。 とか。
# この板書けるのかしらはグローバルに
YamadaBarbon() # ブロック10回超えたら 12時間 これにかかると閃き。パラメータ適当
barbon
bbq bbm
samba
@GB # 格納
@GB =~ # 変換 重いと思われる。
# 一般的なエラーはここでまとめて
IsKoukoku # 重いと思われる。
# このスレッド書けるのかしら
# 書き込み確認/書き込み警告
負荷対策として
正規表現と文字列と eval の処理コストが高いので、
正規表現はコンパイルし、文字列はグローバルにする。
eval は外に出す。
# speedycgi のご利益はこういう風に受けるものだろうと思われる
@rMESSAGE = (qr/\r//g,
qr/\n/ <br> /g;
);
if (/MESSAGE/) {
$FORM{$_} =~ /@rMESSAGE[0]/;
$FORM{$_} =~ /@rMESSAGE[1]/;
234タソキ@妄想系統 ◆Ver7J.....
2005/05/31(火) 22:53:30ID:9aqh9O8n0 山田ワクチンを作り、
重いところを軽くして山田耐性を上げる。
重いところを軽くして山田耐性を上げる。
235動け動けウゴウゴ2ちゃんねる
2005/06/01(水) 01:01:49ID:4S6eve7r0 スラッシュ入りとそうでないのにリストを分けて、入ってないレスの時はスラッシュ入りを回さないとか。
2005/06/01(水) 07:16:37ID:bf9SHC1F0
rockのファイルってジンギスカンしてます?
まあそれ以前の問題かもしれませんが・・・
関連でこんなんはっときます
ttp://www.oracle.co.jp/interactive/Techniques/VLDB/Basic/step08.html
まあそれ以前の問題かもしれませんが・・・
関連でこんなんはっときます
ttp://www.oracle.co.jp/interactive/Techniques/VLDB/Basic/step08.html
237235
2005/06/01(水) 10:31:09ID:3nHEF7NN0 メアドやドメイン名だけだとスラッシュ入らんな。ドットでチェックすればいいのかな。
238235
2005/06/01(水) 10:56:56ID:3nHEF7NN0 NGワードを「スラッシュ入り」「スラッシュ無しドット入り」「スラッシュ無しドット無し」の3つにあらかじめ分けておく。
「スラッシュ無しドット無し」のNGワードチェック。
本文にドットがあるかチェックして入ってたら「スラッシュ無しドット入り」のNGワードチェック。
本文にスラッシュがあるかチェックして入ってたら「スラッシュ入り」のNGワードチェック。
問題は正規表現と整合性がとれるかなんだが、俺はPerlわからんから予想できん。
「スラッシュ無しドット無し」のNGワードチェック。
本文にドットがあるかチェックして入ってたら「スラッシュ無しドット入り」のNGワードチェック。
本文にスラッシュがあるかチェックして入ってたら「スラッシュ入り」のNGワードチェック。
問題は正規表現と整合性がとれるかなんだが、俺はPerlわからんから予想できん。
2005/06/01(水) 11:10:50ID:zzFYRbIx0
とりあえず、仕組みやコードについてアドバイスしたいのなら、
Rock54プロジェクト関連の全ての過去ログに目を通してから語った方が
ええよ。
そうしないと話がループして不毛になるから。
過去ログや関連スレを探すのも2chのプロジェクトに参加するための最低限の
スキルだから、どこにあるか分からないとか言わないでね。
Rock54プロジェクト関連の全ての過去ログに目を通してから語った方が
ええよ。
そうしないと話がループして不毛になるから。
過去ログや関連スレを探すのも2chのプロジェクトに参加するための最低限の
スキルだから、どこにあるか分からないとか言わないでね。
じっけん結果。
RegExpのコンパイルは、あまり効果がなかったみたい。
Benchmark: timing 5 iterations of a, b, c...
a: 46 wallclock secs (42.39 usr + 0.01 sys = 42.40 CPU) @ 0.12/s (n=5)
b: 43 wallclock secs (25.86 usr + 0.03 sys = 25.89 CPU) @ 0.19/s (n=5)
c: 28 wallclock secs (26.54 usr + 0.02 sys = 26.56 CPU) @ 0.19/s (n=5)
s/iter a c b
a 8.48 -- -37% -39%
c 5.31 60% -- -3%
b 5.18 64% 3% --
RegExpのコンパイルは、あまり効果がなかったみたい。
Benchmark: timing 5 iterations of a, b, c...
a: 46 wallclock secs (42.39 usr + 0.01 sys = 42.40 CPU) @ 0.12/s (n=5)
b: 43 wallclock secs (25.86 usr + 0.03 sys = 25.89 CPU) @ 0.19/s (n=5)
c: 28 wallclock secs (26.54 usr + 0.02 sys = 26.56 CPU) @ 0.19/s (n=5)
s/iter a c b
a 8.48 -- -37% -39%
c 5.31 60% -- -3%
b 5.18 64% 3% --
#!/usr/local/bin/perl
use strict;
# use warnings;
use Jcode;
use Benchmark qw(:all);
########
# めいんるーちん
MAIN:
{
# 主要ファイル名
my $Rock54_PATH = qq|./|;
my $Rock54_List = qq|$Rock54_PATH/Rock54.txt|;
my $Rock54_List2 = qq|$Rock54_PATH/Rock54-1.txt|;
my $Rock54_DAT = qq|$Rock54_PATH/000.txt|;
my $reply = timethese( 5, {
'a' => \&IsKoukoku1,
'b' => \&IsKoukoku2,
'c' => \&IsKoukoku3,
});
cmpthese $reply;
exit;
use strict;
# use warnings;
use Jcode;
use Benchmark qw(:all);
########
# めいんるーちん
MAIN:
{
# 主要ファイル名
my $Rock54_PATH = qq|./|;
my $Rock54_List = qq|$Rock54_PATH/Rock54.txt|;
my $Rock54_List2 = qq|$Rock54_PATH/Rock54-1.txt|;
my $Rock54_DAT = qq|$Rock54_PATH/000.txt|;
my $reply = timethese( 5, {
'a' => \&IsKoukoku1,
'b' => \&IsKoukoku2,
'c' => \&IsKoukoku3,
});
cmpthese $reply;
exit;
# 従来の方法?
sub IsKoukoku1 {
# bbs.cgi の初めのところみたいところ。
# NGファイルの読み込み
open Rock54, $Rock54_List or die "$!:[$Rock54_List]";
# NG ワード要素を NG ワード、MD5値、フラグの 3 要素だけにしてリファレンスにしてして。
my @Rock_word = map [ (split /<>/)[5,6,7] ] , <Rock54>;
close Rock54;
# 索敵ファイルを読み込み(operate/1064936147.datを利用[820レス/504KB])
open DAT_File, $Rock54_DAT or die $!;
my @DAT = map((split /<>/)[3], <DAT_File>); # 本文だけ抽出。
close DAT_File;
# ここからがIsKoukokuの本体みたいなところ。
# 総レス数(820)を10倍界王拳
foreach my $In_Strings ((@DAT) x 100){
# では NG ワードのチェック。
foreach my $NG_word_ref (@Rock_word){
$In_Strings = jcode->euc($In_Strings , 'sjis', 'z'); # 本文を半角カナ→全角カナ変換。
my $NG_word = jcode->euc($NG_word_ref->[0], 'euc', 'z'); # リファレンスから取り出して半角カナ→全角カナ変換。
if (my $matched = eval{$In_Strings =~ m<$NG_word>}) { last } # 合致したら。。。
elsif ($@) { last } # 不正 NG ワードがあったら。。。
}
}
}
sub IsKoukoku1 {
# bbs.cgi の初めのところみたいところ。
# NGファイルの読み込み
open Rock54, $Rock54_List or die "$!:[$Rock54_List]";
# NG ワード要素を NG ワード、MD5値、フラグの 3 要素だけにしてリファレンスにしてして。
my @Rock_word = map [ (split /<>/)[5,6,7] ] , <Rock54>;
close Rock54;
# 索敵ファイルを読み込み(operate/1064936147.datを利用[820レス/504KB])
open DAT_File, $Rock54_DAT or die $!;
my @DAT = map((split /<>/)[3], <DAT_File>); # 本文だけ抽出。
close DAT_File;
# ここからがIsKoukokuの本体みたいなところ。
# 総レス数(820)を10倍界王拳
foreach my $In_Strings ((@DAT) x 100){
# では NG ワードのチェック。
foreach my $NG_word_ref (@Rock_word){
$In_Strings = jcode->euc($In_Strings , 'sjis', 'z'); # 本文を半角カナ→全角カナ変換。
my $NG_word = jcode->euc($NG_word_ref->[0], 'euc', 'z'); # リファレンスから取り出して半角カナ→全角カナ変換。
if (my $matched = eval{$In_Strings =~ m<$NG_word>}) { last } # 合致したら。。。
elsif ($@) { last } # 不正 NG ワードがあったら。。。
}
}
}
# あらかじめ、カナ変換をしておく。
sub IsKoukoku2{
# bbs.cgi の初めのところみたいところ。
# NGファイルの読み込み
open Rock54, $Rock54_List or die $!;
# NG ワード要素を NG ワード、MD5値、フラグの 3 要素だけにしてリファレンスにしてカナ変換してして。
my @Rock_word =
map [ jcode->euc($_->[0], 'euc', 'z'), $_->[1,2] ],
map [ (split /<>/)[5,6,7] ],
<Rock54>;
close Rock54;
# 索敵ファイルを読み込み(operate/1064936147.datを利用[820レス/504KB])
open DAT_File, $Rock54_DAT or die $!;
my @DAT = map((split /<>/)[3], <DAT_File>); # 本文だけ抽出。
close DAT_File;
# ここからがIsKoukokuの本体みたいなところ。
# 総レス数(820)を10倍界王拳
foreach my $In_Strings ((@DAT) x 100){
# では NG ワードのチェック。
foreach my $NG_word_ref (@Rock_word){
$In_Strings = jcode->euc($In_Strings , 'sjis', 'z'); # 本文を半角カナ→全角カナ変換。
my $NG_word = $NG_word_ref->[0]; # リファレンスから取り出し。
if (my $matched = eval{$In_Strings =~ m<$NG_word>}) { last } # 合致したら。。。
elsif ($@) { last } # 不正 NG ワードがあったら。。。
}
}
}
sub IsKoukoku2{
# bbs.cgi の初めのところみたいところ。
# NGファイルの読み込み
open Rock54, $Rock54_List or die $!;
# NG ワード要素を NG ワード、MD5値、フラグの 3 要素だけにしてリファレンスにしてカナ変換してして。
my @Rock_word =
map [ jcode->euc($_->[0], 'euc', 'z'), $_->[1,2] ],
map [ (split /<>/)[5,6,7] ],
<Rock54>;
close Rock54;
# 索敵ファイルを読み込み(operate/1064936147.datを利用[820レス/504KB])
open DAT_File, $Rock54_DAT or die $!;
my @DAT = map((split /<>/)[3], <DAT_File>); # 本文だけ抽出。
close DAT_File;
# ここからがIsKoukokuの本体みたいなところ。
# 総レス数(820)を10倍界王拳
foreach my $In_Strings ((@DAT) x 100){
# では NG ワードのチェック。
foreach my $NG_word_ref (@Rock_word){
$In_Strings = jcode->euc($In_Strings , 'sjis', 'z'); # 本文を半角カナ→全角カナ変換。
my $NG_word = $NG_word_ref->[0]; # リファレンスから取り出し。
if (my $matched = eval{$In_Strings =~ m<$NG_word>}) { last } # 合致したら。。。
elsif ($@) { last } # 不正 NG ワードがあったら。。。
}
}
}
# あらかじめ、カナ変換してRegExpをコンパイルしておく。
sub IsKoukoku3{
# bbs.cgi の初めのところみたいところ。
# NGファイルの読み込み(RegExpコンパイル済み)
open Rock54, $Rock54_List or die $!;
# NG ワード要素を NG ワード、MD5値、フラグの 3 要素だけにしてリファレンスにしてして。
my @Rock_word =
map [ qr|$_->[0]|, $_->[1,2] ],
map [ jcode->euc($_->[0], 'euc', 'z'), $_->[1,2] ],
map [ (split /<>/)[5,6,7] ],
<Rock54>;
close Rock54;
# 索敵ファイルを読み込み(operate/1064936147.datを利用[820レス/504KB])
open DAT_File, $Rock54_DAT or die $!;
my @DAT = map((split /<>/)[3], <DAT_File>); # 本文だけ抽出。
close DAT_File;
# ここからがIsKoukokuの本体みたいなところ。
# 総レス数(820)を10倍界王拳
foreach my $In_Strings ((@DAT) x 100){
$In_Strings = jcode->euc($In_Strings , 'sjis', 'z'); # 先に、本文を半角カナ→全角カナ変換。
# では NG ワードのチェック。
foreach my $NG_word_ref (@Rock_word){
my $NG_word = $NG_word_ref->[0]; # リファレンスから取り出し。
if (my $matched = eval{$In_Strings =~ m<$NG_word>}) { last } # 合致したら。。。
elsif ($@) { last } # 不正 NG ワードがあったら。。。
}
}
}
}
__END__
sub IsKoukoku3{
# bbs.cgi の初めのところみたいところ。
# NGファイルの読み込み(RegExpコンパイル済み)
open Rock54, $Rock54_List or die $!;
# NG ワード要素を NG ワード、MD5値、フラグの 3 要素だけにしてリファレンスにしてして。
my @Rock_word =
map [ qr|$_->[0]|, $_->[1,2] ],
map [ jcode->euc($_->[0], 'euc', 'z'), $_->[1,2] ],
map [ (split /<>/)[5,6,7] ],
<Rock54>;
close Rock54;
# 索敵ファイルを読み込み(operate/1064936147.datを利用[820レス/504KB])
open DAT_File, $Rock54_DAT or die $!;
my @DAT = map((split /<>/)[3], <DAT_File>); # 本文だけ抽出。
close DAT_File;
# ここからがIsKoukokuの本体みたいなところ。
# 総レス数(820)を10倍界王拳
foreach my $In_Strings ((@DAT) x 100){
$In_Strings = jcode->euc($In_Strings , 'sjis', 'z'); # 先に、本文を半角カナ→全角カナ変換。
# では NG ワードのチェック。
foreach my $NG_word_ref (@Rock_word){
my $NG_word = $NG_word_ref->[0]; # リファレンスから取り出し。
if (my $matched = eval{$In_Strings =~ m<$NG_word>}) { last } # 合致したら。。。
elsif ($@) { last } # 不正 NG ワードがあったら。。。
}
}
}
}
__END__
○えんばいろめんと
jcode.plがうまく動かなかったのでJcode.pmで。
$ uname -a
Linux tierra.baila6.jp 2.4.27-0vl7.5 #1 Tue May 17 13:33:27 JST 2005 i686 unknown
$ dmesg | grep Hz
Detected 1050.026 MHz processor.
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
なキカイで。。。
jcode.plがうまく動かなかったのでJcode.pmで。
$ uname -a
Linux tierra.baila6.jp 2.4.27-0vl7.5 #1 Tue May 17 13:33:27 JST 2005 i686 unknown
$ dmesg | grep Hz
Detected 1050.026 MHz processor.
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
なキカイで。。。
246タソキ@妄想系統 ◆Ver7J.....
2005/06/02(木) 08:45:31ID:VnP48VQZ0 ということは perl での正規表現のコンパイルは意味がないけれど、
文字列をあらかじめ宣言しておくことは効果があるってことですよね
文字列をあらかじめ宣言しておくことは効果があるってことですよね
2005/06/04(土) 03:35:19ID:6UTTXnDi0
ここで良いのか分からないけど、、、
「スレッドストッパー」が働いたときに、subback.html等に
レス数の増加が反映されないのはどうなんでしょうか?
http://qb5.2ch.net/test/read.cgi/operate/1117803694/l50
↑スレッドストッパーを入れて28だけど、、
http://qb5.2ch.net/operate/subback.html
↑ここでは27となっている。
「スレッドストッパー」が働いたときに、subback.html等に
レス数の増加が反映されないのはどうなんでしょうか?
http://qb5.2ch.net/test/read.cgi/operate/1117803694/l50
↑スレッドストッパーを入れて28だけど、、
http://qb5.2ch.net/operate/subback.html
↑ここでは27となっている。
2005/06/04(土) 03:40:59ID:z2pnxTOZ0
250root▲ ★
NGNG >>248
単純に、スレッドストッパーさんはsubject.txtやsubback.htmlの更新、
場合によってはindex.htmlの書き換えといった、
とってもコストのかかる重い処理を、一切やってないってことですね。
そもそも正直、必要性を感じないし。
単純に、スレッドストッパーさんはsubject.txtやsubback.htmlの更新、
場合によってはindex.htmlの書き換えといった、
とってもコストのかかる重い処理を、一切やってないってことですね。
そもそも正直、必要性を感じないし。
251root▲ ★
2005/06/04(土) 22:00:50ID:???0 IsKoukokuの軽量化が急務っぽいので、
やろうと思うです。
ex11とanimeのbbs.cgi船の重さが15倍ぐらい違うのを見たら、
決断せざるを得ないすね。で、これをせめて10倍ぐらいにはしたいなと。
で、すみませんがこれって今どんな状況で、どう進めればいいんでしたっけか。
やろうと思うです。
ex11とanimeのbbs.cgi船の重さが15倍ぐらい違うのを見たら、
決断せざるを得ないすね。で、これをせめて10倍ぐらいにはしたいなと。
で、すみませんがこれって今どんな状況で、どう進めればいいんでしたっけか。
252ピロリ
2005/06/04(土) 22:07:37ID:ir56pciX0 1) まず 山田関係は全部外す
2) 上限を設定する
3) すべて ShiftJis に変更したものを bbs.cgi で回す
2) 上限を設定する
3) すべて ShiftJis に変更したものを bbs.cgi で回す
253root▲ ★
2005/06/04(土) 22:12:10ID:???0 >>252
どもです。反応はや。
Perlぜんぜんだめなひと(Cならまぁぼちぼちですが)ですが、
やれることをやってみようかと。
1) 3) は、脳内にあったです。
で、2) は「登録できるデータの上限」を設定するっていうことかしら。
どもです。反応はや。
Perlぜんぜんだめなひと(Cならまぁぼちぼちですが)ですが、
やれることをやってみようかと。
1) 3) は、脳内にあったです。
で、2) は「登録できるデータの上限」を設定するっていうことかしら。
254ピロリ
2005/06/04(土) 22:13:16ID:ir56pciX0 そうですー
せいぜい 200とか
広告爆撃対策だとこれくらいでたりるんでは? (推測)
せいぜい 200とか
広告爆撃対策だとこれくらいでたりるんでは? (推測)
256root▲ ★
2005/06/04(土) 22:19:35ID:???0 で、SJISでやるのと、マッチングするところのコストを下げる(上限とか、場合によってはdbにするとか)のが、
鍵なのかしら。
鍵なのかしら。
257ピロリ
2005/06/04(土) 22:20:05ID:ir56pciX0 まったくそうは思っていなかったり、
Rockにたよりすぎですよ
url 以下のは全部外すべきかと
Rockにたよりすぎですよ
url 以下のは全部外すべきかと
258ピロリ
2005/06/04(土) 22:20:47ID:ir56pciX0 本当は 半角英数字だけだから
マッチングにこまるとは全く思っていないです
マッチングにこまるとは全く思っていないです
259root▲ ★
2005/06/04(土) 22:26:59ID:???0 >>257
> Rockにたよりすぎですよ
ふむ。
ざっと中身見てみましたが、目視で8割ぐらいがURLっぽいかんじですかね。
そうじゃないのは意外に少ないみたい。
あとは、そのURLっぽいのが本当に全部必要なのかとか、
もし必要ならハッシュ入れたりしてそこのコストを下げられないかとか、
そういう話ですか。
で、マッチングは正規表現使ってるですね。
regexpの高速なやつがあれば、相当変わるような予感も。
> Rockにたよりすぎですよ
ふむ。
ざっと中身見てみましたが、目視で8割ぐらいがURLっぽいかんじですかね。
そうじゃないのは意外に少ないみたい。
あとは、そのURLっぽいのが本当に全部必要なのかとか、
もし必要ならハッシュ入れたりしてそこのコストを下げられないかとか、
そういう話ですか。
で、マッチングは正規表現使ってるですね。
regexpの高速なやつがあれば、相当変わるような予感も。
260ピロリ
2005/06/04(土) 22:28:35ID:ir56pciX0 だいたい 50% を撃退するのに 10円かかるとします。
20円かければ 100% 撃退できる? そんなばかな事はありません。
残り 50% の50%だから 75% ですね、期待できるのは、
さらに 10円かける(都合30円)かけると 87.25% 、
まだ 100% ではありません。
これを 100% にしようとして、1500円くらいかけている段階かしら?
わたしは 30円くらいでいいと思っています。
あとはポリシーの問題化と、
あくまで100%を目指すなら、それもありかと。たんたんとやるだけ。
20円かければ 100% 撃退できる? そんなばかな事はありません。
残り 50% の50%だから 75% ですね、期待できるのは、
さらに 10円かける(都合30円)かけると 87.25% 、
まだ 100% ではありません。
これを 100% にしようとして、1500円くらいかけている段階かしら?
わたしは 30円くらいでいいと思っています。
あとはポリシーの問題化と、
あくまで100%を目指すなら、それもありかと。たんたんとやるだけ。
261讃岐フォアンフォアン▲ ◆MylTDX..QI
NGNG http://←この部分外して登録とか
262ピロリ
2005/06/04(土) 22:29:24ID:ir56pciX0 あっ ちと数字またがったか、
いつものことで
いつものことで
265root▲ ★
2005/06/04(土) 22:32:13ID:???0 まずは、EUC→SJISに変えてみるだけで、相当効果ある気がするです。
前にやったプロファイリングの結果では、jcodeが相当重かったような。
もう1回qb6でプロファイリングしてみるです。
前にやったプロファイリングの結果では、jcodeが相当重かったような。
もう1回qb6でプロファイリングしてみるです。
266reffi@報告人 ★
2005/06/04(土) 22:32:53ID:???0 登録数を下げる方法としては強制時限消去ってのはどうでしょうか?
例えば登録後、30日でデータベースから強制削除
※システムに負担がかかっているのなら新システムの構築か人的資源の投入のどっちが
いいかってところですね
例えば登録後、30日でデータベースから強制削除
※システムに負担がかかっているのなら新システムの構築か人的資源の投入のどっちが
いいかってところですね
これかな、
%Time ExclSec CumulS #Calls sec/call Csec/c Name
58.1 0.102 0.125 1 0.1016 0.1252 main::IsKoukoku
35.3 0.062 0.055 2853 0.0000 0.0000 jcode::convert
26.8 0.047 0.024 2853 0.0000 0.0000 jcode::euc2euc
22.2 0.039 0.225 1 0.0390 0.2251 main::bbs_entryXXX
13.1 0.023 0.008 2853 0.0000 0.0000 jcode::h2z_euc
13.1 0.023 0.023 10 0.0023 0.0023 LWP::UserAgent::BEGIN
9.12 0.016 0.016 3 0.0052 0.0052 Net::DNS::Packet::dn_comp
9.12 0.016 0.039 2853 0.0000 0.0000 jcode::to
9.12 0.016 0.024 2853 0.0000 0.0000 jcode::euc
%Time ExclSec CumulS #Calls sec/call Csec/c Name
58.1 0.102 0.125 1 0.1016 0.1252 main::IsKoukoku
35.3 0.062 0.055 2853 0.0000 0.0000 jcode::convert
26.8 0.047 0.024 2853 0.0000 0.0000 jcode::euc2euc
22.2 0.039 0.225 1 0.0390 0.2251 main::bbs_entryXXX
13.1 0.023 0.008 2853 0.0000 0.0000 jcode::h2z_euc
13.1 0.023 0.023 10 0.0023 0.0023 LWP::UserAgent::BEGIN
9.12 0.016 0.016 3 0.0052 0.0052 Net::DNS::Packet::dn_comp
9.12 0.016 0.039 2853 0.0000 0.0000 jcode::to
9.12 0.016 0.024 2853 0.0000 0.0000 jcode::euc
268root▲ ★
2005/06/04(土) 22:34:54ID:???02005/06/04(土) 22:41:50ID:5JYtZIYC0
rock word検索毎に毎回jcodeを呼び出してたときのデータじゃなかったっけ?
274讃岐フォアンフォアン▲ ◆MylTDX..QI
NGNG 登録一週間で一定の量までいってなければ削除とか
275root▲ ★
NGNG で、内部データをSJIS化するには、どういう手順でやればいいのかしら。
丁稚どんの改良が必要?
あと、いわゆる「表」みたいな字の対策も入れる必要があるような予感も。
丁稚どんの改良が必要?
あと、いわゆる「表」みたいな字の対策も入れる必要があるような予感も。
2005/06/04(土) 22:45:32ID:oewniHwY0
レスにurl入ってるかどうか調べて、入ってない場合はチェックを一部省略するってやってますか?
278ピロリ
2005/06/04(土) 22:47:41ID:ir56pciX0 #################################################################################################
#罠、罠、罠、罠、罠に
#入力:
#IsKoukoku(対象文字列[Shift_JIS],Rock54のファイル名) 現状は無し。sub で定義中。
#返り血ぶしゅー:
#OK ならば 空文字列(偽)
#NG ならば (規制文字列(真)[Shift_JIS], MD5値, フラグ)の配列へのリファレンス
sub IsKoukoku
{
my ($GB) = @_;
my $In_Strings = $GB->{FORM}->{'MESSAGE'}; # shift or return ''; # 入力無しなら (・∀・) カエレ
# 読み込む。。。
my @Rock_word = @FOX_Ro54;
# EUC に変換して半角カナ→全角カナにしてして。
# まず対象となる文字列を変換。
$In_Strings = jcode::euc($In_Strings , 'sjis', 'z');
# NG ワードも変換。ついでに NG ワード、MD5値、フラグの 3 要素だけにしてリファレンスにしてして。
@Rock_word = map { [ (split /<>/)[5,6,7] ] } map { &jcode::euc($_, 'euc', 'z') } @Rock_word;
# では NG ワードのチェック。
foreach my $NG_word_ref (@Rock_word){
my $NG_word = $NG_word_ref->[0]; # リファレンスから NG ワードを取り出す。
eval { $In_Strings =~m<$NG_word> }; # NG ワード自体をチェック。以前の失敗を繰り返さないために。。。
return '' if $@; # 不正 NG ワードがあったときは OK とする。
if ($In_Strings =~m<$NG_word>) { # NG ワードをチェック。
$NG_word_ref->[0] = &jcode::sjis($&, 'euc'); # 該当すれば NG ワードを sjis に戻して。。。
return $NG_word_ref; # リファレンスを返す。
}
}
return '';
}
#罠、罠、罠、罠、罠に
#入力:
#IsKoukoku(対象文字列[Shift_JIS],Rock54のファイル名) 現状は無し。sub で定義中。
#返り血ぶしゅー:
#OK ならば 空文字列(偽)
#NG ならば (規制文字列(真)[Shift_JIS], MD5値, フラグ)の配列へのリファレンス
sub IsKoukoku
{
my ($GB) = @_;
my $In_Strings = $GB->{FORM}->{'MESSAGE'}; # shift or return ''; # 入力無しなら (・∀・) カエレ
# 読み込む。。。
my @Rock_word = @FOX_Ro54;
# EUC に変換して半角カナ→全角カナにしてして。
# まず対象となる文字列を変換。
$In_Strings = jcode::euc($In_Strings , 'sjis', 'z');
# NG ワードも変換。ついでに NG ワード、MD5値、フラグの 3 要素だけにしてリファレンスにしてして。
@Rock_word = map { [ (split /<>/)[5,6,7] ] } map { &jcode::euc($_, 'euc', 'z') } @Rock_word;
# では NG ワードのチェック。
foreach my $NG_word_ref (@Rock_word){
my $NG_word = $NG_word_ref->[0]; # リファレンスから NG ワードを取り出す。
eval { $In_Strings =~m<$NG_word> }; # NG ワード自体をチェック。以前の失敗を繰り返さないために。。。
return '' if $@; # 不正 NG ワードがあったときは OK とする。
if ($In_Strings =~m<$NG_word>) { # NG ワードをチェック。
$NG_word_ref->[0] = &jcode::sjis($&, 'euc'); # 該当すれば NG ワードを sjis に戻して。。。
return $NG_word_ref; # リファレンスを返す。
}
}
return '';
}
2005/06/04(土) 22:47:56ID:5JYtZIYC0
280reffi@報告人 ★
2005/06/04(土) 22:49:57ID:???0 >275
この辺ですか?
(5.8以降限定ですけど)
ttp://www.fl.reitaku-u.ac.jp/~schiba/perl/perlEncoding.html#shiftjis
この辺ですか?
(5.8以降限定ですけど)
ttp://www.fl.reitaku-u.ac.jp/~schiba/perl/perlEncoding.html#shiftjis
2005/06/04(土) 22:52:58ID:5JYtZIYC0
正規表現を使う必要のあるNGワードって意外と少ない気もするが
Rockだとそうでもないのかな?
固定文字列の検索なら工夫の余地が大きいと思うんだけど
Rockだとそうでもないのかな?
固定文字列の検索なら工夫の余地が大きいと思うんだけど
2005/06/04(土) 23:00:49ID:5JYtZIYC0
map { &jcode::euc($_, 'euc', 'z') } @Rock_word
これは単なる半全角変換だっけ?
これは単なる半全角変換だっけ?
まずは、>>243 の方法ってのはいかがでしょうか?
>>240 にて、
s/iter a c b
a 8.48 -- -37% -39%
c 5.31 60% -- -3%
b 5.18 64% 3% --
と、対比64%との数値が出ていることですので。。。
IsKoukokuの中で、NGワードファイルのeuc→Shift_JISを行っているものを、
NGワードファイルを読み込んできたときに変換しておくという手法です。
(参照:>>127)
あと、リストのShift_JIS化はかなり躊躇しております。
いかんせん、Shift_JISによる文字化けを回避するために、
登録所ではすべてをeuc-jpで処理をしていることもありまして。
(登録者がエスケープを気にしなくても良いようにとの思いで登録所を作成した経緯もありますのでm(_ _)m深謝)
それからそれから。
NGワードリストの並びですが、以前は、有効期限が長い物順に並べておりましたが、
現在では、BBRからの返りが多い物順に替えてあります。
ので、多少減らしても大丈夫かもしれないです。
しかし、200という数ではかなり漏れが出てしまうかもしれないです。。。
BBRの返りを見ても、最低でも、1500近くは必要かもです。
>>240 にて、
s/iter a c b
a 8.48 -- -37% -39%
c 5.31 60% -- -3%
b 5.18 64% 3% --
と、対比64%との数値が出ていることですので。。。
IsKoukokuの中で、NGワードファイルのeuc→Shift_JISを行っているものを、
NGワードファイルを読み込んできたときに変換しておくという手法です。
(参照:>>127)
あと、リストのShift_JIS化はかなり躊躇しております。
いかんせん、Shift_JISによる文字化けを回避するために、
登録所ではすべてをeuc-jpで処理をしていることもありまして。
(登録者がエスケープを気にしなくても良いようにとの思いで登録所を作成した経緯もありますのでm(_ _)m深謝)
それからそれから。
NGワードリストの並びですが、以前は、有効期限が長い物順に並べておりましたが、
現在では、BBRからの返りが多い物順に替えてあります。
ので、多少減らしても大丈夫かもしれないです。
しかし、200という数ではかなり漏れが出てしまうかもしれないです。。。
BBRの返りを見ても、最低でも、1500近くは必要かもです。
286 ◆WMaLhm.gkw
2005/06/04(土) 23:36:16ID:64YlXvAF0 rockリストに変更があったときに、NGワード・MD5値・フラグだけをShiftJIS化したサブセットも作ることにして、それを元にして判定しましょ……ってこと?
2005/06/04(土) 23:56:28ID:gNaPLbTW0
対象リストに載っているデータを
SJISに直すと共に、べた書きのPerlプログラムに直すスクリプトを作る。
そして、bbs.cgiではこれをソースとして動かす。
SpeedyCGIでコンパイルは10分に1回なんだから無問題。
とか。
SJISに直すと共に、べた書きのPerlプログラムに直すスクリプトを作る。
そして、bbs.cgiではこれをソースとして動かす。
SpeedyCGIでコンパイルは10分に1回なんだから無問題。
とか。
289ピロリ
2005/06/04(土) 23:57:02ID:ir56pciX0 ちといろいろ忘れたので復習が寺
各サーバの丁稚どんは原本を定期的に引っ張ってくる
1) 原本ってどこにあるんでしたっけ? bbq.2ch.net ?
2) 原本を出力するときに \t 区切りの Shift Jis にしておけば一番お特?
各サーバの丁稚どんは原本を定期的に引っ張ってくる
1) 原本ってどこにあるんでしたっけ? bbq.2ch.net ?
2) 原本を出力するときに \t 区切りの Shift Jis にしておけば一番お特?
2005/06/05(日) 00:06:20ID:m8q3xj0O0
そうだけど
毎回ファイルに載ってる全部を読みながら正規表現のコンパイルをして云々・・・と比べて
1/((呼び出される回数/10分)/プロセス数)・・・見込みで1/10-1/100程度にはなるかと。
毎回ファイルに載ってる全部を読みながら正規表現のコンパイルをして云々・・・と比べて
1/((呼び出される回数/10分)/プロセス数)・・・見込みで1/10-1/100程度にはなるかと。
293root▲ ★
NGNG あ、まずエラーにならないことをqb6で確認するです。
294ピロリ
2005/06/05(日) 00:13:41ID:hV/aUjEj0 まったー
295ピロリ
2005/06/05(日) 00:14:42ID:hV/aUjEj0 読み込んだときに変換するのは激しく反対。
配布前になされるべきです
配布前になされるべきです
296root▲ ★
NGNG ふむ。
ということは、各サーバに置かれる時点でSJISもので全角半角もなされたものにすべきと。
つまり、丁稚側でやるべきってことかな。
ということは、各サーバに置かれる時点でSJISもので全角半角もなされたものにすべきと。
つまり、丁稚側でやるべきってことかな。
297ピロリ
2005/06/05(日) 00:16:20ID:hV/aUjEj0 系の入り口or最終段階で encode , decode が入るのは
当然ですが、途中段階で interpliter がはいるなんてシステムは
激しく反対。
中身は「ただのブツ」意味の無いものであるべきです
当然ですが、途中段階で interpliter がはいるなんてシステムは
激しく反対。
中身は「ただのブツ」意味の無いものであるべきです
298root▲ ★
NGNG リストのおおもと EUC
↓
配布用マスター SJIS
↓
各サーバに配布
↓
そのまま利用
っていうふうにすれば、いいような。
↓
配布用マスター SJIS
↓
各サーバに配布
↓
そのまま利用
っていうふうにすれば、いいような。
299ピロリ
2005/06/05(日) 00:24:10ID:hV/aUjEj0 んだんだ
300ピロリ
2005/06/05(日) 00:25:24ID:hV/aUjEj0 そうすれば
改修するところは
1) マスター作り部
2) IsKoukoku内の処理
ということになり、今後の改修もここだけになるッス
改修するところは
1) マスター作り部
2) IsKoukoku内の処理
ということになり、今後の改修もここだけになるッス
2005/06/05(日) 00:29:53ID:5aS7YfV20
NG_wordに正規表現使ってないならEUCに変換なんてしないで
index()でいいんだけどな
index()でいいんだけどな
あり得る手段としては、「DATをeuc-jpにする」というのもある香奈♪
それはさておき、、、
となると、かなり大変だよなぁ。。。
●Rock54側でやるべき事。
・配布用リストを変換しておく。
1. 全角カナ→全角カナ+半角カナにしてor設定(ex.がんばる→(が|ガ|(ガ))(ん|ン|ン)(ば|バ|(バ))(る|ル|ル)
2. euc-jp→Shift_JISする際に、誤認をするものにエスケープを施す(「表」とか「ー」とか)
3. euc-jp→Shift_JISにする。
こんな感じかな?
#banana238から追い出されそうな悪寒(苦笑)@負荷増大
それはさておき、、、
となると、かなり大変だよなぁ。。。
●Rock54側でやるべき事。
・配布用リストを変換しておく。
1. 全角カナ→全角カナ+半角カナにしてor設定(ex.がんばる→(が|ガ|(ガ))(ん|ン|ン)(ば|バ|(バ))(る|ル|ル)
2. euc-jp→Shift_JISする際に、誤認をするものにエスケープを施す(「表」とか「ー」とか)
3. euc-jp→Shift_JISにする。
こんな感じかな?
#banana238から追い出されそうな悪寒(苦笑)@負荷増大
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【ホリエモン】堀江貴文氏「俺本気になって暴露するなら文春とか霞むくらいの情報持ってるよ」と告白し反響 元フジ長谷川豊氏と対談 ★2 [Ailuropoda melanoleuca★]
- 【八潮市道路陥没】運転手の救出活動を再開…作業用スロープが完成し重機でがれきの撤去始める ★10 [Ailuropoda melanoleuca★]
- イオンのフードコートの飲食店が全て撤退で飲食できない現象…なぜ発生? (西川立一氏他) [少考さん★]
- 【漫画】ジャンプ新連載はサッカー漫画! マガジン『ブルーロック』作者「完全に我々を潰しに来てます」 [ネギうどん★]
- 元フジアナ・渡邊渚さん、自著への感想に涙止まらず「救われた気持ちに」 家族からの言葉も明かす [少考さん★]
- 1時間働いてビッグマック2.2個 「スマイル」も安い日本 [蚤の市★]