1 :
デフォルトの名無しさん :
2001/08/25(土) 19:48 結局のところ資金面の調達が不可能なのなら、ここ(技術板)が 動かないと2ch縮小・停止の情勢・・・。 具体的には・・・ ・P2Pシステムが代替案としては妥当なのか否か ・他の優良アイデアはあるのか ・言語は何を選ぶのか ・根本的な問題として、2ch(ひろゆき等々)を救う必要があるのか を話し合っていただきたいと思います。 では、どうぞ・・・・
2 :
デフォルトの名無しさん :2001/08/25(土) 20:09
3 :
デフォルトの名無しさん :2001/08/25(土) 20:16
がんばでぇ
4 :
デフォルトの名無しさん :2001/08/25(土) 20:20
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
BadAccess関数、アクセス数が多いと思われるWindows系のチェックを前にせいや。 DreamPassportのチェックなんて最後でいいだろ。 なんで最初にやってるんだよ。 printf使いすぎ。複数のprintfを1つにまとめろ。ついでにputsに置き換えろ。
7 :
デフォルトの名無しさん :2001/08/25(土) 20:36
じゃぁこっちのスレでは最適化することにする? 別に張り合うわけじゃないけど、あっちは”緊急に” gzip 化と Last-modified: チェックを導入したいみたいだし
8 :
デフォルトの名無しさん :2001/08/25(土) 20:39
ではまたーり と
>>6 のような問題点について語りましょう。
10 :
デフォルトの名無しさん :2001/08/25(土) 20:44
11 :
どうでも良い事 :2001/08/25(土) 20:44
100とかは半角数字を使う。cgiのバージョンを短く表記する。
>>6 printfまとめるのはコンパイラがやってくれるんじゃねーの?
int hrefStop(char x) はテーブル引いて一行に書き換えろ。
13 :
デフォルトの名無しさん :2001/08/25(土) 20:45
いまさら野暮かもしれないけど logOut(char *txt) ってアクセス記録だよね....
>printfまとめるのはコンパイラがやってくれるんじゃねーの? んなこたない
全てのデータをバッファに読み込む必要性ってあるの?
全体的にまるっきり速度考慮してね〜な char *doReplace(char *des,char *str0,char *str1) { char *p,*ret = NULL ; char t[SIZE_BUF] ; strcpy(t,des) ; p = strstr(t,str0) ; if(!p) return ret ; *p = '\0' ; strcpy(des,t) ; strcat(des,str1) ; ret = des + strlen(des) ; strcat(des,p+strlen(str0)) ; return ret ; }
fprintf(fp,"(%15s)",zz_remote_addr) ;
19 :
デフォルトの名無しさん :2001/08/25(土) 20:53
>>18 でもさ、書き込みログじゃなくて、読み込みログだから
いいんじゃないの?
でも、なんか、書き込み時もログとってそう、、、
21 :
仕様書無し :2001/08/25(土) 20:53
22 :
どうでも良い事 :2001/08/25(土) 20:55
23 :
デフォルトの名無しさん :2001/08/25(土) 20:59
みんながバラバラに最適化していくより、 関数毎にやっていったほうが効率よくない?
24 :
デフォルトの名無しさん :2001/08/25(土) 20:59
とりあえず関数ごとに分けて機能表つくろうよ。 --- int BadAccess() 機能:ブラウザが正当かをチェックする 引き値:なし 返戻値:USER_AGENT が正当であれば1、不正であれば0 --- こんな感じでいいかなぁ?
じゃ、まずdat_readからか?
26 :
どうでも良い事 :2001/08/25(土) 21:00
zz_http_refererに関する行を全削除する。
改良版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) 間違えた。
問題は帯域幅だから、read.cgiが速くなっても別に意味ないんだよねえ.. まあ、いろいろと突っ込みたくなる codeだけどさ。
データ転送量が問題なんじゃなかった? それだと高速化しても無意味じゃ…
33 :
デフォルトの名無しさん :2001/08/25(土) 21:03
int logOut(char *txt) 機能:読み込みログの記録 引き値:用途不明 返戻値:ファイルエラーで0 、それ以外1 呼び出す関数:BadAccess()
確かに今のままじゃ流れがちょっと見えにくいし、 簡単なフローとか作ったほうがいいのかも。
35 :
27 :2001/08/25(土) 21:04
#define hrefStop(x) (isgraph(x) ? s_pHrefTable[(x)-0x20] : 1) 鬱死
36 :
デフォルトの名無しさん :2001/08/25(土) 21:04
>29 んなもんコード見りゃわかる。 わからなきゃ調べて関数仕様ageたら。 最適化前->後の変化は初学者には結構勉強になるかもね。
linuxのstrstrって速いんか?
40 :
デフォルトの名無しさん :2001/08/25(土) 21:08
名スレの予感
41 :
デフォルトの名無しさん :2001/08/25(土) 21:08
int html_bannerNew() int html_banner() 機能:バナーを標準出力に 返戻値:なし (っていうかreturnしてないし) --------- ほんと役に立たなくてすまないが残りは頼んだ。ちょっと落ちる。
doReplace()も激遅だな
81 名前:夜勤 ★ 投稿日:2001/08/25(土) 20:10 あっ へっだ これです、すんません。 ---- /**/ /**/ /* #define CM_BBSPINK #define LOGLOGOUT 1 */ #define TYPE_TERI #define Katjusha_Beta_kisei ---- read.2ch.h のヘッダの中身です。
改良版html_bannerNew int html_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ひとつだけだから関数にするまでもないな。
47 :
うーん :2001/08/25(土) 21:13
ストリームへの書き出し単位が小さいとパケットが分断化しやすいからね。 もっとも、printfストリーム関数使ってるからある程度まとまってるとは思うけど、ライブラリ依存だなぁ。 CGI内部でバッファ制御して吐き出せば多少変わるかもな。 ほとんど気休めな程度な気がするが・・・
>>27 isgraph()もテーブルに押し込めろ
とりあえず printfの中の \n を全て取っ払う。
UNIX板の作業所に荒しが入った模様。 IRCへ移動するプランが提案されています。
52 :
名無 :2001/08/25(土) 21:25
プログラマーはUNIX板へ集合して下さい。 対策を練ります。
削除人が待機してるようだから大丈夫。 荒らしがしつこければ制限かけるだろう
つーか、いっそのことサーブレットで書き直すと、かなり よいんじゃない?CGIじゃ限界あるでしょ。
共通仕様の鯖しか使えないからダメ。つーか転送量に関係無いし
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
なのかな?
BadAccess()のuser agent検出ってstrstrの代わりにstrcmpの完全一致じゃ駄目なの?
なんせHTTPという超曖昧プロトコルだからねえ
1000超えたら表示がおかしくなる、っていうバグもこの 中にあるのかNA...
61 :
デフォルトの名無しさん :2001/08/25(土) 21:39
マジで書きなおしたくなってくる
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 みたいに書き換えられる。かも
>63 UAにはたいていバージョン番号が含まれてるし難しいと思われ とりあえず仕様を変えないで最適化できる範囲で
>63じゃなくて>58
hlinkReplace、ExistHlink、ExistHlinkX、cutWordOff、someReplace、doReplaceが 協力してurlにリンクを張っているらしいね。 何度もバッファに書き出していて効率悪い。 全部総とっかえしたほうがよさそう。
67 :
デフォルトの名無しさん :2001/08/25(土) 21:45
>>66 その関数の依存関係を簡単でいいからおしえてくれるとたすかる。
つーかurlにリンク張る処理は全廃でいいんじゃない? クライアントに任せろ。
69 :
68 :2001/08/25(土) 21:47
もちろん仕様は変わるが、IOは確実に減る。
かちゅとかだと勝手にリンク入れてくれるしね。
最新レスの数を減らせば……(^^;
>69 I/O減らすだけが目的ならこのスレで話し合ってる最適化自体 ほとんど無意味です
処理だってかな〜り高速化されるよ。 2chブラウザとの連携を視野に入れつつ最適化。
74 :
デフォルトの名無しさん :2001/08/25(土) 21:50
リンク張りは
http://探して見つかったら 、その手前まで出力してタグを開く
URLの終端まで一文字ごとに出力、URLの終端に来たらタグを閉じて
次のURLを探す。
ってやった方が良いんでない?
>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で出力している。
これを直すのはたいへんだな。
(いろんな意味でw)自主的に
ttp:// 〜
ってする板も多いので、いっそ廃止でも……。>http〜
78 :
67 :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; }
>75 それだと通常のブラウザから一切見えなくなっちゃうじゃん。
81 :
ペイント聖矢 :2001/08/25(土) 21:55
ぷうぷぷぷぷぷぷぷぷプログラマー板がっつつつつつつt!!!!!!??jfだjふぉ@あえああひゃはやはやはやはあはやあはやごふっ
PGer板停止中? 今、全体のフローらしきものを作ってます。 ところで、dat_readはレス1つ指定でも必ずファイル全部読み出して 処理しているのかな?
>>79 すっきりしたね。
でもkickだけあればいいのではないかという気もする。
改良版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; }
抜本的に見直す為、クラサバから検討しするスレも要るのかも・・・?
86 :
79 :2001/08/25(土) 22:04
>>83 確かにそうでした、accept のチェックは要らないですね。
87 :
デフォルトの名無しさん :2001/08/25(土) 22:04
>>86 改良版の問題は、ドリキャスがブラウザのシェアを独占したら
かえって重くなるということだな(笑)。
いまさらって感じはするけど流れを簡単にまとめてみました。 間違いとかあったら訂正してくださひ。 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関数辺りが結構重要かも、引き続き細かいところ解析していきます。
out_html と似た名前の関数があってわかりずらいですよね。 out_html1() だって、、、 コメントもコピペなのかあてにならんし
zz_GetStringが何をやりたい関数なのかわからん……
>>93 zz_GetStringはHTTPの環境変数を取得します。
ブラウザから要求をかけたときに付帯するプロトコル情報です。
あと、
http://**.com/read.cgi?st=8%ls=5 のようなcgiに変数を引き渡すときに使用されます。
解析続き
各バッファの相関関係
・BigBuffer datファイルから読み出したデータ格納バッファ
・BigLine BigBufferの各レス先頭位置を示すポインタが格納されている配列
getLineMaxでBigBufferを全てスキャンして、
\nならそのポインタ位置を記憶、NULLに置き換える。
最大転送量・\nが見つからない場合(ファイルの最後?)で処理終了
取得したライン(ログ数)を返す
>93 関数を呼んでるところを見て御覧。
>>94 ごめん read.cgi?st=3%ls=5
の?以下が環境変数となります。
HTTPDのAPIでこの値を取得できます。
ただ、折れの知っている情報って組み込み用HTTPDについてなので
汎用的なサーバのHTTPDだと違うかもしんない・・・。
97 :
93 :2001/08/25(土) 22:45
環境変数って表現はちょっと違ってたかもしれませんね。 どちらかっていうとget_envでとってくるのが環境変数ですね。
99 :
デフォルトの名無しさん :2001/08/25(土) 23:10
UNIX 板でも同時進行してるんだがmerge しなくていいのか?
100 :
デフォルトの名無しさん :2001/08/25(土) 23:11
101 :
265 :2001/08/25(土) 23:12
>>7 -9
ってことにしたんだけど.. あっちどうなってるんだろう..
これってうわさのリファクタリング??
>>99 当面問題なのは転送量だからUNIX板の方には
先に走ってもらって転送量削減のめどかついた時点で
圧縮により増えた負荷を下げるようにこちらの結果を
反映していけばよいのではないでしょうか
なんか向こうでどんどこ新しいの作っちゃってんだけど こっちの意見も言っといた方がよくない?
106 :
265 :2001/08/25(土) 23:20
107 :
デフォルトの名無しさん :2001/08/25(土) 23:20
main()のdat_read(); dat_out(); は見直したほうが良くない? 全レスbufに溜める方式で良いのか?
とりあえず
>>84 あたりはmergeされてもいいと思うんだけど
109 :
デフォルトの名無しさん :2001/08/25(土) 23:21
>>105 とりあえず期日は今月末だから、結果が出るものを
先に作ったほうがよい。というか作り終えたみたいだが
(これからテスト)
111 :
デフォルトの名無しさん :2001/08/25(土) 23:21
>>103 それがいいと思う。
ただそうする場合、向こうにその方針伝えて置いた方がよさげ。
むこうで作ってるのはgzip対応版でしょ? 向こうはデータの入出力に手を入れている。 こっちはデータの解析・加工に手を入れている。 違うところを修正しているのだから問題ないと思うけど。
113 :
デフォルトの名無しさん :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
123 :
デフォルトの名無しさん :2001/08/25(土) 23:42
124 :
デフォルトの名無しさん :2001/08/25(土) 23:43
ここの鯖、圧縮対応したの?妙に早い気がするんだが
やっぱりout_htmlとその周りの関数の最適化が一番よいのかな。 あとバッファに全部読み込まず適時fseekして読み出す場合、 fseekのオーバーヘッドはどうなのかな?
左下の表示 readcgi が ver5 になってる。 うまくいったのか? 圧縮に対応してないクライアントだとどうなるんだ?
>>126 BadAccessではじかれるんじゃない?
128 :
UNIX板より :2001/08/25(土) 23:45
ダウンロードになるんじゃない?
あら、切り捨てか
131 :
デフォルトの名無しさん :2001/08/25(土) 23:47
やったみたい ↓のバージョン参照
132 :
デフォルトの名無しさん :2001/08/25(土) 23:50
プログラム板住人じゃないけど Win2kSP2+NN3.03Gold[ja]で問題なく表示されるよ HTTP1.1でmod_gzip が対応らしい、HTTP1.1に対応していない クライアントの場合は圧縮せずに転送する模様
>>126 単に生でだらだら出されるだけだよ
wwwoffleで確認
135 :
:2001/08/25(土) 23:54
微妙に軽い気がする
はえー。凄いな皆。
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
よし!俺も手伝うぞ!
test deb2.2
どうだろう。
143 :
デフォルトの名無しさん :2001/08/26(日) 00:16
144 :
del厨(新規) :2001/08/26(日) 00:18
僕に出来る事があったら言ってください!
>>138 someReplace込みで高速化したほうが良いかも
とりあえずgzip改造はほぼ上手くいった模様。 Last-Modified問題はどっちのスレで片付けるのかな?
その前に、 gzip -> zlib 改造が必要?
dat_readのgetLineMax周りに手を加えてみました。 if(!BigBuffer) { html_error("メモリの確保に失敗しました。") ; lineMax = -8; } fp = fopen(fname,"r") ; if(!fp) { html_error("そんな板orスレッドないです。") ; return 0 ; } 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関数を使用する必要がなくなるかと思います。
最新のread.cgiのソースクレクレ
150 :
デフォルトの名無しさん :2001/08/26(日) 00:32
UNIX板繋がらないんですけど?? サーバ大丈夫かおい
ここがウニ板の避難所ですか(´Д`;)
152 :
デフォルトの名無しさん :2001/08/26(日) 00:35
ROMが異様に多いのとキチガイが猛烈な荒らしをかけてスレが機能してません…>Unix板スレ
155 :
デフォルトの名無しさん :2001/08/26(日) 00:35
向こうは気違いが発狂中だなあ。
○荒らされてる ×荒らされる
158 :
1時間程ROMしてるけど :2001/08/26(日) 00:37
ここ10分ぐらいで猛烈にパフォーマンス悪くなったね>UNIX板
159 :
デフォルトの名無しさん :2001/08/26(日) 00:37
UNIX板が「無駄」ヴァカに荒らされてて、カキコめない。
だれか、奴を殺せるやついないか?
それから、
>>155 の場所は、あの 369 さんのところなんだから、
用のないパケットは絶対に飛ばさないように。
gzip改造の成果のお陰でmod_gzipの導入が検討されているらしい。 このスレッドではひとまず Ver4.21の改造を考えるべきかも。
161 :
デフォルトの名無しさん :2001/08/26(日) 00:39
荒らしてる奴のIP抜きたい所だが、ああいうのに限って 串とか通してそうだからなあ。
ウザいよ>Unix板住民 雑談・マ板避難所スレでやれ
164 :
デフォルトの名無しさん :2001/08/26(日) 00:41
つーか、今まで出てきた改造案をいったんまとめんか? ある程度まとめて試験とかやったほうが効率よさそうだし
165 :
デフォルトの名無しさん :2001/08/26(日) 01:05
改造手伝っていいけど、何すりゃいい?
好きにやって、結果をageてくれ。
すまん、ちょっと訂正
>>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;
}
170 :
デフォルトの名無しさん :2001/08/26(日) 01:22
UNIX板より転載age ソース見たけど、無駄なprintfが多いな…。 printf("\ 2ちゃんねるだいすき<br>\ おれもおうえんするよ<br>\ "); な感じで書けば、わずかだけど早くなんない?
今時のコンパイラなんだから、 printf( "2ちゃんねるだいすき<br>" "おれもおうえんするよ<br>" ); にしろよ。読みやすさも違うし。
172 :
デフォルトの名無しさん :2001/08/26(日) 01:27
トリッキーの1こいこい
コンパイラが最適化するからおんなじと見た。 それより\nがいらね。
index2.html を削る方法を考えてみた。 1. age / sage しかいれないので 名前に mailto: は不要 2. スレッドの最後の >レスを全部読む 最新レス50 レス1−100 掲示板のトップへ リロード レスを全部読む 最新レス50 レス1−100 の3つでいいのでは? 3.ラジ@ のバナーがすべての板に張ってあるが必要なの?
>>170 10年前じゃあるまいし、毎回zip圧縮してるようなソフトで
そんなみみっちい最適化したところで何がどう変わるというのだ。
ところで、サーバー負荷の点では、明らかにCGIは劣るわけだが、 read.cgiの仕様を元にread.phpを作るとかは、 現状では無駄なのかな? ・・・俺には無理だけど
なぁんかオープンソースな感じでカッコいいね。 ついでにCのCGIも全部サーブレットにすればいいのに。 やっぱ、サーバの設定がかえれないとかで駄目なのかな?
178 :
デフォルトの名無しさん :2001/08/26(日) 01:31
read5.c はどこ? つーか sourceforge かなんか使わない?
180 :
170 :2001/08/26(日) 01:34
さらにネタ出し。 INPUTタグのTYPE=textは省略可能だったと思うが。
>>173 >コンパイラが最適化するからおんなじと見た。
確認したのか?コンパイラがprintfを特別扱いするとはとても思えん。
>175
一日100万以上のヒットがあるから
ちょっとでも高速化することでそれなりに負荷が減る。
182 :
デフォルトの名無しさん :2001/08/26(日) 01:38
「名前:」「投稿日:」がいらない。 そんなの説明されなくてもわかるし。
183 :
名無し :2001/08/26(日) 01:39
184 :
デフォルトの名無しさん :2001/08/26(日) 01:39
細かいとこやる前に、大きな流れをまず確定させないか? 関数単位にやってもその関数が無くなるかもしれんし。
185 :
180 :2001/08/26(日) 01:39
・属性に不要な¥”が多すぎる。 ・大文字と小文字の混在は圧縮率の低下を招く。 ・<FONT FACE=***>は要らん。 ・SCRIPTの LANGUAGE=JavaScript も要らん。 ・TABLEの BORDER=1 は、単に BORDER でいいはず。 gzipうんぬんも大切だが、HTML自体がスリムアップできてない。 たとえ1バイトでも馬鹿にすることなかれ。
>184 トップダウン・ボトムアップの両方からやりましょ。
187 :
デフォルトの名無しさん :2001/08/26(日) 01:41
phpはだめなの?
188 :
デフォルトの名無しさん :2001/08/26(日) 01:41
189 :
デフォルトの名無しさん :2001/08/26(日) 01:41
htmlのタグやレイアウトの話はweb系の板でやらないか?
190 :
デフォルトの名無しさん :2001/08/26(日) 01:42
191 :
デフォルトの名無しさん :2001/08/26(日) 01:43
まだ、ざっと見だが、 ・freadはmmapで置き換え(既出) ・zlib使えるなら、popenでgzipに渡すよりzlib使ったほうがプロセス起動がいらない。 と思った。 手元にLinuxないからやりづらい。
192 :
デフォルトの名無しさん :2001/08/26(日) 01:44
gzip入るなら恐らく無意味だけど サーバ側で<html>内圧縮して JavaScriptで展開ってできんかな?
193 :
デフォルトの名無しさん :2001/08/26(日) 01:44
まずは、スレ全部をbufに読み込んで処理してる部分の是非を考えましょう。
とりあえずprintfはなんとかしないとな。 ちょっと辞書でしらべてみる。
195 :
デフォルトの名無しさん :2001/08/26(日) 01:44
196 :
デフォルトの名無しさん :2001/08/26(日) 01:45
あと、ソースを見つけられない人のためにソースの位置も欲しい。
197 :
デフォルトの名無しさん :2001/08/26(日) 01:46
>192 いっそのことCSVだかdat渡してクライアントで全部展開するとか
>>152 のftp鯖っておちたのか?
それともただたんにアノニにパーミッションがないだけか?
index2.html育成するとき、改行コードいれるのやめ。 ソースみずらくなってもかまわんやろ?
201 :
_ :2001/08/26(日) 01:49
>>192 ジャバスクリプト自体(セキュリティーの関係上)嫌ってる人がいるらしいから無理っぽいかな
202 :
デフォルトの名無しさん :2001/08/26(日) 01:49
>>200 それは別の話。とりあえずはread.cgiに絞る。
>>189 これ以上乱立するのはイヤだからここでいいよ。
つーかまぁ全体的にWEBプロ板の話題なんだけどな(w
205 :
デフォルトの名無しさん :2001/08/26(日) 01:51
>193 mmap使えば、それを考える必要はないです。(仮想メモリ消費は増えるけどたいしたことないでしょう) mmapでファイルを仮想メモリに割り当てれば、メモリ間コピーもないし、ディスクからの 実際の読み込みも、オンデマンドで行われます。
JAVAScriptは全部頭に埋め込んであるが 外部ファイルにしてやれば、少しはましになると思ふ
スレ違いだった・・・スマソ
209 :
180 :2001/08/26(日) 01:52
>>189 分かったが、ネタ切れ。
一応漏れはプログラマーだからC言語の話にする。
ボトムアップでな。
read4.cのint hrefStop(char x)、
テーブル使えば若干早くなるんじゃない?
転送量的にはどうでもいいが。
210 :
デフォルトの名無しさん :2001/08/26(日) 01:54
とりあえず過去ログの改造ネタとかまとめておかない? 改造する箇所がいろいろかぶりまくったらアレだし。
211 :
ななし :2001/08/26(日) 01:54
曜日表示をなくそうぜ。 一番いらない。 転送量の削減幅も小さいけれど・・・。
212 :
デフォルトの名無しさん :2001/08/26(日) 01:54
技術的には改良できても、ここまで2ちゃんが巨大化してしまった以上 やはり管理者への負担はあまり変わらないような気がする。 最終的には何らの制度や規制を掛けるしかないのかもしれないが、 それだと、2ちゃん発足当時の基本的意義がなくなってしまうし。 ネットが一般化してしまった今となっては、どうすることもできないの かもしれんね。横レスすんまそ
関数の呼び出しツリーを作るプログラムが今手元に無い… どなたかアップしてくれませんか…
214 :
デフォルトの名無しさん :2001/08/26(日) 01:55
css + <H3>タグとか使えばテーブルタグなくしても見栄えは確保できるね
>>204 ソースか。サンクス。
んで、HTMLは動作すれば文法的には正しくなくてもOKという方針で行くの?
例えば、HEIGHT="1" ではなくて HEIGHT=1 で行く?
>>214 CSSは転送量が増えますんで、できればやめて欲しいんですが。
217 :
デフォルトの名無しさん :2001/08/26(日) 01:56
cssのスタイル定義ファイルを呼び出す負荷ってのは、 どのくらいなのでしょうか。 Webページを表示させる毎にジワジワリソースを 食い潰すのでしょうか?
218 :
デフォルトの名無しさん :2001/08/26(日) 01:57
219 :
デフォルトの名無しさん :2001/08/26(日) 01:58
根本的にはcgiを使用しなければいい
221 :
MiM :2001/08/26(日) 01:59
>>215 それで良いと思います。
結局、「"」にしても1バイト食ってるわけです。
そんな感じで全ての無駄を省きますと、
かなり軽くなるわけです。
それは、転送量も減りますしユーザーのDLも早いわけですね。
ですから、そういった無駄を省きましょう。
いまHTMLのソース見たら改行削除されてるみたい 全体で10行になってた
223 :
デフォルトの名無しさん :2001/08/26(日) 02:00
ソースを見たのだけど、無駄多すぎ。 無駄な処理が多い事で結果的に待ちパケットを増やす結果になっていると思う。 access logはapacheにまかせようね(w
224 :
デフォルトの名無しさん :2001/08/26(日) 02:00
>>221 了解しました。あと、IEとNNで動作するものがデフォルトでいいですか?
例として、<TH>タグで囲むと太字にして中心寄せとなる、とか。
引っ越すんですか?
226 :
ヨー :2001/08/26(日) 02:03
書き込むのフォームを別ウィンドウにする。 外部JavaScriptにて新しいウィンドウのHTMLを生成。 どうでしょうか?
ちこっとみたけど、全部読み込んだ bigbufferをいじくってるねえ。
0を '*' に変えたり。
ここら辺は knowhowから出たものっぽいから変えたくなさそげ。
そんなん片付けられれば、mmap対応なんて簡単そうだが
>>205
228 :
デフォルトの名無しさん :2001/08/26(日) 02:11
>201 もともとJavaScript使ってるんだから、JavaScriptは問題ないんじゃない? デフォルトの名前の展開、日時・曜日の算出、リンク貼りなんかは任せてもいいと思う。 JavaScript, CSSは外部ファイル化してサーバに置いて ブラウザにキャッシュさせるってのは無理なの?
229 :
デフォルトの名無しさん :2001/08/26(日) 02:20
230 :
デフォルトの名無しさん :2001/08/26(日) 02:21
231 :
デフォルトの名無しさん :2001/08/26(日) 02:23
232 :
デフォルトの名無しさん :2001/08/26(日) 02:23
>227 \0を*に置き換えてるのは、out_htmlが\0で終了判定してるからっぽい。 流れとしては、 1. dat_readでファイルをBigBufferに読み込み、BigBuffer中の\0を*に置き換え。 2. getLineMaxで行数のカウントと、行の先頭のポインタをBigLineにセット 3. dat_outで出力ループを回す。行ごとの出力はout_html。 3のout_htmlでの終了判定を別のもの(行の長さのテーブル作るとか)に置き換えれば BigBufferはreadonlyでよさそう。
233 :
デフォルトの名無しさん :2001/08/26(日) 02:24
>>229 apachのカスタマイズは出来ないって言ってたから無理でしょ。
あまりハードコーディングな領域に踏み込むのはアレかと思うのねん。 今のところ問題は転送量で、CGIの負荷ではないのだから 趣味でリファクタリングするにしても、 コードを最適化するのではなく、アルゴリズムを最適化するのら。 HTMLのちまちました最適化とかも、 zip圧縮という大戦略の結果が出てからでも遅くないと思うけど、どうよ?
>234 そういう人的リソースの無駄を気にしないでいられるのが 2ch&オープンソースのいいところ(藁
236 :
デフォルトの名無しさん :2001/08/26(日) 02:29
つーかzip圧縮しても負荷的にはOKみたいね。 ・・俺らのしてる事って無駄かも(w
それでも最適化しちゃう漏れ
無駄じゃないさ
なぜコードを最適化するのですか? 「……そこにコードがあるから。」
240 :
デフォルトの名無しさん :2001/08/26(日) 02:34
速くて困る事は無いし。
速報板等のアクセス数の多いところでは効果がある…でしょう。
242 :
a :2001/08/26(日) 02:35
クライアント環境の均一化を図るためにも、かちゅーしゃのgzip対応を図るとかしないとダメかな・・・
243 :
デフォルトの名無しさん :2001/08/26(日) 02:36
244 :
デフォルトの名無しさん :2001/08/26(日) 02:36
BigBufferは必要なの?
245 :
デフォルトの名無しさん :2001/08/26(日) 02:37
Server: Apache/1.3.6 (Unix) PHP/4.0.3pl1 mod_ssl/2.3.6 OpenSSL/0.9.3a 何気にPHP入ってるんで、導入検討中のmod_gzipと併用できればかなりよさげだ。
247 :
デフォルトの名無しさん :2001/08/26(日) 02:52
read.cgiが起動してる間のファイルに書き込みとかは問題になるよね?<mmap 結構長い時間ロックしなきゃならん気がするけど大丈夫?
248 :
デフォルトの名無しさん :2001/08/26(日) 02:54
249 :
デフォルトの名無しさん :2001/08/26(日) 02:54
現在同一サーバにあるCSSとロゴ・バナー・スクリプトを別の少量無料サーバに置くってのはどう? オーバーヘッドは増えるけど転送量は確実に減る。
250 :
デフォルトの名無しさん :2001/08/26(日) 03:02
何だか今日は、ひろゆきに 抱かれてもいいと思ったよ
251 :
デフォルトの名無しさん :2001/08/26(日) 03:05
ここのプログラマ思ってたより頭悪いな。
動作テストさせてください
もうひとつ書き込みテストです。
モナ板めちゃ早いです。
read.cgi が ver5.01 になってる
うおっ、リロード超速ぇ…
>256 ていうか、新しい書き込みがないときはReloadはネットワークではなく キャッシュから読みこむ改造になっていますでしょうか? 書き込みやリロードなどのテストお願いします。
259 :
デフォルトの名無しさん :2001/08/26(日) 03:11
スキルのレベルで gzip 圧縮や Last-Modified 対応の話題 ↓ CGI の無駄なコードの省略など の話題 ↓ 無駄なタグの消去やHTMLの修正などの話題 ↓ 批判要望板の転送量スレ ↓ 応援・グチ
まあ、全部のブラウザがgzipに対応しているわけじゃないしね。 read.cgi Ver4.22や4.23で導入された地道な転送量削減も、 Encoding:gzipに対応していないUAの事を考えれば、無駄ではないはず。
つーか職人ほとんど向こうに取られてるしな・・ Web板の方にレス数追い抜かれてるし・・
262 :
デフォルトの名無しさん :2001/08/26(日) 03:14
>>258 キャッシュ読んでますね。ちゃんと304返してきてますYO!
264 :
デフォルトの名無しさん :2001/08/26(日) 03:14
ま、議論はすれども実際の改造・最適化はあんまししてなかったからね。
265 :
デフォルトの名無しさん :2001/08/26(日) 03:14
>>258 あい、キャッシュちゃんと効いとります。
書き込みあったら再読み込みされるのも確認。
Win2kSP2&IE5.5SP2でし。
テスト
267 :
デフォルトの名無しさん :2001/08/26(日) 03:20
とりあえず当面の問題は、圧縮とLast-Modifiedで回避できたと見て 良いのかな。
269 :
デフォルトの名無しさん :2001/08/26(日) 03:22
なんかweb板でjavascriptんとこはこっちでやるみたいな事 言ってんだけどどうする?
270 :
デフォルトの名無しさん :2001/08/26(日) 03:23
271 :
mahm :2001/08/26(日) 03:24
someReplaceは こっちのほうがよくない? 一応動作確認済み。 int someReplace(char * src, char * des, char * str0, char * str1 ) { char temp[SIZE_BUF]; char *temp_end = temp; char *temp_start = temp; int str0_length = strlen(str0); int str1_length = strlen(str1); /* 置き換える文字列を取っとく */ strcpy( temp, src ); *des = '\0'; /* まだ文字列が残っていればループ */ while (*temp_end) { /* 置き換えるべき文字列の位置を取得 */ temp_end = strstr( temp_end, str0 ); if (temp_end == NULL) { break; } *temp_end = '\0'; strcpy(des, temp_start); des += (temp_end - temp_start); strcpy(des, str1); des += str1_length; /* 部分文字列以後の文字列の位置を返す */ temp_end += str0_length; temp_start = temp_end; } strcpy(des, temp_start); return 1; }
272 :
79 :2001/08/26(日) 03:28
>>267 someReplace 関数と doReplace 関数が統合できたと思ったんですが、
someReplace 以外にも doReplace をコールしているところが
あるので、doReplace は消せません。
結局2つの関数を用意する必要があるみたいです。
273 :
デフォルトの名無しさん :2001/08/26(日) 03:28
とりあえず、外から呼ばれない関数、特に一回しか呼ばれない奴はstaticにして、コンパイラにインラインさせる。 ちゃんとオプティマイズしてコンパイルする。出来たバイナリはstripする。 あと、read.cgiではないが、書きこんだときトップページにジャンプするが、 それをやめて、「書きこみました。掲示板に戻るにはここをクリック」程度のメッセージを 表示するにとどめて、index2.htmlの読み込みを減らす。
doReplaceと改良版someReplace両方残せばいいのでは
>>251 酷いいわれようだ、
でもこれじゃあしょうがないか
>>148 というわけで修正しとく
lineMax = 0;
for(i=j=0;i<zz_fileSize;i++)
{
if(BigBuffer[i] == '\0') BigBuffer[i] = '*' ;
if(BigBuffer[i] == '\n')
{
if(lineMax <= RES_RED) BigLine[lineMax++] = (char *)&BigBuffer[j];
BigBuffer[i] = '\0'; j = i + 1;
}
}
これでも元のプログラムと等価じゃないっす
276 :
デフォルトの名無しさん :2001/08/26(日) 03:30
「最新レス100を表示」を押したときの挙動が変? レスが全部表示されないときがあるんだけど、どう? 「レスを全部表示」と比べてみて
278 :
デフォルトの名無しさん :2001/08/26(日) 03:35
今ボトルネックになってるとこはどこ? 以前公開した時はファイルの読み書きだったけど。
ゴメン、他の擦れに解決法出てた。 IE だったら、キャッシュを強く優先する設定になってるからじゃないかな。 [ツール] - [インターネット オプション] - [インターネット一時ファイル] の [設定...] ボタンを押して、 [保存されたページの新しいバージョンの 確認] のチェックを「ページを表示するたびに確認する」にしてみて ください
転送バイトあたりにかかる「お金」。 なのでできるだけデータ量を抑えたい。 CPU、メモリなどのリソースの問題ではないみたい。
>>170 そもそもprintf系って標準関数の中では激重な部類に入るので、
可変引数ないところはputsにするとか。
ま、それでもzip圧縮とか平気でやってしまってるCGIでは
違いはまったく分からん思います。せいぜい0.1%くらい?(w
282 :
デフォルトの名無しさん :2001/08/26(日) 03:41
2chが潰れなっかたのはUNIX板の在日同朋のおかげニダ 2chネラーは感謝汁
283 :
デフォルトの名無しさん :2001/08/26(日) 03:42
>>280 ここは圧縮にかかるコストが新たに加わったから、サーバの負荷を
減らすためにread.cgiの最適化をするスレでしょ。
それを踏まえて聞いたんだけど。
284 :
デフォルトの名無しさん :2001/08/26(日) 03:44
CGIの改良ではないが、転送量を減らす方法としてこういう方法は使えないか? index2.htmlをindex.cgiというCGIに飛ばすページに変更する。 昔通りのindex2.htmlを作らずに、index.gz等の名前でGZIPしたデータを作る。 index.cgiはindex.gzをGZIP圧縮プロトコルで転送する。 こうすれば、apacheはそのままで、転送毎の圧縮を避けつつ、indexを圧縮転送できる。
文字列・バッファ処理全般。ちょっとみればわかるけどとにかくコードの質が低い。
向こうは一段落着いたみたいですね。
>ここは圧縮にかかるコストが新たに加わったから、サーバの負荷を >減らすためにread.cgiの最適化をするスレでしょ。 そ、そうだったのか。
こちらに移ってまいりました
つーかread.cgiというネタをみんなで弄るスレです。
画面仕様は据え置きで全面書き換え目指した方が良くね? 今のソースはどうかしらんが、大本の時のread4.cなんて 意味のわからんヘッダ付いてたし、 セミコロンの前に何故かタブ入ってるし。
そろそろ、こっちに移動するみたいだよ
とりあえず、今の課題は「セキュリティホールだけつぶしてしまおう」ということで、こちらに移ってきました@UNIX板 よろしくお願いします。
リロードの回数を減らす仕組み。 1回のリロードで流れるデータの量を減らす方法。 について考えた方が良くない? もちろんコードの最適化も必要だけど
295 :
デフォルトの名無しさん :2001/08/26(日) 03:56
状況によって(将来転送量が大きくなったら)制限かけられる仕様が欲しくない?
296 :
デフォルトの名無しさん :2001/08/26(日) 03:57
スレ分けない? ネタ系、セキュリティホール系、最適化系とか。
かぶったしかも上げてしまった。ごめん。
298 :
デフォルトの名無しさん :2001/08/26(日) 03:57
あ、こっちに移動なん? ls=付いてないとデフォルトで最新50のみ表示、とかはどーなったの? 転送量減ると思うんだけど・・
他のCGIも見直したいんだが、大昔のソースしか持ってないからな〜
300 :
デフォルトの名無しさん :2001/08/26(日) 03:58
じゃあdatファイルの構造から変えたほうが いいかもね。
49 名前:名無し 投稿日:2001/08/26(日) 03:58 read.cgi を全面書き換えという案が浮上してます。 いそいでプログラム板に結集して下さい。 おいおいすごい重責になってきたぞ(w
302 :
デフォルトの名無しさん :2001/08/26(日) 03:59
303 :
デフォルトの名無しさん :2001/08/26(日) 03:59
とりあえず<>使うのやめない? tabで良いじゃん。
read.cgi以外のソースはUpされてないのでしょうか。 ほかのCGIが無いと2ちゃんねる全体の機構が把握できないので。
305 :
デフォルトの名無しさん :2001/08/26(日) 04:00
大元のプログラムとデザインは分離しません? そのほうが効率的だと思います
306 :
デフォルトの名無しさん :2001/08/26(日) 04:01
308 :
デフォルトの名無しさん :2001/08/26(日) 04:02
309 :
デフォルトの名無しさん :2001/08/26(日) 04:02
>>305 やっぱformのからみとかでjavascriptんとこはweb板のがいーよね?
じゃそーゆー風に頼んできていい?
>>284 でうまく動作すれば当座の問題は解決するような気がする
311 :
aki :2001/08/26(日) 04:03
いや、read.cgi しかいじれないんだってば・・
313 :
デフォルトの名無しさん :2001/08/26(日) 04:04
こちらの方は完全にソースを見直して最適化する方向のようですので、 とりあえず、現行のcgiでセキュリティホールをつぶす作業は、引き続きUNIX板で行います。
315 :
デフォルトの名無しさん :2001/08/26(日) 04:06
316 :
デフォルトの名無しさん :2001/08/26(日) 04:07
>>275 すまん。ちょっといいかげんに作りすぎた。
修正THX
UNIX板とこの板で、開発Verを変えた方がいいですね。 混乱の元ですし。
319 :
名無しさん :2001/08/26(日) 04:10
ちょっとお邪魔します 何かPHPとかJservにすれば CGIのように別プロセスを起動しないから サーバ負荷が軽減されるとかいう話が出てるようですが 実際のところ PerlのCGIならそうかも知れませんが 最初からバイナリコードに なっているCのCGIの方が PHPやJservより軽いはずですが あえて別プロセス起動をしないというメリットを追求したいのなら ・ Apacheモジュールの形で実装する ・ Apache自体使うのをやめて2chの掲示板システムを アプリケーションサーバの形で作ってしまう マルチスレッドで動くようにすれば相当軽くなる の方がいいのかも知れません 手間は相当かかりますが
321 :
316 :2001/08/26(日) 04:11
スマソ。直す所があるので、一時的に消しました。
スキルの高い方知恵を貸してください @web制作管理板
http://natto.2ch.net/test/read.cgi?bbs=hp&key=998741961 ここからコピペ。
【現状の提案】
・表示色関係は各ユーザーにまかせる
・説明がきを別にする
・altは無し
・自動リンクを外す
・リンク部分を極力なくす(・index2.htmlの「■▲▼」廃止 )
・<body>にする
・タグは小文字に統一(関係なし)
・GZIPで圧縮のしやすいよう、出来るだけパターンがあると良い
・タグは極力短縮する
・対応ブラウザなどに関しては諦めも肝心
・転送量を減らすため、ユーザーに画一的な情報はキャッシングさせると尚良いかも
・クッキーを無くす (←有無両意見アリ)
・<pre>の使用 (←最後の手段)
・sage age の簡略化
・tdとかの要素にCSSをhead内で宣言
・<br>廃止
・TEXTAREA 等のsize=?を小さく
・スレッドをtableで囲うのをやめてスレッドをhrで区切る(最後の手段2)
・<B>タグと<FONT>タグとりあえず消してみよーよ。
・CSS → ブラウザによる環境悪化が無く、下位互換性があり、転送量が減るのなら歓迎します。
・巡回ロボットお断り→ロボットも客。やるなら /robots.txtに書いてサイト全体に適用
・ふぉれすとぐり〜ん → #282
【表示関連】
・名前表示 名無し 01/08/26 00:00
・レス取得 最新50 レス1-100
・age sage 「+,-」「^,_」「↑,↓」「a,s」
・フォーム post name mail
【呼びかけ】
・話題のループ防止のためレスを全部把握しておく
・純正以外の看板画像は別鯖なのでトラフィックに問題なし
・<pre>は仕様が決定後に検討
323 :
名無しさん :2001/08/26(日) 04:15
>>320 プロセス負荷はCでもかかるよ。
PHPやJAVAはサーバ屋さん側の意向で使えないんだと聞いている。
2ちゃん鯖でPHPは使えるとどこかで見かけたような・・・ まぁCの方向でいいだろうと思うが
325 :
316 :2001/08/26(日) 04:16
再アップしました。この板のVerは10.xです。
フリーのwikiなサイトってどっかないのかな? こういう作業はwikiでやるのがよさげなんだけど。
327 :
デフォルトの名無しさん :2001/08/26(日) 04:17
>>325 サンクス
そのsourceを元に手を加えていきましょう
328 :
デフォルトの名無しさん :2001/08/26(日) 04:18
BadAccess関数の最適化。 strstrのかわりなる物を作ってみた。 strstrがどんな仕組みで動いているかしらないので、本当に速いのかどうか・・。 // text2 (検索する文字列)の長さが255以下の場合でしか動かない char *strstr_BM256(char* text, char* text2) { char tail; unsigned char skip[256]; unsigned int len = strlen(text2), longlen = strlen(text), i, x, y; if (longlen < len) return NULL; tail = text2[len]; // 長さが1の時の対策は省略 memset(skip, (unsigned char)len, 256); for (i = 0, len--; i < len; i++) skip[(unsigned char)text2[i]] = (unsigned char)(len - i); // i = len - 1; while (i < longlen) { if (text[i] == tail) { x = i; y = len; while (text[--x] == text2[--y]) { if (y == 0) return &text[x]; } } i += skip[(unsigned char)text[i]]; } return NULL; }
329 :
名無しさん :2001/08/26(日) 04:19
PHPとか、Apache moduleとかの話になると、 サーバ屋さんの意向を確認した方がいいと思う。 mod_gzipは使えないとかUNIX板でやりとりがあったようだし。
>mod_gzipは使えないとかUNIX板でやりとりがあったようだし。 来週末あたりに結論が出るらしい。使える可能性が高いようだ。
331 :
:2001/08/26(日) 04:21
>>329 mod_gzipはすでにOKになったはず
あれ?まだ決定じゃなかったのか・・・スマソ。
333 :
デフォルトの名無しさん :2001/08/26(日) 04:22
piza2鯖にはPHP4.0.3pl1が入っています。 だから、PHPが使えないって事はないと思います。
つーかPHP使えるかどうかはともかくCでいいんじゃないの
サーバ負荷はとりあえず今は気にしないで良いんじゃなかった?
336 :
329 :2001/08/26(日) 04:25
>>330 うん、ごめん。
えーと、オレが言いたかったのは、そのへんの話は
みんなサーバ屋さんのお許しをもらわなきゃならない、ってこと。
ここで「これがいい」って決めたあとで、
サーバ屋さんに一蹴されちゃうのも悲しいじゃん。
337 :
aki :2001/08/26(日) 04:26
338 :
316 :2001/08/26(日) 04:26
read4-blank.c.25は問題があるそうなので、read5.01.02.cに差し替えました。
>336 いや。だから、鯖屋との相談の結果の話なの。
340 :
309 :2001/08/26(日) 04:27
なんか無視されてたっぽいけどjavascriptんとこは向こうに頼んできた。
341 :
名無し :2001/08/26(日) 04:28
PHPとCではどっちが負荷が少ないの?
>>328 >strstrがどんな仕組みで動いているかしらないので、本当に速いのかどうか・・。
BSDのソースとか見ればいいじゃん。
>340 JavaScriptをどうするって話? もっと削れと?
345 :
デフォルトの名無しさん :2001/08/26(日) 04:31
>>343 コードの最適化とかそんなん。
変数名縮めるとかHEADにまとめるとか。
347 :
デフォルトの名無しさん :2001/08/26(日) 04:33
>>346 Javascriptを別ファイル化するって話は出てないんですか?
350 :
デフォルトの名無しさん :2001/08/26(日) 04:36
351 :
326 :2001/08/26(日) 04:37
>>337 すばらしー。とりあえずちょっとページ・リンクを追加しました。
今スパゲティー茹でてるんでもうちょっとしたら整理します。
352 :
デフォルトの名無しさん :2001/08/26(日) 04:38
>>333 PHPが使えても、apacheのmoduleとして使えないと
perlよりむちゃ遅いよ。
353 :
デフォルトの名無しさん :2001/08/26(日) 04:39
>>347 あーなんかCSSとjavascriptを別ファイルにするとかも言ってたような・・
ごめん向こうあんま読んでない(w
とりあえずprintfで吐き出す定型内容についてはこっちは気にしないって事で。
355 :
デフォルトの名無しさん :2001/08/26(日) 04:42
read.cgiが5.02になったみたい
356 :
素人 :2001/08/26(日) 04:45
夏休みが終われば転送量が自然に減るような気がしますが・・
357 :
デフォルトの名無しさん :2001/08/26(日) 04:45
358 :
デフォルトの名無しさん :2001/08/26(日) 04:47
夜勤さんの書きこみを見る限り、 6月か7月あたりからやばそうだったらしいが。
>>356 そう思うけど、実は減ってないんだってさ。
test
361 :
デフォルトの名無しさん :2001/08/26(日) 04:57
あと思ったのは 弾くブラウザ等の設定項目とか挿入バナーなんかは ハードコーディンクより設定ファイルからの読み込みにした方が よさげでは? とか思ったり
今回の圧縮の効果 ・圧縮効果1/16 ・圧縮対応ブラウザが70% であれば、70%*1/16+1*30%=34% Last-modifiedの効果も全体に利くとしても、目標の1/3にギリギリ 達したに過ぎない。HTMLのスリムかも含め、ゴリゴリ推し進める ことが必要だ……
よし、まず中高生の夏休みを短縮してもらおう!!
>>356
366 :
素人 :2001/08/26(日) 05:04
俺が2ちゃんをみんなに広めたせいでこんなことに。。 ごめんなさーい(;´Д‘)アア
>・圧縮効果1/16 オヒオヒ
368 :
デフォルトの名無しさん :2001/08/26(日) 05:06
お祭りワッショイ!! \\ お祭りワッショイ!! // + + \\ お祭りワッショイ!!/+ + . + /■\ /■\ /■\ + ( ´∀`∩(´∀`∩)( ´ー`) + (( (つ ノ(つ 丿(つ つ )) + ヽ ( ノ ( ヽノ ) ) ) (_)し' し(_) (_)_)
>>367 1/16 という数字はAA板の場合の結果のようです。
370 :
デフォルトの名無しさん :2001/08/26(日) 05:11
>>367 どうやら通常では1/3前後みたいだね。
>>369 特殊な状況でしょ、1/16って。
それを全体に当てはめるのは、どうかと思ったわけ。
ところで、いわゆる「exit()前のfree()」っていらないんじゃないの。
373 :
_ :2001/08/26(日) 05:18
unix板で隠れているがありがとう。
>>362 そんなにしょっちゅう変更するもんではないので、埋め込み文字列で
良いんじゃない?
通常で1/3だったら、まだまだだめじゃん…… ようやく50%程度になったってことか。 でも、すごいことだけどさ。
376 :
素人 :2001/08/26(日) 05:21
どんなに頑張ってみても、ひろゆきが氏んだら閉鎖するんだろうな
377 :
デフォルトの名無しさん :2001/08/26(日) 05:21
>>374 確かに
それよりも、読み込みでのオーバーヘッドの方が心配
>>376 マンガ家が死んでもアシが絵をまねて続くこともあるから、どうだろう
第1段階はUNIX板の有志の手でほぼ成功しました。 次は貴方方の番です、頑張って成功させてください。
ソースはどれを使えば良いの? read10.01.02.c ってやつ?
381 :
デフォルトの名無しさん :2001/08/26(日) 05:28
gprofでreadとwriteの回数が最小になるようにしようぜ。
ソースに indent かけたくなる…
383 :
親の威を借りる狐 ◆v0Ec25uo :2001/08/26(5) 31:00
2ちゃん浄化策として、100落ちするあいだにユニークレスが 10つかなかったスレッドは自動削除するような機能を追加してくれ(藁
>>382 の表示がむちゃくちゃになってないか?
8/26(5) 30:00 って、、、
ごめんここ職業プログラマ多いから 今の時間は・・きつい・・・
386 :
デフォルトの名無しさん :2001/08/26(5) 32:00
387 :
親の威を借りる狐 ◆v0Ec25uo :2001/08/26(5) 33:00
たしかに日付表示がむちゃくちゃだ(藁
>>384 >
>>382 の表示がむちゃくちゃになってないか?
> 8/26(5) 30:00 って、、、
うぉ、なんでやろ。
navi2ch からのせいかな?
なんか時間がえらいことになってるぞ(笑 >382 かけていいでしょ。
曜日か
391 :
デフォルトの名無しさん :2001/08/26(5) 35:00
曜日の所に時間が、時間のところに分が、表示されてる模様。
送信データ量が1/3になったとして、ネットワークへの 負荷はどの程度変化すると考えればよいのでしょうか? 1/3より小さくなる?大きくなる?
393 :
デフォルトの名無しさん :2001/08/26(5) 37:00
>>392 大きくなる
HTTP/1.0 の人間は無圧縮で送られる
394 :
デフォルトの名無しさん :2001/08/26(5) 39:00
ってあれ?曜日書くのとかってbbs.cgiじゃないの? そっちもいじってんの?
395 :
デフォルトの名無しさん :2001/08/26(5) 40:00
396 :
布団圧縮袋さん :2001/08/26(5) 41:00
2001年8月26日、5曜日、39時w
>>393 あ、基本的に全てのマシンにたいして圧縮されたデータを
送ると仮定した場合です。で、ユーザ数が現行のまま。
ユーザの取る行動によって負荷のかかり方が変化すると
思いまして。
398 :
デフォルトの名無しさん :2001/08/26(5) 43:00
Apacheはブラウザで中止やリロードされるとCGIにSIGPIPEとか 送ってきたり、SIGALRM/SIGHUP/SIGTERM/SIGKILLとか 気になります。書き込み途中で殺されないか。 Signal Handlerも必要or不要? 現在は入ってなかったはず。
399 :
デフォルトの名無しさん :2001/08/26(5) 44:00
>>397 WWW サーバが受信するデータ量が一定で、
WWW サーバが送信するデータ量が 1/3 で一定なら、
ネットワークへの負荷は受信するリクエスト + 1/3 で 1/3 より大きいだろ
ユーザの取る行動がどう変わるかの定義は何
400 :
デフォルトの名無しさん :2001/08/26(5) 44:00
ひとつ提案。
サーバ負荷を減らすために、read.cgi をリクエストあるたびに
プロセスを起こす方式じゃなくて、
http://www.fastcgi.com を使ったら
どうっすか?。これなら、プロセス起動しっぱなしなんで、
プロセス起動の負荷が減ると思いますが。。。
401 :
デフォルトの名無しさん :2001/08/26(5) 45:00
2ちゃんねるは滅びぬ。 何度でも甦るさ。 わかるか、厨房の力こそ、人類の夢だからだ。 次もスレを立てる。 ひざまずけ、レスを付けろ! 荒らしから2chを取り戻せ! ―― ̄ ̄ ̄ ̄\ / \ | 人 | | //|/|/ \ \ ||\|へ ー― \ | || ̄|-| ̄ ̄|― L | _ | ̄| ̄ ̄ | / | |\_____ | ___ / / (●)__ |DΞ)| | /|/  ̄ \\―|DΞ)|_ |___/ | \\_|DΞ)ノ) __―――――――|`―_ _|__ ( ̄| | D| |◇ノ ̄ ̄ ̄ ̄ | \  ̄|_// ―_ ( ̄ ̄  ̄ ̄) | \ / \ / \\_ / ―- (  ̄ ̄ ̄)| | \/ / | \\/ ヽ (_ ̄ ̄) / | / / | \ | |_| ̄ ̄// \ / | | | | |_// \ |__ | | | |__/__ \/ /  ̄|つ / | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄| ̄ ̄/ // し― ̄ | |
>>392 「ネットワークの負荷」がなにを指しているかわかんない。
転送サイズ以外の負荷要因とはなんのこと言ってる?
転送時間短縮→ブラウザ表示高速化→リロード回数増はありえるかもだけど。
その回答得てどうすんの?
403 :
デフォルトの名無しさん :2001/08/26(5) 46:00
>>400 そこまでサーバ弄るのを許可してくれるのか……?
404 :
デフォルトの名無しさん :2001/08/26(5) 48:00
>>398 プロセスが死ぬんだから結果オーライでいーんじゃないの?
405 :
デフォルトの名無しさん :2001/08/26(5) 50:00
>>402 どんなIPパケット出すかによって違うぞ
>>402 まさしく、そのリクエスト増のタイミングがちょっと
気になるんです。
その事がトラヒックに与える影響が無視できるんなら
それでかまわんし、何か面白い事が起きるんなら、
それはそれでやっぱり面白いだろう、と。
えと、UNIX板において、「バージョン番号の混乱」が指摘されています。 今のところUNIX板においての最新は「read10.01.04.c」になっていますが、 こちらの方のソースってどのあたりのバージョンを元にしてますか? ・・・やっぱりフルスクラッチとか・・・。
408 :
デフォルトの名無しさん :2001/08/26 05:58
>>404 いや、怖いのはdatの破壊。
書き込み途中で死なれると大抵は不正なdatになる。
ま、変更なしならそれでいいか。
409 :
デフォルトの名無しさん :2001/08/26 05:58
今のコードってかなり可読性低いよね・・・・・・
410 :
316 :2001/08/26 06:01
>>407 UNIX板の「read5.01.xx.c」に+5しています。
混乱しないようにこちらは「read10.01.xx.c」にしたのですが。
411 :
がいしゅつですが :2001/08/26 06:01
412 :
デフォルトの名無しさん :2001/08/26 06:02
とりあえず、タイムスタンプがなおった?
413 :
デフォルトの名無しさん :2001/08/26 06:03
>>406 ふつうに考えて非圧縮状態より負荷高くなることはないだろう。
lastmodifyチェックも入っているわけだし。
そのへんは本格運用後にプロファイルされるんではないかなあ。
414 :
デフォルトの名無しさん :2001/08/26 06:03
>>407 漏れは、
read5.01-amppatch.c
read4-blank.c.25
read4.c
の順かな。
ただまだfeed-backしてないから困ってないが。
feed時には、read4-blank.c.25の差分を考えている。
>408 以前手元の環境(Linux+Apache)で調べたときには、特に何もSignalは 送られてこなかったと思う。ここの鯖も同じであれば、中止ボタンが 押されたことによってdatが壊れるってことは無いんじゃないかな。 実際にここの鯖で検証してみないとなんとも言えないけど。
ということで、うちのサーバーではそろそろ 作業ベースとして怪しくなってきたと思います。 あとは、Wikiページにお任せしたいのですがどうでしょうか?
417 :
デフォルトの名無しさん :2001/08/26 06:18
>416 Wikiはテキスト貼るだけでファイルは置けないんですがどうしましょう? 現状ソースの中身を全部コピペするか別サーバに移転するしかないです。
419 :
デフォルトの名無しさん :2001/08/26 06:27
いまさらだが、Makefileあぷ。 ex) ソースがread4.cの場合 $make read4.cgi ex) ソースがr4.cの場合 $make r4.cgi ---- Makefile .SUFFIXES: .c .cgi CC=gcc #CC=cc CFLAGS=-DLASTMOD -DGZIP .c.cgi: $(CC) $(CFLAGS) $< -o $*.cgi ←頭はTABね。 ----
420 :
ななしさん@通信技術 :2001/08/26 06:28
>>415 openする前に、データベースを格納したファイルから、PIDから一意に生成されるパス
名に対してhard linkを張っておくといいですよ。
で、シグナルハンドラにはそれらのリンクを適切に解消するルーチンを書いておけば
OKだと思います。同じ原理で2層ロックも実現できるかと。
あと、プロセスが起動したときに、タイマーで自分自身にシグナルを送るようにして
なんとなくウオッチドックすればサーバにやさしいかもです。
あ、次からsageでかこ。
422 :
デフォルトの名無しさん :2001/08/26 06:30
>>419 CFLAGSには まぁ -O? とかの最適かもあるけど とにかく -Wall は
付けといた方がいいね
修整版あぷ ---- Makefile .SUFFIXES: .c .cgi CC=gcc #CC=cc CFLAGS=-DLASTMOD -DGZIP -Wall .c.cgi: $(CC) $(CFLAGS) $< -o $*.cgi ←頭はTABね。 ---- 最適化はターゲットプラットフォームがわからんので 不安なので、誰かまかせた(w。 変更点は-Wallを追加。gccでなくて-Wallが通用しない人ははずしてけれ。
>>425 unix板の方では、これが最終のリリースになるはずです。
今後はこことWikiが作業スペースということで。
428 :
369 ◆3XTuRnAc :2001/08/26 07:03
あと、作業用に使用していたサーバースペースにつきましてはftpポートを閉じましたので
作業用スペースとしてはwikiと
>>425 さんのページがベースになると思います。
とりあえずindent -kr通さない?
あのぉ、 ふと思ったんですが、 帯域を下げるには、 read.cgiのパフォーマンスを下げればいいのでは…。
sleep (3)をいれろと?
サーバー過負荷で落ちちゃうのは、やっぱり不味いでしょ。 帯域の件はサーバ止めたり、read.cgiの実行を減らすなどで対処する問題。 ちょいと別問題。
433 :
デフォルトの名無しさん :2001/08/26 07:20
それならサーバーで帯域制限すりゃいーじゃん。
cgiなりネットワークの帯域制限なりでパフォーマンスを落とすのは、 2chが「夜でも快適なサーバ」である事を売りにして広告を出している Big-Serverの要求に反する。 つーか過去ログ見たか?
435 :
デフォルトの名無しさん :2001/08/26 07:27
救われましたな。
>417 mod_perlはある意味CGIとは呼べないからなぁ。 何があっても不思議ではないっす(笑 >420 んん、その説明だとHard linkを張るメリットが無いような…。 俺がバカ? もしお暇なら詳細説明きぼー。 うーむ、板違いか…。
スキルの高い方知恵を貸してください2号 @Web製作板
http://natto.2ch.net/test/read.cgi?bbs=hp&key=998774537&st=6&to=6&nofirst=true ある程度まとまっているようです。また新しくまとまればきます
【現状の提案】
・表示色関係は各ユーザーにまかせる
・説明がきを別にする
・altは無し
・自動リンクを外す
・リンク部分を極力なくす(・index2.htmlの「■▲▼」廃止 )
・<body>にする
・タグは小文字に統一(関係なし)
・GZIPで圧縮のしやすいよう、出来るだけパターンがあると良い
・タグは極力短縮する
・対応ブラウザなどに関しては諦めも肝心
・転送量を減らすため、ユーザーに画一的な情報はキャッシングさせると尚良いかも
・クッキーを無くす (←有無両意見アリ)
・<pre>の使用 (←最後の手段)
・sage age の簡略化
・tdとかの要素にCSSをhead内で宣言
・<br>廃止
・TEXTAREA 等のsize=?を小さく
・スレッドをtableで囲うのをやめてスレッドをhrで区切る(最後の手段2)
・<B>タグと<FONT>タグとりあえず消してみよーよ。
・CSS → ブラウザによる環境悪化が無く、下位互換性があり、転送量が減るのなら歓迎します。
・巡回ロボットお断り→ロボットも客。やるなら /robots.txtに書いてサイト全体に適用
・ふぉれすとぐり〜ん → #282
【表示関連】
・名前表示 名無し 01/08/26 00:00
・レス取得 最新50 レス1-100
・age sage 「+,-」「^,_」「↑,↓」「a,s」
・フォーム post name mail
【呼びかけ】
・話題のループ防止のためレスを全部把握しておく
・純正以外の看板画像は別鯖なのでトラフィックに問題なし
・<pre>は仕様が決定後に検討
438 :
デフォルトの名無しさん :2001/08/26 08:12
1Byteでも減らしたいところ悪りぃけど、曜日出してくんないかなー。 仕事行かなきゃいけない日かどーかわかんなくなるから。(藁 あと、s/[A-z]/[A-z]/g とかやってもいーんじゃないの?
>s/[A-z]/[A-z]/g とかやってもいーんじゃないの? いいね、検索しやすくなるし。
曜日残して欲しいのは同意。 ログ読んでていつが週末かわからなくなるのは辛いものがある。
441 :
sage :2001/08/26 08:36
名前表示→ 名無し 01/08/26/日 00:00 でよいと思われ
>>438 -439
ひょっとして
y/[A-Z]/[a-z]/
ていう意味?
全角半角
>442 どっちにしてもレス付ける内容では無いと思われ。
おはようございます。出かける前に確認応答。 本家ftp鯖が止まったようなので、ミラーの更新の方は止めました。 ファイルの方はまだ残しておきます。 ああ、日曜なのに講習会だ。鬱氏。
>>aki お疲れさま がんばってください。
批判要望板から来たんですが、 WEBデザイン板ってここですか? 「2001/08/26」→「01/08/26」にして 「名前:」「投稿日:」を削除して下さい。
448 :
デフォルトの名無しさん :01/08/26 09:04
ソースをちょっと眺めて、細かい事だけど。 main()の中の zz_fileSize = getFileSize(fname); はいらないね。 zz_fileLastmod = getFileLastmod(fname); を加える時に混じったんだと思う。 (もちろん、getFileStatus(const char *fname)みたいなのを作って stat()の呼出を1回にしたほうがいいけど。) それと、やっぱHTTP的には printf("Status: 304 Not Modified\n"); の方が良いと思う。数バイト増加するけど。
2ちゃんを救うためにがんばってくれたプログラマーさんに お礼が言いたいです!! みんなのために本当にありがとうございます!!
いま現在も色々いじってるみたいだな。 「レスを全部読む」が100レスごとになったし。
2ちゃんのために、こんなにがんばってくれるなんて・・・ 私馬鹿でなんにも分からないけど2ちゃんがなくなって悲しいと思っている人たち のために・・・・・ 感動して泣きました・・・本当に、本当に、ありがとう・・・・・!!
ガイシュツかなあ。 なんでprintf多用してるんだろ。ある程度まとめるなり(可読性の問題もあるけど) フォーマットを使用しないのはputsに置き換えるなり、すればいいのに。 関数呼び出しのコストだってバカにならないと思うんだけどな。
456 :
デフォルトの名無しさん :01/08/26 09:37
ごめん、ガイシュツだった。
458 :
デフォルトの名無しさん :01/08/26 09:55
■掲示板に戻る■ レスを全部読む 最新レス100
スキルの高い方知恵を貸してください2号
132 名前:Name_Not_Found 投稿日:01/08/26
09:38
>>98 デフォルトは全ての板で当面「名無し」か「名無」あたりにして、視認性の問題から<FONT>タグは残し、
128 名無 010826日 09:25
にするのはどう?
スラッシュ無しだと結構見辛いけど、
日付で過去のレスを探したい場合も、曜日を目安にスクロールしていけば、なんとか耐えられる。
133 名前: 投稿日:01/08/26 09:45
視認性まで犠牲にしてどれだけのメリットがあるんだよ、馬鹿?
日付の/を無くすなんて笑い話だ。
134 名前:Name_Not_Found 投稿日:01/08/26 09:48
半角/全角の違いやスペースでも転送量は増減するの?
128 名無し 010826日 09:25
ではどう?
web板信じれられないレベルの低さ、、、
Web板はネット同人女の溜まり場だからな。 スキルに期待するのは間違ってる。
461 :
デフォルトの名無しさん :01/08/26 10:22
まぁまぁ今は他人の批判してもめる余裕なんて無いのだから、抑えておこうよ。
462 :
デフォルトの名無しさん :01/08/26 10:23
で、書きなおしませんか? 仕切る人1人にしないと混乱するから誰かやんない?
そうなんだよね。 誰かコテハンで仕切ってよ。
464 :
デフォルトの名無しさん :01/08/26 10:31
Wikiの方はなんだかうまく動かないな w3mだからかな?
465 :
デフォルトの名無しさん :01/08/26 10:33
そもそもさ、TABLEタグを利用しているのが重い原因なんじゃないの? TABLEタグ使わなくても見やすいレイアウトにする工夫を。
Web板ってナニ考えてるの? 必要なものを削ってドウスルンダヨ!
Wikiはプログラムソースを貼り付けるもんではないと思われ。
HTMLの話はどうでもいい
469 :
初学者26 :01/08/26 10:35
>>38 変化はとっても勉強になります。
今回は口を挟むスキルに達していないのが残念でなりませんが,
少しでも2ちゃんねるのお役に立てるように勉強したいです。
470 :
デフォルトの名無しさん :01/08/26 10:36
/_ | /. \ ̄ ̄ ̄ ̄| / / ― ― | | / - - | ||| (6 > | | | | ┏━┓| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | | | | ┃─┃| < 正直、救って欲しい。 || | | | \ ┃┃┃/ \________ | || | |  ̄  ̄|
471 :
初学者26 :01/08/26 10:40
「最初のレス100」というのを追加して欲しいです。 最初から全部見たいときに「レスを全部読む」しかできないので。 時間によるアクセス制限時は強制的にそうなりますが,デフォルトでも そういうコマンド(釦?)も欲しいです。少しは足しになりますか?
>>464 version w3m/0.2.1では試してみたんですが、書けてる見たいです…。
発言内容に依存してるのかも。
UNIX板より 431 名前:原住民 :01/08/26 10:42 むむ、制限時間過ぎてもスレ全体を一括読みできない原因発見... zz_GetEnv()と get_lastmod_str() の両方で gmtime()使ってるぞ!! static領域に結果置いておくだけだから上書きされちゃうんだよね...
>>471 これ同意。
レス50個単位とかで前後できるリンクもいつもあった方がいいね。
でも、激しくスレ違いな気がするYO!
475 :
デフォルトの名無しさん :01/08/26 10:45
>>472 こっちも0.2.1です。
ソース全体をpreで囲わないのはこういうものなんですか?
あと、編集ボタンを押すとソース内のタグがescapeされないのもこういうもんかな?
ごめん、寝る。
>>473 とにかくグローバル変数の使い過ぎで関数の独立性が損なわれてるね
グローバル変数である必要がないものはローカル変数にした方がいいね
あと
int get_lastmod_str(time_t lastmod){
- strftime(lastmod_str, 1024, "%a, %d %b %Y %H:%M:%S GMT", gmtime(&lastmod));
+ strftime(lastmod_str, 1024, "%a, %d %b %Y %H:%M:%S %Z", localtime(&lastmod));
int zz_GetEnv(void)
{
currentTime = (long)time(&t_now);
time(&t_now);
- t_now += 9*60*60;
- tm_now = gmtime(&t_now);
+ tm_now = localtime(&t_now);
にして If-Modified-Since の判定もApacheのap_parseHTTPdate()みたいなの
使ってちゃんとtime_tにパースしてから比較した方がいいね
あと これは実現可能性の面が問題だけど 仮にCGIをApacheモジュールの
形に書き換えてApache2.xの上で動かすとなると マルチスレッド対応と
いうことで 各関数をreentrantにしておいた方がいいのかもね
その意味からも グローバル変数やstatic変数の利用はできるだけ
避けた方がいいと思う
タグの短縮も重要だが、 read.cgi に渡される bbs, key, st, to なども1文字に短縮して、 read.cgi 側で新旧どちらにも対応すれば index2 あたりでは 100文字を超える節約になるのでは。
zz_GetString あたりの処理を簡略化して、 b で始まっていたら bbs, k なら key などと判断する、という意味。
480 :
デフォルトの名無しさん :01/08/26 11:16
moduleにするんだったらそもそもmod_cgi経由のインタフェースが使えな いから全面書きなおしでしょ。負荷はたいしたことないと言っていたから cgiのままでいいと思うんだけど。fastcgi案も出てたっけか。
_ , -―-、
, 'ニニニ、::::(0::::::::::ヽ、
 ̄ ̄ヽ'::::::::::::::: ヾ みてごらん
>>1 を あれが夏厨だよ
)::: .... \
/ ::::::::::::::::::ヽ
/ :::::::::::::::::|
/ :::::::::::::::::|
/ :::::::::::::::::::|
/ ::::::::::::::::::::|
| :::::::::::::::::::::|
. | :::::::::::::::::::::|
_ , ―-、| /::::::::::::::/::::|
\ヲ'⌒ヽ:| /:::::::::::::::/::::::|
ト`_ ノ::| /:::::::::::::/::::::::|
人;;;;;;;::::;:| |:::::::::::::/::::::::/
/γ `:::::| |::::::::::::/::::::::/
/ ( ヽ :::| |:::::::::/::::::::/ ふーん、なんだか
{ } ) ::| |::::::::{::::::::/ 頭悪そうだね、ぱぱ
| / } ::| .ヽ::::|:::::::/
) { / ::| .ヽノ ::::/
} | ( :λ :::|
( ヽ、 ) ノヽ ::::|
ヽ, ~ 〈 ト、_ | ::::::ヽ、
( ,' ノ | |~7 ::::::::::::::`ヽ、
ヽ,、,、,γ' ノ, -‐W~フ { ト、:::::::::::::::::::ヽ、
∠____ト-┘z__,―' ̄Σ Z  ̄ヽ―-、_ノ
'―z_,┴'~
Apache2 系列の時刻解析関数は apr-util モジュールに apr_date_parse_http() があるから こっちがいいね。apr-util/misc/apr_date.c の中。
>>477 > + strftime(lastmod_str, 1024, "%a, %d %b %Y %H:%M:%S %Z", localtime(&lastmod));
HTTP-dateはGMTに「しなければならない(MUST)」です。
下手にJSTなんか入れたら動作しなくなるUAが出てくると思う。
RFC 2068
3.3 Date/Time Formats
3.3.1 Full Date
All HTTP date/time stamps MUST be represented in Greenwich Mean Time
(GMT), without exception. This is indicated in the first two formats
by the inclusion of "GMT" as the three-letter abbreviation for time
zone, and MUST be assumed when reading the asctime format.
ということですので宜しくお願いします。
えらい、コード読みづらいんですけど・・・ ラフな仕様書から作った方がいいって。 あとグローバル変数多すぎ。 コメント少なすぎ。
誰かプロファイラ掛けた結果見せて
>>483 Perler様お疲れ様でした
確かにHTTPの場合GMTでないとほとんどの場合まずいようです すみません
ただ RFC2068 は現在obsoleteになっていて RFC2616 が現行のHTTPに
なってますので......
488 :
デフォルトの名無しさん :01/08/26 11:49
>>487 そうでしたね。RFC2616の該当部分は、
RFC 2616
3.3 Date/Time Formats
3.3.1 Full Date
All HTTP date/time stamps MUST be represented in Greenwich Mean Time
(GMT), without exception. For the purposes of HTTP, GMT is exactly
equal to UTC (Coordinated Universal Time). This is indicated in the
first two formats by the inclusion of "GMT" as the three-letter
abbreviation for time zone, and MUST be assumed when reading the
asctime format.
ここになりますか。
あの、「今はそんな事言ってる場合じやない」と怒られるかも しれないけど、書いていいですか。 大元のread.cgiのソースって、悪いプログラムの見本のような・・・・ データがコードで書かれているというのは、かなり痛いと思う。
491 :
デフォルトの名無しさん :01/08/26 12:53
まだ「名前:」「投稿日:」消せないの?
492 :
デフォルトの名無しさん :01/08/26 12:58
493 :
初学者26 :01/08/26 13:01
「次の100レス」が消えてます。あちらに報告してきますね。
>>490 がいしゅつ
まあ最初は誰にも見せないつもりだったんだろ
read.cgi のインストールは誰がやってくれるんでしょうか?
圧縮率ってgzipよりbzip2の方が高いよね? でもブラウザがbzip2なんかほとんどサポートしてないか...... 何かブラウザにbzip2デコーダ組み込んだりするうまい方法ないかね?
read.cgiをプロファイラ(gprof)に掛けてみた結果 傾向がはっきりでるように1つのクエリに対してmain処理を1024回ループさせた 1) datが比較的大きい場合(130KB) Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls us/call us/call name 42.76 1.21 1.21 1024 1181.64 1191.41 dat_read 37.46 2.27 1.06 1822724 0.58 0.58 findSplitter 6.01 2.44 0.17 455681 0.37 2.70 res_split 4.95 2.58 0.14 1020928 0.14 0.28 ExistHlinkX 4.59 2.71 0.13 5256192 0.02 0.02 hrefStop 1.77 2.76 0.05 455680 0.11 3.51 out_html 0.71 2.78 0.02 93184 0.21 0.21 cutWordOff 0.35 2.79 0.01 548864 0.02 0.55 ExistHlink 0.35 2.80 0.01 455680 0.02 0.70 hlinkReplace 0.35 2.81 0.01 93184 0.11 0.11 doReplace 0.35 2.82 0.01 1024 9.77 1572.27 dat_out 0.35 2.83 0.01 1024 9.77 9.77 getLineMax 0.00 2.83 0.00 455680 0.00 0.00 IsBusy2ch 0.00 2.83 0.00 7168 0.00 0.00 zz_GetString 0.00 2.83 0.00 2048 0.00 0.00 getFileSize 0.00 2.83 0.00 1024 0.00 0.00 BadAccess 0.00 2.83 0.00 1024 0.00 0.00 getFileLastmod 0.00 2.83 0.00 1024 0.00 0.00 get_lastmod_str 0.00 2.83 0.00 1024 0.00 0.00 html_foot 0.00 2.83 0.00 1024 0.00 0.00 logOut 0.00 2.83 0.00 1024 0.00 0.00 out_html1 0.00 2.83 0.00 1024 0.00 0.00 zz_GetEnv 0.00 2.83 0.00 1 0.00 0.00 html_head
続き 2) datが比較的小さい場合(13KB) Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls ns/call ns/call name 51.52 0.17 0.17 167940 1012.27 1012.27 findSplitter 42.42 0.31 0.14 1024 136718.75 136718.75 dat_read 3.03 0.32 0.01 41985 238.18 4287.25 res_split 3.03 0.33 0.01 1024 9765.62 9765.62 BadAccess 0.00 0.33 0.00 83968 0.00 0.00 ExistHlinkX 0.00 0.33 0.00 41984 0.00 0.00 ExistHlink 0.00 0.33 0.00 41984 0.00 0.00 IsBusy2ch 0.00 0.33 0.00 41984 0.00 0.00 hlinkReplace 0.00 0.33 0.00 41984 0.00 4287.35 out_html 0.00 0.33 0.00 7168 0.00 0.00 zz_GetString 0.00 0.33 0.00 2048 0.00 0.00 getFileSize 0.00 0.33 0.00 1024 0.00 175781.25 dat_out 0.00 0.33 0.00 1024 0.00 0.00 getFileLastmod 0.00 0.33 0.00 1024 0.00 0.00 getLineMax 0.00 0.33 0.00 1024 0.00 0.00 get_lastmod_str 0.00 0.33 0.00 1024 0.00 0.00 html_foot 0.00 0.33 0.00 1024 0.00 9765.62 logOut 0.00 0.33 0.00 1024 0.00 0.00 out_html1 0.00 0.33 0.00 1024 0.00 0.00 zz_GetEnv 0.00 0.33 0.00 1 0.00 0.00 html_head
>>496 MicrosoftとNetscapeに頼んで。
そういうわけで findSplitter() なんとかしねーとな
区切り文字は現行のまま?
503 :
デフォルトの名無しさん :01/08/26 13:55
>>494 レス全部読んでたけど、どのへんに出てきたっけ?
>>500 バージョンアップも含めてちょっと色々直してました。
リロードしてだめだったら再度教えて下さい。
荒らし対策に定期バックアップも仕掛けました。
505 :
デフォルトの名無しさん :01/08/26 13:58
char *findSplitter(char *stt,int sp) { unsigned char *p = (unsigned char*)stt ; char ss = (unsigned char)(sp & 0x00ff) ; while(*p) { if( *p >= 0xa0 && *p <= 0xdf) {p++ ; continue;} if((*p >= 0x81 && *p <= 0x9f || *p >= 0xe0 && *p <= 0xfc)) { p += 2 ; continue;} if(*p == ss) return p ; p++ ; } return NULL ; }
506 :
デフォルトの名無しさん :01/08/26 14:06
ふしあなさんとかキャップの太くない文字ってdatにタグが入るんだっけ?
507 :
デフォルトの名無しさん :01/08/26 14:16
>>505 >if((*p >= 0x81 && *p <= 0x9f || *p >= 0xe0 && *p <= 0xfc)) { p += 2 ; continue;}
if( (unsigned char)(*p^0x20-0xA1) <= 0x3B && *p!=0x80 ){p+=2;continue;}
こういう風に最適化出来ないかな?
datにもタグが入る。 だから > と < の連続でデリミタになってる。
う、逆になった。。。 < と > ね。
splitterは要素ごとに関数を分けて、本文はケツから探索 日付はある程度固定長だからそれをもとに探索 ってやるのはどうよ?
レスの開始点の情報を持つテーブルはあるんでしょ。 インターフェースを大幅に変えなきゃならんのかな?
513 :
デフォルトの名無しさん :01/08/26 14:24
>505 それ旧タイプね。今は全部新タイプ(TYPE_TERI)だったと思う。 TYPE_TERIのfindSplitter内はほとんど改良の余地はない。 コードをうまく書くかインラインアセンブラでCMPS(x86と仮定して)を 使うようにすることぐらいかな?
>>497 -498
ご苦労さん とりあえず負荷が大きいのはdat_read()とfindSplitter()と考えていいのか...
dat_read() -> mmap()を使う
findSplitter() -> if (*p >= 0xa0 && *p <= 0xdf) {p++; continue;} がムダ
ってとこかな とりあえず...... しかし全面的に改めた方がって気も
とりあえず、gmtime()の重複をなんとかしないといけないから、 //先頭のほう - struct tm *tm_now; + struct tm tm_now; //zz_GetEnv() - tm_now = gmtime(&t_now); + tm_now = *gmtime(&t_now); あと、 html_error999()とlogOut()とIsBusy2ch()の tm_now->をtm_now.に直すべ。 実際には、IsBusy2ch()しか呼ばれてないから、 tm_nowの代入はそこでも良いかもしれない(コンパイルエラーだけど)。
UNIX知らなくてごめん。 mmap()って、排他制御はどうなってるん? あ、でも読みこみだけだから大丈夫なのかな?
>>516 するんならmlock()か...
あとfindSplitter()のssも unsigned char にした方が何気によさげかも
519 :
デフォルトの名無しさん :01/08/26 15:09
>514 >findSplitter() -> if (*p >= 0xa0 && *p <= 0xdf) {p++; continue;} がムダ テーブルすべきだろうけど、そもそも、そのコードはTYPE_TERIの時 はコメントアウトされてるので関係ないです >516 >mmap()って、排他制御はどうなってるん? ない。他プロセスがファイルを書き換えると、mmapで得られたバッファの中身も同時に 書き換わる。 >518 mlockって、メモリブロックがページアウトされないようにロックするだけで、 書き換え不可ってできたっけ?
環境書き忘れたけど read11.c を RedHat6.2/gcc2.91.66 でコンパイルしてます。 コンパイルオプションは -pg -DLASTMOD -DGZIP で、read2ch.h内で TYPE_TERI, Katjusha_Beta_kisei をdefine済み。 で、dat_read() が遅いのは実際のI/Oではなくて 壊れたDATファイルへの対処と思われる for(i=0;i<zz_fileSize;i++) { if(BigBuffer[i] == '\0') BigBuffer[i] = '*' ; } この部分が大半の時間を食ってる。 findSplitterに関しては、、DATファイルの先頭のエレメントは固定長区切りに するとかしないとどうにもならんかもね。インライン展開してもあんまり芳しくなかった。
521 :
デフォルトの名無しさん :01/08/26 15:22
全般的に\0終端文字列ではなく、長さを別に保持したほうが 良いように思う。 現状だと、BigBufferのデータをgetLineMaxで行単位に、res_splitでフィールド単位に \0終端させてるが、そのたびに、BigBufferの全スキャンになるので、 一括で、行とフィールドに分割したほうが良いように思う。
曜日必要だぞゴルァ。あれも立派なインデックスだ。 あと自動リンク削除などあまりにも製作者・管理者側に偏りすぎ。 一回の投稿行数1行減らしてでももう少しユーザーフレンドリーなものにしてくれよ (厨房排斥が目的なら知らんけど)
>>522 行数は、減らしても複数回に分けて書き込まれるだけ。
>(厨房排斥が目的なら知らんけど)
転送量を減らすのが目的なのだから、それもアリかもしれない。
>>521 長さデータには、くずはの壊れにくさレベルを導入してな
私も素人ですが、曜日の表示は復活して欲しいですね。 「名前」表示は無くても良いような気はしますが・・・。
526 :
デフォルトの名無しさん :01/08/26 15:37
2001年8月25日。2チャンが本格的に閉鎖になりかけた日だよ。 転送量が多すぎて、費用が¥7,000,000/月もかかってるって発表されて、 「数日中に閉鎖」って予告されてさ、 その日のうちにあっちこっちの板が封鎖されてた日だよ。 一時HTTPブラウザの表示が極少化されちまった。あのときのUNIX板の住人、カッコよかったんだぜ。 「総力を結集」ってのは まさにああいう状態だよ。 HTTP転送量を1/3に削減しないと閉鎖、ってもんだから、新しいプログラム組んでさ、 そしたらほんの何時間かで完成したんだよ。 それが聞いてくれよ、 目標は「1/3」だったのに、「1/16」まで圧縮に成功しやがったんだよ。 職人技なんてもんじゃねえよ、神技だよ | | | | 十 十 (` ∧_∧ (` ∧_∧ UNIX板・プログラマー板 ()lll()\(´∀` ) ()lll()\(´∀` ) マンセー / ・ \ヾUnixと) / ・ \ヾ PG と) \___ ____ ___/ (_人 \ ノ ) (_人 \ ノ ) ,,,,,. ∨ .∨ オツカレサマー 人 ノ (_)~⌒`ヾ人 ノ (_)~⌒`ヾ^lll. ∧_∧ ∧∧ ∧ ∧__. ( < | ソ / ( < | ソ / ,)|||. ∩´∀` ∩∩゚Д゚∩ /(゚ー゚*∩ /\ \ l ノーー''''/ ' ノ''|\ l ノーー''''/ ' ノ''| ヾ ソ ヾ | |ノ /| ̄∪ ̄ ̄|\/ |_|.フ ヾ、く.`l_| |_|.フ ヾ、く.`l_| | | | | |,,〜 |____|/ /_|。。 。 キ/ /_|.。/_|。。 。 キ/ /_|.。。 。 。 (__(____) ∪∪ ∪∪
>>519 mlock()じゃダメだね スマソ......
Solaris上のlockf()だとできるみたいだけど... Linuxとか*BSDだと
flock()なのか? こちらでできるかは不明
ロックするとマズイんじゃない? ロックする時間を短くする為にBigbufferを使ってるんでは?
もう面倒だからイチから書き直しちゃえば?
>>520 > for(i=0;i<zz_fileSize;i++) {
> if(BigBuffer[i] == '\0') BigBuffer[i] = '*' ;
> }
for (i = zz_fileSize; --i >= 0; ) {
if(BigBuffer[i] == '\0') BigBuffer[i] = '*' ;
}
これで少し速くならない?(せこいけど…)
531 :
デフォルトの名無しさん :01/08/26 15:53
>>530 C++に書き直してます、なんとなく。
そこの部分は後続の行数を数える関数とまとめて
env.lineMax = 0;
// TODO
char* p = env.BigBuffer;
char* pline = env.BigBuffer;
const char* const p1 = env.BigBuffer+env.fileSize;
for(; p!=p1; ++p0) {
switch(*p) {
case '\0':
*p='*';
break;
case '\n':
if(env.lineMax>RES_RED) {
goto exit_getenv;
}
env.BigLine[env.lineMax++] = pline;
pline = p+1;
*p = '\0';
break;
}
}
exit_getenv:
return 0;
としたほうが速いと思います。
C++固有コードとミスがあるけど愛嬌ってことで。
533 :
デフォルトの名無しさん :01/08/26 15:57
>>526 神業では無いと思うけど・・・元の CGI が御タコ過ぎただけ。
でも、元の CGI が神業レベルで最適化されていたら、2CHは終わっていたな。。
しかし、焼け石に水か、、、あとは営業努力に期待しよう。
今日モーニング娘の新メンバー決定があるので、 負荷テストが出来ると思います。
>>526 ただでさえ「転送量が……」って言っているんだから、
何回も同じ文章を、しかもAA付きでコピペするのは
止めようや。
Web製作版のほうで、 レスの表示数にFORMを使ってはどうかって意見が出てるよ。
>>530 本気で高速化を考えているなら、その部分コメントアウトしちゃえ。
つか、dat_readとdat_outはまとめた方が速くなるような。
538 :
デフォルトの名無しさん :01/08/26 16:23
43kのファイルの読み込み、内容の全スキャンを20000回ループさせた結果。 (gprofだと、カーネルで費やされた時間が出なかったので、bash-builtinのtimeで計測) fread版: real 1m3.433s user 0m23.230s sys 0m6.480s mmap版: real 0m50.591s user 0m23.090s sys 0m0.780s この差を大きいとみるか、小さいとみるか。
つまらない質問だったらごめん。 >530 '\0' を'*'に変換する処理って何の意味があるの?
>>539 >>520 を参照。壊れちゃってる物、仕方ないと思うけどなあ。
datファイルを直すのは、別スクリプトにしたら?
>>538 systemでかなり差が出ているのでmmapを使うべきでしょう
ただでさえforkにgzipのexecとsystem酷使してますし…
542 :
デフォルトの名無しさん :01/08/26 16:28
datファイルは\nで行を区切っているけど、 これをgetLineMaxで\n→\0に置換して行単位に、 res_splitで<>→\0\0に置換してフィールド単位に ばらして、それぞれ\0終端文字列(いわゆるC形式の文字列)として 扱ってる。 なので、壊れたdatファイルで途中に\0が入ってると処理がおかしくなるので、 最初の段階で\0をつぶしてるらしい。
>540 >542 にゃるほど、サンクス。
544 :
デフォルトの名無しさん :01/08/26 16:34
>541 ただ、mmapにすると、バッファを書き換えられなくなるので、 現在のようにBigBufferを扱いやすいように修正しながら\0終端ベースの 処理ってのはできず、全体的に行、フィールドの先頭ポインタとその長さを保持して それを使いながらの処理になる。 すろと、コストのかかる部分が移動するかもしれない。 あと、readの動作中にあぼーんが発生すると、mmapで得たバッファの内容がずれる リスクがある(普通の書き込みなら追加なので問題ないと思う)。
>539 いや、実はよく分かっていません。 元ソースのdat_read()にそういう処理があるっていうだけで… 推測ですが、datの読み込み後、何らかの理由でバッファに'\0'が入ってきた場合 他の関数の処理に不都合をもたらすので、 とりあえず'*'に変換しとけ、っていうだけかも知れません。 (実際はあり得ない?)
とりあえずこんなんでもかなり効くよ if (strlen(BigBuffer) != zz_fileSize) { for(i=0;i<zz_fileSize;i++) { if (BigBuffer[i] == '\0') BigBuffer[i] = '*'; } } 標準関数侮れず
誰かdatのきちんとした仕様を知ってる人いる? サーバによってあぼーんされた時の挙動が違ったりする。 一番最後のデミリタがなくなる事がある。 あぼーんのスクリプトによっても違うみたい。入り混じってる。 デミリタが減るのは1があぼーんされる時にしか出ない気がする。 あとバイナリ貼り付けたりすると、本文中に<>が出現することもある。 レス1件にデミリタが10個とかって事もあった。 '\0'はエレメントの頭かケツにしか付かないと思う。 10000個くらい調べたけど、要素の途中に挟まってるのは見つからんかった。 この手の話は多分みみずんが一番詳しいと思う。
げ、考えてる間に正確なレスが。バカ丸出しで逝ってきます。(w
549 :
デフォルトの名無しさん :01/08/26 16:40
>>546 結局BigBufferを最後まで一文字ずつ調べるわけで、
まあ、BigBuffer[i]='*';が無いだけ速いか。
550 :
デフォルトの名無しさん :01/08/26 16:42
>546 すばらしい。strlenみたいな多用されるやつは、アセンブラレベルで、 カリカリにチューンされてるはずだからね。
あとres_split()内でfindSplitter()も使うのやめちゃって p0 = strstr(s[i-1],"<>"); の方が速いよ まあ546の変更とあわせて実時間10.89秒が9.93秒になるくらいなのだけども
>>549 自己レス。
if(BigBuffer[i]=='\0')が成立しなければ一緒だ。逆に遅いか?
ライブラリ内部がアセンブラででも最適化されてりゃ速い、
かもしれない。
いや、よく考えたら、strlenの結果使えば、'\0'の位置なんて 既にわかっていることに気づいた。
>>553 '\0'が複数含まれていた場合を忘れてる。
int pos; while ((pos = strnlen(BigBuffer, zz_fileSize)) != zz_fileSize) BigBuffer[pos] = '*'; か。
557 :
デフォルトの名無しさん :01/08/26 16:49
>>553 これでいけるってこと?
int BufferLen = strlen(BigBuffer);
if (BufferLen != zz_fileSize) {
if (BigBuffer[BufferLen] == '\0') BigBuffer[i] = '*';
}
558 :
デフォルトの名無しさん :01/08/26 16:50
int pos; char *p = BigBuffer; int rest = zz_fileSize; while ((pos = strnlen(p, rest)) != rest) { p[pos] = '*'; p += pos + 1; rest -= pos + 1; }
>>558 それなら複数'\0'があったときもコストが高くならなくていいね。
strnlenも早いの?
>>552 少なくともLinuxのglibcの環境においては-O2つけたとしてもライブラリ使ったほうが速いようだ
>'\0' を'*'に変換する処理 これって、いかにも付け焼刃的に「バグを見つけたのであとから付けました」って 感じがするんだよね。 というのは、直後で行数を数えるために全体をスキャンしているのに 同時に行っていないから。 全体をスキャンするのは1回にして、 ただし、全てを同時に行う。 やることは、 ・行区切りの検索と位置保存 ・'\0'の'*'への変換 ・& -> & への 変換 … ただし、& は変換しない (・@+`の変換 … そのレスは前に詰めなければいけない) (・" ??) つーかさ、Splitした結果をBigLineに持たせるべき。 struct lines { char *name; char *mail; char *date; char *text; }; それと、機能追加?になるけどあった方が良いと思うのがさ、 オプションでのtext内部にある<br>以外のタグの削除ね。 要は>>nnがえらく転送量をふやしちゃうんだから、 <a href=...> と </a>のタグを無条件に削除するオプションがあってもいい。 ただ、BigBuffer内部で前詰めになるから、面倒くさいし、 各レスの先頭にタグが入っている場合が多いから、 実質memmoveの繰り返しになっちゃいそう。 それなるくらいなら、BigBufferの他にもう一つバッファを作って、 コピーしながら置換したほうがいいかもしれないけどね。 これなら、mmapとも併用できるでしょ。
一つ分かったことは、 「ひろゆきがプログラマとしてタコである」 ということだ。
>>565 ここまでの負荷を想定してはじめから作っていたのならそうかもな。
でもソレはありえないだろ。
>>564 >オプションでのtext内部にある<br>以外のタグの削除ね。
コストが高いと思うなあ。それはbbbs.cgiでやった方が良いのでは?
568 :
デフォルトの名無しさん :01/08/26 17:03
今までスクリプトって博之がつくってたの?
今のスクリプトはひろゆきじゃないはず。C言語出来ないって言ってた。
********************************** あのさ、もうUNIX板でのZIP関係の手入れは一段落したんだから、 つぎはこのスレでのコード最適化結果をどんどん実際に反映していこう。 生きてるFTPサーバか何かを提供してくれる人と、トランクソースに ここで出てきた差し替えコードを反映する、意欲あるプログラマの人は 手を上げてくれよ。 俺?すまそ、力不足だ。 *********************************
暫定版をリリースして、 デザインを含めて1からプログラムを 作り直したほうがよいと思う。 新しいプロジェクトを立ち上げましょうよ。
ちなみに571をカキコしようとして、書き込むボタンを押したら 一面文字化けのページが帰ってきたぞ。 read.cgi ver5.02には、チューニング以前のバグもまだあるのか?
ひろゆきって専攻何? 大学4年の夏に米国に心理学の留学行っている。 プログラマーじゃないのかな?
577 :
デフォルトの名無しさん :01/08/26 17:11
>>575 IEでhttp/1.1チェック入れてないとか?
>>572 それをやるなら、datのフォーマットから見直したいな。
ls=10でもdatを全部読み込むってのは、ちょっとなあ。
581 :
デフォルトの名無しさん :01/08/26 17:15
1にも書いてあるが、今のところ道は3つだと思ってる。 1)発想はそのままでCode書き直しなど全面書き換え最適化を行う 2)P2Pで頑張る 3)その他のアイデアでやってみる 現状動いているのは2だけだけど、1に手を付けるのもいいかもしれない。 3はまだ未知数。
582 :
デフォルトの名無しさん :01/08/26 17:16
datフォーマットを見直さなくても レスの位置を記録したインデックス作るだけで かなり効果無い?
>580 だよねぇ。 ファイルにインデックスでもつけたほうがいいよね。 既存のデータをどうするかが問題だけど。
インデックスは付けたいね。 でもそれをやるとすると、bbs.cgiの方に手を入れなくてはならない。 bbs.cgiのソースは公開されてた?
585 :
デフォルトの名無しさん :01/08/26 17:20
>>578 バグではありません、仕様です(w
負荷低減のため、htm側はzip圧縮ページなのな。
mod_gzip入るまで待ちんしゃい。
そういうの突き詰めていくとバックエンドのデータはRDBで管理して、クライアント処理は Servletで、とかなってくんだけどサーバ側の事情でアーキテクチャを大きく変えるのは難しそう。 俺的には read.cgi の mod_2ch (Apache module) 化のが一つのゴールかなあ、って思うが。
588 :
デフォルトの名無しちん :01/08/26 17:23
>>585 mod_gzipになるまでまだ1週間以上あるみたいだから
とりあえず今は「.html」に飛ぶようにしておいた方がいいんじゃないの?
589 :
デフォルトの名無しさん :01/08/26 17:25
すこし前に11REV1を落とされた方 修正ミスでした 今は修正完了です アドレスは同じです
よーく考えたら、Splitや置換って全体に対しては必要なかったね。 実際のls=??等のリクエストがどんな割合で来てるのかわからんけど。 つーことは逆に、 getLineMax()にFileSizeを与えて、memchrで行を数えて、 '\0'->'*'への置換をout_html()で行うようにするほうがいいかな? レスを全部読む場合は、全体を一括スキャンしたほうが効率的だろうけど、 トータルではどうなるか。 で、もし全体をスキャンするなら、特殊文字('\0','\n','<','&'等)をテーブルにして if (teble[*p] & flag) { switch (*p) ... } みたいな感じが良さそう。 else if の繰り返しや全体をswitchにしてしまうよりまともだと思う。 (負荷的には、キャッシュの関係があるから、試してみないとわからないけど) テーブルは8bitあるから、日本語文字やURLの終端判別にも使える。 これも、スタートアップでテーブルを作るほうがソース的には楽だけど、 負荷を考えると自力で作った方が良いかもね。 なんか俺も良くわかってないから、素直に推移を見守りますわ。
インデックス付けると、bbs.cgi以外にも、あぼ〜ん処理とかも 全部対応させなくちゃならない。それこそ大作業になるよ。
>>587 mod_gzip付けるだけでも汎用のサーバーがどうのもめていたらしいからmod_2chというのも厳しいのではないかな?
現状のデザインに不満を漏らしつつも何とか地道な改善を施すのはPGの宿命だよ。
あ、間違ってた・・・ プログラマが2chを救う!? @プログラム板 の2号は スキルの高い方知恵を貸してください @web制作管理板 の方の2号だ。
594 :
デフォルトの名無しさん :01/08/26 17:55
だからさーーーーー、早く実際の作業始めよーよー。
お邪魔かもしれませんが、ちとまとめてみます。(作業中)
596 :
デフォルトの名無しさん :01/08/26 17:55
/*行区切りの検索、'\0'の変換、&->&の変換を一度にやるソース案*/ char* pin = BigBuffer; char* linepin = BigBuffer; int line = 0; while(pin < &BigBuffer[zz_fileSize]){ switch(*pin){ case '\n': BigLine[line] = linepin; *pin = '\0'; pin++; linepin = pin; line++; if(line > RES_RED){ goto wend; } break; case '\0': *pin = '*'; pin++; break; case '&': if(strncmp(pin, "&", 5) == 0){ pin += 5; }else if(strncmp(pin, "&", 4) == 0){ /*・・・・(^^;*/ pin += 4; } break; default: pin++; break; } } wend: /*続き*/;
597 :
デフォルトの名無しさん :01/08/26 17:57
JavaやDelphiのような優れた言語を使わず、 Cなんていう時代遅れの処理系を使っているのはなぜなんでしょう。 それとも、ドキュンしかいないのでしょうか。
(あ、お話はどんどん続けておいてください)
速いからじゃないの?
600 :
デフォルトの名無しさん :01/08/26 18:01
601 :
デフォルトの名無しさん :01/08/26 18:01
Delphiて・・・2ちゃんってNTサーバーだっけ?
あおりはほーちちまちょー
597 はいつもの厨房なので無視という方向で。
605 :
デフォルトの名無しさん :01/08/26 18:05
ところでこれまでに出た改良案をすべて 取り込んだものはどれくらい早くなるの? 誰か試して。 #俺もやりたいけど今手元にwinしかない、、。
608 :
デフォルトの名無しさん :01/08/26 18:11
bbs.cgiのソースは何故公開されない?
>608 実はばっちりログを保存していて、 それがばれるのがいやだから。 だったりして。
610 :
デフォルトの名無しさん :01/08/26 18:14
>>608 ソース見ていたずらを思いつく人が出てくるからでは?
612 :
デフォルトの名無しさん :01/08/26 18:21
本気で2chのシステムを最適化したいんなら bbs.cgiとか、他のモジュールも公開するべきだな。 さらに俺を2週間ほど雇えば負荷総合的な負荷は5%程度まで縮小するかもな。 まあ人月300くらいはもらうけど。
安直にパスが全てべた書きされてるのではないか? いろいろな管理用コマンドとかもいっしょに。
一晩で軽くなるなら、いままで何やってたんだ?
>>612 現状を把握せずに、成果を約束できるのか?(w
短期的には、既存のスクリプトの改良/高速化の方向ですが、
結局は最初の議論に戻って、2ch全体のシステム設計から
やり直さないといけないと思います。
そちらのシステムデザインのスレを立てて始めたらどうでしょう?
スレを建てる前に、まず、
・マスター(現在の2ch開発スタッフが望ましい)
準マスター
・仕様、ソースなど現時点での決定事項がアップロードされる場所
http://www.gedoh.org/aki/2ch/wiki/yukiwiki.cgi?TopPage で良いでしょう
これらを決めて、スレのトップに明記する。
・・・でないと、スレ全体読み直すだけでかなりの労力です。
read.cgiだけではなく、データフォーマットから全てやり直さないと
駄目でしょう。。。オープンソースで常に改良していった方が。
>>615 「こんな外注先は害虫」の見本だよなぁ…
618 :
名無し :01/08/26 18:28 ID:cNxfOPbY
read.cgi 更新してみてよ。 サーバー管理者いないんですか?
619 :
デフォルトの名無しさん :01/08/26 18:28 ID:K3x70GYg
620 :
デフォルトの名無しさん :01/08/26 18:29 ID:goYJpq5c
>478-479 修正案 char *zz_GetString2(char *dst,char tgt) { int i, len; int ch = (int)'&'; int ch2 = (int)'='; char *kk = zz_query_string; char *kk0, *kk1; for(i=0;i<200;i++) { if(kk[0] == tgt) { kk0 = strchr(kk,ch); /* & */ if(!kk0) kk0 = strchr(kk,(int)'\0'); kk1 = strchr(kk,ch2); /* = */ len = kk0 - kk1 - 1; if(len > 0) { if(kk0) *kk0 = '\0'; strncpy(dst,kk1+1,20); dst[20-1] = '\0'; if(kk0) *kk0 = '&'; return dst; } } kk = strchr(kk,ch); if(!kk) break; kk++; } } 機能は >94 参照。zz_GetEnv から、 zz_GetString2(zz_bs ,'b'); などのように呼んでください。 該当部分( bbs=unix&key=998764722&st=23&to=34&nofirst=true&imode=true のような文字列を zz_query_string としての、連続7回の呼び出し) の100万回の処理時間は、手元の環境で 修正前 51.3s → 修正後 6.1s 。 >497-498 によれば処理時間への影響は小さいけれど、 リンク部分の文字列を短くできます。
621 :
デフォルトの名無しさん :01/08/26 18:29 ID:K3x70GYg
>>618 しばらくは各自localhostでテスト運用だな。
622 :
:01/08/26 18:29 ID:C1Z3lpu.
ん?アイデー?
あの、抜本的見直しもいいとは思いますが。。。 抜本的なのと、そうでないのはわけた方がいいと思います。 とりあえずは、既存の関数の機能は変えない範囲で、最適化を 行うべきかと。 #抜本的見直しを運営が望んでいるかもよくわからないですし。
625 :
デフォルトの名無しさん :01/08/26 18:33 ID:goYJpq5c
>608-615 サーバごとなどに異なる規制部分は非公開としても、 全体に共通の部分は公開された状態で、気づいた人が 欠点を指摘していった方が安全性は高くなるかと。 (その意味で、 read.cgi と違いすぐ入れて様子を見るのは危険) 管理側にも検討して欲しい。
こういう前提があるから、やはりCGIレベルでどこまで最適化できるか? しか当面ありえないでしょ。 >39 名前:夜勤 ★ 投稿日:2001/08/25(土) 19:34 >Apache に手を加える(パラメータ)を変更する というのはできないです。 >なぜなら、このサーバと同じサーバという売りでレンタルサーバ業を >営んでいるもので、汎用的なサーバじゃなきゃだめなんです、すんません。
この板にも強制IDが出てるな・・・何故か。 微々たるもんだが、ID:???の場合に出力を止めれば、 数百バイト程度は得するぞ。 ・・・Non-Accept-Encoding: gzip なら。
628 :
デフォルトの名無しさん :01/08/26 18:39 ID:mpESCVMc
>>624 書き直しはほとんど行われず、
P2Pは来週末にも終らず忘れ去られ、
とりあえず当面を乗り切っただけで
次の危機の時にまた盛りあがるが、果たせずに一票。
>627 全板強制IDっぽい。人減らし作戦の一環でしょう。
全板だね。「材料物性板」とかまでID表示になってる。(w
631 :
名無し :01/08/26 18:51 ID:cNxfOPbY
負荷が増える前に、プログラムを更新した方が いいと思われます。
モー娘メンバー発表まであと2時間。
>>632 ああ、それまでにまとめ作業終えたい(笑
現在 1/3 ほど終了
人を減らしたいのなら、書き込みだけじゃなくてread.cgi起動する度に ログを取ってる事も周知させれば?
>>634 いまだに2chは匿名性だから来たのにとか
ニュー速の厨坊がほざいてるからねw
636 :
デフォルトの名無しさん :01/08/26 19:04 ID:PGbsVVuc
でも int logOut(char *txt) は削るべきでは? 匿名とかそういうのじゃなくて負荷の問題で。 ログはApacheのログが別にあるからいいでしょ。
>人を減らしたいのなら、書き込みだけじゃなくてread.cgi起動する度に >ログを取ってる事も周知させれば? あんたソース読んでないでしょ? read.cgi内でやってるのは不正なUserAgentの記録 だいたいApacheがアクセスログ取ってるだろが
638 :
636 :01/08/26 19:12 ID:bQ7eOgW2
あぁ、Apache側 でUAまで記録してるとは限らないのか。 個人的にいつもCombineなログを取っているので早とちり。 #っていうか私のIDかっこ悪い。 PGだってさ。
ID変わった。なぜ?
640 :
デフォルトの名無しさん :01/08/26 19:14 ID:UBBPE9x.
実はID出てること自体がバグとか
hour もID算出に使ってるんだろうね。
IDは、投稿日の文字列も元にしてるからね。 で、20や曜日を削ったから、おなじみのエンバ(以下略
minの一桁目とIPアドレス?
644 :
643 :01/08/26 19:19 ID:nq7nF8XA
test
リンクの出力を減らすのは賛成だけど、
一番食ってるのはスレへのリンクではなく、
>>999 のリンクだからねぇ。
ご丁寧にst=nn&to=nn&nofirst=trueまで付いてるから。
nofirst=true や imode=true を nofirst=1 や n=1 等に対応して、
なおかつ最も重要なのは、bbs.cgiがdatに書きこむ内容を変更しないと。
646 :
643 :01/08/26 19:20 ID:nq7nF8XA
再test
647 :
名無し :01/08/26 19:20 ID:GLhprhn.
ID変わるバグか。IDの意味無し?
>645 st -> s to -> t nofirst -> nf でいいんじゃない?それに =true 付けるのも無駄。
649 :
636 :01/08/26 19:21 ID:bQ7eOgW2
IDは従来はdateとIPアドレスの一部から算出していたはず。 もし新たにhourも加わったとしても 636 と 638 で変わったのは説明できないような...
650 :
名無し :01/08/26 19:21 ID:GLhprhn.
ID変わらないから大丈夫だ。
651 :
デフォルトの名無しさん :01/08/26 19:23 ID:NGu5IyHk
ID変わるかな(1
652 :
デフォルトの名無しさん :01/08/26 19:23 ID:NGu5IyHk
IDが変わるかな(2
653 :
643 :01/08/26 19:25 ID:Y.ZOSOn2
655 :
636 :01/08/26 19:27 ID:bQ7eOgW2
一週間ぐらい前に作ったID逆変換スクリプトで試したら今のIDは正しく逆変換
出来るけど
>>636 のは結果が出なかった。何か間違ってあわてて直したのかな?
ふぅ、おわりました。このスレッドにあがった点は網羅したつもりです。 ここに貼っていくつもりです。 手を付けやすい所から1つ1つmergeしていくことになるでしょうか。
(自作された関数に関する情報、アルファベット順)
●char *doReplace(char *des,char *str0,char *str1)
引き値:
返戻値:*des のうち *str0 末尾の次のポインタ
機能:返戻値&*des のうち *str0 がみつかったら *str1 に置き換え
※案
>>138 >>168 >>271 >>272 ●char *findSplitter(char *stt,int sp)
※案
>>505 >>507 >>513 >>514 >>518 >>519 >>520 ●char *zz_GetString(char *dst,char *tgt)
※案
>>620 >>645 >>648 ●int BadAccess()
引き値:なし
返戻値:USER_AGENT が正当であれば1、不正であれば0
呼関数:int logOut(char *txt)
※char *zz_http_user_agent の判別順の最適化
※案
>>79 >>84 ●int hrefStop(char x)
※テーブル化
※案
>>27 >>30 >>35 >>49 ●int html_banner()
引き値:なし
返戻値:なし(returnせず)
機能:バナー部分を標準出力に
呼関数:int html_error999(char *mes)
int html_foot_im(void),int html_foot(int line) 内でコメントアウト
※#ifdef CM_BBSPINK によって2種類存在
●int html_bannerNew()
引き値:なし
返戻値:なし(returnせず)
機能:バナー部分を標準出力に
呼関数:int html_error(char *mes)
※案
>>45 >>48 ●int logOut(char *txt)
引き値:用途不明
返戻値:ファイルエラーで0、それ以外1
呼関数:int BadAccess()
660 :
デフォルトの名無しさん :01/08/26 19:29 ID:UBBPE9x.
Wikiの内容はmergeしてるんかな?
>>660 Wikiをmergeしたものもあるのですが、あちらは、こちらで話がそこそこ
かたまったものを載せているようですから、ここには含めませんでした。
今後、関数毎に作業を進めるようでしたら、関数毎の引き値などの一覧も
作りますが、どうしましょうか。
663 :
名無し :01/08/26 19:46 ID:GLhprhn.
モーニング娘の負荷危機まで1時間ちょっと
Wikiで draft なページ作ったら?
665 :
616 :01/08/26 19:56 ID:.7OZ9ZNw
名無し娘。さんお疲れ様です。分かりやすくなりました(^^
>>624 そうなのですよね。運営側が付け焼き刃で当面を乗り切れば良いと
考えているのか。でなければ、昨夜の状況になる前に手を打てたのに。
(頻繁にマイナーチェンジしていましたが)
ver5.02って?
>>496 >>499 bzip2のアルゴリズムは、圧縮・伸張とも
ストリーミングに向いてないのだ。
そもそも高速化しにくいし。
>>560 >>561 っていうかgccだったら
__builtin_strlen()と同義じゃないかしら?
(未確認)
668 :
デフォルトの名無しさん :01/08/26 19:58 ID:EDp.9ERA
モー板関連にも早く新しいread.cgiを導入しないと 意味が無いんじゃないかと思うのですが、 運営側の人何しているのでしょう・・・・
669 :
デフォルトの名無しさん :01/08/26 20:00 ID:MV3zKzJ.
>>662 >Wikiをmergeしたものもあるのですが、あちらは、こちらで話がそこそこ
>かたまったものを載せているようですから、ここには含めませんでした。
結果を載せるだけじゃなくって
議論の場としては2chスレよりwikiのがやりやすいんじゃない。
[[read.cgiを高速化2]]はプログラム板で占拠して
ある程度自由に使ってしまっていいと思う。
トリップ廃止?
>>669 議論をどちらでやるのか、私にはよくわからなかったので、
経緯をまとめるだけにしちゃいました(^^;
堅実なところはさっさと実装していって、議論の的を絞るのもいいかな
と思います。indentだけでもやって、どこかにUPしましょうか。。。
# これやっとけ、ってのがあればやっときます(笑
673 :
デフォルトの名無しさん :01/08/26 20:19 ID:lmB6Nfnc
>>659 >●int BadAccess()
>返戻値:USER_AGENT が正当であれば1、不正であれば0
返戻値が逆っぽいです。
674 :
名無し :01/08/26 20:26 ID:GLhprhn.
読み込み途中で止まったようになる。 その後読み込みまた止まったようになる。 最期にまた読みこむ。 なんでだろう?
675 :
デフォルトの名無しさん :01/08/26 20:48 ID:UUVa.jxU
書き込みが終わりましたって表示はいるの?
677 :
676 :01/08/26 20:55 ID:xL7OsRZc
今気づいた。 read.cgiを弄っているのに、アカウント名がbbs_cgiだ(汗
>>673 そうですね(^^;
>>676 お疲れさまです。
ところで、ざっと復習してみると、amp問題と、BadAccess()あたりは
ソースに組み込んでもよさそうですね。
# BadAccess() は"#ifdef NEWBADA"とかなんとかにしておく。
2時間ほど新メンバー見てきます(爆死
680 :
デフォルトの名無しさん :01/08/26 21:07 ID:8728MBZU
書き込み時に、それがTOPPAGEに変更が入る場合は、TOPPAGEを 生成して保存。 TOPPAGEの読み込みはread.cgiでなく、静的なページを送り返す ようにしたらどうだろう。
最新レス100 → 最新レス100 3バイト節約(ワラ
>>680 負荷は劇的に減るが、gzip圧縮の恩恵がうけられなくなって転送量がふえてしまうかも
こうしてプログラマが頑張ってる横で、モー娘がどうしただので 板が落ちそうになってるのを見ると、複雑な気持ち。
>>684 ついでに、コロンが全角半角入り乱れているので整理しよう(笑
>>682 mod_gzip の導入は決定しているようなので、その辺は考えなくても良いかと。
687 :
デフォルトの名無しさん :01/08/26 21:43 ID:NGu5IyHk
トップをindex2.html.gzとして、gzip形式でページを出力するのはどうよ? 拡張子をhtmlにしたままgzipで圧縮するばあいはApacheの設定が必要になると思う。 今までのindex2.htmlはindex2.html.gzに転送するページにするのが無難だと 個人的には思うけど。
>>687 だからmod_gzip入れるんだってば
689 :
369 ◆3XTuRnAc :01/08/26 21:50 ID:iecZaXF2
みなさん、お疲れ様です。 いま外出から帰ってきました。すごいことになってますね。 娘。さんとかPerlerさんとかもがんばっておられるようで、自分一人 遊んでて申し訳ない感じ。 ・・・で、ftpサーバがいるなら今日から明日の朝までなら 提供する用意があります。たまにADSLモデム落とされますが(汗、 それでも良ければ。
690 :
デフォルトの名無しさん :01/08/26 21:51 ID:JmrVikf2
>659 zz_GetString について、 >645 >648 は >620 でほぼ実現してます。 これまでに貼られたリンクとの互換性を考えると、 zz_nf, zz_im については if(strcmp(zz_im,"true")) などを if(zz_im[0] == 't') などに変更すれば、今後は nofirst=true → n=t imode=true → i=t のように短縮できますね。 read.cgi という8文字も無駄に思える。 もっと短い名前でも呼べるようにしては?
今日になってからここのwebページが普通に保存ができなくなったのは 何かいろいろ変更したからか? たまに出来たりもして何が何だか・・・ 不正な行為か・・・言われてもしょうがないけど・・・(藁
692 :
名無し :01/08/26 21:52 ID:GLhprhn.
夜勤さんが居ないと意味無いな。
693 :
687 :01/08/26 21:52 ID:NGu5IyHk
>>688 そりゃどうもすみません、なんかやけに好戦的に見えるなぁ。
694 :
デフォルトの名無しさん :01/08/26 21:53 ID:JmrVikf2
>687 index2 が更新される回数≪読まれる回数 だから、 mod_gzip で毎回圧縮するより更新の際に圧縮しよう、という議論? >691 何が不正なのですか?
695 :
デフォルトの名無しさん :01/08/26 21:55 ID:RDsCkPFA
>>693 だって、 index2.html.gz はすでにきのうやってたんだもの。
いまでも index2.htm は gzip で出してる。
ようするにがいしゅつ。
お疲れさまです。あと1時間ほどで戻ります(^^;
>>692 夜勤さんも、モ板祭の終わる頃にいらっしゃるようなことを昨晩おっしゃってました。
よろしければ、仕様変更を伴わない堅いところから、ソースに組み込んでいこうと
思いますが、どこから手を付けるべきでしょうか。
>>678 は組み込んでみました。追加がすぐに出ないようであれば、アップします。
697 :
名無し :01/08/26 22:02 ID:GLhprhn.
698 :
687 :01/08/26 22:02 ID:NGu5IyHk
>>695 あぁ、なるほど、最初からそういってくれたらよかったのに。
699 :
名無しさんの声 :01/08/26 22:04 ID:SBklp.1k
700 :
名無し :01/08/26 22:04 ID:GLhprhn.
盛り上がってまいりました。
モー娘の件もあちこちに個人で実況スレッドを作ったおかげで 2ちゃんねる本体にはそれほど負荷かかってないみたいですね。 羊と狼はやばそうですけど。(汗
704 :
デフォルトの名無しさん :01/08/26 22:29 ID:ggkSbIno
ていうか狼とかついに落ちた?
NEWBAがdefineされてるとBadAccess()の定義がダブるんでないかい?
確かにダブるなあ。 read2ch.h って今どこにあるの?
708 :
名無し :01/08/26 22:35 ID:GLhprhn.
さんくす。
710 :
名無し :01/08/26 22:38 ID:GLhprhn.
稲垣会見とモー娘新メンバーで アクセス急増。
711 :
デフォルトの名無しさん :01/08/26 22:44 ID:ggkSbIno
>>708 そのURL見れないんだけどみんな見れてる?
見れてますよ
713 :
デフォルトの名無しさん :01/08/26 22:46 ID:UBBPE9x.
URLに'_'があるとsquid proxyに蹴られるね。%5Fにしても駄目だ。
715 :
デフォルトの名無しさん :01/08/26 22:48 ID:ggkSbIno
>>713 はう。ビンゴ。ありがとう。
ローカルsquidに蹴られてた。
716 :
711 :01/08/26 22:50 ID:ggkSbIno
717 :
名無しさん :01/08/26 23:01 ID:jZdNU1oQ
>>699 そのスレ読んでみたけど、「匿名でヤバイ情報が覗ける」って
どこのこと言ってんだか・・・。なんつー認識だよ
719 :
デフォルトの名無しさん :01/08/26 23:06 ID:xL7OsRZc
あ、スマン すっかり忘れてたよ ./configure --enable-underscores でsquid作り直してつかぁさい(マテ
ところで,bbs.cgi って非公開? それとも他のスレに話題があるのかな
>>708 日本語化けてない?もしかして俺だけかな
722 :
デフォルトの名無しさん :01/08/26 23:20 ID:xL7OsRZc
>>661 >◆printf()
> 呼び出し回数削減
> puts()で可能なところは代用
> "\n"を削除
文字列長が分かっている場合は fwrite() のほうがいいんじゃない?
Shift_JISに見えるのは気のせい・・・?
くわ...こんなのばっかだ...鬱だ寝ます…
すまん
>>148 で恥ずかしいプログラム書きっぱなしだから
ちょっと補足いれさせてくれ。
要はdat_read関数上で'\0'から'*'に置き換えるのに
バッファを全部サーチしたのちに、再度getMaxLineで
各書き込みの先頭位置を検索するためにバッファを全部サーチしているので
一回のバッファサーチで両方の作業を行えばよいのではと
思ったわけです。即興でコードかいたんで無茶苦茶になっちまったけど、
できればこのコンセプトで誰か最適化してくれればうれしいっす。
>>720 古すぎて役に立たないかな。ちなみにBase64(ナゼ
aHR0cDovL21hbmtvbWFua29tYW5rby52aXJ0dWFsYXZlLm5ldC9iYnMudHh0
729 :
369 ◆3XTuRnAc :01/08/26 23:56 ID:iecZaXF2
えと、read11rev1をベースにread.cgi改造しました。 どんな改造かというと、 「gzip 1.2.4を強引に組み込んでみました」というものです。 逆にいうと、gzip 1.2.4に、強引にread.cgiの機能を入れてみた ってところなのですが。 ・・・・ソースいります?でかいですが。 なにしろgzip 1.2.4フルセットです。
730 :
爆♪ :01/08/26 23:57 ID:jt9kAY8E
>>729 >なにしろgzip 1.2.4フルセットです。
パッチにして(藁
731 :
369 ◆3XTuRnAc :01/08/26 23:58 ID:iecZaXF2
あ、フルセットじゃないです。 gzip.cとgzip.hだけで良いんですね良く考えたら。 gzip 1.2.4のフルセットは皆さんで落としてもらうとして(笑。 メリットは・・・プロセス数を浮かせられることかな(^^;;。 デメリットは、実行コードサイズがgzipと同等になっちゃうこと。
>>729 どっかにあぷしないと無理でしょう。
いや、確かにそういう話はあったし、間違っちゃいないと
思うけど、君素敵すぎ。
733 :
369 ◆3XTuRnAc :01/08/27 00:01 ID:xXHglqmc
あ、すんません、まだでした。まだまともに動いてないす。 動いたというのは自分の勘違い。ごめんなさい・・・・。
すいません。 夜勤さんや削除委員長さんとは連絡取れないのでしょうか? UNIX板が駄スレたちまくりなので対処してほしいのですが
使うのはzlibにしたらどうでしょう。 ところでbbs.cgiの方が着実にアップデートされていってますね。 真の精鋭はそっちに携わってる?
いま批判要望板で見かけたでし。 でもお手を煩わせていいものかどうか。
夜勤さんは縁の下でがんばりちゅうのようです。
740 :
夜勤 ★ :01/08/27 00:13 ID:/VYvqKxI
呼ばれて、来ました。
>>740 お疲れさまです。
あの、まだread.cgi開発中なのですが、これ以上改善を施して、
採用される見通しはありますか?
742 :
夜勤 ★ :01/08/27 00:16 ID:/VYvqKxI
もちろん!
743 :
デフォルトの名無しさん :01/08/27 00:17 ID:ZT1fe3Xg
sure
確定ではありませんが、作業方針としては、 まず、現行プログラム各部の性格や機能を変えない範囲での最適化をする。 その後、可能なのであれば、包括的・抜本的な最適化(作り直し)をする。 といった感じです。
745 :
名無し :01/08/27 00:17 ID:N77k73Ds
夜勤さん bbs.cgi は公開できないんですか?
746 :
720 :01/08/27 00:18 ID:P7yLS.2Q
>>728 わざわざありがとうございます〜。
いただいてきます。
% こっちはCではないのですね。
748 :
夜勤 ★ :01/08/27 00:20 ID:/VYvqKxI
プログラムは完成することはありませんと思うので、、、 どこか区切りがついたら、呼んでください。実際にサーバに上げますので。 今の目的は、「転送量の軽減」です。 たぶん批判要望あたりをうろうろしてますので。
749 :
夜勤 ★ :01/08/27 00:22 ID:/VYvqKxI
bbs.cgi を公開するのは、私には無理ですよー。
>>748 >今の目的は、「転送量の軽減」です。
では、今のうちに「最新レス100」->「最新レス100」とかの対処を
しちゃいましょうか。。。
751 :
369 ◆3XTuRnAc :01/08/27 00:24 ID:xXHglqmc
ごめんなさい、gzip組み込みで難航中です。 gzipのstdin -> stdoutなモードを使用して ログ出力→gzip stdin -> gzip stdout -> read.cgi stdout ってーな方向で持っていこうと思ったのですが、 stdioのファイルディスクプリタをどうにかしないと 行けないことに気づきました。 ・・・うーむ。こんなこと最初から気づけ俺。
752 :
デフォルトの名無しさん :01/08/27 00:25 ID:6kfMn/mA
755 :
名無し :01/08/27 00:26 ID:N77k73Ds
>>747 これ見れますか?
ファイルが無いようですが、、
read11.rev3.c ならある。
転送量の削減となると、やはりDATから変換したHTMLのサイズを減らすことを 優先すべきということでしょうか。 そもそもサーバのCPUパワーにはまだ余裕があるんですよね?>夜勤さん
757 :
名無し :01/08/27 00:31 ID:N77k73Ds
web制作の方に書いた、「新しいレスだけ表示」はどうなんでしょ。 スレをROMってリロードしまくりの人が多いなら効果あると思うのだけど。
>>753 すいませんが、フォローしきれる自信がないので、read.cgiで変更すべき
点だけどなたか列挙してくださいませんか?
複数の方がやって下さっても、この際よいと思います。
# それだけ抜け落ちが少なくなるし…
saladのread.cgiが、この時間帯でも全レス表示可能なようなのですが、 これは正常なのでしょうか?
(2時間くらいの目途で作業します)
762 :
技術とかでなく :01/08/27 00:40 ID:1NVzBQO2
プリペイド買った人のみスレを立てる権利を付ける (日当たり回数制限付き) プロキシーは一切制限する所から初めて、許可申請 で開ける様にする (プロキシー潰して行く方向でやる方が面倒) 各板共に3分間は更新された内容が読み込めない様 にする (同一IPからのリクエストは3分間はkickってのも在る?) これで安泰
764 :
デフォルトの名無しさん :01/08/27 00:45 ID:2MpScvZw
web製作板は転送量を減らしに躍起になって、 肝心なのを見失ってるって感じ。 せっかくのいい機会なのに……。
read.cgiで削れるところは少ないな。 とりあえず 最新レス100の100を半角にするか?(笑 あと「名前:」「投稿日:」削る、っていきなりやっていいんだろうか。
766 :
デフォルトの名無しさん :01/08/27 00:46 ID:NsFeEjCc
GetString (>690) が変わればすぐにもリンクの文字列が短くなり始めるのでは。 >620 (どのくらい検証されてる? さらなる改善は?)のように dst を 20バイトしか使わないなら、char zz_im[1024] などとなっているのも [20] でいい。
まずは見た目に尽きにくい所から削っています。 HTML内の"\n"とか。
HTTP_ACCEPT_ENCODING: x-gzip にも対応しとかないの? 今時、ほとんどないだろうけどね。 x-gzipにgzipを返しちゃいけません。 #ifdef GZIP if(zz_http_encoding && strstr(zz_http_encoding,"x-gzip")){ gzip_flag = 1; printf("Content-Encoding: x-gzip\n"); }else if(zz_http_encoding && strstr(zz_http_encoding,"gzip")){ gzip_flag = 1; printf("Content-Encoding: gzip\n"); }else{ gzip_flag = 0; } #endif
769 :
名無し :01/08/27 00:48 ID:N77k73Ds
レスの表示形式 312 名無し 01/08/26/日 15:40 に意見がまとまりました。
>765 ファイル名を r.g か何かにして、.g を .cgi と同じに扱う(笑
>>766 そうですね。GetString関係は、まずread.cgiで(現在との互換性を
保ちつつ)実装しておきましょうか。
検証お願いします。できたら、最終版へのリンクもあるとありがたいです。
772 :
デフォルトの名無しさん :01/08/27 00:49 ID:pckFEAaY
HTTPヘッダ出力したところで fflush(stdout); gzdopen(1); func_type *pFunc = gzip_flag ? gz_printf : fprintf; して、printf を関数ポインタに置き換えるだけじゃだめなん? gzip.c 組み込みって何してんの?
>>769 それ、やっていいんですかね(笑
夜勤★さんなりの確認いただけないでしょうか
■掲示板に戻る■ はなくても使い勝手が変わらないかと思います。
775 :
デフォルトの名無しさん :01/08/27 00:52 ID:eF1BPT8s
既出かもしれないけど。
>>000 のリンクで対象レス番号が既にブラウザで表示されている
範囲内にある時は<a name=〜>で移動するように
処理したら少しはread.cgiの呼び出し回数&転送量が減るかも。
日付形式はbbs.cgiに任せたほうがいいんじゃないか? 現状datのそのまま出力してるだけだし。
gzip 組み込むと GPL 適用だぞ。
>>774 他の板のスレッドから飛んだとき、「ここはどこだ?」となることがあったりする。
個人的には残して欲しい。
確かに今やってることって 『今の2ちゃんねる』の転送量を軽減することですよね。 あまり見た目は変えない方が良いかと。
780 :
369 ◆3XTuRnAc :01/08/27 00:56 ID:xXHglqmc
>>772 えと、正確には「gzipにread.cgiを強引にマージしよう」っていう話です。
gzdopen()っていう名前から聞くと、gzlibとかそう言うのがあるのでしょうか。
man page見ても見つからないから、ひょっとしたら後から追加しないと
行けないのかな・・・>FreeBSD
情報お願いします。
>778 スレに用はあっても、板に用はないんじゃないですかね? どんなもんでしょ?
とりあえず今日は見た目はあまり変えないって方針で。 でも名前:、投稿日:、は消してもよさそうだけどな。
783 :
デフォルトの名無しさん :01/08/27 00:58 ID:2MpScvZw
>>782 UIはまだ議論の余地があると思うので、
今回はあまりいじらない方がいいですね。
784 :
デフォルトの名無しさん :01/08/27 00:58 ID:pckFEAaY
>>780 zlib なんすけど、FreeBSD-4 なら /usr/include/zlib.h のコメント読んで
785 :
782 :01/08/27 00:58 ID:9mNBJEMM
あら、index2.htmに「投稿日:」が消えてますね。 こりゃread.cgiも消しちゃってOKじゃねーかな。
786 :
369 ◆3XTuRnAc :01/08/27 00:59 ID:xXHglqmc
>>777 ええ、その辺は承知してます。
もしgzip組み込みがうまく行って、かつ、read.cgiのGPL適用が
問題なく、かつ、組み込む価値があるなら採用、どれかひとつでも
欠ければ不採用ってので今は組み込みやってるところです。
まあ、今は単純な興味を満たす自己満足みたいなものですかね。
それでうまく行けば儲け物っていう。
787 :
369 ◆3XTuRnAc :01/08/27 00:59 ID:xXHglqmc
あ、zlibでしたか。了解です。
mod_gzipって確定なのかな? 確定ならgzip組み込みって無い方がシンプルでいいと思う。
入力フォームは必要でしょうか? フォーム出力専用のCGIのリンクをつけるのは駄目ですか?
793 :
デフォルトの名無しさん :01/08/27 01:08 ID:2Ic51Mxc
760の「この時間帯でも全レス表示可能」な問題って、 515、517の修正は入らないんでしょうか? piza2(ここ)でも、全レス表示可能になってますが。 read.cgi Ver5.xxのとこは全部そうかな?
age
517で良いと。 mod_gzipはすぐにできないのでしょう?
取りあえず、改良をお願いします。 <BODY TEXT=black BGCOLOR=#EFEFEF link=blue alink=red vlink=#660099> ↓ <body>
797 :
デフォルトの名無しさん :01/08/27 01:14 ID:2MpScvZw
>>796 <BODY TEXT=black BGCOLOR=#EFEFEF link=blue alink=red vlink=#660099>
↑相当をCSSで実現するということですよね?
798 :
デフォルトの名無しさん :01/08/27 01:14 ID:ReF.V//c
むしろブラウザの設定任せにしてしまうということでは。
>>796 -797
それは、管理のみなさんの了解はあるのでしょうか?
>797 ちなみに index2 では既に body の属性消されてますよ。
えー、これもガイシュツかもしれないのですが、 x-sjis を Shift_JIS にはまだできないのでしょうか?
body削りOKなら、HEAD内全部削除は駄目ですか?(^^;
804 :
デフォルトの名無しさん :01/08/27 01:17 ID:2MpScvZw
つか、encodingはmetaで指定するんじゃなくて、モノホンの HTTPレスポンスで出した方が良くない?
806 :
デフォルトの名無しさん :01/08/27 01:18 ID:2MpScvZw
んと、bodyとかheadの部分は後回しにしておきますから、夜勤さんに お出で願えないかなぁ。
<body>とか<head>とかは省略可能タグじゃなかった?
809 :
348 :01/08/27 01:20 ID:ynZt.qo6
810 :
名無し :01/08/27 01:20 ID:N77k73Ds
夜勤さん、どこにいるんでしょうね。
811 :
デフォルトの名無しさん :01/08/27 01:21 ID:2MpScvZw
すんません、ここを巡回できるようにしたいのですが、 どのカテゴリで探せばよいでしょ?
815 :
デフォルトの名無しさん :01/08/27 01:23 ID:pckFEAaY
>>791 cvs.apache.org から apr-util と apr を checkout。
apr-util を make すると misc/ の中に apr_date.o てのがある。
少々関数が不足しているので apr の方から cut&paste して追加。
ヘッダは apr/include apr-util/include を両方使えばいいでしょう。
といっても面倒くさいな。どうしよう。
Apache Software Licence ってライブラリの一部切り出して(Copyright 残して)
使っていいの?
816 :
デフォルトの名無しさん :01/08/27 01:23 ID:tF8/p42I
とりあえず、 -printf("Content-type: text/html\n") ; +printf("Content-type: text/html; charset=Shift_JIS\n") ; にして、meta削るってのは? #かちゅ〜しゃが書き込み時にエラー判定ミスってて大変やわ
818 :
ニュース速報板のタグが間違えている :01/08/27 01:25 ID:X..P9zvs
ニュース速報板のタグが間違えている わさと?ガイシュツ? <a href="../news/./index2.htm">リロード</a> これって index2.htm ではなく index2.html じゃないの? このリンク先をクリックすると画面が狂って表示されない。
>>816 ギコナビ使ってるんですが、プログラム技術のカテゴリが
見つかりません(涙
821 :
デフォルトの名無しさん :01/08/27 01:28 ID:tF8/p42I
823 :
デフォルトの名無しさん :01/08/27 01:30 ID:GRBfg3.A
824 :
ニュース速報板のタグが間違えている :01/08/27 01:30 ID:X..P9zvs
ニュース速報板のリロードのタグが間違えている わさと?ガイシュツ? <a href="../news/./index2.htm">リロード</a> これって index2.htm ではなく index2.html じゃないの? このリンク先をクリックすると画面が狂って表示されない。 それとここのスレに書き込むとエラーが出る by かちゅーしゃ
825 :
824 :01/08/27 01:32 ID:X..P9zvs
test
826 :
デフォルトの名無しさん :01/08/27 01:32 ID:GRBfg3.A
>>824 ホットゾヌだとエラーがでるが書き込めてるみたい。
827 :
名無し :01/08/27 01:33 ID:N77k73Ds
345 名前:夜勤 ★ 投稿日:01/08/26 23:48 ID:H8NM1U/A read.cgi の改良で、25% くらいの改善の見込みが付いたところでしょうか、 で index2.html とか若干のインターフェイスの修正でさらに 20% くらいの 改善を目論んでいる(やってみなきゃ分からない)というのが、今の状況 です。さらにいくつかのサーバを停止すれば、目標である 50Mbps以下 にはなると思います。 じゃー これが何を意味するのか?ということですが、 2ちゃんねるが黒字の経営(言葉のつっこみは勘弁)であれば、60% 以上の 経営効率化に成功したとうことでしょうが、、、 残念ながら、今の2ちゃんねるにおいては、若干の延命措置を施した だけだったりします。このへんのことは弁茶板の方々が詳しいと思います。
830 :
348 :01/08/27 01:33 ID:ynZt.qo6
かちゅ〜しゃもなんかエラーが出ますね でも一応書き込めてるようですが・・・
831 :
デフォルトの名無しさん :01/08/27 01:34 ID:pckFEAaY
Apache 1.3.20 の util_date.c なら単独ファイルだけで使えそうだ からこっちにしますかね・・・
>>821 bbstable上手く開かないです・・・。
>>822 PC等は確認済みですが、プログラム技術カテゴリ無いです・・・。
>>817 これってどうなのでしょう?
# RFC読み読み中
834 :
デフォルトの名無しさん :01/08/27 01:36 ID:cn52pBwI
ところで今現在の進捗はどうなってるの?
>>832 だから板違いだ。作業の邪魔だから帰れ。
>>833 古いネスケで文字化けする
ネスケ切り捨てるならそれでもいいかも
夜勤さん待ち
840 :
348 :01/08/27 01:38 ID:ynZt.qo6
>>837 後学のため、ログ読みたかったのですが・・・・。
堕ちます・・・。
>>838 SHIFT-JISなので、ほとんど化けない。
>>842 マジレスしとくと後学のためになるような作業ではない
数学の勉強でもしてろ
Web制作板の守備範囲かもしらんけど、 <HTML></HTML>も消しちゃっていいことないスか?
846 :
名無し :01/08/27 01:41 ID:N77k73Ds
鯖6台止める案が有力だって。
"charset=x-sjis" -> "charset=Shift_JIS" だけにしときます
>>843 100%化けるんだよ。欧文文字コードと勘違いして。
まあネスケがタコと言えばそのとおりなんだが。
849 :
デフォルトの名無しさん :01/08/27 01:41 ID:2MpScvZw
>>849 xhtmlとかにして無駄に転送量増やすくらいなら
逆行してても仕方ない
517 名前:夜勤 ★ 投稿日:01/08/27 01:40 ID:??? read.cgi 5.xx の採用の結果(速報) ピーク時の転送量はだいたい 45% 減。 CPU 負荷は、ほとんど導入前と変わらないようです。 すごい効果がでていると思います。 UNIX 板の方々に感謝! あとは mod_gzip がどうなるかが楽しみです。 まだ、導入できると決まったわけじゃありませんが、
853 :
801 :01/08/27 01:43 ID:CbLq.TAQ
バイト数を減らすという目的でいろいろ出てますが、 そのためにといってCGIにはかせるHTMLを 最低限のヘッダ要件をも満たしてないものにするのは いかがなものかと思うわけです。
854 :
デフォルトの名無しさん :01/08/27 01:44 ID:tF8/p42I
コピペです 517 名前:夜勤 ★ 投稿日:01/08/27 01:40 ID:??? read.cgi 5.xx の採用の結果(速報) ピーク時の転送量はだいたい 45% 減。 CPU 負荷は、ほとんど導入前と変わらないようです。 すごい効果がでていると思います。 UNIX 板の方々に感謝! あとは mod_gzip がどうなるかが楽しみです。 まだ、導入できると決まったわけじゃありませんが、
>>851 「ネスケ 文字化け」とかでGoogleしてみてくれ
結構有名だからWeb板の住人なら誰でも知ってそうだが
>>853 個人的に同感です。
ところで、そろそろ新スレ?
あと、GetString関係、
>>620 をもとに実装してみます。
それが終わったらコンパイルテスト後にソースアップします。
文字化け多発→リロードしまくり&あちこちで質問される→転送量増加
x-sjisにする必要がないというならx-gzipにも配慮する必要ないと思う
<HTML>削るのは最後の最後の最後の手段だね。
863 :
名無し :01/08/27 01:49 ID:N77k73Ds
htmlやbody削ると見れなくなるブラウザってある? 仕様よりも実装優先で。
865 :
デフォルトの名無しさん :01/08/27 01:50 ID:2MpScvZw
866 :
デフォルトの名無しさん :01/08/27 01:49 ID:jRMpTCc6
<meta>タグは削らなくていいけど、 -printf("Content-type: text/html\n") ; +printf("Content-type: text/html; charset=Shift_JIS\n") ; は入れたほうがいいんじゃない? レスポンスヘッダ中にcharset指定がないと、 2ch以外のShiftJISじゃないページからread.cgiにリンクが張られたとき <meta>タグ無視してNC4.xが判別に失敗するときあるし。
>>860 DTD書いてない時点で、「ブラウザが解釈できる限界まで削る」という
方針でもいいんじゃ無いかと思うけどな。
>>855 httpのヘッダでなく、metaに入れないと化けるって事なら、みつけられん
charsetがShift_JISだから(x-sjisでないから)、ってことなら、了解。
868 :
名無し :01/08/27 01:51 ID:N77k73Ds
夜勤さん、どこへ行っちゃったんだろうか?
>>865 2chのhtmlはxhtmlじゃないでしょ
もしそうならすでに違反しまくり
今さら<HTML>を残したって同じこと
そもそもxhtmlでは<html>と小文字でなくちゃ駄目
871 :
デフォルトの名無しさん :01/08/27 01:52 ID:pckFEAaY
>娘。 日付関数動いた。 compile するのに apache の tarball 要る(configure のため)と思う んだけどどうすればいいかな? 夜勤さんの方でコンパイルするのにそれは辛いでしょ? # ちょっと今から configure 抜きで必要そうなファイルだけで試してみますが
>>867 詳しいことは忘れたけどmetaに入れた場合とHTTPヘッダに
入れた場合でもネスケ3はなぜか動作が違う
まあ苦情が来なければいいかも
874 :
845 :01/08/27 01:53 ID:zjmRlAwo
すんません。やっぱこのスレで出すべき話じゃなかったかも。
>>848 >>838 で古いネスケって書いてあったので、Ver1や2の頃かと思っていました(^^;
Ver4台で起きているのですね(^^;
では、METAタグがよろしいかと。。。
古いバージョンは逆にcharset=Shift_JISはOKなのかな。
(スレ違いすみません)
876 :
デフォルトの名無しさん :01/08/27 01:56 ID:6kfMn/mA
147 名前:夜勤 ★ :01/08/27 01:54 ID:??? これから、全サーバに read.cgi 5.xx を入れに行ってきます。 たくさんサーバあるので、ぼちぼち入れます。 コピペです。
>>872 後で取捨選択、をやろうとして現在Web制作の方が結構大変なことになってるんですが…。
878 :
名無し :01/08/27 01:56 ID:N77k73Ds
>147 名前:夜勤 ★ :01/08/27 01:54 ID:??? >これから、全サーバに read.cgi 5.xx を入れに行ってきます。 >たくさんサーバあるので、ぼちぼち入れます。 だそうです。最終版のプログラムを提示して下さい。
>>875 ネスケ1や2や4は大丈夫。だめなのはネスケ3のみ。
ネスケ3だとcharset=Shift_JISもHTTPヘッダ使うのもだめ。
んと、hoopsもう入れなくなってます(汗 アップできないのでしばらくお待ち下さい。。。 # あぷろだにでもあげようか…
881 :
デフォルトの名無しさん :01/08/27 01:59 ID:ZIaMkoUw
ウダウダレスしてねーで、はやく実行しろよ。 やっぱここはUNIX板とは違うオナ〜ニ板でしかなかったのか・・・
>>859 文字コードはブラウザで強制的に切り替えできるけど、
x-gzipにgzipで返されるとどうにもならない。
883 :
348 :01/08/27 01:59 ID:ynZt.qo6
こっちであげますよ
[email protected] 宛に
id:2chread
pass:readcgi
という内容で添付して送っていただければ
自動的にアップされます
884 :
デフォルトの名無しさん :01/08/27 02:00 ID:pckFEAaY
885 :
369 ◆3XTuRnAc :01/08/27 02:01 ID:xXHglqmc
>娘。さん うちのftpつかってくれて良いですよ。ftpポート開いてます。 210.170.170.131
>>882 ネスケ3もHTTPヘッダやhtmlで指示された文字コードは切り替えられない
887 :
369 ◆3XTuRnAc :01/08/27 02:01 ID:xXHglqmc
>>861 っと、それはbbs.cgiの部分だな。
とりあえずWeb製作のスレで「決定事項」としてまとめとけば、
必要になったらこっちから見に行くんじゃないかな。
889 :
デフォルトの名無しさん :01/08/27 02:02 ID:ZIaMkoUw
890 :
デフォルトの名無しさん :01/08/27 02:03 ID:BrafyimQ
ところで、最新ソースのレポジトリはどこさ?
892 :
348 :01/08/27 02:05 ID:ynZt.qo6
新スレ建てておきました。
896 :
369 ◆3XTuRnAc :01/08/27 02:11 ID:xXHglqmc
うーん、zlib対応がなんかいまいちうまく行かない。 gzprintfが、printfじゃなくてfprintf相当というのが結構面倒(^^;;。 なんか、話を混乱させてしまいそうですし、できる見こみも少ないので 「gzipマージ/zlib利用」はおいらのところでは断念することにします。 みなさま、混乱させてごめんなさい。 # 悔しい・・・。なにより、実現できると思ったことが実現できないことが。
新スレあるけど、報告だけこちらに。 HTML吐き出し部分での改造は、"100"を"100"にしたこと、 JavaScriptにエラーが出ない範囲で"\n"を省略したこと。 read.cgiバージョン表示部分を短くしたこと。 大きなことは、#ifdef GSTR2。 その他は、x-gzipのこと、tm_nowのこと、x-sjisのこと。
898 :
デフォルトの名無しさん :01/08/27 02:13 ID:pckFEAaY
>>896 printf 全置き換えでだめだったの?
899 :
369 ◆3XTuRnAc :01/08/27 02:22 ID:xXHglqmc
>>898 あ、それやってないです。
ちょうどread12が公開された見たいだし、もう一度やってみようかな・・・。
>>896 やったところまで Wiki にでも上げといたらどう?
誰か跡継いでくれるかもよ。
>>886 x-sjisは変わらんが、Shift-Jisは変えられる様だ。
3.01jaを引っ張り出して来て試してみた。
902 :
369 ◆3XTuRnAc :01/08/27 02:26 ID:xXHglqmc
>娘。さん read12.c、バグがあります。 850行目 char *zz_GetString(char *dst,char tgt) ↓ char *zz_GetString(char *dst,char *tgt) 861行目 if(kk[0] == tgt) ↓ if(kk[0] == tgt[0]) じゃないですか?
903 :
369 ◆3XTuRnAc :01/08/27 02:28 ID:xXHglqmc
904 :
デフォルトの名無しさん :01/08/27 02:30 ID:2NFCZnYc
もうちょっと詳しく書くとこんな感じになるかな? ---------------------------------------------------------------------- #include <stdarg.h> #include <zlib.h> : /* 本当はグローバル変数を増やさない方がいいんだけど... printf()があちこちにあるので許してちょ */ typedef int (*zz_printf_t)(gzFile *, cont char *, ...); static gzFile *zz_fptr = (gzFile *)stdout; static zz_printf_t zz_printf = (zz_printf_t)fprintf; : : if (gzip_flag) { : fflush(stdout); zz_fptr = gzdopen(1, "w"); zz_printf = gzprintf; gzsetparams(zz_fptr, Z_BEST_COMRESSION, Z_DEFAULT_STRATEGY); : } : if (gzip_flag) { : gzclose(zz_gzfile); } ---------------------------------------------------------------------- で ソース中の printf("fmt", ...) を (*zz_printf)(zz_fptr, "fmt", ...) に 書き換えて Makefileで LDFLAGS = -s -lz を追加 あっ"-s"ってのは個人的な趣味なんで気に入らなければ外してもいいです
906 :
デフォルトの名無しさん :01/08/27 02:35 ID:yw5i/z86
>>886 >>901 ごめん、Shift_JISだった。
表示コードを変えられなかったが、sjisだと認識するんならOKだし、
不明なコードなら変更できるんだからかまわないんでは。
>>906 確か変えられなくて困った記憶があるんだが…記憶違いかも。
確かめてみる。
>>905 (*zz_printf)(zz_fptr, "fmt", ...)
は
zz_printf(zz_fptr,"fmt", ...)
の方が良いと思われ。(ANSI C には反しない。)
後で元に戻すとき楽だと思う。
910 :
デフォルトの名無しさん :01/08/27 02:48 ID:pckFEAaY
てか、cpp では #define printf(str, ...) zz_printf(zz_fptr, str, ...) みたいに可変引数できるんだっけ?
#define printf(format, args...) zz_printf(zz_fptr, format, ## args) ってのでGNU Cの拡張で「だけ」OKだったはず。
>>908 EUCなのに、x-sjisとかShift_JISとか書いてあって困ったんではないの。
間違ってShift-Jisってやったら変えられたからね。
ま、んなことせんでも引数1〜10個まで#defineすればいっか
915 :
908 :01/08/27 02:54 ID:IuzteUCY
すまん完全に勘違いしてた。 文字化けするのはネスケ2だった。
ネスケ2でShift_JISを指定してもEncodingがWesternに固定されて 変えられない。もちろん文書はシフトJIS。 2.02で確認。
>>915 さすがに、ネスケ2はそこらに残してない。
918 :
デフォルトの名無しさん :01/08/27 03:00 ID:5VdVXYrU
ひろゆきが助けてくださいと言って 西さん一晩考えるって・・・
920 :
- :01/08/27 03:29 ID:q7WWiv5M
全鯖に read.cgi ver5.02 入ってますな。夜勤さん、おつかれさま・・・
922 :
らいがー。 :01/08/27 04:30 ID:R/rjVC1g
あなた達かっこいいよ・・・。
/* <ctype.h>等とかぶってたら、要置換 */ #define false (0) #define true (!false) #define _C_ (1<<0) /* datチェック用区切り文字等 */ #define _U_ (1<<1) /* URLに使う文字 */ #define _S_ (1<<2) /* SJIS1バイト目=<br>タグ直前の空白が削除可かを適当に判定 */ //#define isCheck(c) (flagtable[(unsigned char)(c)] & _C_) #define isCheck(c) (flagtable[/*(unsigned char)*/(c)] & _C_) #define isSJIS1(c) (flagtable[(unsigned char)(c)] & _S_) #define hrefStop(c) (!(flagtable[(unsigned char)(c)] & _U_)) #define _0____ (1<<0) #define __1___ (1<<1) #define ___2__ (1<<2) #define ____3_ (1<<3) #define _____4 (1<<4) #define ______ (0) #define _01___ (_0____|__1___|0) #define __1_3_ (__1___|____3_|0) #define ___23_ (___2__|____3_|0) #define _0_23_ (_0____|___2__|____3_|0) char flagtable[256] = { _0____,______,______,______,______,______,______,______, // 00-07 ______,______,______,______,______,______,______,______, // 08-0F ______,______,______,______,______,______,______,______, // 10-17 ______,______,______,______,______,______,______,______, // 18-1F _0____,__1___,______,__1___,__1___,__1___,_01___,______, // 20-27 !"#$%&' ______,______,__1___,__1___,_01___,__1___,__1___,__1___, // 28-2F ()*+,-./ __1___,__1___,__1___,__1___,__1___,__1___,__1___,__1___, // 30-37 01234567 __1___,__1___,__1___,__1___,_0____,__1___,______,__1___, // 38-3F 89:;<=>? __1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_, // 40-47 @ABCDEFG __1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_, // 48-4F HIJKLMNO __1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_, // 50-57 PQRSTUVW __1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_, // 58-5F XYZ[\]^_ __1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_, // 60-67 `abcdefg __1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_, // 68-6F hijklmno __1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_, // 70-77 pqrstuvw __1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,______, // 78-7F xyz{|}~ ____3_,_0_23_,___23_,___23_,___23_,___23_,___23_,___23_, // 80-87 ___23_,___23_,___23_,___23_,___23_,___23_,___23_,___23_, // 88-8F ___23_,___23_,___23_,___23_,___23_,___23_,___23_,___23_, // 90-97 ___23_,___23_,___23_,___23_,___23_,___23_,___23_,___23_, // 98-9F ____3_,____3_,____3_,____3_,____3_,____3_,____3_,____3_, // A0-A7 ____3_,____3_,____3_,____3_,____3_,____3_,____3_,____3_, // A8-AF ____3_,____3_,____3_,____3_,____3_,____3_,____3_,____3_, // B0-B7 ____3_,____3_,____3_,____3_,____3_,____3_,____3_,____3_, // B8-BF ____3_,____3_,____3_,____3_,____3_,____3_,____3_,____3_, // C0-C7 ____3_,____3_,____3_,____3_,____3_,____3_,____3_,____3_, // C8-CF ____3_,____3_,____3_,____3_,____3_,____3_,____3_,____3_, // D0-D7 ____3_,____3_,____3_,____3_,____3_,____3_,____3_,____3_, // D8-DF ____3_,___23_,___23_,___23_,___23_,___23_,___23_,___23_, // E0-E7 ___23_,___23_,___23_,___23_,___23_,___23_,___23_,___23_, // E8-EF ___23_,___23_,___23_,___23_,___23_,___23_,___23_,___23_, // F0-F7 ___23_,___23_,___23_,___23_,___23_,______,______,______, // F8-FF };
typedef struct { // class... char **buffers; //csvの要素 int rest; //残りのバッファサイズ・・厳密には判定してないので、数バイトは余裕が欲しい int isTeri; // } ressplitter; /* 初期化 toparray ポインタ配列のアドレス buff コピー先のバッファの先頭 bufsize 厳密には判定してないので、数バイトは余裕が欲しい */ void ressplitter_init(ressplitter *This, char **toparray, char *buff, int bufsize/*, bool isteri*/) { This->buffers = toparray; This->rest = bufsize; This->isTeri = true; //レス1をstrstr("<>")した結果を設定すべき *This->buffers = buff; } /* findSplitterの代わり レスを全走査するが、コピーと変換(と削除)を同時に行う p コピー前のレス(BigBuffer内の1レス) istagcut <a href=...>と</a>をcutするか Return 次のpの先頭 non-TYPE_TERIなdatには,"<>"は含まれないはずなので、#ifdef TYPE_TERI は略 */ const char *ressplitter_split(ressplitter *This, const char *p, int istagcut) { char *bufp = *This->buffers; int bufrest = This->rest; while (--bufrest > 0) { int ch = *(unsigned char *)p; if (isCheck(ch)) { switch (ch) { case ' ': //無意味な空白は1つだけにする while (*(p+1) == ' ') p++; if (*(p+1) != '<') break; if (*(p+2) == '>') { if (bufp == *This->buffers) //名前欄が半角空白の場合 *bufp++ = ' '; p += 3; goto Teri_Break; } if (memcmp(p, " <br> ", 6) == 0) { if (bufp != *This->buffers && isSJIS1(*(bufp-1))) { *bufp++ = ' '; } memcpy(bufp, "<br>", 4); p += 6; bufp += 4; continue; } break;
case '<': // 醜いが if (*(p+1) == '>') { //This->isTeri = true; p += 2; goto Teri_Break; } if (istagcut) { //if (*(p+1) != 'b' || *(p+2) != 'r') { if ((*(p+1) == 'a' && *(p+2) == ' ') || (*(p+1) == '/' && *(p+2) == 'a')) { while (*p != '>') { //strchr(p, '>') if (*p == '\0') goto Break; ++p; } ++p; continue; } } break; case '&': if (memcmp(p, "&", 4) == 0) { if (*(p + 4) != ';') p += 4 - 1; } break; #ifndef TYPE_TERI case 0x81: // *"@" //if (!This->isTeri) { if (memcmp(p, "@`", 4) == 0) { ch = ','; p += 4 - 1; } //} break; case ',': //if (!This->isTeri) { p++; goto Break; //} //break; #endif case '\0': goto Break; //break; default: break; } } *bufp++ = ch; p++; }
Teri_Break: //名前欄に','が入っている時にsplitをミスるので、見誤る可能性があるので、 //This->isTeri = true; Break: *bufp++ = '\0'; This->rest -= bufp - *This->buffers; *++This->buffers = bufp; //区切り末の空白を削除 if (*p == ' ') ++p; return p; } void splitting_copy(char **s, char *bufp, const char *p, int size) { ressplitter res; ressplitter_init(&res, s, bufp, size); p = ressplitter_split(&res, p, false); //name p = ressplitter_split(&res, p, false); //mail p = ressplitter_split(&res, p, false); //date p = ressplitter_split(&res, p, LINKTAGCUT && IsBusy2ch()); //text p = ressplitter_split(&res, p, false); //title //IsBusy2ch()を何度も呼ぶのは大きな無駄 }
その他に直す部分は、 先頭のほうに、 #define false (0) #define true (!false) #define LINKTAGCUT true out_html1()(369-) - strncpy(p, BigLine[0], 1024); - p[1024 - 1] = '\0'; - if (!*p) - return 1; - res_split(s, p); + splitting_copy(s, p, BigLine[0], sizeof(p) - 20); + if (!*p) + return 1; out_html()(404-) - strncpy(p, BigLine[0], 1024); - p[1024 - 1] = '\0'; - if (!*p) - return 1; - res_split(s, p); + splitting_copy(s, p, BigLine[0], sizeof(p) - 20); + if (!*p) + return 1; out_html()(421-) - strncpy(p, BigLine[line], 1024); - p[1024 - 1] = '\0'; - if (!*p) - return 1; - res_split(s, p); + splitting_copy(s, p, BigLine[line], sizeof(p) - 20); + if (!*p) + return 1; hrefStop() マクロで定義しなおしているので、 #if 0 #endif ででもはさんでくれ(コンパイルエラーが出る)。 res_split()とfindSplitter()も必要なくなるが、エラーにはならないので。
わかると思うけど、
>>925 の
case '&':
の下は、当然、
if (memcmp(p, "&", 4) == 0) {
ね。
BadAccessってさ、なんでif文を切ってるの? コンパイルした時にダイナミックステップが多くなるじゃん。 caseにしろよ。その方が高速化するぞ。