■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 最新50

プログラマが2chを救う!?

79 :デフォルトの名無しさん :2001/08/25(土) 21:54
もっといい方法ありそうだけどね。

int BadAccess()
{
char *agent_accept[] = {
"DreamPassport",
"DoCoMo",
"J-PHONE",
"ASTEL",
"[ja]",
"iCab",
"iBOX",
"WannaBe",
"Macintosh; I;",
"Mozilla/3.0N",
"CBBoard",
"PersonaWare",
"Sharp",
"95",
"NT 4.0",
"WinNT",
};
char *agent_kick[] = {
"WebFetch",
"origin",
"Nozilla",
"WWWD",
};

int i;

if(!*zz_http_user_agent && !*zz_http_language) {
return 1;
}

for (i=0; i<sizeof(agent_accept)/sizeof(char*); i++) {
if (strstr(zz_http_user_agent, agent_accept[i])) {
return 0;
}
}

for (i=0; i<sizeof(agent_kick)/sizeof(char*); i++) {
if (strstr(zz_http_user_agent, agent_kick[i])) {
return 1;
}
}

return 0;
}

80 :デフォルトの名無しさん :2001/08/25(土) 21:54
>75
それだと通常のブラウザから一切見えなくなっちゃうじゃん。

81 :ペイント聖矢 :2001/08/25(土) 21:55
ぷうぷぷぷぷぷぷぷぷプログラマー板がっつつつつつつt!!!!!!??jfだjふぉ@あえああひゃはやはやはやはあはやあはやごふっ

82 :sage@sage.com :2001/08/25(土) 21:57
PGer板停止中?

今、全体のフローらしきものを作ってます。
ところで、dat_readはレス1つ指定でも必ずファイル全部読み出して
処理しているのかな?

83 :デフォルトの名無しさん :2001/08/25(土) 21:59
>>79
すっきりしたね。
でもkickだけあればいいのではないかという気もする。

84 :デフォルトの名無しさん :2001/08/25(土) 22:01
改良版BadAccess

int BadAccess()
{
 char *agent_kick[] = {
  "WebFetch",
  "origin",
  "Nozilla",
  "WWWD",
 };

 int i;

 if(!*zz_http_user_agent && !*zz_http_language)
  return 1;

 for (i=0; i<sizeof(agent_kick)/sizeof(char*); i++) {
  if (strstr(zz_http_user_agent, agent_kick[i]))
   return 1;

 return 0;
}

85 :デフォルトの名無しさん :2001/08/25(土) 22:02
抜本的に見直す為、クラサバから検討しするスレも要るのかも・・・?

86 :79 :2001/08/25(土) 22:04
>>83
確かにそうでした、accept のチェックは要らないですね。

87 :デフォルトの名無しさん :2001/08/25(土) 22:04
ここが止まった場合は↓に行くことにしとく?
http://www.shitaraba.com/bbs/programtech/index.html
どっかもっと良いとこある?

88 :デフォルトの名無しさん :2001/08/25(土) 22:05
>>85
そういう構想だけは前からある。
「2chのような掲示板システムってP2Pで」
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=990334284

89 :デフォルトの名無しさん :2001/08/25(土) 22:10
>>86
改良版の問題は、ドリキャスがブラウザのシェアを独占したら
かえって重くなるということだな(笑)。

90 :sage@sage.com :2001/08/25(土) 22:10
いまさらって感じはするけど流れを簡単にまとめてみました。
間違いとかあったら訂正してくださひ。

1.zz_GetEnv(HTTP各環境変数の取得)
2.logOut(アクセスログ保存)
3.dat_read(datファイルの読み込み)
ファイルサイズの取得
環境変数から読み出し位置等の解析
メモリの確保
ファイルの読み出し
最大表示可能レス数の解析?(getLineMax)
4.dat_out(HTTPD出力要求(表示))
・forループの中身
(st,ls,to等の表示ログ番号制御処理(zz_nfがよくわからない)
指定ログ番号データ表示(out_html))
最終ライン処理(out_html1)
書き込み用フォーム表示処理(html_foot)
5.メモリ開放

out_html関数辺りが結構重要かも、引き続き細かいところ解析していきます。

91 :デフォルトの名無しさん :2001/08/25(土) 22:20
2ch閉鎖の危機なんだと
http://cocoa.2ch.net/test/read.cgi?bbs=unix&key=998695422
の 291 も加えてください。

92 :デフォルトの名無しさん :2001/08/25(土) 22:22
out_html と似た名前の関数があってわかりずらいですよね。
out_html1() だって、、、
コメントもコピペなのかあてにならんし

93 :デフォルトの名無しさん :2001/08/25(土) 22:34
zz_GetStringが何をやりたい関数なのかわからん……

94 :sage@sage.com :2001/08/25(土) 22:39
>>93
zz_GetStringはHTTPの環境変数を取得します。
ブラウザから要求をかけたときに付帯するプロトコル情報です。
あと、http://**.com/read.cgi?st=8%ls=5
のようなcgiに変数を引き渡すときに使用されます。

解析続き

各バッファの相関関係
・BigBuffer datファイルから読み出したデータ格納バッファ
・BigLine BigBufferの各レス先頭位置を示すポインタが格納されている配列

getLineMaxでBigBufferを全てスキャンして、
\nならそのポインタ位置を記憶、NULLに置き換える。
最大転送量・\nが見つからない場合(ファイルの最後?)で処理終了
取得したライン(ログ数)を返す

95 :仕様無しさん ◆NwLv.g/w :2001/08/25(土) 22:40
>93 関数を呼んでるところを見て御覧。

96 :sage@sage.com :2001/08/25(土) 22:42
>>94
ごめん read.cgi?st=3%ls=5
の?以下が環境変数となります。
HTTPDのAPIでこの値を取得できます。

ただ、折れの知っている情報って組み込み用HTTPDについてなので
汎用的なサーバのHTTPDだと違うかもしんない・・・。

97 :93 :2001/08/25(土) 22:45
>>94-95
ありがとう。

98 :sage@sage.com :2001/08/25(土) 22:47
環境変数って表現はちょっと違ってたかもしれませんね。
どちらかっていうとget_envでとってくるのが環境変数ですね。

99 :デフォルトの名無しさん :2001/08/25(土) 23:10
UNIX 板でも同時進行してるんだがmerge しなくていいのか?

100 :デフォルトの名無しさん :2001/08/25(土) 23:11
http://cocoa.2ch.net/test/read.cgi?bbs=unix&key=998695422
でも対策スレが立っています。夜勤さんも来ています。

101 :265 :2001/08/25(土) 23:12
>>7-9

ってことにしたんだけど.. あっちどうなってるんだろう..

102 :デフォルトの名無しさん :2001/08/25(土) 23:15
これってうわさのリファクタリング??

103 :デフォルトの名無しさん :2001/08/25(土) 23:16
>>99
当面問題なのは転送量だからUNIX板の方には
先に走ってもらって転送量削減のめどかついた時点で

圧縮により増えた負荷を下げるようにこちらの結果を
反映していけばよいのではないでしょうか

104 :デフォルトの名無しさん :2001/08/25(土) 23:16
>>102
いいえ、Cプログラミング診断室です。

105 :デフォルトの名無しさん :2001/08/25(土) 23:18
なんか向こうでどんどこ新しいの作っちゃってんだけど
こっちの意見も言っといた方がよくない?

106 :265 :2001/08/25(土) 23:20
>>104
ワラタ

107 :デフォルトの名無しさん :2001/08/25(土) 23:20
main()のdat_read(); dat_out(); は見直したほうが良くない?
全レスbufに溜める方式で良いのか?

108 :デフォルトの名無しさん :2001/08/25(土) 23:21
とりあえず>>84あたりはmergeされてもいいと思うんだけど

109 :デフォルトの名無しさん :2001/08/25(土) 23:21
>>105
とりあえず期日は今月末だから、結果が出るものを
先に作ったほうがよい。というか作り終えたみたいだが
(これからテスト)

110 :デフォルトの名無しさん :2001/08/25(土) 23:21
>>107
そうそう、それ良くないよ。

111 :デフォルトの名無しさん :2001/08/25(土) 23:21
>>103
 それがいいと思う。
ただそうする場合、向こうにその方針伝えて置いた方がよさげ。

112 :デフォルトの名無しさん :2001/08/25(土) 23:21
むこうで作ってるのはgzip対応版でしょ?
向こうはデータの入出力に手を入れている。
こっちはデータの解析・加工に手を入れている。
違うところを修正しているのだから問題ないと思うけど。

113 :デフォルトの名無しさん :2001/08/25(土) 23:22
http://5ch.tanuq.net/
5chへ移動

114 :デフォルトの名無しさん :2001/08/25(土) 23:22
むこうは間に合わせの quick hackだから、
こっちはちゃんと書き直すのがよいと思われ。

っていうか、mmapして行数数えたほうがよくねえか?

115 :UNIX板より :2001/08/25(土) 23:23
read.cgi ver5
419 名前:夜勤 ★ 投稿日:2001/08/25(土) 23:20
piza2 に入りました。
私は 転送量と load average を観察中。。。

116 :デフォルトの名無しさん :2001/08/25(土) 23:25
>>112
今必要とされてる課題は転送量の削減だから、
それ以外の改良を同時に施してもわけわからなく
なるか。
あっちがリリースされてからのほうがいいよ

117 :デフォルトの名無しさん :2001/08/25(土) 23:26
とりあえず、サーバへの負荷よりも、トラフィックが問題らしい。

118 :デフォルトの名無しさん :2001/08/25(土) 23:27
いま read4.c と read5.c compare したけど
gzip関連以外は特に変えてないみたいだよ

119 :デフォルトの名無しさん :2001/08/25(土) 23:27
レス1件ごとに処理する方式にしない?
とゆーかそれなら、練習の為に書いたコードが手元にある。

120 :デフォルトの名無しさん :2001/08/25(土) 23:31
ここは緊急的なスクリプトの改変をするスレじゃない。
とりあえずはgzipの部分と直行性のありそうな、htmlの生成の部分を
最適化しときましょうってスレ。

121 :  :2001/08/25(土) 23:33
なんかunixスレが荒されてる

122 :265 :2001/08/25(土) 23:35
>>119
アップきぼんぬ。

http://server2047.virtualave.net/gorogorogoro/2chresque/



ftp://210.170.209.10/incoming
↑UNIX板で提供されたんだけどたぶん大丈夫でしょう

123 :デフォルトの名無しさん :2001/08/25(土) 23:42
read.cgi 5.00 gzip対応版がとりあえずは動作している模様
読み込みの早さから、圧縮は成功している・・と思われる

2ch閉鎖の危機なんだと
http://cocoa.2ch.net/test/read.cgi?bbs=unix&key=998695422

124 :デフォルトの名無しさん :2001/08/25(土) 23:43
ここの鯖、圧縮対応したの?妙に早い気がするんだが

125 :sage@sage.com :2001/08/25(土) 23:43
やっぱりout_htmlとその周りの関数の最適化が一番よいのかな。

あとバッファに全部読み込まず適時fseekして読み出す場合、
fseekのオーバーヘッドはどうなのかな?

126 :デフォルトの名無しさん :2001/08/25(土) 23:44
左下の表示 readcgi が ver5 になってる。
うまくいったのか?
圧縮に対応してないクライアントだとどうなるんだ?

127 :デフォルトの名無しさん :2001/08/25(土) 23:45
>>126
BadAccessではじかれるんじゃない?

128 :UNIX板より :2001/08/25(土) 23:45
>>126
切り捨て

129 :デフォルトの名無しさん :2001/08/25(土) 23:45
ダウンロードになるんじゃない?

130 :デフォルトの名無しさん :2001/08/25(土) 23:46
あら、切り捨てか

131 :デフォルトの名無しさん :2001/08/25(土) 23:47
やったみたい ↓のバージョン参照

132 :デフォルトの名無しさん :2001/08/25(土) 23:50
プログラム板住人じゃないけど
Win2kSP2+NN3.03Gold[ja]で問題なく表示されるよ

HTTP1.1でmod_gzip が対応らしい、HTTP1.1に対応していない
クライアントの場合は圧縮せずに転送する模様

133 :デフォルトの名無しさん :2001/08/25(土) 23:52
>>132
ありがと

134 :デフォルトの名無しさん :2001/08/25(土) 23:54
>>126 単に生でだらだら出されるだけだよ
wwwoffleで確認

135 : :2001/08/25(土) 23:54
微妙に軽い気がする

136 :しんがり :2001/08/25(土) 23:57
i-mode(D503i)でモナー板の表示確認しました。
手動でls=5にしましたが(^_^;)
http://piza2.2ch.net/test/read.cgi?bbs=mona&key=998714496&ls=5&imode=true

137 :デフォルトの名無しさん :2001/08/25(土) 23:57
はえー。凄いな皆。

138 :79 :2001/08/26(日) 00:07
/*
doReplace

文字列 des の中で最初に現れた str0 を str1 に書き換える。
des が十分大きく無いと、どうなるかはわからない。

例えば des が [A][str0][B] であれば str0 を str1 に置き換え [A][str1][B] になる。
このとき戻り値は B のポインタになる(B に対して doReplace を行うため)
*/
char * doReplace( char * des, char * str0, char * str1 )
{
char *p;
char t[SIZE_BUF];

int str0_length;
int str1_length;

/* 置き換えるべき文字列の位置を取得 */
p = strstr(des, str0);
if (p == NULL) {
return NULL;
}

str0_length = strlen(str0);
str1_length = strlen(str1);

/* 部分文字列以後の文字列を一時保存 */
strcpy(t, p + str0_length);

/* des に書き戻す */
strcat(p, str1);
strcat(p + str1_length, c);

/* 部分文字列以後の文字列の位置を返す */
return p + str1_length;
}

doReplace の無駄を少し無くしました。
一応テストしましたが、もしかしたらバグがあるかも知れないです。

139 :デフォルトの名無しさん :2001/08/26(日) 00:08
[2ちゃんねる閉鎖騒動関連リンク集]
http://members.home.ne.jp/f-line/2ch.htm
主な経緯は批判要望板を参照のこと。

現在、piza2鯖にread.cgi 5.00 gzip対応版が入った模様。
とりあえず動作していて、読み込みの早さからみると、
圧縮は成功している・・と思われる。
これが、8月危機の救世主になるか?

…実況に懲りないモー板がやり玉に挙がらないことを願う…。

140 :VBPG :2001/08/26(日) 00:09
よし!俺も手伝うぞ!

141 :w3m :2001/08/26(日) 00:12
test
deb2.2

142 :デフォルトの名無しさん :2001/08/26(日) 00:13
どうだろう。

143 :デフォルトの名無しさん :2001/08/26(日) 00:16


144 :del厨(新規) :2001/08/26(日) 00:18
僕に出来る事があったら言ってください!

145 :デフォルトの名無しさん :2001/08/26(日) 00:20
>>138
someReplace込みで高速化したほうが良いかも

146 :デフォルトの名無しさん :2001/08/26(日) 00:21
とりあえずgzip改造はほぼ上手くいった模様。
Last-Modified問題はどっちのスレで片付けるのかな?

147 :デフォルトの名無しさん :2001/08/26(日) 00:23
その前に、 gzip -> zlib 改造が必要?

148 :sage@sage.com :2001/08/26(日) 00:28
dat_readのgetLineMax周りに手を加えてみました。

if(!BigBuffer)
{
html_error("メモリの確保に失敗しました。");
lineMax = -8;
}

fp = fopen(fname,"r");
if(!fp)
{
html_error("そんな板orスレッドないです。");
return0;
}
fread(BigBuffer,zz_fileSize,1,fp);
fclose(fp);
BigBuffer[zz_fileSize] = '\0';

for(i=0;i<zz_fileSize;i++)
{
if(BigBuffer[i] == '\0')BigBuffer[i] = '*';

if(BigBuffer[i] == '\n')
{
BigLine[i] = (char *)&BigBuffer[i];
BigBuffer[i] = '\0';
if(lineMax <= RES_RED)
lineMax++;
}
}

return 0;

これでgetMaxLine関数を使用する必要がなくなるかと思います。

149 :デフォルトの名無しさん :2001/08/26(日) 00:29
最新のread.cgiのソースクレクレ

150 :デフォルトの名無しさん :2001/08/26(日) 00:32
UNIX板繋がらないんですけど??
サーバ大丈夫かおい

151 :デフォルトの名無しさん :2001/08/26(日) 00:34
ここがウニ板の避難所ですか(´Д`;)

152 :デフォルトの名無しさん :2001/08/26(日) 00:35
ftp://210.170.209.10/incoming/

153 :デフォルトの名無しさん :2001/08/26(日) 00:35
>>150
荒らされる模様

154 :デフォルトの名無しさん :2001/08/26(日) 00:35
ROMが異様に多いのとキチガイが猛烈な荒らしをかけてスレが機能してません…>Unix板スレ

155 :デフォルトの名無しさん :2001/08/26(日) 00:35
最新版はここだってよ
ftp://210.170.209.10/incoming/new_ver

156 :デフォルトの名無しさん :2001/08/26(日) 00:36
向こうは気違いが発狂中だなあ。

157 :153 :2001/08/26(日) 00:36
○荒らされてる
×荒らされる

158 :1時間程ROMしてるけど :2001/08/26(日) 00:37
ここ10分ぐらいで猛烈にパフォーマンス悪くなったね>UNIX板

159 :デフォルトの名無しさん :2001/08/26(日) 00:37
UNIX板が「無駄」ヴァカに荒らされてて、カキコめない。
だれか、奴を殺せるやついないか?

それから、 >>155 の場所は、あの 369 さんのところなんだから、
用のないパケットは絶対に飛ばさないように。

160 :デフォルトの名無しさん :2001/08/26(日) 00:39
gzip改造の成果のお陰でmod_gzipの導入が検討されているらしい。
このスレッドではひとまず Ver4.21の改造を考えるべきかも。

161 :デフォルトの名無しさん :2001/08/26(日) 00:39
荒らしてる奴のIP抜きたい所だが、ああいうのに限って
串とか通してそうだからなあ。

162 :デフォルトの名無しさん :2001/08/26(日) 00:40
ウザいよ>Unix板住民
雑談・マ板避難所スレでやれ

163 :デフォルトの名無しさん :2001/08/26(日) 00:41
>>162
omaegana-

164 :デフォルトの名無しさん :2001/08/26(日) 00:41
つーか、今まで出てきた改造案をいったんまとめんか?
ある程度まとめて試験とかやったほうが効率よさそうだし

165 :デフォルトの名無しさん :2001/08/26(日) 01:05
改造手伝っていいけど、何すりゃいい?

166 :>165 :2001/08/26(日) 01:06
好きにやって、結果をageてくれ。

167 :sage@sage.com :2001/08/26(日) 01:10
すまん、ちょっと訂正>>148

if(!fp)
{
html_error("そんな板orスレッドないです。") ;
lineMax = 0; ←追加
return 0 ;
}

ファイルエラー時にlineMaxが-8のままになるのを修正。

168 :79 :2001/08/26(日) 01:13
someReplace と doReplace をまとめました。
>>145 さん。指摘どうもです。

/*
someReplace

src の中の str0 をすべて str1 に置き換えた文字列を des に入れて返す。
des は呼び出し側で十分なメモリ取っといてな
*/
int someReplace(char * src, char * des, char * str0, char * str1 )
{
char temp[SIZE_BUF];
int str0_length = strlen(str0);
int str1_length = strlen(str1);

/* 置き換える文字列を取っとく */
strcpy( des, src );

/* まだ文字列が残っていればループ */
while (des) {

/* 置き換えるべき文字列の位置を取得 */
des = strstr( des, str0 );
if (des == NULL) {
break;
}

/* 部分文字列以後の文字列を一時保存 */
strcpy(temp, des + str0_length);

/* des に書き戻す */
strcpy(des, str1);
strcat(des + str1_length, temp);

/* 部分文字列以後の文字列の位置を返す */
des += str1_length;
}

return 1;
}

169 :UNIX板のスレ氏んj :2001/08/26(日) 01:13
If-Modified-Since関係いついては、この辺もちょと読んでみてくれ。
ブラウザの挙動や、一番の問題点である、
「同じリクエストに返すHTMLが二種類ある」点も触れている。
http://green.jbbs.net/computer/bbs/read.cgi?BBS=479&KEY=989936380&START=28

といっても、緊急なので、キャッシュされた時間なんか無視して
とりあえずIf-Modified-Sinceに反応するのが良いかもしれん。

あと、大抵のブラウザは、Last-Modifiedを付加しなくても
レスポンスのDate:を元にIf-Modified-Sinceを付けてくれそうだが、
proxy等を考えると付加したほうがよさそうな気もする。

170 :デフォルトの名無しさん :2001/08/26(日) 01:22
UNIX板より転載age

ソース見たけど、無駄なprintfが多いな…。

printf("\
2ちゃんねるだいすき<br>\
おれもおうえんするよ<br>\
");

な感じで書けば、わずかだけど早くなんない?

171 :デフォルトの名無しさん :2001/08/26(日) 01:27
今時のコンパイラなんだから、
printf(
 "2ちゃんねるだいすき<br>"
 "おれもおうえんするよ<br>"
);
にしろよ。読みやすさも違うし。

172 :デフォルトの名無しさん :2001/08/26(日) 01:27
トリッキーの1こいこい

173 :デフォルトの名無しさん :2001/08/26(日) 01:27
コンパイラが最適化するからおんなじと見た。
それより\nがいらね。

174 :デフォルトの名無しさん :2001/08/26(日) 01:28
index2.html を削る方法を考えてみた。

1. age / sage しかいれないので 名前に mailto: は不要
2. スレッドの最後の
>レスを全部読む 最新レス50 レス1−100 掲示板のトップへ リロード
レスを全部読む 最新レス50 レス1−100 の3つでいいのでは?
3.ラジ@ のバナーがすべての板に張ってあるが必要なの?

175 :デフォルトの名無しさん :2001/08/26(日) 01:28
>>170
10年前じゃあるまいし、毎回zip圧縮してるようなソフトで
そんなみみっちい最適化したところで何がどう変わるというのだ。

176 :デフォルトの名無しさん :2001/08/26(日) 01:30
ところで、サーバー負荷の点では、明らかにCGIは劣るわけだが、
read.cgiの仕様を元にread.phpを作るとかは、
現状では無駄なのかな?
・・・俺には無理だけど

177 :デフォルトの名無しさん :2001/08/26(日) 01:31
なぁんかオープンソースな感じでカッコいいね。
ついでにCのCGIも全部サーブレットにすればいいのに。
やっぱ、サーバの設定がかえれないとかで駄目なのかな?

178 :デフォルトの名無しさん :2001/08/26(日) 01:31
http://server2047.virtualave.net/gorogorogoro/readres.cgi?bo=2chresque&vi=998756363
以前練習に書いたコードの一部です。レス1件ごとに読んで処理してく方式です。
ローカルで実行することを前提にしてるんで、>>半角のタグの書き換え等
無駄な処理もやってます。
デミリタが<>に変った際にやっつけ仕事で拡張したので、その部分は
カッコ悪くなってます。

231KB
新着レスの表示

スレッドリストへ戻る 全部 前100 次100 最新50

0ch BBS 2004-10-30