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 くらい
NGNG
>>39
まずはjcodeをはずすだけで、相当効果あると思います。
酩酊じゃなくなった時点で、おじさんとも調整しながら。
2005/04/23(土) 01:13:32ID:P1wP/4lM0
まぁ Shift JIS でやるという方向ならどうでもいいかも知れませんが,
もし文字コード変換するとしたら,Text::Iconv モジュール使えば
ネイティブの iconv() 使う分 Perl で書いてある jcode よりは軽いかと.
2005/04/23(土) 01:18:26ID:rE0tuwui0
>>43
名前欄にURL貼るタイプの広告は現状報告→ログ掘り→プロバイダ規制と人手をかけ
かつ巻き添え規制もあるんで、例えば>>42みたいなやりかたで簡略化できないかなと。
NGNG
>>44
あにやんが戻るのは夜更け頃ですよね(苦笑)
ってことで、とりあえず「改正IsKOUKOKU」部を晒しておきますですです。

>>45
文字コード変換のメインは、実のところ「半角カナ→全角カナ」だったりしますので、その部分を超ーwwwwwwっ簡略化してみたですです♪
NGNG
●改正IsKoukoku

sub IsKoukoku
{
my ($GB) = @_;
my $In_Strings = $GB->{FORM}->{'MESSAGE'}; # shift or return ''; # 入力無しなら (・∀・) カエレ

# 半角カナ→全角カナ変換テーブルの作成(むずかしいことはしない♪けれども直接書くと0x5Cが出てくるから16進文字列に)
# qw|。 「 」 、 ・ ヲ ァ ィ ゥ ェ ォ ャ ュ ョ ッ ー ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト
# ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ン ゛ ゜|;
my @Z_kana = (
'8142','8175','8176','8141','8145','8392','8340','8342','8344','8346','8348','8383','8385','8387','8362','815B',
'8341','8343','8345','8347','8349','834A','834C','834E','8350','8352','8354','8356','8358','835A','835C','835E',
'8360','8363','8365','8367','8369','836A','836B','836C','836D','836E','8371','8374','8377','837A','837D','837E',
'8380','8381','8382','8384','8386','8388','8389','838A','838B','838C','838D','838F','8393','814A','814B'
);
# ハシュにしてして。
my %Kana2Z = map +($_, pack("H4", $Z_kana[$_ - 0xA1])), (0xA1 .. 0xDF);

# 読み込む。。。
my @Rock_word = @FOX_Ro54;

# まず検索対象となる文字列を半角カナ→全角カナ変換。
$In_Strings =~ s/([0xA1-0xDF])/$Kana2Z[$1 - 0xA1]/g;

# NG ワード要素を NG ワード、MD5値、フラグの 3 要素だけにしてリファレンスにしてして。
@Rock_word = map( [ (split /<>/)[5,6,7] ] ), @Rock_word;

# では NG ワードのチェック。
foreach my $NG_word_ref (@Rock_word){
my $NG_word = $NG_word_ref->[0]; # リファレンスから NG ワードを取り出す。
$NG_word =~ s/([0xA1-0xDF])/$Kana2Z[$1 - 0xA1]/g; # 半角カナ→全角カナ変換。
eval { $In_Strings =~ m<$NG_word> }; # NG ワード自体をチェック。以前の失敗を繰り返さないために♪
if ($@){ return '' } # 不正 NG ワードがあったときは OK とする。
if ($In_Strings =~ m<$NG_word>) { # NG ワードをチェック。
return $NG_word_ref; # 合致したるらリファレンスを返す。
}
}
return '';
}

添削激しくキボンヌですm(_ _)m
ただし、リスト側もeuc→Shift_JISしなきゃなので、いきなり全鯖に導入しちゃうと気持ちよく叩かれるですです♪
NGNG
>>45
たしかに、でかいすね。
今ならText::Iconvのほうがよさげ。

でも、いわゆるWindowsの機種依存文字、大丈夫かしら。

>>47
了解です。
NGNG
おぉ。 >>48

で、入れるならリスト側と同時にやる必要ありと。
NGNG
あ、そっか。

つまり、ロックなシステムのほうも、いじる必要があるってことすね。
やはり同期とって、すすめるが吉かなと。
NGNG
>>48
# NG ワード要素を NG ワード、MD5値、フラグの 3 要素だけにしてリファレンスにしてして。
@Rock_word = map( [ (split /<>/)[5,6,7] ] ), @Rock_word;

@Rock_word = map( [ (split /<>/)[5,6,7] ], @Rock_word);
こうだよなぁ。。。

Text::Iconv って標準では入っていないのね(泪)
Encode.pmって使ってみようかなぁ@Rock54基地
NGNG
うわわ。banana238に入れればよい?
NGNG
>>51
登録/変更・削除部分とリスト更新部分は非同期になっているので前者を無効にすれば、テスト的運用が出来るかと思いますです♪
このあたりは秘密基地をご案内してみようかしら。。。
NGNG
>>53
えっと、さしあたっては、大丈夫かと思いますですです。
でもってもし必要になればそのときって事でm(_ _)m深謝
2005/04/23(土) 01:45:43ID:wSlmOpQB0
プロファイリング見て効果を確認しながらやってみては。
釈迦に説法ですが
NGNG
>>56
はい、そのつもりです。

でも、プロファイルする時はspeedycgiをいったん素のperlに戻さないとだめみたいですね。
speedycgi + >>25 のやつで qb6 でやったら、バックエンドが core dump しました。
NGNG
>>55
了解です。
でも、とりあえず入れておきました。
2005/04/23(土) 01:52:48ID:wSlmOpQB0
>>57
あー手間がかかるんですね。失礼しました。こうゆうのワクワクしますよね
NGNG
>>59
するですね。でも私よりも、FOXさんがするんじゃないかな。

qb6でのプロファイリングの方法を書いておこう。
これで、おじさんもりっぱなプロファイラー。

1)bbs.cgiの1行目を、
#!/usr/local/bin/perl -d:DProf
に変える
(qb6のbbs.cgiの3行目に既に書いてあるので、それを1行目に移すだけ)

2)普通に書き込みやスレ立てをする(bbs.cgiを起動する)

3)同じディレクトリに tmon.out というファイルができるので、それに対して、
dprofpp tmon.out
を実行すると、プロファイリングの結果が画面に表示される
2005/04/23(土) 02:39:40ID:q2W93/1G0
へぇ、数字で与えるとその数字にあたるキャラクタにマッチして
マッチしたキャラクタが数字になって出てくるのか。
初めて知った。よーし、パパ早速使っちゃうぞーっ!!
2005/04/23(土) 02:43:02ID:lDiLScJr0
処理が前とあんまり変わっていない上に半角カナ以外も変換しちゃってるけど
少しでも軽くなってればいいってことかな。
2005/04/23(土) 02:44:23ID:P1wP/4lM0
>eval { $In_Strings =~ m<$NG_word> }; # NG ワード自体をチェック。以前の失敗を繰り返さないために♪
>if ($@) { return '' } # 不正 NG ワードがあったときは OK とする。
>if ($In_Strings =~ m<$NG_word>) { # NG ワードをチェック。
>    return $NG_word_ref; # 合致したるらリファレンスを返す。
>}

この部分はこうすると regex match の実行1回だけで済むかな......

my $matched = eval { $In_Strings =~ m<$NG_word> }; # NG ワード自体をチェック。以前の失敗を繰り返さないために♪
if ($@) { return '' } # 不正 NG ワードがあったときは OK とする。
if ($matched) { # NG ワードをチェック。
    return $NG_word_ref; # 合致したるらリファレンスを返す。
}
64FOX ★
垢版 |
2005/04/23(土) 04:37:10ID:???0
私もまたまた酩酊ってことで
あした読んでみます、、、
NGNG
読み返してみるとボロボロだったり、、、(汗)
●改訂IsKoukoku改訂1版
→変換テーブルを単純配列にした(ハシュにする必要はなかった)
→不正NGワードがあったとき、そのままOKとしていたところを次のNGワードを探索するようにした
→不正チェックと正式チェックをまとめて1回にした( >>63 )

sub IsKoukoku
{
my ($GB) = @_;
my $In_Strings = $GB->{FORM}->{'MESSAGE'}; # shift or return ''; # 入力無しなら (・∀・) カエレ

# 半角カナ→全角カナ変換テーブルの作成(むずかしいことはしない♪けれども直接書くと0x5Cが出てくるから16進文字列に)
# qw|。 「 」 、 ・ ヲ ァ ィ ゥ ェ ォ ャ ュ ョ ッ ー ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト
# ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ン ゛ ゜|;
my @Kana2Z = (
0x8142,0x8175,0x8176,0x8141,0x8145,0x8392,0x8340,0x8342,0x8344,0x8346,0x8348,0x8383,0x8385,0x8387,0x8362,0x815B,
0x8341,0x8343,0x8345,0x8347,0x8349,0x834A,0x834C,0x834E,0x8350,0x8352,0x8354,0x8356,0x8358,0x835A,0x835C,0x835E,
0x8360,0x8363,0x8365,0x8367,0x8369,0x836A,0x836B,0x836C,0x836D,0x836E,0x8371,0x8374,0x8377,0x837A,0x837D,0x837E,
0x8380,0x8381,0x8382,0x8384,0x8386,0x8388,0x8389,0x838A,0x838B,0x838C,0x838D,0x838F,0x8393,0x814A,0x814B
);

# 読み込む。。。
my @Rock_word = @FOX_Ro54;

# まず検索対象となる文字列を半角カナ→全角カナ変換。
$In_Strings =~ s/([\xA1-\xDF])/$Kana2Z[$1 - 0xA1]/g;

# NG ワード要素を NG ワード、MD5値、フラグの 3 要素だけにしてリファレンスにしてして。
@Rock_word = map [ (split /<>/)[5,6,7] ] , @Rock_word;

# では NG ワードのチェック。
foreach my $NG_word_ref (@Rock_word){
my $NG_word = $NG_word_ref->[0]; # リファレンスから NG ワードを取り出す。
$NG_word =~ s/([\xA1-\xDF])/$Kana2Z[$1 - 0xA1]/g; # 半角カナ→全角カナ変換。
if (my $matched = eval{$In_Strings =~ m<$NG_word>}) { return $NG_word_ref } # 合致したるらリファレンスを返す。
elsif ($@) { next } # 不正 NG ワードがあったときは次の NG ワードへ。
}
return '';
}
66埼玉mikky ◆jM/TIxxEd.
垢版 |
NGNG
ねえねえ、疑問なんですけど2chはなんでdat使ってるんですか?
頻繁にアクセスされるスレは、
データベース使って、全部メモリテーブルに入れちゃったらいいじゃないですか。
メモリに入れておくと、ディスクまで取りに行くより全然速いですよ。
それに、ファイルのオープンクローズばかりだと
ファイルディスプリプタの消費が凄いだろうし、非効率じゃないですかねぇ。
2005/04/23(土) 10:51:38ID:q2W93/1G0
>>66
http://qb5.2ch.net/test/read.cgi/operate/1103495887/965 :動け動けウゴウゴ2ちゃんねる :sage :2005/04/08(金) 23:30:02 ID:OLl7UjV20
  「bbs.cgiスレでXML化を言い出す奴=Java屋の会社に入った新入社員」
  「bbs.cgiスレでMySQL化を言い出す奴=オープンソースWebASPを聞きかじった新入社員」

http://qb5.2ch.net/test/read.cgi/operate/1103495887/971 :ひろゆき@どうやら管理人 ★ :2005/04/09(土) 04:27:14 ID:???0 (p)?###
  >>965
  同意。

へー、マッチして出てきた文字列からそのまま数字を引けばその差の数値がでてくるのか。
初めて知った。よーし、ママも早速つかっちゃうぞー!!
68埼玉mikky ◆jM/TIxxEd.
垢版 |
NGNG
>>67
DB化といえばそうだけど、ただ単にDB使った掲示板みたいに
データをDBに入れるわけじゃないからねぇ。
メモリテーブルを使うメリットないとは思えないけど、
まあ、いろいろ考え方はあるからねぇ。
2005/04/23(土) 11:18:48ID:6bukU/2/0
>>68
じゃあ貴方が作ってください。
期待してます。頑張ってくださいね。
70埼玉mikky ◆jM/TIxxEd.
垢版 |
NGNG
せっかくアイデア出しても煽られるだけで終わったか、、、
なんというか寂しいね。
NGNG
劇的な結果が出るようならばやってみたいですよねぇ。
例えば、今ある50近い鯖がたった10台のTigerに収まっちゃうとかとか。
2005/04/23(土) 12:24:04ID:mRDogzLo0
>>65
濁点・半濁点を含むNGワードを半角で書かれると
ヒットしなくなる予感(「ガ」は「カ゛」ではなく「ガ」)
2005/04/23(土) 14:48:09ID:TdJ7gg7q0
man perlcompile
man perlcc

/* perl を C に変換して */ コンパイルしてみては。
2005/04/23(土) 23:02:23ID:f/pBGuZN0
>>73
すでにやってますがw
NGNG
>>72
そだよなぁ。。。
マンドクセ。。。
2005/04/24(日) 02:02:27ID:FSwUijWd0
「完璧なアイデアを出すよりも、動くコードを出す奴が評価される」
プログラマ世界の鉄則。
2005/04/24(日) 02:11:08ID:evOCb0dX0
コンパイルしてある場合でも、evalの部分はやっぱりPerlで解釈しながら動くのかな。

forechループをevalにする例
http://x68000.q-e-d.net/~68user/webcgi/search-1.html
NGNG
>>72
そういったノーマライズ(正規化)って、そのためのライブラリがあるかも。
NGNG
例えばIDN::Nameprepとかが使えるのかもしれないけど、UTF-8ベースだし。

で、そういった正規化が必要なのは、濁点・半濁点と、あと何かあるのかしら。
2005/04/24(日) 11:50:21ID:A4V8DF7T0
全角カタカナと半角カタカナを区別なく処理したいときは、
全角カタカナを半角カタカナにして情報量減らすんだっけか。

ガ→ガ  ガ→ガ  カ゛→ガ  カ゛→ガ
2005/04/24(日) 12:47:15ID:Ff0eXWtu0
>> 74

perl がどんな C を吐くかわからないが、あんまりよくなさげだったら、
IsKoukoku や IsKoukoku の中の"半角カナ→全角カナ変換"だけでも C で書いて、
入れ換えてみるのは。
2005/05/02(月) 03:17:41ID:68k7qPdk0
というか全部Cで書くのってだめなんすか?
2005/05/02(月) 16:43:11ID:6dv2zm420
1.言いだしっぺルール
2.メンテナンスコスト
3.perlはちゃんと書けば速い
2005/05/03(火) 05:40:58ID:9hjYG5x6O
で、ちゃんと書かれてるの?
2005/05/03(火) 07:38:42ID:4DLXOziK0
ちゃんと書いてある部分もあるだろうし、ちゃんとしていない部分もあるだろう。
2005/05/03(火) 14:03:33ID:oTGNOSTA0
bbs.cgiってフォーム処理とDAT出力くらいしかやってないように
見られるんだけど、めんどいことやってるのかな?

C+++FastCGIとかでわりと簡単に書き直せたりしたりとかしない?

・・・と思ってたけど、Perlで十分なら必要ないか。
2005/05/03(火) 17:36:51ID:2fo/jDCM0
>>86
実はいちばんめんどいのが各種チェックや統計処理だったり。

DNS化している部分もあるけど、やっぱり問題なのはディスクI/Oなのでしょうな
2005/05/03(火) 23:10:32ID:oTGNOSTA0
>>87
>実はいちばんめんどいのが各種チェックや統計処理だったり。

各種チェックってアクセス禁止IPのチェックとかDATファイルの1000オーバチェック
とかですかね・・・?確かにめんどそうだなぁ。

>DNS化している部分もあるけど、
素でDomain Name Systemかと思ったw
Digital Nervous Systemって抽象的でなにを言っているのかわからんけど、
高速にアクセスできるシステムって解釈でいいのかな

スレ汚しすいません
2005/05/03(火) 23:23:50ID:Qj6XBp5n0
DNSはDomainNameSystemの意味だよ。
つまり、書き込みが規制対象かどうかをDNSのプロトコルでリクエストして
その結果で判定しているということ。
2005/05/03(火) 23:44:45ID:4DLXOziK0
・書き換えがあまり発生せず
・反映速度の要求もシビアで無い
・複数ホストから同一データを参照する
というようなデータの場合はDNSを転用するってことでしょ。
スパムフィルターとしてRBLという実績がある方法。
2005/05/03(火) 23:51:15ID:Kx8XfPBE0
分散データベースである必要はあるのか?って気はするが、あるんだろうな
2005/05/04(水) 00:14:30ID:GM4RRXgJ0
DNSって名前解決ぐらいにしか使われないんだと思ってたけど、
>>89-90でわけわかんなくなりましたorz

勉強して出直してきます・・・
2005/05/04(水) 00:38:12ID:zXm56+aF0
DNSを転用するのはキャッシュが効くから元サーバーの負荷が減るってのもある。
2005/05/04(水) 11:47:18ID:keskHAhd0
>>92
DNSBLでググってみて。
9592
垢版 |
2005/05/05(木) 00:40:22ID:uwCu+mh10
ググってみました。

2ch運用サーバの中に、禁止ホストのブラックリストを保持していて、
リクエストがある度にそのリストを参照している、
という解釈でよろしいのでしょうか?
2005/05/05(木) 01:01:33ID:Cycs06qd0
>リクエストがある度にそのリストを参照している、
このへんが細かい点で違うが、まぁ結果的にはそういうことになるからいいか。
2005/05/05(木) 12:49:13ID:lrCXGanj0
一番大きなコストなのはRockのチェックのはず。
ここをウィルスチェッカー級の早さでチェックできればいうことないんですがねー

シマンテックあたりに相談したらおもしろいかもと煽ってみる
2005/05/06(金) 01:48:15ID:ukefjV1X0
待ちガイルがソニックブームを出すか、サマーソルトを出すかみたいにすれば速くならね?
必殺技が多すぎて大して速くなる訳でもないか。
99>>20で
垢版 |
2005/05/08(日) 15:32:47ID:r8qXmxcZ0
     /              `、       \   ___|_|」
  / ̄ ̄\              | ヽ      /  |__  |
'" ̄ヽ     ヽ!!           |,," ヘ    <       | |
ヽ          ゙!!!、        ,,-'   iヽ── /      丿 /
|||l            ゙゙ヽ、ll,,‐''''""     | ヽ|||||||||      ヽ/
|||l     ___,,,,,,   ゙l    ,,,,,    \|||||||||      _
||!'    /ヽ、 ;::''“”“~`゙>┴<;''“”~` /\ |'" ̄|     | |
\  /  |ミミヽ──‐'"ノ≡- ゙'──''彡| |、 |    |     | |
   ̄|    |ミミミ/"~( ,-、 ,:‐、 ) '彡|| |、/   /      | |
 ヽ、l|    |ミミミ|  |、─\\\\ |彡l| |/  /_     | |
  \/|l    |ミミミ| \_/ ̄\\\\''|l/    ̄/     | |
  \ ノ   l|ミミミ|  \二二\\\\     フ      | |
    ̄\  l|ミミミ|    ̄ ̄ ̄\\\\    \     | |
    | \ ヽ\ミヽ    ̄ ̄"'  \\\\   /    |_|
    /  \ヽ、ヾ''''ヽ、_____//\\\\ /
  /  ヽ ゙ヽ─、──────'/|   \\\\ ̄/
. /       ゙\ \     / / \__\\\\
   ───'''" ̄ ̄ ゙゙̄ヽ、__,,/,-'''"      \\\\
2005/05/09(月) 21:27:58ID:2gFvXXn20
subject.txtの1行分を256バイト固定長とかにしたら、ランダムアクセスやソートを速くできるかな。
2005/05/10(火) 09:59:41ID:MB/Dkquo0
>>100
資源の問題はおいといて、
\0 で埋める -> そういうのを考えてない処理系でバグが出る(特にC)。バカなエディタでは開けない
デリミタで区切って空白で埋める -> カラムの拡張性を殺す
というデメリットはあるんではないかと。

可読テキストデータを固定長にするメリットってそんなに大きい?
今までその手の試みが吉と出たことがないんだよな、経験上。

>>97
時間ができたら見てみます。
2005/05/12(木) 12:49:27ID:8ihXrdSb0
>> 101

固定長で Index を付けられるシステムを見たけど、すごいよ。

open(file, index, ...)
write("AA");
write("CC");
write("BB");

index をレコード全体に設定したとして、と上のように書くと、

open(file, index, ...)
read(buf);
read(buf);
read(buf);

とやると、
"AA"
"BB"
"CC"

って読み出せる処理系だった。
データベースなんか要らないわけだ。

UNIX 系ではないのでここでは全く関係ないのではあるが。
2005/05/13(金) 00:54:36ID:aRboB1hz0
投稿時の並び替えとかレス数の書き換え等が、
アドレス決めうちのメモリコピーのみで可能になるのがメリット?

subject.txtの書き換えなんて元々大したことなさそうだから意味内科。
2005/05/13(金) 09:09:29ID:BWd7ZxwZ0
>>102
ごめん、丸一晩考えたんだが何が凄いのかさっぱり分からん。
>>103
ベンチ取ってみりゃ分かるけど、固定長にしようが\n区切りにしようが
一旦ドカっとバッファに溜めたヤツを切り分けることに違いないんだから、
減らせる負荷なんて知れてる。regexをバンバン使ってるような処理系で
そんなことしても全く無意味どころかデメリットの方が大きいと思う。
2005/05/16(月) 08:17:39ID:buj4assb0
実際のシステム開発でもそうだけど、運用(障害対応等)や移行を無視した案ってのは、机上の九龍なんだよね
たとえば、datに依存したツールが2ch内外に何本あるのかとか
106動け動けウゴウゴ2ちゃんねる
垢版 |
2005/05/16(月) 15:59:06ID:HwKEKcal0
>机上の九龍
ウマイ!
107動け動けウゴウゴ2ちゃんねる
垢版 |
2005/05/16(月) 16:06:31ID:woCxAXtK0
まぁそういうタイトルの漫画あったけどな
108タソキ@妄想系統 ◆Ver7J.....
垢版 |
2005/05/17(火) 05:05:07ID:YLieYBBt0
まず、はじめに、perl少ししか読めません。スマソ。

文字コード問題。
例えば、WinXPだと、ベースをunicodeで処理すると、高速なんです。
>>45>>49>>52にも指摘があるのですが、その辺の最適化どうでしょうか。

次に、
NGワード.txtを正規表現にする案
-----NGWord.txt------
(?:ぬる|だめ)ぽ
^(?:.\w{2,3}|厨房|てっここ|こっこて|保守|ジュ|て(?:st|すと?)|テスト?|[あ-ん]っ(?:かり|くる)|さいたま)$
fusianasan
tanasin
unko
ウザッ
ウゼェ
うぜぇ
お(?:ま[いえ]|前)ら
---------------
で、これを
a = LineToArray("NGWord.txt"); // 読み込む
r = eval("(" + a.join("|") + ")");
$matched = r.match($In_Strings);
こういうのはどうでしょう。

あと、ぜんぜん関係ないけど、
逆保守(糞スレを保守)ツールに弱すぎると思います。
とりあえず、厨房板をサンプルにしますよ。
具体的には、レス数は適当ですけど、
・130レス以上位に伸びたスレは(伸びるごとに5段階ぐらいで)より落ちないように措置をする。
・20レス以下のものをもっと優先的に落とす。
109タソキ@妄想系統 ◆Ver7J.....
垢版 |
2005/05/17(火) 05:16:54ID:YLieYBBt0
禁止ホストのブラックリストを正規表現にする案とか
110タソキ@妄想系統 ◆Ver7J.....
垢版 |
2005/05/17(火) 05:28:56ID:YLieYBBt0
わざわざ毎回TXTを読んでるなら、改善の余地あり。

if (fileIsUpdate($NGWordTXT))
  rNGWord = makeR($NGWordTXT);

$bufFileLm = ""; // LastModified
function fileIsUpdate(file)
{
  $lm = GetFile(file).DateLastModified;
  if (fileLm == lm)
    return false;
    fileLm = lm;
  return true;
}
111タソキ@妄想系統 ◆Ver7J.....
垢版 |
2005/05/17(火) 05:33:30ID:YLieYBBt0
r = eval("/(" + a.join("|") + ")/ig"); // >>108の訂正
112タソキ@妄想系統 ◆Ver7J.....
垢版 |
2005/05/17(火) 05:38:52ID:YLieYBBt0
WinXPだと、List.TXT を unicode で保存しておくと読み書きが早い。
113タソキ@妄想系統 ◆Ver7J.....
垢版 |
2005/05/17(火) 05:54:55ID:YLieYBBt0
dat落ちに関しては、準良スレが圧縮ごとにポロポロ落ちていきますよ。
114タソキ@妄想系統 ◆Ver7J.....
垢版 |
2005/05/17(火) 06:16:00ID:YLieYBBt0
そか、過疎板のdat落ちを調整すれば、もっと人が増えると思う。
115タソキ@妄想系統 ◆Ver7J.....
垢版 |
2005/05/17(火) 06:32:56ID:YLieYBBt0
eval で 正規表現を使うとき、
空白行を飛ばしておく。
つまり、そうしないと /a||b/ とかになって、
つまりすべての表現にマッチしてしまう。(すべて規制してしまう)

同じように、間違った行を追加するリスクがあります。
たとえば、(?:a||b)とか、
[a-z{2,12}\.dqn\.co\.jp   ([a-z]{2,12}\.dqn\.co\.jp ) 
これを eval すると、危険です。

テスト追加してから、本追加すべきです。
NGNG
毎回読み込み問題。
→Speedyのおかげ?で船が自爆すると再読込になっているのかな。

うにコード処理。
→Perl5.8.x以降、内部ではそうなっています。なので、euc-jpにしたりしても同様な負荷が掛かるかも。

正規表現の誤登録。
→配布する前。登録/変更の際にチェックしています。(なんでもRockチェック)

|(or)の利用。
→BBRの絡みがあるので現状では。。。
117タソキ@妄想系統 ◆Ver7J.....
垢版 |
2005/05/17(火) 07:29:52ID:YLieYBBt0
OK
118タソキ@妄想系統 ◆Ver7J.....
垢版 |
2005/05/17(火) 07:45:59ID:YLieYBBt0
@Rock_word をグローバルにして LastModified 使うってのはどうです?
2005/05/17(火) 08:12:31ID:8VTiZqr70
なにこの低脳('A`)
2005/05/17(火) 10:34:17ID:dccFnq280
朝っぱらから元気ですなぁ
NGNG
>>118
船が出航する際に取得するだけなので、そこまで厳密でなくてもよいのかな。
更新がなければ無駄にはなるけれども、そこまでまだシビアな状態ではないような悪寒も。
2005/05/17(火) 13:38:11ID:yss/U/KY0
とりあえずISBN4-87311-130-7のフクロウ本は読んでないだろ。この人。
123FOX ★
垢版 |
2005/05/17(火) 13:41:06ID:???0
毎回読み込み問題。
→Speedyのおかげ?で船が自爆すると再読込になっているのかな。

なってるなってる
124タソキ@妄想系統 ◆Ver7J.....
垢版 |
2005/05/17(火) 20:23:58ID:YLieYBBt0
なるほど、Rockリストも出航時に読み込みですか。
   >>29 >@Rock_word = map { [ (split /<>/)[5,6,7] ] } map { &jcode::euc($_, 'euc', 'z') } @Rock_word;
ここで bbs.cgi が呼び出されるたびに jcode を呼びまくっていると思いました。
具体的には、 Rockリストの数 x3回以上、最低でも600回以上は呼んでいると理解しています。
   >>32 >リストには上限を作る (たとえば 200)
jcode も船が出航する際にだけ呼びまくればいかがでしょうか。
それとも、>>65 の改訂IsKoukoku は既に稼動済みですか?


>>119
未承諾広告※ ◆TWARamEjuA さん、丁寧なレスをありがとうございます。
で許せ
>>120 悪夢で目が覚めて気づいたらこんなところでレスをしていました。
>>122 教唆thx スマソ そんな鈍器みたいな本は読んだことないんですけど、
明示的な指摘をお願いします。あと、ID がウキョー。
125埼玉mikky ◆jM/TIxxEd.
垢版 |
2005/05/17(火) 21:31:16ID:w7QmQGw30
126動け動けウゴウゴ2ちゃんねる
垢版 |
2005/05/17(火) 22:37:03ID:JHtbUZVW0
http://www.toshinari.net/ここのCGIを改造してサブスクライバIDや固体情報を取得してみる方法はある?
NGNG
>>124
  <q cite=" >>29 ">@Rock_word = map { [ (split /<>/)[5,6,7] ] } map { &jcode::euc($_, 'euc', 'z') } @Rock_word;</q>

あーこれは、IsKoukokuの外でやっちゃうと桶ですね♪
@FOX_Ro54 = map { [ (split /<>/)[5,6,7] ] } map { &jcode::euc($_, 'euc', 'z') } <リストのファイルハンドル>;
128タソキ@妄想系統 ◆Ver7J.....
垢版 |
2005/05/18(水) 08:14:12ID:lWek53Vj0
出航時に、ついでに、
# 不正 NG ワードがあったときは splice関数で除去しておく♪
eval { $In_Strings =~m<$NG_word> };
splice(@Rock_word, i, 1); # i は配列のインデックス
とかどうでしょう?

perlがわからないのですが、
@Rock_word に splice が使えると解釈しています。
当然、上記のコードは雰囲気だけ醸し出しているってことでお願いします。

ほかには、[5,6,7]は[5]にしてもいいように見えますけど、合ってますか?
129タソキ@妄想系統 ◆Ver7J.....
垢版 |
2005/05/18(水) 08:16:15ID:lWek53Vj0
>>125
130タソキ@妄想系統 ◆Ver7J.....
垢版 |
2005/05/18(水) 08:18:23ID:lWek53Vj0
外でやると、
splice(@FOX_Ro54, i, 1); # i は配列のインデックス
です。
131タソキ@妄想系統 ◆Ver7J.....
垢版 |
2005/05/18(水) 08:38:56ID:lWek53Vj0
偽perl言語で書くとこんな感じですよ。

  i = 0, n = @FOX_Ro54.length;
  while (i < n)
    if (eval { $In_Strings =~m<@FOX_Ro54[i][0]> })
      splice((@FOX_Ro54, i, 1);
    else
      i++;

もしくは

  for (i = 0; i < n; i++) {
    if (eval { $In_Strings =~m<$@FOX_Ro54[i][0]> }) {
      splice(@FOX_Ro54, i, 1);
      i--;
      continue;
    }
132タソキ@妄想系統 ◆Ver7J.....
垢版 |
2005/05/18(水) 08:42:23ID:lWek53Vj0
違った、n にすると配列の長さの変動に対応できないので、
n は全部 @FOX_Ro54.length に置き換えですね。
133FOX ★
垢版 |
2005/05/18(水) 14:20:46ID:???0
それらは各サーバに配る前にやっておくべきでは?
NGNG
>>133
やってますやってます(照)

# NG ワードのエラーチェック
eval {
my $Test_String = "This is a TEST.";
$Test_String =~ m<$FORM{$key}>;
};
if ($@) { # エラーがあればエラー
my $message = $@;
$message =~ s/^(.*) at .*$/$1/;
Error('22',$message);
}

# code は危険だから鰓に。
Error('23') if $FORM{$key} =~ /\(\?+?\{.+}\)/;

# コメントだけやん(汗)@2004/11/13
Error('26', <<"EOS") if $FORM{$key} =~ /^\(\?#[^\)]+?\)?$/;
<dl>
<dt>登録しようとしたNGワード
<dd><span class="NG_word">$FORM{$key}</span>
</dl>
EOS

# なんでも NG をチェックしてみる。改
my $Match_over = eval {
my $count;
my $Test_Strings =<<"EOS";
長いので省略。。
135タソキ@妄想系統 ◆Ver7J.....
垢版 |
2005/05/18(水) 19:42:49ID:lWek53Vj0
>>133-134 なーるほど

$FOX_Ro54 と @Rock_word を分けたままで、[5,6,7]のmanmarで、作ってみました。
例によって、perlっぽいやつになっております。

# 外で、 @Rock_word を regExpでコンパイルしておく。
foreach (@Rock_word)
  $_[0] = qr/$_->[0]/;



  # では NG ワードのチェック。
  my $n = $Rock_word;
  foreach my $i ( 0 .. $n )
    if ($In_Strings =~ /$Rock_word->[$i]->[0]/)
      return $i; # インデックスを返す。
  return -1;
}

$nKoukoku = IsKoukoku();
if (0 <= $nKoukoku) # NG ワードを含む
  $FOX_Ro54->[$nKoukoku]->[5]; # NG ワードを参照する
else
2005/05/19(木) 00:50:32ID:3hYRxH7n0
正規表現をコンパイルしておくのはかなりよさそう。
137タソキ@妄想系統 ◆Ver7J.....
垢版 |
NGNG
# 入力要素の体裁(コントロールコードや<>を除く)
ここの正規表現もコンパイルするといいかもしれません。
文字列が1000文字以上の場合があるからです。
138タソキ@妄想系統 ◆Ver7J.....
垢版 |
NGNG
FOX Cawaii

投稿内容が大きすぎます!") if $ENV{'CONTENT_LENGTH'} > 16000;

ここは、シビアに、
256 FROM 256 mail 4096 MESSAGE 256 subject 10 key 10 time
足して4884

6000-7000ぐらいでどうかと思います。
139タソキ@妄想系統 ◆Ver7J.....
垢版 |
NGNG
http://dso.2ch.net/test/read.cgi/myanmar/1101890385/7
bbq&bbm(焼済) > barbon(焼) のほうが、いいかも。
140タソキ@妄想系統 ◆Ver7J.....
垢版 |
NGNG
>>139はそういえばクロール規制が入ったから、効果不明です。
141タソキ@妄想系統 ◆Ver7J.....
垢版 |
NGNG
クロールbarbon > bbq&bbm(焼済) > カキコbarbon(焼)
142タソキ@妄想系統 ◆Ver7J.....
垢版 |
NGNG
でもbarbonはリスト数が少ないからそれいいのか。スマソ
143タソキ@妄想系統 ◆Ver7J.....
垢版 |
NGNG
では、bbq&bbmの正規表現のコンパイルをする。
144タソキ@妄想系統 ◆Ver7J.....
垢版 |
NGNG
# POST入力情報を取得($FORM{}に格納)
ここの正規表現も>>137と同じですね。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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