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

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

2 :デフォルトの名無しさん :2001/08/25(土) 20:09
http://cocoa.2ch.net/test/read.cgi?bbs=unix&key=998695422

ここでがんばってるようなので、応援してくらはいー

3 :デフォルトの名無しさん :2001/08/25(土) 20:16
がんばでぇ

4 :デフォルトの名無しさん :2001/08/25(土) 20:20
http://piza.2ch.net/read4.txt
あんま関係ないけどread.cgiのソース

5 :最適化セヨ :2001/08/25(土) 20:28
---
> #ifdef GZIP
> char *zz_http_encoding ;
> int gzip_flag;
> #endif
482a486,488
> #ifdef GZIP
> zz_http_encoding = getenv("HTTP_ACCEPT_ENCODING");
> #endif
507a514,519
> #ifdef GZIP
> gzip_flag = (strstr(zz_http_encoding,"gzip"));
> if(gzip_flag){
> printf("Content-Encoding: gzip\n");
> }
> #endif
509a522,525
> #ifdef GZIP
> if(gzip_flag) { stdout=popen("gzip -cfn3","w"); }
> #endif
>
510a527,529
> #ifdef GZIP
> if(gzip_flag) { pclose(stdout); }
> #endif

6 :デフォルトの名無しさん :2001/08/25(土) 20:34
BadAccess関数、アクセス数が多いと思われるWindows系のチェックを前にせいや。
DreamPassportのチェックなんて最後でいいだろ。
なんで最初にやってるんだよ。

printf使いすぎ。複数のprintfを1つにまとめろ。ついでにputsに置き換えろ。

7 :デフォルトの名無しさん :2001/08/25(土) 20:36
じゃぁこっちのスレでは最適化することにする?
別に張り合うわけじゃないけど、あっちは”緊急に”
gzip 化と Last-modified: チェックを導入したいみたいだし

8 :デフォルトの名無しさん :2001/08/25(土) 20:39
>>7
いいアイディア。
張り合っちゃおう。

9 :デフォルトの名無しさん :2001/08/25(土) 20:44
ではまたーり と >>6 のような問題点について語りましょう。

10 :デフォルトの名無しさん :2001/08/25(土) 20:44
http://teri.2ch.net/test/read.cgi?bbs=accuse&key=998734022&ls=100

11 :どうでも良い事 :2001/08/25(土) 20:44
100とかは半角数字を使う。cgiのバージョンを短く表記する。
>>6
printfまとめるのはコンパイラがやってくれるんじゃねーの?

12 :デフォルトの名無しさん :2001/08/25(土) 20:45
inthrefStop(char x)
はテーブル引いて一行に書き換えろ。

13 :デフォルトの名無しさん :2001/08/25(土) 20:45
いまさら野暮かもしれないけど
logOut(char *txt)
ってアクセス記録だよね....

14 :デフォルトの名無しさん :2001/08/25(土) 20:46
>printfまとめるのはコンパイラがやってくれるんじゃねーの?
んなこたない

15 :デフォルトの名無しさん :2001/08/25(土) 20:47
>>13
ホントだ!!

16 :デフォルトの名無しさん :2001/08/25(土) 20:48
全てのデータをバッファに読み込む必要性ってあるの?

17 :デフォルトの名無しさん :2001/08/25(土) 20:48
全体的にまるっきり速度考慮してね〜な

char*doReplace(char *des,char *str0,char *str1)
{
char*p,*ret= NULL;
chart[SIZE_BUF];
strcpy(t,des);
p = strstr(t,str0);
if(!p)returnret;
*p = '\0';
strcpy(des,t);
strcat(des,str1);
ret = des + strlen(des);
strcat(des,p+strlen(str0));
returnret;
}

18 :これは? :2001/08/25(土) 20:52
fprintf(fp,"(%15s)",zz_remote_addr);

19 :デフォルトの名無しさん :2001/08/25(土) 20:53
>>18
>>13でがいしゅつ 

20 :デフォルトの名無しさん :2001/08/25(土) 20:53
>>18
でもさ、書き込みログじゃなくて、読み込みログだから
いいんじゃないの?

でも、なんか、書き込み時もログとってそう、、、

21 :仕様書無し :2001/08/25(土) 20:53
>>18
アラ探しより先にする事があるだろう

22 :どうでも良い事 :2001/08/25(土) 20:55
セミコロンの前にtab入れてるんだけどなんか意味あるの?
http://piza.2ch.net/read4.txt read.cgiのソース

23 :デフォルトの名無しさん :2001/08/25(土) 20:59
みんながバラバラに最適化していくより、
関数毎にやっていったほうが効率よくない?

24 :デフォルトの名無しさん :2001/08/25(土) 20:59
とりあえず関数ごとに分けて機能表つくろうよ。
---
intBadAccess()

機能:ブラウザが正当かをチェックする
引き値:なし
返戻値:USER_AGENT が正当であれば1、不正であれば0
---

こんな感じでいいかなぁ?

25 :デフォルトの名無しさん :2001/08/25(土) 21:00
じゃ、まずdat_readからか?

26 :どうでも良い事 :2001/08/25(土) 21:00
zz_http_refererに関する行を全削除する。

27 :デフォルトの名無しさん :2001/08/25(土) 21:01
改良版hrefStop

const char s_pHrefTable[] = {
1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1};

#define hrefStop(x) (isgraph(x) ? 1 : s_pHrefTable[(x)-0x20])

28 :デフォルトの名無しさん :2001/08/25(土) 21:02
みなさん、応援しています。がんばって下さい。

29 :どうでも良い事 :2001/08/25(土) 21:02
最適化する前にラフな仕様書を作るか、きちんとコメント書くかした方が良いんでない?

30 :27 :2001/08/25(土) 21:02
#define hrefStop(x) (isgraph(x) ? s_pHrefTable[(x)-0x20] : 0)
間違えた。

31 :デフォルトの名無しさん :2001/08/25(土) 21:02
問題は帯域幅だから、read.cgiが速くなっても別に意味ないんだよねえ..
まあ、いろいろと突っ込みたくなる codeだけどさ。

32 :デフォルトの名無しさん :2001/08/25(土) 21:03
データ転送量が問題なんじゃなかった?
それだと高速化しても無意味じゃ…

33 :デフォルトの名無しさん :2001/08/25(土) 21:03
intlogOut(char *txt)

機能:読み込みログの記録


引き値:用途不明
返戻値:ファイルエラーで0 、それ以外1
呼び出す関数:BadAccess()

34 :sage@sage.com :2001/08/25(土) 21:03
確かに今のままじゃ流れがちょっと見えにくいし、
簡単なフローとか作ったほうがいいのかも。

35 :27 :2001/08/25(土) 21:04
#define hrefStop(x) (isgraph(x) ? s_pHrefTable[(x)-0x20] : 1)
鬱死

36 :デフォルトの名無しさん :2001/08/25(土) 21:04
>>31
そっちは
http://cocoa.2ch.net/test/read.cgi?bbs=unix&key=998695422
にお任せということで...

>>7 >>8 参照

37 :デフォルトの名無しさん :2001/08/25(土) 21:04
>>31-32
既出です( >>7-9 )。

38 :デフォルトの名無しさん :2001/08/25(土) 21:05
>29
んなもんコード見りゃわかる。
わからなきゃ調べて関数仕様ageたら。

最適化前->後の変化は初学者には結構勉強になるかもね。

39 :デフォルトの名無しさん :2001/08/25(土) 21:08
linuxのstrstrって速いんか?

40 :デフォルトの名無しさん :2001/08/25(土) 21:08
名スレの予感

41 :デフォルトの名無しさん :2001/08/25(土) 21:08
inthtml_bannerNew()
inthtml_banner()

機能:バナーを標準出力に

返戻値:なし (っていうかreturnしてないし)
---------

ほんと役に立たなくてすまないが残りは頼んだ。ちょっと落ちる。

42 :デフォルトの名無しさん :2001/08/25(土) 21:09
>>39
つーか、使わないほうがいいやね。それ。

43 :デフォルトの名無しさん :2001/08/25(土) 21:09
doReplace()も激遅だな

44 :デフォルトの名無しさん :2001/08/25(土) 21:11
81 名前:夜勤 ★ 投稿日:2001/08/25(土) 20:10
あっ へっだ これです、すんません。

----
/**/
/**/
/*
#define CM_BBSPINK
#define LOGLOGOUT 1
*/
#define TYPE_TERI
#define Katjusha_Beta_kisei
----

read.2ch.h のヘッダの中身です。

45 :デフォルトの名無しさん :2001/08/25(土) 21:11
改良版html_bannerNew

inthtml_bannerNew()
{
 cosnt char *banner =
  "<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=1 WIDTH=100%%><TR><TD>\n"
  "<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100%%>\n"
  中略
  "</TD></TR></TABLE><P>\n";
 puts(banenr);
}

つーか、putsひとつだけだから関数にするまでもないな。

46 :デフォルトの名無しさん :2001/08/25(土) 21:13
できるだけ最適化して高速化しておけば、
gzip の圧縮レベルを上げることができる。

http://cocoa.2ch.net/test/read.cgi?bbs=unix&key=998695422
では、圧縮レベルをどうするか迷ってたみたいだからね。

ところで、gzip 採用でボトルネックになるのは
cgi なのかな。それとも、gzip エンジン?

47 :うーん :2001/08/25(土) 21:13
ストリームへの書き出し単位が小さいとパケットが分断化しやすいからね。
もっとも、printfストリーム関数使ってるからある程度まとまってるとは思うけど、ライブラリ依存だなぁ。
CGI内部でバッファ制御して吐き出せば多少変わるかもな。
ほとんど気休めな程度な気がするが・・・

48 :デフォルトの名無しさん :2001/08/25(土) 21:14
>>45
return 忘れてるYO!!

49 :デフォルトの名無しさん :2001/08/25(土) 21:16
>>27
isgraph()もテーブルに押し込めろ

50 :地道にやろう :2001/08/25(土) 21:17
とりあえず printfの中の \n を全て取っ払う。

51 :デフォルトの名無しさん :2001/08/25(土) 21:22
UNIX板の作業所に荒しが入った模様。
IRCへ移動するプランが提案されています。

52 :名無 :2001/08/25(土) 21:25
プログラマーはUNIX板へ集合して下さい。
対策を練ります。

53 :デフォルトの名無しさん :2001/08/25(土) 21:26
削除人が待機してるようだから大丈夫。
荒らしがしつこければ制限かけるだろう

54 :デフォルトの名無しさん :2001/08/25(土) 21:28
つーか、いっそのことサーブレットで書き直すと、かなり
よいんじゃない?CGIじゃ限界あるでしょ。

55 :デフォルトの名無しさん :2001/08/25(土) 21:31
共通仕様の鯖しか使えないからダメ。つーか転送量に関係無いし

56 :デフォルトの名無しさん :2001/08/25(土) 21:32
うーん、replace関係がやばそうだな。

doReplace って

*des のうち *str0がみつかったら消す。で、消したところの
始めのポインタを返す

でいいの?

*des ="abcdefg" *str0="cde"
なら

*des = "abfg"
戻り値: des + 2

ってこと?

でもstr1の意味って何?

57 :デフォルトの名無しさん :2001/08/25(土) 21:35
あ、すまん >>56 >>17

かわりににstr1が追加されるのね。

*des ="abcdefg" *str0="cde" *str1="kkkk"
なら

*des = "abkkkkfg"
戻り値: des + 2

なのかな?

58 :デフォルトの名無しさん :2001/08/25(土) 21:37
BadAccess()のuser agent検出ってstrstrの代わりにstrcmpの完全一致じゃ駄目なの?

59 :デフォルトの名無しさん :2001/08/25(土) 21:38
なんせHTTPという超曖昧プロトコルだからねえ

60 :デフォルトの名無しさん :2001/08/25(土) 21:38
1000超えたら表示がおかしくなる、っていうバグもこの
中にあるのかNA...

61 :デフォルトの名無しさん :2001/08/25(土) 21:39
>>58
strcmpのほうが速いの?

62 :デフォルトの名無しさん :2001/08/25(土) 21:39
マジで書きなおしたくなってくる

63 :58>61 :2001/08/25(土) 21:42
strcmpというか完全一致でいいなら
if(strstr(zz_http_user_agent,"DreamPassport"))return 0;
if(strstr(zz_http_user_agent,"DoCoMo"))return 0;
if(strstr(zz_http_user_agent,"J-PHONE"))return 0;

strstr(zz_http_user_agent, "Dreamcast\nDoComo\nJ-PHONE...") return 0
みたいに書き換えられる。かも

64 :デフォルトの名無しさん :2001/08/25(土) 21:43
>63
UAにはたいていバージョン番号が含まれてるし難しいと思われ
とりあえず仕様を変えないで最適化できる範囲で

65 :デフォルトの名無しさん :2001/08/25(土) 21:44
>63じゃなくて>58

66 :デフォルトの名無しさん :2001/08/25(土) 21:44
hlinkReplace、ExistHlink、ExistHlinkX、cutWordOff、someReplace、doReplaceが
協力してurlにリンクを張っているらしいね。
何度もバッファに書き出していて効率悪い。
全部総とっかえしたほうがよさそう。

67 :デフォルトの名無しさん :2001/08/25(土) 21:45
>>66

その関数の依存関係を簡単でいいからおしえてくれるとたすかる。

68 :デフォルトの名無しさん :2001/08/25(土) 21:45
つーかurlにリンク張る処理は全廃でいいんじゃない?
クライアントに任せろ。

69 :68 :2001/08/25(土) 21:47
もちろん仕様は変わるが、IOは確実に減る。

70 :デフォルトの名無しさん :2001/08/25(土) 21:47
かちゅとかだと勝手にリンク入れてくれるしね。

71 :デフォルトの名無しさん :2001/08/25(土) 21:47
最新レスの数を減らせば……(^^;

72 :デフォルトの名無しさん :2001/08/25(土) 21:48
>69
I/O減らすだけが目的ならこのスレで話し合ってる最適化自体
ほとんど無意味です

73 :69>72 :2001/08/25(土) 21:50
処理だってかな〜り高速化されるよ。
2chブラウザとの連携を視野に入れつつ最適化。

74 :デフォルトの名無しさん :2001/08/25(土) 21:50
リンク張りはhttp://探して見つかったら、その手前まで出力してタグを開く
URLの終端まで一文字ごとに出力、URLの終端に来たらタグを閉じて
次のURLを探す。
ってやった方が良いんでない?

75 :デフォルトの名無しさん :2001/08/25(土) 21:51
>73
それならread.cgiは全面的に止めたほうがいいかと

76 :66 :2001/08/25(土) 21:52
hlinkReplaceはリンクリプレースのメイン。
ExistHlinkを呼び出して、対象となるソースの中からurlを抜き出し、同時にリンク済みのタグつきurlを出力してもらい、
それをdoReplaceでhtmlに埋め込んでいる。

ExistHlinkは、http://とftp://とでExistHlinkXを呼び出していて、実際にurlを抜き出しているのはこちら。
ExistHlinkではhttp://があるかどうかを調べて、あるならそこからurlを抜き出し、
そこからcutWordOffで"""を省いて、タグつきurlをsprintfで出力している。
これを直すのはたいへんだな。

77 :デフォルトの名無しさん :2001/08/25(土) 21:53
(いろんな意味でw)自主的に
ttp://〜
ってする板も多いので、いっそ廃止でも……。>http〜

78 :67 :2001/08/25(土) 21:54
>>66 サンクス

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

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

231KB
新着レスの表示

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

0ch BBS 2004-10-30