bbs.cgiの開発作業をすすめていくためのスレッドです。
FOXさんの努力によりSpeedyCGIへの対応が行われ、
パフォーマンスの向上が図られたbbs.cgi。
・さらなるカスタマイズ
・パフォーマンスの向上
・微妙な虫取り
・残された秘境エリアの開拓
あたりをターゲットに。
前スレ:
bbs.cgi再開発プロジェクト7
http://qb5.2ch.net/test/read.cgi/operate/1130918407/
探検
bbs.cgi再開発プロジェクト Part8
レス数が950を超えています。1000を超えると書き込みができなくなります。
1root▲ ★
NGNG864stream ◆PNstream2s
2007/02/23(金) 12:39:38ID:ezCNONMk0 datの破損
http://wwwww.2ch.net/test/read.cgi/news4vip/1172149686/738-739
(●持ってない人用) http://asnxload.dip.jp/files/ppfx00370.txt
738のレスを書き込み中に739の書き込みが割り込んだように見える
http://wwwww.2ch.net/test/read.cgi/news4vip/1172149686/738-739
(●持ってない人用) http://asnxload.dip.jp/files/ppfx00370.txt
738のレスを書き込み中に739の書き込みが割り込んだように見える
>>860
再利用となる index.html や subback.html 作成用の subject.txt データに関しては、
bbs.cgi で subject.txt を更新(func.pl の UpdateSubjectDat())した後に
open(SUBJECT, $subjectTxtPath)
binmode(SUBJECT);
flock(SUBJECT, 1);
@subjectTxt = <SUBJECT>;
close(SUBJECT);
chomp(@subjectTxt);
で改めて読み込んで処理すればいいかと。
@subjectTxt = <SUBJECT>; な読み込みは Perl 内部で特に最適化されてる部分なので
二重の読み込み処理に見えますが、そんなにコストは高くないです。
再利用となる index.html や subback.html 作成用の subject.txt データに関しては、
bbs.cgi で subject.txt を更新(func.pl の UpdateSubjectDat())した後に
open(SUBJECT, $subjectTxtPath)
binmode(SUBJECT);
flock(SUBJECT, 1);
@subjectTxt = <SUBJECT>;
close(SUBJECT);
chomp(@subjectTxt);
で改めて読み込んで処理すればいいかと。
@subjectTxt = <SUBJECT>; な読み込みは Perl 内部で特に最適化されてる部分なので
二重の読み込み処理に見えますが、そんなにコストは高くないです。
>>865 訂正
flock いらないですね
flock いらないですね
>>859
いろいろと制約事項(subject.txtの内容が破損してないなど)はありますが
# subback.html
$tmpl = qq[<a href="%s/l50">%d: %s</a>\n];
$cnt = 0;
for (@subjectTxt) {
printf($tmpl, substr($_, 0, 10), ++$cnt, substr($_, 15));
}
でよいかと
いろいろと制約事項(subject.txtの内容が破損してないなど)はありますが
# subback.html
$tmpl = qq[<a href="%s/l50">%d: %s</a>\n];
$cnt = 0;
for (@subjectTxt) {
printf($tmpl, substr($_, 0, 10), ++$cnt, substr($_, 15));
}
でよいかと
ついでに index.html 書き出し部分も
# index.html
$boradName = 'news4vip';
# 1..10
$tmpl = qq[<a href="../test/read.cgi/${boardName}/%s/l50" target="body">%d:</a> <a href="#%d">%s</a> ];
$cntLast = (@subjectTxt > 10) ? 10 : scalar(@subjectTxt) ;
for $cnt (1 .. $cntLast)
{
$_ = $subjectTxt[$cnt-1];
printf($tmpl, substr($_, 0, 10), $cnt, $cnt, substr($_, 15));
}
# 11..100
$tmpl = qq[<a href="../test/read.cgi/${boardName}/%s/l50" target="body">%d: %s</a> ];
$cntLast = (@subjectTxt > 100) ? 100 : scalar(@subjectTxt) ;
for $cnt (11 .. $cntLast)
{
$_ = $subjectTxt[$cnt-1];
printf($tmpl, substr($_, 0, 10), $cnt, substr($_, 15));
}
# 上位10スレの l10 のhtml化
$cntLast = (@subjectTxt > 10) ? 10 : scalar(@subjectTxt) ;
for $cnt (1 .. $cntLast)
{
# threadId 取得
$threadId = ($subjectTxt[$cnt-1], 0, 10)
# dat を読む (ここでもIOを減らす方法はいくつかある)
open(DAT, "${boardPath}/${threadId}.dat");
# 書く ( 1 と l10 部分)
}
# index.html
$boradName = 'news4vip';
# 1..10
$tmpl = qq[<a href="../test/read.cgi/${boardName}/%s/l50" target="body">%d:</a> <a href="#%d">%s</a> ];
$cntLast = (@subjectTxt > 10) ? 10 : scalar(@subjectTxt) ;
for $cnt (1 .. $cntLast)
{
$_ = $subjectTxt[$cnt-1];
printf($tmpl, substr($_, 0, 10), $cnt, $cnt, substr($_, 15));
}
# 11..100
$tmpl = qq[<a href="../test/read.cgi/${boardName}/%s/l50" target="body">%d: %s</a> ];
$cntLast = (@subjectTxt > 100) ? 100 : scalar(@subjectTxt) ;
for $cnt (11 .. $cntLast)
{
$_ = $subjectTxt[$cnt-1];
printf($tmpl, substr($_, 0, 10), $cnt, substr($_, 15));
}
# 上位10スレの l10 のhtml化
$cntLast = (@subjectTxt > 10) ? 10 : scalar(@subjectTxt) ;
for $cnt (1 .. $cntLast)
{
# threadId 取得
$threadId = ($subjectTxt[$cnt-1], 0, 10)
# dat を読む (ここでもIOを減らす方法はいくつかある)
open(DAT, "${boardPath}/${threadId}.dat");
# 書く ( 1 と l10 部分)
}
>>863
>(ryにあるアトミックとは、ファイル更新時のデータの一時的な乱れや
>(ryで雑談で出たファイルの不整合のことだと思いますが、
まぁそうですね.
>私の認識では、(ry掲示板全体のアトミックを考えてました。
一般論としてはそれも重要なことだとは思いますが,
2ch の特性を踏まえると普通のファイルロックの使い方では
先に述べたような不都合も出てくる,と.
# まぁ,そのあたりも乗り越えようと考えたのが bbsd なんですけどね.
>>864 デカいカキコのため,write() が複数になってその間に割り込んだ可能性もありますね.
>>865 なるほど......
>>868 少数とはいえ,まだ9桁スレキーも残ってるところあるかも?
>>869 html 部分は,別途こんなのを作ってます -> http://qb5.2ch.net/operate/html/
これを読み込んでつなげてる,と.
>(ryにあるアトミックとは、ファイル更新時のデータの一時的な乱れや
>(ryで雑談で出たファイルの不整合のことだと思いますが、
まぁそうですね.
>私の認識では、(ry掲示板全体のアトミックを考えてました。
一般論としてはそれも重要なことだとは思いますが,
2ch の特性を踏まえると普通のファイルロックの使い方では
先に述べたような不都合も出てくる,と.
# まぁ,そのあたりも乗り越えようと考えたのが bbsd なんですけどね.
>>864 デカいカキコのため,write() が複数になってその間に割り込んだ可能性もありますね.
>>865 なるほど......
>>868 少数とはいえ,まだ9桁スレキーも残ってるところあるかも?
>>869 html 部分は,別途こんなのを作ってます -> http://qb5.2ch.net/operate/html/
これを読み込んでつなげてる,と.
確かに、9桁のキーはまだ結構ありますね。
10桁決め打ちでやってますが、9桁対応させるなら10桁目が数字かそうでないかで
条件分岐を追加すればいいだけですね。正規表現でやれば \d{9,10} ですみますけど
Perlの正規表現は他の実装に比べて早いですが、index や substr などの文字列処理に
比べたら馬鹿にならないほどコスト大(数十倍)だったりします。
条件分岐を追加すればいいだけですね。正規表現でやれば \d{9,10} ですみますけど
Perlの正規表現は他の実装に比べて早いですが、index や substr などの文字列処理に
比べたら馬鹿にならないほどコスト大(数十倍)だったりします。
http://qb5.2ch.net/operate/html/ のアイデアはあるかなと思ってましたが、
ディスクをどの程度使用するかにも寄りますが、l10 だけでなく全てのレスを
HTML化しておけば、read.cgi でも使えますし、より効果的な負荷低減になると
思います。
バイナリの埋め込みになりますが、各レスのオフセット(seek の引数)も一緒に
インデクス化していれておけば、現実的可能な最速処理もできるかと
ディスクをどの程度使用するかにも寄りますが、l10 だけでなく全てのレスを
HTML化しておけば、read.cgi でも使えますし、より効果的な負荷低減になると
思います。
バイナリの埋め込みになりますが、各レスのオフセット(seek の引数)も一緒に
インデクス化していれておけば、現実的可能な最速処理もできるかと
>>874 9桁対応版
{
substr($_, 9, 1) eq '.'
? printf($tmpl, substr($_, 0, 10), $cnt, substr($_, 15));
: printf($tmpl, substr($_, 0, 9), $cnt, substr($_, 14));
}
{
substr($_, 9, 1) eq '.'
? printf($tmpl, substr($_, 0, 10), $cnt, substr($_, 15));
: printf($tmpl, substr($_, 0, 9), $cnt, substr($_, 14));
}
>>875
>全てのレスをHTML化しておけば、read.cgi でも使えますし
これは昔 dat2html 使ってやろうとしてたことあったような記憶もおぼろげながら......
まぁ,read.cgi 出力に mod_cache かますとかやった方が手っ取り早いと思いますけど.
>全てのレスをHTML化しておけば、read.cgi でも使えますし
これは昔 dat2html 使ってやろうとしてたことあったような記憶もおぼろげながら......
まぁ,read.cgi 出力に mod_cache かますとかやった方が手っ取り早いと思いますけど.
>>876 修正
substr($_, 9, 1) eq '.' # 10文字目がピリオドなら9桁
: printf($tmpl, substr($_, 0, 9), $cnt, substr($_, 14))
? printf($tmpl, substr($_, 0, 10), $cnt, substr($_, 15));
substr($_, 9, 1) eq '.' # 10文字目がピリオドなら9桁
: printf($tmpl, substr($_, 0, 9), $cnt, substr($_, 14))
? printf($tmpl, substr($_, 0, 10), $cnt, substr($_, 15));
>>877
今の read.cgi って対象の .dat を読み込んで、1,300 や 1-20 や l50 なんかの指定に従って
対象の行を取り出して整形して出力する処理ではないかと思ってるのですが、この dat の行を
html に変換するコストが無駄になってるのでは?と思ってます。
あと、mod_cache をかませても l50 や指定なしのものだけをキャッシュさせて、それ以外の
特殊な条件指定したもの(300-400)はキャッシュの意味は少ないと思いますし、そちらのコストも
考えると、全レスhtml化の恩恵は大きいと思います。こちらも時間があれば仕様案まとめてみます
今の read.cgi って対象の .dat を読み込んで、1,300 や 1-20 や l50 なんかの指定に従って
対象の行を取り出して整形して出力する処理ではないかと思ってるのですが、この dat の行を
html に変換するコストが無駄になってるのでは?と思ってます。
あと、mod_cache をかませても l50 や指定なしのものだけをキャッシュさせて、それ以外の
特殊な条件指定したもの(300-400)はキャッシュの意味は少ないと思いますし、そちらのコストも
考えると、全レスhtml化の恩恵は大きいと思います。こちらも時間があれば仕様案まとめてみます
そんなわけで、プロファイリングしてみた。
1行目を
#!/usr/local/bin/perl -d:DProf
に変えて、できたtmon.outを処理。
レスはこれ。
http://dso.2ch.net/test/read.cgi/myanmar/1153850369/530
html/ の下がないと作り直すので、2つ目のレスで計測。
トリップあり、sage、●なし、BEなし。
%Time ExclSec CumulS #Calls sec/call Csec/c Name
14.4 0.077 0.095 1 0.0775 0.0948 main::MakeIndex4PC
13.1 0.070 0.070 1 0.0703 0.0703 main::IsKoukoku
8.82 0.047 0.266 1 0.0468 0.2661 main::bbs_entryXXX
5.63 0.030 0.233 30 0.0010 0.0078 main::BEGIN
5.63 0.030 0.026 1 0.0304 0.0262 main::initFOX
4.32 0.023 0.045 10 0.0023 0.0045 Net::DNS::Resolver::Base::BEGIN
4.32 0.023 0.052 22 0.0010 0.0024 Jcode::BEGIN
3.00 0.016 0.016 1 0.0156 0.0156 main::mumumuGetNowTime
3.00 0.016 0.016 11 0.0014 0.0014 DynaLoader::dl_load_file
2.82 0.015 0.030 10 0.0015 0.0030 LWP::UserAgent::BEGIN
2.82 0.015 0.023 73 0.0002 0.0003 Exporter::import
1.50 0.008 0.008 1 0.0078 0.0078 jcode::init
1.50 0.008 0.008 1 0.0078 0.0078 main::checkDenyList
1.50 0.008 0.008 1 0.0078 0.0078 main::foxReadSettings
1.50 0.008 0.008 1 0.0078 0.0078 Net::DNS::RR::_get_subclass
1行目を
#!/usr/local/bin/perl -d:DProf
に変えて、できたtmon.outを処理。
レスはこれ。
http://dso.2ch.net/test/read.cgi/myanmar/1153850369/530
html/ の下がないと作り直すので、2つ目のレスで計測。
トリップあり、sage、●なし、BEなし。
%Time ExclSec CumulS #Calls sec/call Csec/c Name
14.4 0.077 0.095 1 0.0775 0.0948 main::MakeIndex4PC
13.1 0.070 0.070 1 0.0703 0.0703 main::IsKoukoku
8.82 0.047 0.266 1 0.0468 0.2661 main::bbs_entryXXX
5.63 0.030 0.233 30 0.0010 0.0078 main::BEGIN
5.63 0.030 0.026 1 0.0304 0.0262 main::initFOX
4.32 0.023 0.045 10 0.0023 0.0045 Net::DNS::Resolver::Base::BEGIN
4.32 0.023 0.052 22 0.0010 0.0024 Jcode::BEGIN
3.00 0.016 0.016 1 0.0156 0.0156 main::mumumuGetNowTime
3.00 0.016 0.016 11 0.0014 0.0014 DynaLoader::dl_load_file
2.82 0.015 0.030 10 0.0015 0.0030 LWP::UserAgent::BEGIN
2.82 0.015 0.023 73 0.0002 0.0003 Exporter::import
1.50 0.008 0.008 1 0.0078 0.0078 jcode::init
1.50 0.008 0.008 1 0.0078 0.0078 main::checkDenyList
1.50 0.008 0.008 1 0.0078 0.0078 main::foxReadSettings
1.50 0.008 0.008 1 0.0078 0.0078 Net::DNS::RR::_get_subclass
最初のは、index.html を作る処理ですね。
次のが広告かどうかのチェック。
3番目は各種初期化。
次のが広告かどうかのチェック。
3番目は各種初期化。
>>879 基本的に,mod_cache に任せておけば大局的には読み出しの多いレス番指定が
ヒット率が高くなるでしょうし,読み出しの多いものが重点的にキャッシュされ,
一方少ないものは on the fly に生成するという形に収斂していくかと.
全レスを HTML 化したものもスタティックファイルとして保持させると,
あぼーん用スクリプトとか dat 落ちスクリプトとかにも対応する処理を
入れることになって,手間と効果のバランスからどうかなぁ,とも.
ヒット率が高くなるでしょうし,読み出しの多いものが重点的にキャッシュされ,
一方少ないものは on the fly に生成するという形に収斂していくかと.
全レスを HTML 化したものもスタティックファイルとして保持させると,
あぼーん用スクリプトとか dat 落ちスクリプトとかにも対応する処理を
入れることになって,手間と効果のバランスからどうかなぁ,とも.
>>880,881
speedy でのキャッシュされた実行ではなさそうなので、BEGIN や Exporter::Import などのコストも入ってますね。
となると上ふたつのコストが、ファイル読み込み処理と、正規表現の文字列処理なので、この部分が一番わかりやすい
大きなコストになってるような感じですね。
他の部分は、上二つに比べたらまだ気を使うほどのところでもなさそうです。
speedy でのキャッシュされた実行ではなさそうなので、BEGIN や Exporter::Import などのコストも入ってますね。
となると上ふたつのコストが、ファイル読み込み処理と、正規表現の文字列処理なので、この部分が一番わかりやすい
大きなコストになってるような感じですね。
他の部分は、上二つに比べたらまだ気を使うほどのところでもなさそうです。
で、われわれがSaborinと呼んでいるのは、
MakeIndex4PC(とUpdateSubback)を呼ぶのをまばらにする、
というものですね。
MakeIndex4PC(とUpdateSubback)を呼ぶのをまばらにする、
というものですね。
私が今後どのような形で(&飽きずにいつまでw)お手伝いすることになるかわかりませんが、
FreeBSD の -stable と -current みたいに、現状の改善と安定を目指すものと、年末くらいに
完全にいちから再設計して作り直した(現状では雪だるまがそっち系なのかな?)システムという
形で現状ですべきこと、長期的に考えることを分けて考えてもいいような気がします。
現状では、>>880 のようなものとにらめっこして、LAを減らすことかな?
あるいは現状の利用者数、投稿数で年末まで持つと仮定して、新バージョンの開発かな?w
なんてことを考えるのははたから茶々いれるだけの技術者的の私個人としては楽しいのですが、
運営側としてはどうなんでしょ?
FreeBSD の -stable と -current みたいに、現状の改善と安定を目指すものと、年末くらいに
完全にいちから再設計して作り直した(現状では雪だるまがそっち系なのかな?)システムという
形で現状ですべきこと、長期的に考えることを分けて考えてもいいような気がします。
現状では、>>880 のようなものとにらめっこして、LAを減らすことかな?
あるいは現状の利用者数、投稿数で年末まで持つと仮定して、新バージョンの開発かな?w
なんてことを考えるのははたから茶々いれるだけの技術者的の私個人としては楽しいのですが、
運営側としてはどうなんでしょ?
きっと、、、「運営側」っていう言葉について、
「それって何だろう」って素で思うようになると、
なんとなくいいかんじになる、んじゃないのかなと。
ここって「あっち側」とか「こっち側」とかじゃなくて、
管理人を除いてみんな同じところにいる、
っていうあたりから、はじまっているような気がするんで。
なんというか、このへんにいる人たちは
みんなたんなる「お手伝い」に過ぎなくて、
単にそれぞれ、出来ることが違うだけというか。なんとゆうか。
「それって何だろう」って素で思うようになると、
なんとなくいいかんじになる、んじゃないのかなと。
ここって「あっち側」とか「こっち側」とかじゃなくて、
管理人を除いてみんな同じところにいる、
っていうあたりから、はじまっているような気がするんで。
なんというか、このへんにいる人たちは
みんなたんなる「お手伝い」に過ぎなくて、
単にそれぞれ、出来ることが違うだけというか。なんとゆうか。
で、>>886 みたいなものって、昔のインターネットには割とたくさんあったんですが、
今のインターネットには、もうなんか少なくなったというか、
ほとんど見当たらないようになりましたね。
「それいいっすね。いっちょやりますかぁ」「ごにょごにょ…」
「おい変だぞ、どうしたんだゴルァ」
「あちゃー、ごめんなさいー、戻しますー」みたいな、
アドホックというか、とりあえず試してみるというか。
そんなわけで私は2ちゃんねるに「昔からある、もともとのインターネットの姿」を、
ほんのちょっぴり、垣間見ていたりなんかして。
すれ違いすんませんです。
今のインターネットには、もうなんか少なくなったというか、
ほとんど見当たらないようになりましたね。
「それいいっすね。いっちょやりますかぁ」「ごにょごにょ…」
「おい変だぞ、どうしたんだゴルァ」
「あちゃー、ごめんなさいー、戻しますー」みたいな、
アドホックというか、とりあえず試してみるというか。
そんなわけで私は2ちゃんねるに「昔からある、もともとのインターネットの姿」を、
ほんのちょっぴり、垣間見ていたりなんかして。
すれ違いすんませんです。
>>888 まぁそうですね,これだけデカいサイトで挑戦的なことをできるところって
他にないでしょうしね.「普通の」大手サイトでは,▲が増えるどころじゃ済まないでしょうしw
他にないでしょうしね.「普通の」大手サイトでは,▲が増えるどころじゃ済まないでしょうしw
>>888,889
そういう土壌はこの一週間で充分堪能していますw
私も仕事で仕様ガチガチ安定して当然の世界でも生きてますし、
趣味のソフトウェア開発では、自由きままにやっています。
論文やレポート書いてどっかにポストするのも好きですし、
ちょうど今の新ばななは良い縁になったと思います。
顔色伺ってというのはあまり楽しくないので、自由気ままに
勝手にプロジェクト立ち上げて勝手に進めて、方針や意見が
合わなければ自然に影が薄くなっていくのかもしれないですね
そういう土壌はこの一週間で充分堪能していますw
私も仕事で仕様ガチガチ安定して当然の世界でも生きてますし、
趣味のソフトウェア開発では、自由きままにやっています。
論文やレポート書いてどっかにポストするのも好きですし、
ちょうど今の新ばななは良い縁になったと思います。
顔色伺ってというのはあまり楽しくないので、自由気ままに
勝手にプロジェクト立ち上げて勝手に進めて、方針や意見が
合わなければ自然に影が薄くなっていくのかもしれないですね
そっすね。>>890
勝手にという中にもたぶん需要があったり、
動機付けがあったり、空気嫁があったりするのかなと。
私の基本思想はこのへんにでも適当に。
サーバ修理中につき(そろそろ退院予定らしいです)、Googleキャッシュでごめんなさい。
http://72.14.235.104/search?q=cache:9LcMvz3YJbkJ:mumumu.mu/human-2ch.html+mumumu.mu/human-2ch.html&hl=ja&ct=clnk&cd=1
勝手にという中にもたぶん需要があったり、
動機付けがあったり、空気嫁があったりするのかなと。
私の基本思想はこのへんにでも適当に。
サーバ修理中につき(そろそろ退院予定らしいです)、Googleキャッシュでごめんなさい。
http://72.14.235.104/search?q=cache:9LcMvz3YJbkJ:mumumu.mu/human-2ch.html+mumumu.mu/human-2ch.html&hl=ja&ct=clnk&cd=1
>>890 まぁ,何を隠そう私自身,勝手にコード書いて「これどうよ?」って
勝手に提示するってのをこれまで繰り返しながら,2ch にずぶずぶはまってきてますからw
チョコさんも,そんな感じではまっていくことになるのかなぁ,とw
勝手に提示するってのをこれまで繰り返しながら,2ch にずぶずぶはまってきてますからw
チョコさんも,そんな感じではまっていくことになるのかなぁ,とw
すぐ出来そうなことは実機のモニターになれるならということでこんな感じでw
ttp://yy28.60.kg/test/read.cgi/maido3/1170831265/85
スキルは今までにそれなりに蓄積してきて、必要があれば何でも作れるとは思うんだけど
モチベーションを持てる何かがないので日々興味の赴くままに(ここにいる理由がまさにw)
何かしております。先日までは amd64 や 128bitSSE で deflate 高速化出来ないか試行錯誤してたりw
ttp://yy28.60.kg/test/read.cgi/maido3/1170831265/85
スキルは今までにそれなりに蓄積してきて、必要があれば何でも作れるとは思うんだけど
モチベーションを持てる何かがないので日々興味の赴くままに(ここにいる理由がまさにw)
何かしております。先日までは amd64 や 128bitSSE で deflate 高速化出来ないか試行錯誤してたりw
とりあえず、今私にクリティカルにできそうなこととしては‥‥‥
sub MakeIndex4PC
sub IsKoukoku
の部分の現状のコードをいただけるのであれば、リファクタリングさせてもらいますよ。
sub MakeIndex4PC
sub IsKoukoku
の部分の現状のコードをいただけるのであれば、リファクタリングさせてもらいますよ。
MakeIndex4PC に関しては,いろいろ挿入するファイルがあったり
出力内容自体が複雑故って感じもしますね.
IsKoukoku の方は,チョコさんから見ていじりがいがあるかも?
確か,IsKoukoku の中核部分は以前から公開されていて,
クローズドではないと思うので貼ってみます.
foreach my $NG_word_ref (@FOX_Ro54)
{
my $NG_word = $NG_word_ref->[0]; # リファレンスから取り出し。
if (my $matched = eval{ return $In_Strings =~ m<$NG_word> ? $& : undef }) {
$NG_word_ref->[0] = $matched; return $NG_word_ref;
} # 合致したらNGワード部分の摘出とリファレンスを返す。
# 不正 NG ワードがあったり引っかからなければスキップ
}
return '';
ちなみに,@FOX_Ro54 は初期化段階でこんな感じで読み込まれます.
open(ADFILE,"....../Rock54data");
@FOX_Ro54 = map { [ (split /<>/)[5,6,7] ] } <ADFILE>;
close(ADFILE) ;
出力内容自体が複雑故って感じもしますね.
IsKoukoku の方は,チョコさんから見ていじりがいがあるかも?
確か,IsKoukoku の中核部分は以前から公開されていて,
クローズドではないと思うので貼ってみます.
foreach my $NG_word_ref (@FOX_Ro54)
{
my $NG_word = $NG_word_ref->[0]; # リファレンスから取り出し。
if (my $matched = eval{ return $In_Strings =~ m<$NG_word> ? $& : undef }) {
$NG_word_ref->[0] = $matched; return $NG_word_ref;
} # 合致したらNGワード部分の摘出とリファレンスを返す。
# 不正 NG ワードがあったり引っかからなければスキップ
}
return '';
ちなみに,@FOX_Ro54 は初期化段階でこんな感じで読み込まれます.
open(ADFILE,"....../Rock54data");
@FOX_Ro54 = map { [ (split /<>/)[5,6,7] ] } <ADFILE>;
close(ADFILE) ;
2007/02/23(金) 16:08:22ID:ZT6cIEXJ0
>>897
Rock54のファイルの場所は秘密なのでは?
Rock54のファイルの場所は秘密なのでは?
899Kseniya ★
2007/02/23(金) 16:10:49ID:???0 つうか
そのフォルダが超機密だったのであった。
うひゃひゃひゃひや
そのフォルダが超機密だったのであった。
うひゃひゃひゃひや
2007/02/23(金) 16:13:39ID:PebZXv460
/(^o^)\
901stream ◆PNstream2s
2007/02/23(金) 16:13:49ID:osWVCmNQ0 川 ;´・`;)イイハナシヤナー
認証ぐらいかけとけよ
認証ぐらいかけとけよ
2007/02/23(金) 16:13:57ID:Nv58QqDI0
どうもアレかなと思ったらやっぱり。。
2007/02/23(金) 16:14:07ID:z2462BoB0
なんてこった・・・。
2007/02/23(金) 16:15:12ID:8SBJJSul0
GJ!
2007/02/23(金) 16:15:45ID:tP51+qgU0
△
>>897
このレスあぼ〜ん しておくか、変更する必要があるかも(汗
私のトリップに @hotmail.com が使えますから、そちらに
可能な部分だけ改めて送ってもらえれれば確認できます。
ここのコードはあまり手を加えられるところはないですね。
一応先日 Rock54 がらみで試作してみたコードはこちら
http://choco.tank.jp/trac/wiki/Rock54re
このレスあぼ〜ん しておくか、変更する必要があるかも(汗
私のトリップに @hotmail.com が使えますから、そちらに
可能な部分だけ改めて送ってもらえれれば確認できます。
ここのコードはあまり手を加えられるところはないですね。
一応先日 Rock54 がらみで試作してみたコードはこちら
http://choco.tank.jp/trac/wiki/Rock54re
2007/02/23(金) 16:25:03ID:4XP+PmOt0
あっはっは。
2007/02/23(金) 16:25:33ID:Nv58QqDI0
これはもうキャップ支給ものだな
2007/02/23(金) 16:32:37ID:PebZXv460
( ゚∀゚)o彡°キャップ!キャップ!
911チョコバナナ ◆Choco52.ko
2007/02/23(金) 16:33:01ID:AbpaAoA10 >>907
Don't mind ♪
職を失うわけではないですし(私は仕事で契約破棄されたことありますけどw)
誰の命にかかわるわけではないので(総務省から警告うける内容でもないですし)
気にせず生きましょう
Don't mind ♪
職を失うわけではないですし(私は仕事で契約破棄されたことありますけどw)
誰の命にかかわるわけではないので(総務省から警告うける内容でもないですし)
気にせず生きましょう
2007/02/23(金) 16:34:21ID:8SBJJSul0
祝★強制支給!
SunOSさんが、本件を管理人に丁寧なメールで報告&ごめんなさいしました。
(私に Cc: されていました)
管理人からは、
> うひゃひゃ、たまにあることで。
というメールがすぐに返ってきました。
そんなわけで、私はどうしたらよかろうでしょうか。
やはり何か、★でも出しますかね。
でもそれもなんかびみょうかも。
(私に Cc: されていました)
管理人からは、
> うひゃひゃ、たまにあることで。
というメールがすぐに返ってきました。
そんなわけで、私はどうしたらよかろうでしょうか。
やはり何か、★でも出しますかね。
でもそれもなんかびみょうかも。
2007/02/23(金) 16:37:08ID:8SBJJSul0
▲ ★
2007/02/23(金) 16:37:46ID:Nv58QqDI0
白三角 標準装備で
2007/02/23(金) 16:39:04ID:9+ya++bV0
つサン▲▲ ★
2007/02/23(金) 16:45:29ID:1Luj9ZEH0
わろとけわろとけ
( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \ / \
このスレで最速1.000やろか?(素
( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \ / \
このスレで最速1.000やろか?(素
2007/02/23(金) 16:47:45ID:1Luj9ZEH0
今からこのスレはSunOSさんのキャップを考えるスレにします。
サンサンサン★は どう?
サンサンサン★は どう?
>>918
やるな
やるな
2007/02/23(金) 16:53:36ID:???0
ゥケケケケ
/ノ\∧_∧Ψ
/ノ\( ゚∀゚)|
⌒⌒ (∪ヌルポ⊃
←し―J|。+゚
/ノ\∧_∧Ψ
/ノ\( ゚∀゚)|
⌒⌒ (∪ヌルポ⊃
←し―J|。+゚
2007/02/23(金) 16:54:09ID:68M5N5it0
>>921
ガッ
ガッ
2007/02/23(金) 16:59:23ID:KDWDnaV20
祭りだと聞いて歩いてきました
いつもならファイルパスとか事前に気付いて伏せるんですが......
今回は注意力不足だったようで......
# ★ を頂くのは恐れ多いので,\u263C あたりで......
今回は注意力不足だったようで......
# ★ を頂くのは恐れ多いので,\u263C あたりで......
2007/02/23(金) 17:28:56ID:PQAQOmsq0
ん、なんかマソコとか呼ばれそうなアレだな
927チョコバナナ ◆Choco52.ko
2007/02/23(金) 17:32:05ID:AbpaAoA10 >>925
同じグループに他にも SUN があるようです。>>926 のご指摘もありますし、黒塗りにしたこちらはいかが?
http://www.fileformat.info/info/unicode/char/2600/index.htm 'BLACK SUN WITH RAYS'
同じグループに他にも SUN があるようです。>>926 のご指摘もありますし、黒塗りにしたこちらはいかが?
http://www.fileformat.info/info/unicode/char/2600/index.htm 'BLACK SUN WITH RAYS'
2007/02/23(金) 17:39:28ID:wWRGG5C/0
こりゃアナルだな
2007/02/23(金) 17:52:24ID:tP51+qgU0
閉鎖騒動になるぞ。
930動け動けウゴウゴ2ちゃんねる
2007/02/23(金) 17:53:56ID:83NNOvB00 rootたんって▲一つ増えた?
気づかなかったな
気づかなかったな
2007/02/23(金) 17:54:32ID:83NNOvB00
sage忘れorz
932外野ァァン
2007/02/23(金) 20:36:55ID:ow2tiSXi0 恐れ多いもなにも 罰ですから ニヤニヤ
933石狩の人 ◆/o....orz.
2007/02/23(金) 20:47:46ID:jf/iT8Ri0 ここはチョコバナナに★でどうよ?
printf $tmpl, '.', $cnt, index $_, '.', 0 == 8
? substr $_, 14
: substr $_, 15
;
で良さそうな。。。
でもってIsKoukokuみたいに冗長なループの中でないのなら、/oしてあげればそんなに負荷とかは変わらないような。。。@RegExp.
? substr $_, 14
: substr $_, 15
;
で良さそうな。。。
でもってIsKoukokuみたいに冗長なループの中でないのなら、/oしてあげればそんなに負荷とかは変わらないような。。。@RegExp.
まぁ,subject.txt, subback.html, index.html あたりは bbsd 使えば,
いずれ bbs.cgi では処理しなくて済むようになる部分ではありますからね.
IsKoukoku みたいなのはどっちにしろ bbs.cgi でやらなきゃならない部分ですが.
いずれ bbs.cgi では処理しなくて済むようになる部分ではありますからね.
IsKoukoku みたいなのはどっちにしろ bbs.cgi でやらなきゃならない部分ですが.
2007/02/23(金) 22:56:25ID:d9hREmkI0
2007/02/23(金) 23:01:00ID:RfXEO2710
レスを書き込んでるところをprintからsyswriteに変えればいいんでない
>>937 とりあえず修理してほしいって話なら↓かな?
http://qb5.2ch.net/test/read.cgi/operate/1132072662/l50
今後の対策ならここの範疇の話ですが.
# まぁ,これも bbsd 使えば起きなくなるはずですけど.
http://qb5.2ch.net/test/read.cgi/operate/1132072662/l50
今後の対策ならここの範疇の話ですが.
# まぁ,これも bbsd 使えば起きなくなるはずですけど.
2007/02/23(金) 23:10:04ID:d9hREmkI0
あ、一応対策できそうなら〜ということで
でも考えれば4096byte行くような事はそうないだろーし…無視で良いのかな
でも考えれば4096byte行くような事はそうないだろーし…無視で良いのかな
2007/02/24(土) 00:12:16ID:mcFQLVQV0
なんとなくsubback.html、スレ立ての順にソートできないかな
と言ってみるテスト
と言ってみるテスト
942動け動けウゴウゴ2ちゃんねる
2007/02/25(日) 01:36:38ID:ha5BeV2q0 だいぶ前にも書いた気がする
ヘッドラインの代用になるから便利だと思うけどまだ実現してない
ヘッドラインの代用になるから便利だと思うけどまだ実現してない
2007/02/25(日) 01:48:07ID:zpE9xv260
5行くらいで実現可能なんだけど、運営が導入してもいいと腰を上げない限りは無理なんだろうな
2007/02/25(日) 18:40:31ID:R3ctNhHGP
ファイル壊れそう。
2007/02/26(月) 18:32:14ID:mDzp0W140
http://qb5.2ch.net/test/read.cgi/sec2chd/1172332070/6
名無しさん必死だな<>sage<>2007/02/24(土) 21:50:02 GxILijLRP<>ハーモニクス金玉<>ハーモニクス金玉<>p2.2ch.net(151880)222.7.56.145<>210.135.99.5<>
( )<>Monazilla/1.00 (P2/p2.2ch.net; p2-client-ip: 222.7.56.145; p2-user: 151880)
222.7.56.145 → wbcc6s08.ezweb.ne.jp
p2+携帯の時に芋掘りログに携帯のシリアル番号が記録されていない模様。
そして"( )"ってなぁに
名無しさん必死だな<>sage<>2007/02/24(土) 21:50:02 GxILijLRP<>ハーモニクス金玉<>ハーモニクス金玉<>p2.2ch.net(151880)222.7.56.145<>210.135.99.5<>
( )<>Monazilla/1.00 (P2/p2.2ch.net; p2-client-ip: 222.7.56.145; p2-user: 151880)
222.7.56.145 → wbcc6s08.ezweb.ne.jp
p2+携帯の時に芋掘りログに携帯のシリアル番号が記録されていない模様。
そして"( )"ってなぁに
2007/02/26(月) 19:12:35ID:EIJS3kQJ0
それ、p2でレスするときに、p2自身がアクセスされたときのデータつけてるだけだから。
2ch側がどうこう言う問題じゃない。
2ch側がどうこう言う問題じゃない。
2007/02/26(月) 23:18:02ID:bk8nC4qB0
PCでIP出してるんだから
携帯も識別番号出すべきかと
荒らしに寛容すぎ
携帯も識別番号出すべきかと
荒らしに寛容すぎ
2007/02/27(火) 00:04:11ID:ZightBnN0
>>947
P2スレで要望してください
P2スレで要望してください
949947
2007/02/27(火) 00:06:21ID:s3h4QOBN0 ごめん、p2スレかと勘違いして書いた
2007/02/28(水) 22:20:56ID:JNEZ02ff0
なんかpc11鯖移転前後でスレタイに空白がついてる。
移転前からあったスレで移転後に書き込みが無いスレ。
移転前からあったスレで移転後に書き込みが無いスレ。
2007/02/28(水) 22:32:57ID:I07GzBMe0
以前から移転後はそんなんだよ
レスのない古いスレはず〜〜〜っと空白付いたまんま
レスのない古いスレはず〜〜〜っと空白付いたまんま
2007/02/28(水) 22:39:41ID:JNEZ02ff0
仕様でしたか。了解しますた。
2007/03/01(木) 07:23:38ID:PmJ1vJC50
復帰スクリプトの不具合?
2007/03/01(木) 07:43:22ID:zmNuIKLt0
仕様
2007/03/01(木) 11:46:59ID:PGooi+n50
ここでいいのかなあ。
http://dso.2ch.net/myanmar/subject.txt
http://dso.2ch.net/myanmar/index.html
壊れまくり。
レス数回りがおかしいのかな。
前後の改行が変とか無いとか。
書き込む度に壊れていく。
http://dso.2ch.net/myanmar/subject.txt
http://dso.2ch.net/myanmar/index.html
壊れまくり。
レス数回りがおかしいのかな。
前後の改行が変とか無いとか。
書き込む度に壊れていく。
956stream ◆PNstream2s
2007/03/01(木) 11:59:39ID:cYbY7lIy0 index.htmlは壊れてるけど、subject.txtは壊れてないように見える
957動け動けウゴウゴ2ちゃんねる
2007/03/01(木) 12:09:35ID:WXt1L5+H0 1169114098.dat<>もうね阿保か馬鹿かと11
(913)
1171239491.dat<>記号<>&"' (4)
1171239344.dat<>記号<>&"'
(42)
1155409133.dat<>JavaScript版read.cgiの動作試験はここで (116)
(913)
1171239491.dat<>記号<>&"' (4)
1171239344.dat<>記号<>&"'
(42)
1155409133.dat<>JavaScript版read.cgiの動作試験はここで (116)
2007/03/01(木) 12:32:04ID:PGooi+n50
>>955-958 subject.txt 処理の改造とかやってますた.今は直ってるかと.
2007/03/01(木) 12:46:51ID:PGooi+n50
はいはーい。
2007/03/09(金) 09:42:32ID:ijIcKlQN0
全部のサーバーでbbsdを使う方向になるんですかね?
bbsdまでのつなぎとしてsubback.htmlとindex.htmlを生成するデーモンとか考えてみたんですが
(subback部分は少し作った)
bbsdまでのつなぎとしてsubback.htmlとindex.htmlを生成するデーモンとか考えてみたんですが
(subback部分は少し作った)
IsKoukoku() でこれは効くかも...... 最初のデータロードの部分は今
@FOX_Ro54 = map { [ (split /<>/)[5,6,7] ] } <ADFILE>;
ってなってますが,これを
@FOX_Ro54 = map {
my @a = (split /<>/)[5 .. 7];
eval { no warnings; [qr/$a[0]/, @a[1 .. $#a]]; };
} <ADFILE>;
のようにすると,ロード時に regex がプリコンパイルされて,その後の処理が軽くなりそう.
さらに,regex のエラートラップもロード時に行って,IsKoukoku() 内では
eval が不要になる,と(ダメポなのだけ除外され,他の正常なのは使われます).
# eval 内でも警告は発生するので no warnings 入れてますが,-w や use warnings してなければ不要です.
安直にテストしてみると,
% perl -we'use strict; use Benchmark; open F, $ARGV[0]; our @thr = <F>; close F; \
open F, $ARGV[1]; @_ = <F>; close F; \
our @rocka = map [(split /<>/)[5 .. 7]], @_; \
our @rockb = map { my @a = (split /<>/)[5 .. 7]; eval { no warnings; [qr/$a[0]/, @a[1 .. $#a]]; }; } @_; \
timethese(1, { a => sub { foreach my $res (@thr) { no warnings; eval { $res =~ /@$_[0]/; } foreach (@rocka); } }, \
b => sub { foreach my $res (@thr) { no warnings; $res =~ /@$_[0]/ foreach (@rockb); } } });' \
alaska/dat/1147437176.dat Rock54Data
Benchmark: timing 1 iterations of a, b...
a: 42 wallclock secs (41.94 usr + 0.00 sys = 41.94 CPU) @ 0.02/s (n=1)
(warning: too few iterations for a reliable count)
b: 42 wallclock secs (41.91 usr + 0.01 sys = 41.92 CPU) @ 0.02/s (n=1)
(warning: too few iterations for a reliable count)
% perl -we'use strict; use Benchmark; open F, $ARGV[0]; our @thr = <F>; close F; \
open F, $ARGV[1]; @_ = <F>; close F; \
our @rocka = map [(split /<>/)[5 .. 7]], @_; \
our @rockb = map { my @a = (split /<>/)[5 .. 7]; eval { no warnings; [qr/$a[0]/, @a[1 .. $#a]]; }; } @_; \
timethese(1, { a => sub { foreach my $res (@thr) { no warnings; eval { $res =~ @$_[0]; } foreach (@rocka); } }, \
b => sub { foreach my $res (@thr) { no warnings; $res =~ @$_[0] foreach (@rockb); } } });' \
alaska/dat/1147437176.dat Rock54Data
Benchmark: timing 1 iterations of a, b...
a: 42 wallclock secs (41.42 usr + 0.02 sys = 41.44 CPU) @ 0.02/s (n=1)
(warning: too few iterations for a reliable count)
b: 20 wallclock secs (20.25 usr + 0.00 sys = 20.25 CPU) @ 0.05/s (n=1)
(warning: too few iterations for a reliable count)
プリコンパイルしたのを m// 内に入れるとあまり意味ないっぽいですが,
単独で使えば二倍速ぐらいになるらしいと.
ところで,
$NG_word_ref->[0] = $matched; return $NG_word_ref;
の部分は
return [$matched, @$NG_word_ref[1 .. $#$NG_word_ref]];
のようにしないと,@FOX_Ro54 の中身を改変してしまう悪寒......
削除系呪文の bbsd 対応も行われ雪だるま以外での bbsd 利用への道も開けてきたし,
T-Banana の実験が一段落したら,このあたりもぼちぼちやりましょうってことで.
@FOX_Ro54 = map { [ (split /<>/)[5,6,7] ] } <ADFILE>;
ってなってますが,これを
@FOX_Ro54 = map {
my @a = (split /<>/)[5 .. 7];
eval { no warnings; [qr/$a[0]/, @a[1 .. $#a]]; };
} <ADFILE>;
のようにすると,ロード時に regex がプリコンパイルされて,その後の処理が軽くなりそう.
さらに,regex のエラートラップもロード時に行って,IsKoukoku() 内では
eval が不要になる,と(ダメポなのだけ除外され,他の正常なのは使われます).
# eval 内でも警告は発生するので no warnings 入れてますが,-w や use warnings してなければ不要です.
安直にテストしてみると,
% perl -we'use strict; use Benchmark; open F, $ARGV[0]; our @thr = <F>; close F; \
open F, $ARGV[1]; @_ = <F>; close F; \
our @rocka = map [(split /<>/)[5 .. 7]], @_; \
our @rockb = map { my @a = (split /<>/)[5 .. 7]; eval { no warnings; [qr/$a[0]/, @a[1 .. $#a]]; }; } @_; \
timethese(1, { a => sub { foreach my $res (@thr) { no warnings; eval { $res =~ /@$_[0]/; } foreach (@rocka); } }, \
b => sub { foreach my $res (@thr) { no warnings; $res =~ /@$_[0]/ foreach (@rockb); } } });' \
alaska/dat/1147437176.dat Rock54Data
Benchmark: timing 1 iterations of a, b...
a: 42 wallclock secs (41.94 usr + 0.00 sys = 41.94 CPU) @ 0.02/s (n=1)
(warning: too few iterations for a reliable count)
b: 42 wallclock secs (41.91 usr + 0.01 sys = 41.92 CPU) @ 0.02/s (n=1)
(warning: too few iterations for a reliable count)
% perl -we'use strict; use Benchmark; open F, $ARGV[0]; our @thr = <F>; close F; \
open F, $ARGV[1]; @_ = <F>; close F; \
our @rocka = map [(split /<>/)[5 .. 7]], @_; \
our @rockb = map { my @a = (split /<>/)[5 .. 7]; eval { no warnings; [qr/$a[0]/, @a[1 .. $#a]]; }; } @_; \
timethese(1, { a => sub { foreach my $res (@thr) { no warnings; eval { $res =~ @$_[0]; } foreach (@rocka); } }, \
b => sub { foreach my $res (@thr) { no warnings; $res =~ @$_[0] foreach (@rockb); } } });' \
alaska/dat/1147437176.dat Rock54Data
Benchmark: timing 1 iterations of a, b...
a: 42 wallclock secs (41.42 usr + 0.02 sys = 41.44 CPU) @ 0.02/s (n=1)
(warning: too few iterations for a reliable count)
b: 20 wallclock secs (20.25 usr + 0.00 sys = 20.25 CPU) @ 0.05/s (n=1)
(warning: too few iterations for a reliable count)
プリコンパイルしたのを m// 内に入れるとあまり意味ないっぽいですが,
単独で使えば二倍速ぐらいになるらしいと.
ところで,
$NG_word_ref->[0] = $matched; return $NG_word_ref;
の部分は
return [$matched, @$NG_word_ref[1 .. $#$NG_word_ref]];
のようにしないと,@FOX_Ro54 の中身を改変してしまう悪寒......
削除系呪文の bbsd 対応も行われ雪だるま以外での bbsd 利用への道も開けてきたし,
T-Banana の実験が一段落したら,このあたりもぼちぼちやりましょうってことで.
>>961 んと,それは bbsd とどういう部分で違うんでしょうか?
例えば subject.txt のデータを内部的に保持して {subback,index}.html を
生成するとなると,ほとんど bbsd と同じことやるってことになりそうな......
例えば subject.txt のデータを内部的に保持して {subback,index}.html を
生成するとなると,ほとんど bbsd と同じことやるってことになりそうな......
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 【スクープ】中居正広が女性との間に重大トラブル、巨額の解決金を支払う 重病から復帰後の会食で深刻な問題が発生 ★27 [Ailuropoda melanoleuca★]
- 『M-1グランプリ』20代目王者は令和ロマン「去年の倍、嬉しいです!」前人未到の連覇達成で史上最多1万330組の頂点に★4 [muffin★]
- 178万円まで引き上げで、自民・小野寺氏「何で税源穴埋めするか提案して欲しい」国民民主に要請 ★9 [お断り★]
- 【芸能】眞鍋かをり「高齢者より若者にもっとお金を使ってほしい」 政府の経済対策に疑問「不公平感が」 [冬月記者★]
- 「あと何十年、こんなに苦しまなければいけないのか」 日本人女性と結婚しても「在留許可」認められず…スリランカ人男性(東京地裁) [少考さん★]
- ベトナム人に給与未払いか、愛知 数千万円以上、大使館が調査要請 [香味焙煎★]
- 【悲報】国民民主党「ふむ、所得税引き下げる代わりに『地価税』を導入すればいいのでは🤔」 [616817505]
- 【悲報】斎藤元彦陣営のネット広報担当会社が投稿したnoteで騒然★308 [641980297]
- 🏡が無い😭
- 【悲報】女子「男はバッグ持たないで。」 [986198215]
- 日本人にいい奴はいない
- 彡(。)(゚)「専ブラのツリー表示は見づらい」