■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 最新50
プログラマが2chを救う!?
- 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
ってことにしたんだけど.. あっちどうなってるんだろう..
- 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に溜める方式で良いのか?
231KB
新着レスの表示
スレッドリストへ戻る 全部 前100 次100 最新50
0ch BBS 2004-10-30