1 :
名無し娘。 ◆vP.bOZFQ :
01/09/09 20:38
2 :
デフォルトの名無しさん :01/09/09 20:45
>>2 ・s[2]は投稿日なので偽ストッパーは掛かりません。
・スレスト解除ならストッパーのレスも消されるはずです。
したがって問題ないと思います。
someReplaceの必要性について。 someReplaceは、non-TYPE_TERIのときに ・@+`を , へ置換 ・&ampを&へ置換 するために使われていますが、どちらもressplitter_split内で すでに行われており、不要です。とくに後者は二重にかける とかえって表示がおかしくなります。 out_htmlx内のTYPE_TERIによるconditionはnon-CUTRESLINK 時代の遺物であり、conditionごと削除してしまって構いません。
>>3 >・s[2]は投稿日なので偽ストッパーは掛かりません。
ぶラジャー。
>・スレスト解除ならストッパーのレスも消されるはずです。
>したがって問題ないと思います。
そうとも限らない。
鯖移転でスレスト解除となった場合はストッパーレス付きのまま。
>>5 doReplace, someReplaceバッサリ消した。
>>7 >そうとも限らない。
>鯖移転でスレスト解除となった場合はストッパーレス付きのまま。
それは本来書き込めるべきではないのですから、
自主規制の意味でもフォームは必要ないと思います。
>>9 いや、たとえば重複でスレストになっていて、鯖移転後のシャッフルで
本スレの方が順位が下になってスレ圧縮がかかり、本スレが倉庫行き
になった場合、スレスト解除になっている重複スレを本スレとして復活
させたい場合があるだろ。(実際そうなった板がある)
>>10 ソースを見る限り最終レスがストッパーかどうかしか見ていない
ようなので、そういう状態で続行しているスレならちゃんと
フォームはでると思います…が確認してもらいたいので可能なら
スレのURLきぼん。
今後そういう状態になった場合はスレを立て直せばいいですし。
>>11 >今後そういう状態になった場合はスレを立て直せばいいですし。
過疎板でそれはきついな…
ちなみに、その板はいま見れないので確認不能。
2ch.server.ne.jpからebiに移ったいくつかの板で見れると思う。
最終レスしかチェックしないのはかまわなくて、スレスト解除がかかった後に bbs.cgiが許容しているのにread.cgiがFORMを出さないせいで実質的に スレストのまま、という状態が2chの仕様としてどうか、って事なんだけど。
>>15 解除されているかどうかはどうやったら分かるのかな。
>>15 それは本来書けるべきでないものだから修正するとしたら
bbs.cgiのほうを書けないように修正するのが筋かと思われ…
19 :
デフォルトの名無しさん :01/09/09 22:53
どんどん板が復活しております。わーい。わーい。
>>23 >そんな板orスレッドないです。
となる。
read.cgi?bbs=net
(keyを書かない)で出したときと同じ。
>>17 いや、本来は書けるべきなんだよ。副作用とはいえ解除されてんだから。
>>25 解除されるべきでないんだから書けるべきでないと思う。
「スレスト解除がかかる」とはどういう状態なのかを整理した方がよろしいかと。 私も自信がないので言いっぱなしごめん。
28 :
◆D69Zsbfg @夜勤 ★ :01/09/10 01:05
どんなもんでしょか? 区切りのいいところですか?
いいんじゃないすか?
了解ですー 今日は piza2 で行きます。
>>32 変わったのは
read2ch.h, read.c, r2chhtml.h, datindex.c, Makefile かな。
ふむー なぜか、piza2 で zlib のコンパイルが通らない、、、 Makefile:42: *** missing separator. Stop. なんて言われちゃいました。 kaba では ok だったのに、、、
>>34 そこでエラーってのは変ですね。
化けてるとか? (^^;
最新のread.tgzから展開してやるとどうでしょうか?
ってもしかしてmakeがgnu makeじゃないとか…OSからして違う? (^^;
いやん、すまぬ、私のミス makefile まちがった。 read.cgi 用のを入れてた。
>>38 またCGINAMEをread5x.cgiにしといてくださーい。
>>26 >>10 のような状況が考えられるので、解除されるのが必ずしも
間違いとは言えない。
それで運用された実績もあるし。
cvsでtag打っときました( YAKIN20010910 )
43 :
デフォルトの名無しさん :01/09/10 01:31
>>46 いや、「全部読む」の増加対策で、今見えてる範囲外の
リンクは消さないのが正しい。
「新レスの表示」サイコー
49 :
デフォルトの名無しさん :01/09/10 01:39
1は必ず表示した方がいいと思った。
自分の行ってるスレのアドレスが出てちょっとうれしかった。 それだけ(藁
勘違いだったか・・・すまんです。
サイズ超え警告が正常に働いてることはとりあえず確認できた
ごめん、おかしいね。1が表示されてない。 こういう場合&nofirst=trueが付いてると上の「1-」とリンク先が 共通にならなくてキャッシュの効果が落ちると思うけどどうだろ。
>>56 それはキャッシュの利用効率を高めるためのCHUNK_ANCHOR
の仕様。でもせっかくCHUNK単位でレスを区切っても&nofirst=true
が付いていては意味がないと思われ
>>58 index.htmでの表示と違うのは何とも・・・
操作と結果は統一して欲しい気が。
スレ違いだったらごめんなさい。
>>59 それはテレホタイムにリンクをカットしてる時点ですでに
違ってるわけだし。
bbs.cgiのほうを修正できないとなんとも。
とりあえず今日わかったことは ・トップの1-51-等の表示のために、CHUNK_ANCHORはONにしたい ・>>xxxのリンク先がCHUNKEDになるのは嫌だ。 ↓ 仕方がないから、新しいcondition(CHUNK_RESLINK)をつけ、 >>xxxのリンク先をCHUNK単位に直すのはCHUNK_RESLINKの時だけにしよう CHUNK_RESLINKがdefineされてCHUNK_ANCHORがdefineされてなかったらエラー。 (CHUNK_ANCHORは再定義できるけど、CHUNK_NUMの再定義は数値が必要だから) ・レス数とサイズの警告は、両方出てもよい。 ・1000 Overの場合は、サイズ表示はいらない。 ↓ #ifdef CAUTION_FILESIZE の直後に if (line <= RES_RED) { #endif の直前に } NAME_ANCHORは、あってもいいのかなぁ
62 :
デフォルトの名無しさん :01/09/10 03:16
BadAccessがrawmodeのときでもツールを弾いている気 がするんですが、ツールに読ませるためのモードが ツールを弾くのはまずいのでは…。
63 :
デフォルトの名無しさん :01/09/10 03:17
「名前:」をとっとと消せよ
piza2 に全面的に導入しました。 ver 5.20 にしました。
>>xxxのリンク先を広げるconditonは、CHUNK_ANCHORより CREATE_NAME_ANCHORであるべきではないでしょうか。 そうすればconditionを追加する必要もありませんし、 >>xxxのリンク先を広げる必要がなければname anchorも いりませんからそのほうが合理的だと思います。
よく考えるとCHUNK_ANCHORが有効でないと >>xxxのリンク先を広げる意味もないか…。
CHUNK_ANCHORのとき、上に表示するリンクは範囲外の ものだけにしたほうがいいと思う。 (たとえば「レスを全部読む」の場合にはぜんぜん必要ない)
それから現在の表示範囲より下のCHUNKへのアンカーは 上ではなくて下に表示したほうがいいと思うんですが…。
MAX_FILESIZE_BUSYが正式に採用されるまでの間、 dat_read()の最初 #ifndef MAX_FILESIZE_BUSY if (zz_fileSize > MAX_FILESIZE) html_error(ERROR_TOO_HUGE); #else if (zz_fileSize > MAX_FILESIZE || (isbusytime && zz_fileSize > MAX_FILESIZE_BUSY)) html_error(ERROR_TOO_HUGE); #endif 正式にヘッダに入ったら、 Settingsにも加えたほうがいいでしょう。 (メンバー変数、初期値、#undef + #define、config.txt)
ちょっと 質問でーす
teri にも ver 5.20 いれたんですけど、
>>12 というのだけを
一日中有効にするのは、どうすれば良いのでしょうか?
つまり >>レス番 の機能を teri サーバだけは一日中 有効にしたいのです。
>>70 read2ch.hの
#define LINKTAGCUT
をコメントアウトすればいいのではないかと…
ごめんなさい、 #define LINKTAGCUT (0) に変更、の間違いでした。
>>72 さんきゅです。
さっそく teri でやってみます。
>夜勤さん Ver5.20と見た目、機能はほぼ同じで、 ・>>nnのリンク先が広がるのを避けたい場合 read.cの440行目付近の #if defined(CHUNK_ANCHOR) && defined(CREATE_NAME_ANCHOR) を #if 0 に変えるとよいです。 LINKTAGCUTは、例えば、 /accuse/SETTING_R.TXTに LINKTAGCUT=0 と書いて置いておく方法もあります。
どもです。
削除依頼板は、>>xx が効かないと、効率が悪いらしいです。
とりあえず、今日は
>>73 をやりました。
批判要望よりコピペ 697 名前:名無しさんの声 投稿日:01/09/10 04:20 ID:mhbyzSZQ 「新レスの表示」の nofirst=true は無いほうがいいな
79 :
デフォルトの名無しさん :01/09/10 08:59
ブランチは作らないの?
read.cgiではすでに行っているんですが index.htmlの方でもトップのJavaScriptのところで ---------------------------------------------------------------------- function ol(e){ var N=getCookie("NAME"),M=getCookie("MAIL"),i; with(document) for(i=0; i<forms.length; i++) if(forms[i].FROM&&forms[i].mail) with(forms[i]){FROM.value=N;mail.value=M;} } onload=ol; ---------------------------------------------------------------------- というのを入れて その代わり投稿フォームのところでのdocument.write()を やめてはどうでしょうか? 一番上の NameMail = "<INPUT TYPE=text NAME=FROM SIZE=19 VALUE=" + getCookie("NAME") + "> E-mail:<INPUT TYPE=text NAME=mail SIZE=19 VALUE=" + getCookie("MAIL") + ">"; と 各投稿フォームのところでの <SCRIPT Language="JavaScript"><!-- document.write(NameMail);// --></SCRIPT><NOSCRIPT></NOSCRIPT> が削れる分 トータルでは節約になると思いますが
rawmodeのときは、圧縮に対応していないクライアントは 弾くようにしませんか? rawmodeで非圧縮のデータを返すメリットってほとんど ないように思うのですが…。
全レス表示規制中に「次の100レス」でたどっていくと、 表示範囲が 1-100 100-199 199-298 : というふうに変化していきますが、CHUNK_ANCHORとの 噛み合わせが悪いので 1-100 101-200 201-300 : と増えていくようにしませんか? (というかそもそも「次の100レス」の代わりに 「101- 151- 201-…」を下に持ってくればいいと思う)
84 :
デフォルトの名無しさん :01/09/10 10:45
>>84 #ifdef USE_PATH
/* スレ一覧を取りに逝くモード */
if (1 <= path_depth && path_depth < 3) {
sprintf(fname, "../%.256s/subject.txt", zz_bs);
zz_fileLastmod = getFileLastmod(fname);
}
#endif
こんなコードが入ってる割にこれ解析してないようだな。
これが原因か。
↓こういうのって <a href="read.cgi?bbs=tech&key=998997848&st=1&to=50">1-</a> <a href="read.cgi?bbs=tech&key=998997848&st=51&to=100&nofirst=true">51-</a> <a href="read.cgi?bbs=tech&key=998997848&st=101&to=150&nofirst=true">101-</a> <a href="read.cgi?bbs=tech&key=998997848&st=151&to=200&nofirst=true">151-</a> <a href="read.cgi?bbs=tech&key=998997848&st=201&to=250&nofirst=true">201-</a> <a href="read.cgi?bbs=tech&key=998997848&st=251&to=300&nofirst=true">251-</a> ↓こうすると <form><select onchange=' var st=parseInt(this[selectedIndex].text); location="read.cgi?bbs=tech&key=998997848&st="+st+"&to="+(st+49)+"&nofirst=true"; '> <option>1- <option>51- <option>101- <option>151- <option>201- <option selected>251- </select></form> スリム化できるような気がする 現在表示中の範囲の記事番号のところは <option>でselectedを入れておくと
PATH仕様が標準になってくれればなー。
<a href="1-50">1-</a>
<a href="51-100">51-</a>
<a href="101-150">101-</a>
<a href="151-200">151-</a>
<a href="201-250">201-</a>
<a href="251-300">251-</a>
それでもFORMにしたほうが若干小さくなるかな。
ただFORMだと
>>67 -68
>>83 のような工夫がしづらくなる。
>>82 の修正
BadAccessの最初に
if (rawmode && !gzip_flag)
return 1;
を追加。
>>88 if (rawmode)
return !gzip_flag;
のほうがよくないかな?
あ、 #ifdef GZIP #endif で囲む必要があるか。
>>85 ・・・USE_PATHをundefすれば根本解決しそうな、、、
>>85 と
>>89 あてた(85は#if 0にしただけ, 89はRAWOUTでも囲んだ)
>>92 USE_PATHしたときだけこんな処理が入るほうが変だと思うけど…
そもそもこのコードいつ誰がどういう目的で追加したの?
>>94 そのコードの下のほうでインデックス処理とかがあるようだけど
そっちは#if 0 /* #ifdef USE_PATH */で無効化されてたのに、
そのためにsubject.txtを読むように準備する部分が生き残ってたようだ。
こっちだけ殺して
>>85 は殺してなかったわけね
#if 0 /* #ifdef USE_PATH */
else if (path_depth == 2) {
if (zz_ky[0] == '-')
dat_out_subback(); /* スレ一覧 */
else
dat_out_index(); /* 板ダイジェスト */
}
#endif
板ダイジェストにcondition付けませんか? #if 0で無効にしてるのって気持ち悪い
>>97 いらんだろ、
もともと余計な機能だったんじゃないか?
config.txt ×DIGEST 板ダイジェストを有効にする。 USE_PATHをONにしたときにのみ使用可能。 /test/read.cgi/tech/ 板ダイジェスト(index2.html相当) /test/read.cgi/tech/- 全スレ一覧(subback.html相当) read.cへの変更点 #if 0 /* #ifdef USE_PATH */ ↓ #if defined(USE_PATH) && defined(DIGEST)
>>98 そうだね。じゃあ
#if 0 /* #ifdef USE_PATH */
となってるconditionはバッサリ削除
digest.c digest.hも削除。Makefileからも取り除く
ということで。
>>99 -100
すでにMakefileのOBJSにはdigest.oは入ってなかったみたいだ。
従ってこのままではたとえconditionにしても使えん。
本当だ。SRCSには残ってるのに。 じゃあやっぱりバッサリ削りましょう。
>>94 cvs見ると、6411さんが8/30に作ったようだが
>>85 は、#if 0で囲うと、初期化されていないメモリを参照して、どうなるかわからない。
if (1 <= path_depth ...) {
#if 1 /* #ifndef USE_PATH_DIGEST */
html_error(ERROR_NOT_FOUND);
#endif
・・・
}
って感じにしてくれ。
理由は、皆が言うように、後半で参照されている部分が#if 0で(仮に)殺してあるため。
Expire関係の#if の#else節も生きているようだが、
これもいらない。
もうひとつ、細かいことだが
mainの最初の方に
if (st == 1 && to == 1)
zz_nf[0] = '\0';
というのがあるが、
CHUNK_ANCHORで1-50へのリンク(>>nn)にnofirst=trueがつくことを考えると、
if (st == 1) /* レス1から表示する場合はnofirst=falseにする */
zz_nf[0] = '\0';
の方が良いだろう。
前スレですでにこういう話が出てた。 850 名前:デフォルトの名無しさん 投稿日:01/09/09 03:27 >♯6411氏 digest.[ch]いらなくなったのなら、MakefileのSRCSから消してちょうだい。 あと、datindex.cの中身全部を#ifdef USE_INDEXで括っておくように。(w
>>104 >
>>85 は、#if 0で囲うと、初期化されていないメモリを参照して、どうなるかわからない。
これはどういうこと?
fnameもzz_fileLastModもその前後で設定されているが。
ダイジェクト削除するならr2chhtml.h後半の /* スレダイジェスト用HTML */ /* スレインデクス用HTML */ も不要。
>>106 失礼。その通りだった。
後でエラーになるね。
>>52 修正
#ifdef CAUTION_FILESIZE 直後の行を変更
if (zz_fileSize > MAX_FILESIZE - CAUTION_FILESIZE * 1024) {
↓
else if (zz_fileSize > MAX_FILESIZE - CAUTION_FILESIZE * 1024) {
>>104 でも言ってるけどEXPIRESは全廃したんだから
これはいらないんじゃない?
char expires_str[1024];
#if 0
/* XXX これはウソ、Expires: は、
現在時間を基準にすべきである */
get_lastmod_str(expires_str, zz_fileLastmod + 5);
#else
{
/* ためしに廃棄期限をちょっと先に設定してみる */
time_t nw;
time(&nw);
get_lastmod_str(expires_str, nw + 10);
}
#endif
>>111 expires_strの宣言とともに削除した
>>104 の最後の修正も当てたほうがいいと思うんだけどどう?
当てるなら、get_path_infoの最後のほうの
/* nofirstの仕様をごまかすためのkludge XXX */
if (!zz_nf[0])
strcpy(zz_nf,
(atoi(zz_st) == 1
? "false"
: "true"));
こっちは不要になる。
いやごめん、やっぱり必要。
r2chhtml.hで ./%s? (←%sにはCGINAMEが入る) となってる箇所がいくつかあるけど、「./」は不要。 消せば多少は転送量の節約になる。
imode=true&ls=11や imode=true&st=nnで nn+RES_IMODE==lineMax-1だった場合に RELOADLINKが表示されずに「次の10レス/最新レス10」が表示されるバグの修正 out_html()の最後、 if (out_resN > RES_IMODE) { のすぐ下に if (lineNo != lineMax) (その下のpPrintfをifの条件下に入れる) dat_out()のループ内の判定がisprintedと重複していることもあり、 修正ついでに全体を少し整理。 int dat_out(int level) { int line; int threadStopped=0; char *s[20]; char p[SIZE_BUF]; for (line = 0; line < lineMax; line++) { int lineNo = line + 1; if (!isprinted(lineNo)) continue; if (out_html(level, line, lineNo)) { line++; break; /* 非1が返るのは、エラー時とimodeのMaxに達した時 */ } if (lineNo==1 && is_imode() && nn_st==1) ++out_resN; } out_html1(level); /* レスが1つも表示されていない時にレス1を表示する */ ・・・ 最後の #ifdef RELOADLINK 内部の lineLast(2箇所)をlineに変更 ・・・ }
コメント違ってたー ×非1が返るのは ○非0が返るのは コメントの間違いといえば、 isurltailのstrncmp(""")は、 '"'で囲まれたURLの末尾判定だと後で気がついた。 恥ずかしいので修正してもらえるとうれしかったり。
isurltail →geturltaillen だし。逝ってきます。
>>120 -122
当てた
一時2800行あったread.cは、現在2166行。だんだん減ってるな(笑)
#if 0の整理(ダイジェスト関連以外) #if 0 if (!is_imode()) { /* no imode */ pPrintf(pStdout, "<DL>"); } #endif が2箇所あるけど、すでに同等の処理はhtml_head()に吸収 されているので不要。いい加減削除したほうがいいと思われ #if 0 /* put 2048byte */ /* もう要らないんじゃないかな、 XXX 追試求む */ while (whitespace--) gzputc(pStdout, ' '); #endif 頭切れの報告がないのでそろそろ削除しても大丈夫だと思われ
今のget_path_infoだと /4 (st=4&to=4) /4- (st=4) /-6 (to=6) /4-6 (st=4to=4) しかないんだけど、 /. (nofirst=faluse) /5とかでnofirst=trueを基本にしたいから逆条件 /=10 (ls=10) /-10ってls=10扱いって話があったはずなんだけどな /i (imode=true) path_infoでimodeは実装不充分だけどね なんてのを追加し、かなり自由フォーマットで書けるようにしてあるんだけど commitしていいかな。 .や=について意見求む。
細かいことひとつだけ。 <r2chhtml.h> #define R2CH_HTML_T_RELOAD(path) \ "<hr><center><a href=\"" path "\">新レスの表\示</a></center><hr>" を #define R2CH_HTML_T_RELOAD(path) \ "</dl><hr><center><a href=\"" path "\">新レスの表\示</a></center><hr><dl><dt><dd>" にした方が、見た目が気持ちいいと思います(<hr>〜<hr>が<dd>にかかっているので 何となく気持ちが悪くて)。 HTML的には #define R2CH_HTML_FOOTER \ "</dl><p>" CGIVER "</body></html>" の</dl>をread.cの #ifdef RELOADLINK if (!level && lineMax == lineLast) { html_reload(lineLast); /* Button: Reload */ } #endif の前あたりにもってきた方がすっきりしますが、どちらがいいかはおまかせします。
もちょっと。
>>77 同感です。あと、>>xx でchunk単位で50表示されるのは、若干のキャッシュ効果が
あるのかもしれませんが、それでも邪魔な気がします。
>>78 なにかと nofirst=true になっているのだけど、ない方がいいような気がしますね。
# 1も表示してくれた方がうれしいということです。
# スレ違い抑制のためにも役立ちますし。
>>83 賛成。
もいっこ。 target="_blank" 消えちゃってますね。すごく不便(^^;
>>125 /=10 でls=10扱いってのはいいね。
でも . とか i ってのは保留にしたいところ?
>>129 .(nofirst=false)の扱い次第でプログラムの方針がかわるので
/10-20とかでnofirstをどうするか決めないといけない。
/10 (nofirst=true)
/10-20 (nofirst=false) #ここが問題
/100- (nofirst=false) #ここも同様
/-100 (nofirstはどうでもよい。1があるから)
/=10 (nofirst=false)
/n (nofirst=trueを強制)
/. (nofirst=falseを強制)
うーん。/10でnofirst=trueにしたいから変になってるなあ。
リモホばっちり出てた(;´Д`)
それと、
>>132 の不具合は
r2chhtml.hの
#define R2CH_HTML_HEADER_1
#define R2CH_HTML_IMODE_HEADER_1
#define R2CH_HTML_HEADER_2
#define R2CH_HTML_HEADER_2_I
とかだね。
直せる人が見ればすぐ直せると思う。
CHUNKしてあっても、関係ない後半部分に追加レスがあるだけで、 If-Modified-Sinceが成立してキャッシュが無視される問題、 ETagを吐くことで対処できないかな。 昔調べたら、ネスケ4.70には無視されたけど、 IE5.01は次回にIf-Modified-SinceとIf-None-Matchを両方つけてきたと思った。
rawモードでサイズを指定する意味って何なんでしょう? 無条件に指定レスのdat行を返してくれたほうがよっぽど便利だとおもうのですが。 rawモードのおかげでdatサイズの管理が不要になるかとおもいきや、そうはなりません。 唯一の意味は、上流でのあぼーんを検出できることですが、あぼーんの検出が ユーザーにとってメリットであるかは微妙なところです。 また、検出したからといって、全てのdatを読み直すのは無駄のように思います。
139 :
デフォルトの名無しさん :01/09/11 01:22
>>137 やっぱり投稿日フィールドデコードしちゃうべき?
秒が入ってないのが痛いけど…
デコードしてその一番後ろのレスの日時をLast-Modifiedに出せば
かなりいい動きしそうな気がするんだけど。
1分以内の複数の発言は仕方ないからひとつあたり1秒後ってことにして。(笑)
>>138 途中があぼーんされたことをサイズの違いから判別するためです。
>>140 脊髄反射で書いてしまった…(鬱
>>138 >また、検出したからといって、全てのdatを読み直すのは無駄のように思います。
適切に同期を取る手段がない以上、仕方ないんじゃないでしょうか。
bbs.cgiにも手を入れられて、ファイルフォーマットなども変更できるのであれば
話は簡単になるんですが…
cvs鯖ディスクフル起こしてません?
Apache的にはETagは etag = ap_psprintf(r->pool, "%s\"%lx-%lx-%lx\"", weak, (unsigned long) r->finfo.st_ino, (unsigned long) r->finfo.st_size, (unsigned long) r->mtime); ってな感じで作ってるみたいね ただETagをCHUNK単位で有効に生成させるには 例えば指定範囲の記事テキスト等のハッシュ値を計算するとかいうことになるけど これだと日付のパースの方が軽いのかも知れない...... ETagをハッシュ値で実装するメリットがあるとすれば 日付のパースだけでは 検出できないあぼーんがわかるということか
CUT_DATE_STRINGはON固定でいいと思う。 つーかR2CH_HTML_DATEの定義を変えるだけのcondition なんて必要ないでしょ。
>>138 ,141
raw=nnn.0 の時にあぼーん検出機能を無効にした。
あぼーん検出を積極的に使ってもらう意味で、あえて.0を必要とすることにした。
あぼーんの扱いは、ツール作者の方針次第になった。
PATH_INFOは、まだ表向きの機能ではないので、
>>130 を実装した。
ほとんどが機能強化で、後は/10や/10-20でnofirstをどうするかだけなので。
/=10 (ls=10)
/n (nofirst=true)
/. (nofirst=false)
/i (imode=true)
ただ、imodeの時をちゃんとしないとPATH_INFO自体を正式機能にするのに
問題がある。(?imode=tureつけちゃえば、5.20でも同様の問題)
i-modeのときは read.cgi/i/板名/キー/ ということにしてはいかが? /i/の位置はここじゃなくてもいいけど
>>147 そういうことではなくて、
imode用の出力形式としてPATH_INFO用が用意されていないんです。
read.cgi/tech/998997848/read.cgi?bbs=tech&key=998997848&st=10&to=20&imode=true
なんてものが;_;
read.cgi/tech/998997848/i10-20
というような形式にそれぞれやらないといけない。
批判要望で出ていた意見。俺も「新レスの表示」はわかりにくいと
思ってた。
166 名前:名無しさんの声 本日のレス 投稿日:01/09/11 04:25 ID:07YBBjEM
>>161 なるほど、未読レスの表示ね。
だったらそう書けっての。
新レスの表示なんて分りづらいことこの上なし。
>>149 妙に省略した言葉にするからわかりずらいんだよね。
いっそ、最後の番号からってことだから、
149-
とかにしてしまえばいいのでは。文字数減るし。
>>146 透明あぼーんのときはどうするの?
つーか、rawモード転送に、rsync的な手法は使えないかな?
あぼーん検出を無効にしたということなんだから 当然透明も、だと思われ
過去ログdatやhtmlの位置を#defineで変更できるように しておきませんか? read.cgi 5.20が導入されてる鯖で、倉庫落ちしてhtml化 待ちしているスレが削除されたと勘違いしているカキコを 要望板でときどき見ます。
>>151 だから、sizeを積極的に使えと。
sizeを使わないツールは、削除があった時に正しいデータを取得できない。
そこんとこよーく考えてツールを作りなさい。
今までのツールだって、ファイルのサイズかなんかを使ってサイズ管理
してたんでしょ。
ツール作成を楽にするために付けたんではなく、部分転送もgzip化して
転送量削減のために付けた機能なんだから。
>>151 rsyncってCRCかなんかで、既存部分の同一性チェックしてるんじゃなかったかな。
sizeじゃなくてCRCにしますか?
nnn.sizeがnnn.CRCになった方がいいですか?
あぼーん検出の確実性は増えますが、サーバーの負荷も増えるし、
ツールのプログラム量も増えますが。
>>146 >>154 -155
話を蒸し返すようですが、あぼーん時はどんなツールに対しても強制的に
あぼーん済ファイルを全部転送しなすほうがよいと思うのですが。
あぼーん時に「正しいデータ」を取得させるべき動機は、読み手の利益のためというよりも、
2ちゃんねる本体で削除されたものはツール側でも削除されるべきであるという
ポリシーによると思うからです。透明あぼーんは例外的だし。
.dat直読み/直アクセスが不可になることも視野に入っているので、read.cgiが
あぼーんに敏感であることは、専用ツールに対してあぼーん強制をする最良の
手段となります。
>>156 同意。sizeを使わない機能は無効にするかせめて
conditonで括るに一票。
>>156 うっ、本当にCRCにしたくなる話だ。
強制にもどすのは、&& raw_lastsize > 0を取るだけなんで一瞬です。
とりあえず、説明つきでコメントにしておきましょう。
ソースに運用ポリシー書いとかないと、理由を忘れていじっちゃいますから。
>>158 でもCRC実装したら それETagに流用できそうだね
っていうか もしそうなら専用ツールでもETag使ってもらうようにすればいいのか...
>>126 -128 宣伝しとこ(笑 特に
>>128 。
>>158 お疲れさまです。
4bit CRCくらいで試用してみるのもよさそうですね。
# 1bit でもいいか?(笑
>>161 CRC32なら、手持ちのソースがあるんですぐなんですけど〜。
算出可能にしておいて、どう使うかを後回しにしておきますか。
>>158 ちょっと手間取り中
ついでに書式ミス等の時に+OKを返してしまうのを修正している。
rawoutの修正終了。
>>163 CRC = (CRC
>>8 ) ^ crc32_table[(CRC&0xFF) ^ *data++];
ループ内はこんなコードなので、bit数が増えたからといって
そんなに重くはないと思いますが。
tableは最初に初期化してますが、データにしちゃえばいいし。
減らすなら8bitかな。16bitは効率悪そう。
crc32算出は、zlibにいた。(w
>>161 表示外に跳ぶ時にtarget="_blank"を付けた。
condition USE_CHUNK_LINK を追加し、
CHUNKへのリンクと従来方式を選択可能にした。
とりあえず、従来方式ってことで。
今日はここまで。
う、一晩たったのに相手してもらってない。ちょと悲しい。
動作確認はかなり厳密にやったし、
自分でコピペをCVSのソースに反映させても動くことを確認したのに。
(WinCVSの使い方をよく知らない俺が悪いんだけど)
それと、テレホタイムに&ls=101をつけると、
>>120 と同じ現象が起こることを確認。
>>120 と同じ対処でもいいけど、
表示レス数が限界に達した時に、out_html()内でレス表示後に
(最終レスかを調べずに)「これ以上表示できません」と表示するのが問題なので、
レスを表示する前に判定し、オーバーしてたら注意だけ表示して戻る等、
呼出側(dat_out)とあわせて、もっとうまく解決したほうがいいかも。
zlibのを使うのなら crc32よりadler32の方が軽いみたい % time ./test adler32 adler32 = c23cf731 1.18u 0.00s 0:01.14 103.5% % time ./test crc32 crc32 = 7949b790 5.34u 0.01s 0:05.31 100.7% % cat test.c #include <fcntl.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/mman.h> #include <sys/stat.h> #include <zlib.h> #define FACTOR 65536 int main(int argc, char *const *argv) { if (argc < 2) fprintf(stderr, "Usage: %s function\n", *argv); else if (!strcmp("adler32", argv[1]) || !strcmp("crc32", argv[1])) { int i, fd = open(*argv, O_RDONLY); void *mmptr; uLong val; struct stat st; uLong (*fn32)(uLong, const Bytef *, uInt) = !strcmp("crc32", argv[1])?crc32:adler32; if (fd < 0) return -1; fstat(fd, &st); mmptr = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0); if (mmptr == MAP_FAILED) {close(fd); return -1;} for (i = 0; i < FACTOR; i++) val = fn32(fn32(0, NULL, 0), mmptr, st.st_size); munmap(mmptr, st.st_size); close(fd); printf("%s = %lx\n", argv[1], val); } else fprintf(stderr, "%s: Illegal function.\n", *argv); return 0; }
>>166 とりあえず
>>137 はcrc32/adler32等によるチェックサムを実装することに
なれば そのスキームとしてETagを使うことが考えられるね
ETag話は続きそうなので、思いついた後に考えた事をいくつか。
(
>>134 は・・・)
まず、負荷の点で、
UAがIf-None-Matchをつけてきたら、
最初に(gzipとか呼ぶ前に)ETagを調べるためだけに
datを読み、レスを走査する必要があり、これがどうなのかな、と。
まあ、304を返せないなら、どうせ全体を返す事になるから、
それと比べればぜんぜん平気なんだけど、
変更された場合には、その後もう一回出力しなくてはいけない。
それと、LastModifiedの返し方によってはLastModifiedが変更されたのに
ETagが変更されないケースが多発するわけで、
下手するとLastModifiedとNotModifiedを両方出力してしまい、
その場合はapacheがどうするか、それを受けたUAはどう扱うか。
両方出力しないようにするには、ソースの変更が結構増えそう。
それから、ETagに反応してくれるUAってのはどのくらいなのかなと。
IEが反応してくれるから、やる価値はあるけど、
反応してくれなそうなUAなら、ETag自体を吐かない手もあるかなと。
もひとつ、基本的にCHUNK_ANCHOR時に有効と考えるんだけど、
(もちろん、それ以外でも有効だけど)
レス自体に変化がなくても、総レス数等が変わり、
「新レス」「901-」等が更新されない場合が出てくるわけで。
その場合、ある程度レスが増えたら値を変えてModified扱いしないと
あまりうまくないわけで、そのあたりをどうするか。
もちろん、1-150等の場合の時間帯制限も考えると、
URIで指定されたレスではなく、
実際に出力するレスから算出しなくてはいけないし。
それに、いろいろ見ると、CHUNK_ANCHOR自体が賛否両論な気がするし。
>>164 何bitにせよ.datの頭から積算するんだから、確かにあまり変わらないかもですね。
でもなんか、もったいない気がしちゃって(笑
>>165 ありがとうございます。
>>166 >>168 >>135 も | - -) さんがやってくださったようですよ(^^
>>134 方向性は賛成です。余力がなくお役に立てないですいません。
>>169 >それに、いろいろ見ると、CHUNK_ANCHOR自体が賛否両論な気がするし。
CHUNK単位にあまりこだわらない方がいいように思います。
あくまでユーザーインタフェースとして、50なり100なりで区切ったリンクを
提供するにとどめた方がよいかと。
# その意味では、冒頭のCHUNK単位のリンクも target="_blank" で提供した方が
# よいのかもしれません。「前のxxレス」「次のxxレス」というのは、ページを
# 捲っていく感覚だけれども、CHUNK単位の参照は >>xxx のリンクを参照する
# ときの感覚に近いような気がする。
>>166 申し訳ない。
だが、あれだけの分量を検証しながらマージするのは正直言って面倒。
ここにソースを書きこむんじゃなくて、どこかにアップしてくれ。
ftp://210.170.170.118/incoming/ は...使えない?IP変わったのかな。
あと不具合修正は構わんが、機能的な変更(50- 100-の所)は、選択可能に
作って欲しい。
うーん、眠い〜。
>>169 If-None-Matchに対応してチェックサムを計算するとすれば
とりあえず dat_read() は二回目に呼ばれた時は すでにBigBufferが
代入されている状態なので その時は何もせずにそのまま帰るようにすれば
いいんでしょうかね でETagの比較をする時に dat_read() を呼んでしまう
ということでいいのでは...と思います(よく見るとdat_read()及びそこから
呼ばれるgetLineMax()では 実際にはパラメータの内st,to,lsはファイル読込
自体には影響しない模様) Last-Modifiedの比較をしてる部分にETagの
比較部分も突っ込んでしまえば 304なのにLast-Modifiedも吐いてしまうと
いうことは避けられると思います
あとネスケはETagに対応してないみたいですが 専用ツールについては
作者さんたちにお願いしてETag対応にしてもらうと(w
話は変わって
>>167 の付け足し OpenSSLで MD2/MD4/MD5/SHA1 出すと
いうのをやってみた 結論的には......これじゃダメだね(w
% time ./test md2
...メチャ遅くて終わるまで待てなかった(w
% time ./test md4
md4 = 2882041ac5dabc1417ee2d6af4359a7f
4.75u 0.01s 0:04.73 100.6%
% time ./test md5
md5 = ceeaea6c91f07e47c0c4828bc481901f
6.42u 0.01s 0:06.44 99.8%
% time ./test sha1
sha1 = 7fcc4d8c84772fa6d9050abe80820b8e4038d6a9
12.92u 0.02s 0:12.91 100.2%
本当、申し訳ない。書きこむ前に
ftp://210.170.170.118/incoming/ をチェックしたんだけど、使えなくて。
変更は、かぶらない限り全然後でもかまわないし、
他にやっていることがあるなら、是非そちらを優先して。
で、不具合(「全部読む」が出ないとか)と、
#ifdef SEPARATE_CHUNK_ANCHOR
化をして、
read.c 11-Sep-2001 09:05 52k
に対してdiff取ったんだけど、
169d168
< #ifdef LATEST_ANCHOR
こんな形式のヤツでいいのかな?
インデントがつぶれるのも不安だし。
もし、それでよければ、そいつ(190行程)をコピペして
前スレに貼るけど。
前スレの944の追加と合わせれば、
ちゃんと動くと思う。
って、もう寝てるか。
それと、CRCの計算等には、全然ついて行けないので、ごめんなさい。
さらに、timeの出力の意味すらしらない。
diff があるなら -c or -u オプションつきでとってください... patch 当てやすいので。 あと、できるなら mimencode してくれるといいです。 # そのまま貼り付けはインデント崩れるしuuencode は <とか出てきてやばい
すんません、ど素人で。 mimencodeってWin上でどうやったらできます? 何のソフトで変換すればいいんだろう・・・
すみません、とりあえずgoogle行きます
>>176 むー。Windowsか。メールソフトで
メールを作成→添付ファイル→送信せず保存→(メールの)ソースを見る
とかやればできないこともないけど...
diffがあるということはcygwin使っているのかな...?
>cygwin そうです。かなり古いバージョンだと思うけど。
MIMEってBASE64 encodingのことかな。 これだと確かに[A-Za-z0-9+/]しか使わないから化ける危険少ないかな。 分量増えるからencodeかけるまえに圧縮してくれるといいかも?
皆さん、どうもです。
いろいろやってみます。
(メーラー添付はタブが残ってたので)
次からの事もあるので、何とかそれなりに簡単で安全な方法を探します。
(とりあえず
>>180 を落としてみた)
CVSの更新は続けちゃってください。
変更点は自分ではわかっているので、
安定していそうな頃を見計らってdiff -cした結果をどっかに貼ります。
何とか出来たかも。 前スレ944と951(difs.txt.gz)で 動いてくれることを祈ってみたり。 (-DSEPARATE_CHUNK_ANCHOR) うまくいってたら、皆さんに大感謝。
>>183 diffの出力をgzipしてmime encodeしたんですね。
diffの改行コードがCRLFなのに最初ひっかかったYO(笑)
とりあえず手元では当たった。
first_line()とlast_line()を #ifdef SEPARATE_CHUNK_ANCHOR で囲まないとwarningが出るね。使ってないって。
125さん、| - -) さん、180さん、181さん、 本当にお手数おかけしました。 ありがとうございました。 今後、大きい変更があったら、7行スレのを使わせてもらいます。
今回の変更の説明をconfig.txtに記入キボー ?SEPARATE_CHUNK_ANCHOR ※CHUNK_ANCHORが必要 内容の説明キボー ?CHUNKED_ANCHOR_WITH_FORM ※CHUNK_ANCHOR定義時にのみ有効 select form形式で CHUNKED_ANCHORを表示する 「掲示板に戻る」「レスを全部」「最新レス」との統一が取れていない
>>189 こんなところ?
▲SEPARATE_CHUNK_ANCHOR
※CHUNK_ANCHORが必要
続くchunkへのanchorは先頭ではなく末尾に表示する
▲CHUNKED_ANCHOR_WITH_FORM
(略)
191 :
◆D69Zsbfg @夜勤 ★ :01/09/11 18:38
いままでのところ ver5.20 の感想。 転送量は、機能が増えたのに 増えも減りもしなかった。 CPU等への負荷は、若干上がった。 という状況です。(piza2 , cheese/tako , saki) で、お願いなんですが、実はいろいろ変更が予定されていまして、 今 read.cgi で使われている、各フォルダ名を ヘッダーで #define するような形にして欲しいのです。 具体的に言うと、 dat temp (仮称 : dat -> temp -> kako のような流れに改造中) kako (kako以下のフォルダの生成は関数の方がいいかも) temp に .dat があるときは現在このようなメッセージを出しています。 『隊長! スレッド 999973555.dat は、HTML化されるのを待っているようです。 しばらく待つしかないようです。』 ご検討のほど、よろしくお願いいたします。
× kako以下のフォルダの生成は ○ kako以下のフォルダ名の生成は
2220,2221d2155
< #ifndef SEPARATE_CHUNK_ANCHOR
< /* 初期化した数値を再び使うのはダイジェスト関係だけのはず */
SEPARATE_CHUNK_ANCHORで括るのは間違い。
out_resN = 0;を残すかコメントアウトするかはどうでも良いが
conditionで括る程のものではない。
/* out_resN = 0; ダイジェスト用に再初期化 */
ぐらいで、いいんじゃない。
>>174 寝たんじゃない、眠けに耐えながら仕事してたんだ。
ってことで、おやすみ〜。
起きたときに新バージョンがインストールされてるといいな〜。
194 :
369 ◆3XTuRnAc :01/09/11 20:03
えと、すんません、IP変わりました。 今日の午前1時か3時ぐらいにIPが替わった模様です。 新しいIPは 210.170.170.18 です。
おお、夜勤さん自ら要望に来てる
/tech/dat/1000035521.dat ↓俗に言うdat落ち /tech/temp/1000035521.dat ↓html化 /tech/temp/kako/1000/1000035521.dat(.html) って形になるのかな? すると、 read2ch.h #define DAT_DIRNAME "dat/" #define TEMP_DIRNAME "temp/" #define KAKO_DIRNAME "kako/" /* .datのディレクトリ構成 /tech/dat/1000035521.dat /tech/temp/1000035521.dat /tech/temp/kako/1000/1000035521.dat(.html) */ それと、dat直読み禁止=.cgi化と仮定して、 #define DAT_EXTNAME ".dat" って感じ?
r2chhtml.h R2CH_HTML_ERROR_5_DAT ・・・"スレッド %s" DAT_EXTNAME "</a> を"・・・ R2CH_HTML_ERROR_5_NONE "<a href=\"/%s/" TEMP_DIRNAME KAKO_DIRNAME "\">過去ログ倉庫</a>にも"・・・ /* 使われてないけど */ #define R2CH_HTML_ERROR_999_1 ・・・ "<a href=\"/%s/" TEMP_DIRNAME KAKO_DIRNAME "%s/%s.html\">過去ログ倉庫"・・・ ・・・ read.c main() sprintf(fname, "../%.256s/dat/%.256s.dat", zz_bs, zz_ky); → sprintf(fname, "../%.256s/" DAT_DIRNAME "%.256s" DAT_EXTNAME, zz_bs, zz_ky); html_error() sprintf(doko, "../%.50s/kako/%.50s/%.50s.html", zz_bs, zz_soko, tmp); → sprintf(doko, "../%.50s/" TEMP_DIRNAME KAKO_DIRNAME "%.50s/%.50s.html", zz_bs, zz_soko, tmp); sprintf(doko, "../%.50s/kako/%.50s/%.50s.dat", zz_bs, zz_soko, tmp); → sprintf(doko, "../%.50s/" TEMP_DIRNAME "%.50s" DAT_EXTNAME, zz_bs, tmp); あと、これ、まずいんじゃないかな?(9月9日問題か?) 倉庫ディレクトリは4桁に増えると予想してるんだけど。 html_error() strncpy(zz_soko, tmp, 3); → sprintf(zz_soko, "%d", atoi(tmp) / (1000 * 1000));
html_error()の後半は、 → sprintf(doko, "../%.50s/" TEMP_DIRNAME KAKO_DIRNAME "%.50s" DAT_EXTNAME, zz_bs, tmp); だった。
いや、これも違う。 もう一度よく考える。 → sprintf(doko, "../%.50s/" TEMP_DIRNAME KAKO_DIRNAME "%.50s/%.50s" DAT_EXTNAME, zz_bs, zz_soko, tmp);
>>196 /tech/dat/1000035521.dat
↓
/tech/temp/1000035521.dat
↓
/tech/kako/1000/1000035521.dat(.html)
ではないかと思われ。
それにこのほうが #define いじりやすそう。
俺もそう思って書きなおしてた
>>200 /tech/dat/1000035521.dat
↓俗に言うdat落ち
/tech/temp/1000035521.dat
↓html化
/tech/kako/1000/1000035521.dat(.html)
で、
read2ch.h
#define DAT_DIRNAME "dat/"
#define TEMP_DIRNAME "temp/"
#define KAKO_DIRNAME "kako/"
#define DAT_EXTNAME ".dat"
/* .datのディレクトリ構成
/tech/dat/1000035521.dat
/tech/temp/1000035521.dat
/tech/kako/1000/1000035521.dat(.html) */
r2chhtml.h
R2CH_HTML_ERROR_5_DAT
・・・"スレッド %s" DAT_EXTNAME "</a> を"・・・
R2CH_HTML_ERROR_5_NONE
"<a href=\"/%s/" KAKO_DIRNAME "\">過去ログ倉庫</a>にも"・・・
/* 使われてないけど */
#define R2CH_HTML_ERROR_999_1
・・・
"<a href=\"/%s/" KAKO_DIRNAME "%s/%s.html\">過去ログ倉庫"・・・
・・・
read.c
main()
sprintf(fname, "../%.256s/dat/%.256s.dat", zz_bs, zz_ky);
→ sprintf(fname, "../%.256s/" DAT_DIRNAME "%.256s" DAT_EXTNAME, zz_bs, zz_ky);
html_error()
sprintf(doko, "../%.50s/kako/%.50s/%.50s.html", zz_bs,
zz_soko, tmp);
→ sprintf(doko, "../%.50s/" KAKO_DIRNAME "%.50s/%.50s.html", zz_bs,
zz_soko, tmp);
sprintf(doko, "../%.50s/kako/%.50s/%.50s.dat",
zz_bs, zz_soko, tmp);
→ sprintf(doko, "../%.50s/" KAKO_DIRNAME "%.50s/%.50s" DAT_EXTNAME,
zz_bs, zz_soko, tmp);
倉庫ディレクトリは4桁に増えると仮定して、
html_error()
strncpy(zz_soko, tmp, 3);
→ sprintf(zz_soko, "%d", atoi(tmp) / (1000 * 1000));
まーた間違えた。 html_error()の後半 sprintf(doko, "../%.50s/kako/%.50s/%.50s.dat", zz_bs, zz_soko, tmp); → sprintf(doko, "../%.50s/" TEMP_DIRNAME "%.50s" DAT_EXTNAME, zz_bs, tmp);
もしかしたら、read.cgiでtempだけでも読めるように 規制を緩める可能性もあるのかな? だとすると、あらかじめ dat_out()に if (isdigit(*zz_ky)) { threadStopped = 1; /* 過去ログはFORMもRELOADLINKも非表示にするため */ } を入れておいたほうがいいかもしれない。
if (!isdigit())
>夜勤さん .datへのアクセスはどのような形で許容されることになるのでしょう。 read.cgiからraw=xxx.yyy機能だけ切り出して別CGIを用意した方がいいのでしょうか。 あぼーん検出も差分(圧縮)転送もなかなかいい具合ですよ♪>raw=xxx.yyy機能 あと、「投稿日」消滅が確定的ならば、「名前」も無くしちゃっていいと思います。 むしろすっきりするかと。 「xxx :name :yy/mm/dd hh:mm」 の形式で、どうでしょうか。
206 :
◆D69Zsbfg @夜勤 ★ :01/09/11 21:54
>>205 まだ、なにも決まったわけではないのですが、
dat の直読みは、転送量の節約を鑑みて、できなくする方向です。
で、read.cgi がそのまま その機能を代行するようになると思います。
ディレクトリ構成は劇的に変わる予定ですので、試行錯誤をしたいので
出来れば #definr DAT "dat" 等は、サーバ内での相対パス、絶対パス
どちらが入れられても良いように意識していただけるとありがたいです。
なにせ、key が 10 桁になったり、dat を落とすにしても、一人一人は
少ないのですが、数千人が一度に集中したりしているので、いろいろ
改造が必要なんです。。。 よろしくお願いします。
もひとつ、CHUNK_ANCHOR と CREAT_NAME_ANCHOR 関連の方向性で案(ほとんどがいしゅつ)を
提示します。方針を決めておかないとさらに混乱しそうなので、当面の方向性を
確定させないとと思います。いかがでしょうか。
・CHUNK単位のリンクはページ冒頭でなくページ下部で提供する
・CREAT_NAME_ANCHOR はお蔵入りさせる
・>>xxx は旧来通り st=xxx&to=xxx&nofirst=true にする。 >>xxx-yyy も同様。
・LINKTAGCUT は config.txt の通りの動作をすることにして、採用する。
>混雑時間帯に
>>000 形式のレスへのリンクを削除。
>「レスを全部読む」の増加への対策として、
>表示範囲外のリンクは削除しないように変更。
>>206 了解です。
.dat をHTML化して提供する場合は、/dat/行き or /kako/行きした .dat に
ついても、read.cgi が全面的にカバーしようと思えば可能です。
# 現在は、過去落ちすると鯖側で .dat と .html の両方を提供していますが、
# .html を作らなくても read.cgi がどうにかできるということです。
# もちろん、このあたりは負荷との相談になるでしょうが。。。
一方で、HTML化されていない生の .dat を必要とするのは、おそらく専用ツールだけ
ですが、専用ツールとのやりとりに(いろんな機能を持って重たくなっている)
read.cgiを走らせるのは非効率ですので、生dat吐きに特化したCGIを別途用意する
ことも考えて良いと思います。
夜勤さんにそのおつもりがあれば、このスレで対応できると思いますが、
いかがでしょうか。
>>209 imgタグが貼れてるんですね。ていうかbbs.cgiの問題ですよねこれ?
それともread.cgiのbuffer overflowでも突いたのかな? (^^;
bbs.cgiのホールだって、そのスレでフィーネが言ってた気がしたけど。
CGIのホールだとは言ってるけど、どのCGIだとは言ってないよね。
今日は速報板等々で夜勤さん大変そうだし、転送量もアレでしょうから、 おやすみしましょうか。。。。
この事件で転送料が又跳ね上がっちゃいますね
夜勤さんたら、まだ2chになってないサーバーまで突っ込んじゃてる。 ニュース速報板が4つもあるし。 今日は無理でしょうねえ。
臨時サーバーで掲示板に戻るがうまくいかないね。 相対pathに変えた方がいいよね。
>>216 鯖がいくつもありますので、そのたびに設定を変えるのは最小限にとどめると
すると、#define すべきなのは
>>191 >>200 -201 に加えて
・test へのpath
・板 へのpath
でしょうか。piza2など既存の鯖の多くでは、両方とも "" になります。
219 :
デフォルトの名無しさん :01/09/12 17:22
旅客機テロの影響か書き込みがパタリと止んでいますが…。 1つ提案です。 REQUEST_METHODがHEADのときは、本体を読み出して 解析しても無駄なのでLast-ModifiedとContent-Lengthを 吐くだけにしましょう。
絶対pathでも相対pathでも対応可能にするには、
sprintf(buff, "%s%s", *TEMP_DIR == '/' ? "":"../", ...)
のように、強引にやる方法もあるけど、
それよりも、夜勤さんにしろひろゆきにしろ、わかってるんだから、
#define TEMP_DIR "../%s/temp/" /* %s に板名がはいる */
のように、フォーマット文字列をdefineした方がやりやすいでしょ。
変更個所は
>>201 -202と同じで。
>kako以下のフォルダの生成は関数の方がいいかも
ということは、kako以下の仕様も変更するかもしれないってことかな?
なら、
/* buffに、倉庫のサブディレクトリ名を生成する
両端の'/'はつけないこと。
例 key="999888777"のとき、buffには"999"を入れる */
#define kako_dirname_copy(buff, key) \
strncpy((buff), (key), 3) /* 3桁固定 */
/* 999の次を桁にする場合は
sprintf((buff), "%d", atoi((key)) / (1000 * 1000))
にする */
のようなものを、そのままread2ch.hに入れてしまえばよさそう。
実装・検討待ちの案一覧
ETag
>>137 >>143 >>167 -169
>>173 HEADリクエストに対しては Last-Modified と Content-Length を吐くだけにする
>>219 CHUNK_ANCHOR NAME_ANCHOR
nofirst=true をつけない("最新レス50"にも)
アンカーへのリンクは冒頭でなく下部に & target="_blank" する
>>xxx はCHUNK単位で呼び出さない & nofirst=true をつけない
>>76 URL記述に対するリンク設定も時間帯によらせる
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1000035521&st=817&to=817&nofirst=true 「名前:」も「:」だけにする
</dl>するタイミング
>>126 #define Katjusha_Beta_kisei されていない(元はdefineされていた)
dat,temp,kako
dat,temp,kako,test,板 のpathをdefineできるようにする
kakoへのpathは関数で生成する
>>191 >>196 -202
>>216 >>220 dat,temp,kako を read.cgi で読む
>>203 -208
datの一部についてのLastModを求める
ツール作者さんに対応お願い
* raw=xxx.yyy の形式でリクエスト。 xxx=最終レス番号, yyy=そのときのサイズ。
* 一行目はステータス:
* [+OK] の場合は差分のみを送信する。
* [-INCR] (Incorrect)の場合はすべてのデータを送信する。
* [-ERR (テキスト)]の場合はなんかエラーが起きた。
condition一覧/SETTING_R.TXT記述一覧
http://www.gedoh.org/aki/2ch/current/bbs/config.txt CUT_DATE_STRINGをON固定にする
GZIP/ZLIBを整理
追加すべきもの
CAUTION_FILESIZE xx, MAX_FILESIZE_BUSY (xx)(デバッグ用)
SEPARATE_CHUNK_ANCHOR(CHUNK_ANCHORが必要), CHUNKED_ANCHOR_WITH_FORM(CHUNK_ANCHOR定義時にのみ有効)
>>189 -190
CM_BBSPINK, LOGLOGOUT x, TYPE_TERI, Katjusha_Beta_kisei
RAWOUT
rawmode時に圧縮対応していないと弾かれる
あと、
>>207 についてのご意見をお願いしますです。
とりあえず、あらかた組み込んだ。 #define DAT_DIR "../%.256s/temp" 方式 CREAT_NAME_ANCHORはoffにした。 SEPARATE_CHUNK_ANCHORの動きが気に入らない。 特に、busyの時が不自然かな。 tempやkakoのチェックが面倒だった。
書き間違いごめん #define DAT_DIR "../%.256s/dat/"
>HEADリクエストに対しては Last-Modified と Content-Length を吐くだけにする Content-Lengthを吐くためには全部やってみないと算出できない。 ZLIBでgzipの時にデータを吐かなくすることは可能。
>>221 >CHUNK_ANCHOR NAME_ANCHOR
> >>xxx はCHUNK単位で呼び出さない & nofirst=true をつけない
訂正。この場合は nofirst=true をつけるべきです(現状のまま)。
>>224 -226
おつかれさまです。
「削除」はするけど「書き換え」はしないという方向かな? 基本的には賛成。 ただ、文字数を考えるとUSE_PATHの時は書き換えてもいいかも (target="_blank"も結構長さを食う原因だけど)
Etagですが、ZLIB+gzip使用ならgzipが算出したCRC32をそのまま使う手もあります。
サーバー負荷は減らないが、転送量は減らせるでしょう。
ただ、対応部分のdatが何も変わっていなくてもhtml化の表現が変わると
無効になってしまいます。
23時に突入した時とか、レスが増えてanchorが増えた時とか。
>>222 NN4.xに対応するworkaroundは導入されてます。
>>228 表示中のページ内に該当レスがある場合にのみ「削除」をする、
あとはなにもしない、ってことになります。
>>207 target="_blank"がないのは、特に >>xxx の場合は不便なのでぜひ付けて欲しいです。
その他の場合(冒頭部のCHUNK、最新レス50、etc.)はつけない方がいいのかも。。。
>>229 同じことを raw=xxx.yyy の時にやる場合は、html化後の表現には左右されませんよね。
# html化しないんだもの(笑
raw=xxx.yyy ではないときに Etag をはくのは、raw=xxx.yyy なときと比べると
おまけかなと思っているので、それでもよいと思いますです。
>>230 あれ?Etagの目的は、
ブラウザで部分読みの場合に出力に変化がないにもかかわらず
新レスのせいでIf-Modified-Sinceが成立しなくなる。
の対策じゃなかったけ。
ついでにあぼーんチェックの強化に使おうというのは主目的ではなかったはず。
>>231 失礼しました。私の勘違いです。
そもそも、raw=xxx.yyy の時に同一性チェックを行うのは、304を返すためではないので、
304を返すためにおこなうチェック(部分読みの時の同一性チェック)とは方向性が違いましたね。
# 具体的には、後者の場合、転送内容は「鯖側で同一性チェックにかけられる部分」に
# 確定している。前者の場合、転送内容は「.dat全部」か「鯖側で同一性チェックに
# かけられ*なかった*部分」のどちらかになる。
# 前者の場合(rawmode)の同一性チェックは gzip/zlib しないで行うべき、
# という認識で正しいですか?
webブラウザでver5.20を見てみての
>>207 さんへの意見です
CHUNK単位のリンクは冒頭のままでよいかと思いますが、
・各CHUNK表示の下部に「次の50レス」へのリンクがほしいです
最新表示の「新レスの表示」と同じ形式がよいと思います
・表示レス数50以下のCHUNKはいらないのではないでしょうか
[(レス数-1)/50]*50-49 がトップにくるCHUNKまででよいと思います
批判要望では、CHUNK単位のリンクが先頭にあると 読み終わった後でいちいち先頭まで戻るのがめんどくさい という意見が出ていました。
やはり一番下に前後CHUNKに移動する手段はほしいですね。 そうすることで一つひとつのページのバイト数は多少増えるかも しれないけど、適切な誘導で無駄なページの閲覧を減らせるの ならば、結果的に転送量の抑制にもつながるのではないかと。
あ、
>>235 は「CHUNK単位のリンクに加えて」という意味です
やはりCHUNK_ANCHORは下にあったほうがいいという意見が 多いですね。 762 名前:名無しさんの声 投稿日:01/09/13 16:44 ID:a2dTsqos "1- 51- 101- 151- 201- 251- 301- 351- 最新レス50" って部分"新スレの表示"の左側にも付けてもらえませんかね? いちいち上まで戻して次の50表示するの面倒です。
なるほろ。こんな感じ? /* keyはkey=../kako/xxx等の場合でも、最後の"/"の次の位置が入る。 普通は数値のみ(の先頭)が入っている。 現在は、 "999888777" → "999" "1000999888777" → "10/000" "1234999888777" → "12/234" */ void create_kakodirname(char *buff, const char *key) { int tm = atoi(key) / (1000*1000); if (tm >= 1000) { /* 1000 Over */ sprintf(buff, "%d/%d", tm / 100, tm % 1000); } else { /* 994-999 */ sprintf(buff, "%d", tm); } }
夜勤さんがさらにいじりやすい(read.c内の位置を探すのが面倒)ように、 read.cの一番最後に置くか、 ↑を全部#ifdef READC_MAINで囲んでread2ch.hに置いて、 read.cを #define READC_MAIN #include <read2ch.h> にしておくのがよい?
read.c内で一箇所に固めておくに一票
コメント滅茶苦茶だった・・・
コメントはともかく、動作がおかしいのはまずい。ってことで、 sprintf(buff, "%d/%03d", tm / 100, tm % 1000);
>>nnn形式のリンクをクリックするリクエストって、 全体からするとかなり低い割合なのかな? すると、転送量に占める割合は、さらに極僅かかな? >>nnnをクリックして読む場合って、 スレの別の部分を読んでいて、そこから参照するだけだから 書きこんだり、続きを読んだりする事ってほとんどないはず。 すると、1レス分の表示をするために沢山のリンクを提供して javascriptでNAMEやMAILを取って、FORMを表示するのって、 (1レスを読むためだけには)すごい無駄な気がする。 refererを調べれば参照が元スレ(or index.html)かはわかるから、 その場合で、かつstとtoが同じでnofirst=trueの場合には、 レスの本文だけに特化して、それを返してもよさそう。 CHUNKや「次のnレス」を辿る場合にはカット出来ないから、 >>nnn-mmm形式のリンクにも対応するには、 stやtoの数値を見て判断するとか、 stとtoの差が10以内だったらカットするとか。 いずれにしても、最初に書いたように 変更個所が多岐に渡る割に、効果は不明だけど。
ポ 倒れる ソニック
247 :
ghanyan :01/09/14 00:32
>>247 ご報告ありがとうございます。確認しました。
rawout時には.datをいじくらないようにしないといけないですね。
printfだから\0を含む行を正しく出力できないわけね。 zlibにはバイナリ出力用の関数ってあるの? pPrintf(pStdout, "%.*s", BigLine[i+1] - BigLine[i], BigLine[i]);
こうすればOK? if (gzip_flag) gzwrite(pStdout, BigLine[i], BigLine[i+1] - BigLine[i]); else fwrite(pStdout, 1, BigLine[i+1] - BigLine[i], BigLine[i]);
テロ以来コードをcommitする人がいなくなっちゃたな。
私しか差ワット欄。
>>237 ,239-243あたり
kako_dirname()をread.cの最後に付けた。
>>247 -250
dat_raw_out()のデータ出力をprintf系からwrite系に変えた。
いいかげんに上部と下部に付けるanchorを決めたいところだが。 上:掲示板に戻る 1- 最新レス50 下:次の50レス 1- 51- 101- ... 最新レス50 批判は出るだろうが、bbs=tech&key=xxxxだけの時は、1-50表示にすると 転送量減るんじゃないか。 スレの紹介で範囲を指定しないことが多いわりに全部読むことは少ないと思うが。 全部読みたきゃ、st=1を指定しなさいということで。 削除人は困るのかな?
>>252 上は現在の範囲より前だけ
下は現在の範囲より後ろだけ
のほうが節約できると思うけどセコすぎ?
>>253 それすでに実装されてるよ。
SEPARATE_CHUNK_ANCHOR
>>253 下から上に読む人がどのくらいいるかによるんじゃないかな。
50もさかのぼりながら読むようなら、次は1から読みたくなるんじゃ
ないかと思うけど。
途中から読みたいことがそんなになければ、
上:掲示板に戻る 1- 前の50レス 次の50レス 最新レス50
下:1- 次の50レス 最新レス50
なんてのもありだと思う。
>>254 実装されているかどうかじゃなくて、推奨設定を決めたい。
いつまでもテスト段階じゃしょうがないでしょ。
>>252 >批判は出るだろうが、bbs=tech&key=xxxxだけの時は、1-50表示にすると
>転送量減るんじゃないか
これ名案だと思う(笑)
様子を見るためにクリックしたが、最後まで読む気ないけど全部
表示されるってパターンは割とありそう。
>>255 さかのぼるってのは相対的にかなり少ないんじゃないかと思うけどどうなのかなあ。
古い順に読むのに比べて。
>>252 >批判は出るだろうが、bbs=tech&key=xxxxだけの時は、1-50表示にすると
うーんしかし、もともとテレホタイムは全部表示しないようになってるような。
ピーク転送量(=テレホタイム)の削減目的では、何も変わらないか。
>様子を見るためにクリックしたが、 あるある。最新レス50だと最初のほうが読めないから 「レスを全部読む」をクリック。 ただbbs.cgi側にも「レスを最初から読む」に変えてもらうとか 協力を仰がないと「全部表示されません」という文句が 批判要望に殺到しそうな気がする(w 「さかのぼる」については、マーフィーの法則風に言うと 「自分の読みたい参照先は、常に表示範囲の1つ前である」 ので上にはほしい。下にはいらないけど。
260 :
デフォルトの名無しさん :01/09/14 07:06
転送量を削減するという名目でひたすら弄ろうとしているように見受けられる。 使い勝手を犠牲にしてまで機能を制限するのは混雑する時間帯だけでいいのでは。 それも、極力操作の変更を伴わない機能制限で充分です。 8月末までの一連の対策で転送量削減の結果は出たはずです。 操作方法を著しく変えて不便を利用者に強いてまで、これ以上の転送量を削減する 要望が管理側から出ていたでしょうか? 開発者はどこを向いて誰のために開発しているの?
261 :
デフォルトの名無しさん :01/09/14 08:33
>8月末までの一連の対策で転送量削減の結果は出たはずです。 何寝ぼけたこと言ってんの? 板閉鎖と過去ログ閲覧禁止と強制IDでようやく目標に達しただけなのに。 自分のいる板が閉鎖されてないから他のことはどうでもいいってのが見え見え。
>>260 >それも、極力操作の変更を伴わない機能制限で充分です。
それはお前が決めることではない。
>操作方法を著しく変えて不便を利用者に強いてまで、これ以上の転送量を削減する
>要望が管理側から出ていたでしょうか?
出てるよ。不便だと思うなら2chに来なければいい。お前の分の転送量が減る。
263 :
デフォルトの名無しさん :01/09/14 08:47
>>261 一時の閉鎖とは打って変わってほとんどの板が順次復活してます。
過去ログ閲覧も順次復活してます。
縮小路線維持であればニュース速報板が何枚も増設されなかった。
状況は刻々と変化している。
>>262 >それはお前が決めることではない。
プログラマが決める事なの?
>出てるよ。
どこに?
ここでどんなにread.cgiをいじくろうが、その採用を強制する力はここにはない。 最終的に何が実装されるかは運営側の判断に委ねられている。 建設的な提案ならともかく「これ以上やるな」というのはここで喚いても無駄。
266 :
デフォルトの名無しさん :01/09/14 09:29
某ツール作成者ですが、rawモードのときステータスといっしょに差分サイズを送るようには 出来ないですかね? +OK 3093 みたいに。 そうすればブラウザ側とのサイズの認識のずれはなくなるし、こちらとしてもやりやすいので(^^; あと、どのサーバーにどのバージョンのread.cgiが入っているとか、こうすればバージョンが判るぞ、 って言うのはどこかに情報ありませんか? 探したんですがちっと見つからなくて・・・
今の版だと、 304を返す時にも Content-Type: text/html を出力しているけど、いらないでしょ。 puts("Content-Type: text/html"); (#ifdef RAWOUT以降)は putchar('\n') の直前でいいと思う。
268 :
デフォルトの名無しさん :01/09/14 09:34
相変わらずバカだね。 >一時の閉鎖とは打って変わってほとんどの板が順次復活してます。 そんなこと、みんな知ってるよ。 だけど、お前の言う「結果は出たはず」ってのは 板を閉鎖している時点でのことだ。 資金的な目処がたった等の理由で板は復帰してるけどな。 キミはもしかして、 dat直読み禁止になっても 「かちゅ〜しゃで読めないのは改悪だ」 「どこからも要望は出ていない」 と叫びつづけるのかい?
269 :
デフォルトの名無しさん :01/09/14 09:39
制限や規制は2ちゃんねるの基本方針ではない。それがいい事か悪い事かは別として。 利用者の利便を否定して不便を享受させる権限がプログラマにあるのかな。 そういう実験や遊びこそ2ちゃんねる外でやってほしいものです。 >結論を急ぐな。 早急に開発したり機能を変更する局面も過ぎ去ったように感じます。 逆に、開発を急ぐな。変更を加えるな。と言いたい。 夜勤氏から要求のあった機能を除いて。 >まだ試行錯誤の段階で、転送量についてもまだ様子見の段階 Gzip転送を組み込んだ時は効果がすぐに出た。 今回の機能変更は様子を見なければ分からない程。 仮に減少しても、利便を損ねてまで得る価値があるのかどうか。 >最終的に何が実装されるかは運営側の判断に委ねられている。 それを都合のいいようにとってませんかな。 要求のある機能の開発のみにすれば判断も必要ない。 >建設的な提案 極力開発しない事を前提にしてという要望は、建設的な提案ではないのでしょうか。 今までの機能で困ってない利用者のニーズはどこへ。 開発第一の発想しかないのですかな。
そうそう、
>>206 の
>dat の直読みは、転送量の節約を鑑みて、できなくする方向です。
を読むだけでも、
「まだ、転送量の削減は求められている」
と言いきれるね。
>利用者の利便を否定して不便を享受させる権限がプログラマにあるのかな。 きみは他人の話を全然聞いてないみたいだね そんな権限はプログラマにはないよ。 決定権を持っているのは別の人だってさっきから言われてるだろ、ヴォケ。
272 :
デフォルトの名無しさん :01/09/14 09:49
全てのケースでTry&Errorを行なうものではないですよ。 長期間を経てVer.5にもなっているのに、この期に及んで試行錯誤しなくてはいけない状況を 作り出すこともないですよ。 >dat の直読みは、転送量の節約を鑑みて、できなくする方向です。 変更したり追加しなければならない事情があれば、夜勤氏からちゃんと話を持ちかけてくる。 とも言えます。 それ以外の機能改変は要求がありませんよ。
273 :
デフォルトの名無しさん :01/09/14 09:50
なかなかいいキャラだけど、 このスレにしろ、動作報告スレにしろ、 騒げば騒ぐほど、 状況を把握せずにわめいているのは一人だけで、他の多くの人はそうは思ってない。 ということを強調する結果になるだけ。
>>dat の直読みは、転送量の節約を鑑みて、できなくする方向です。 >変更したり追加しなければならない事情があれば、夜勤氏からちゃんと話を持ちかけてくる。 >とも言えます。 >それ以外の機能改変は要求がありませんよ。 まだ言ってるよ。 「転送量を削減する必要がある」と夜勤さんが言ってるんだろ? その程度すら読み取れないのか。
275 :
デフォルトの名無しさん :01/09/14 10:30
>わめいているのは一人だけ。 主張しているのは俺一人ではないですよ。 わめいているとしか受け取っていないとは、随分厳しいですね。 開発者の立場だけではなく、利用者の立場の意見も心に留めてほしいものです。 開発者の反発はある程度予期していましたけれど、違った意見に対してバカだの ヴォケだの罵ってるのを目の当たりにすると先が思いやられます。 都合のいい拡大解釈や先走りは程々にお願いしたいものです。 ともあれ、最終的に管理者や利用者が納得する結果に落ち着く事を希望します。
>>191 の
>転送量は、機能が増えたのに 増えも減りもしなかった。
>CPU等への負荷は、若干上がった。
つまり、動作報告スレの780
>機能が増えて転送量に変化がなかった = 転送量を減らす効果があった
>と理解しています。
を
>機能を変更した事により、使い勝手の不便だけではなく、トータルに見て転送量にも
>さしたる改善が認められなかったと報告があった。
>>766 と「俺解釈」し、
>>206 の
>dat の直読みは、転送量の節約を鑑みて、できなくする方向です。
を読んでも、
>これ以上の転送量を削減する要望が管理側から出ていたでしょうか?
と訴える。
だいたい、開発者だって利用者だ。
不便になるだけの変更はするわけがない。
自分の考えが絶対正しいと思っているのだろうが、
複数の人間が開発しているのだから、
妙な意見がそのまま通るわけがない。
前スレあたりから通して一遍読んでみろ。
自己満足機能は確かにあるが、削られているものもある。
批判や要望も取り入れられて修正もされている。
現在運用されているバージョン以降にもな。
都合のいい拡大解釈 良い言葉ですね。
278 :
デフォルトの名無しさん :01/09/14 10:51
>>276 聞かれたので意見を述べます。
これは夜勤氏の解釈ですけど、転送量に注目して言えば、
転送量が減った=転送量を減らす効果があった と判断するのは分かりますが、
増えも減りもしなかった=転送量を減らす効果があった になるのは不自然ではないでしょうか。
転送量を観察するのには、少なくとも一週間は必要です。と述べている割に、
その時点で効果があったと判断するのは、それこそ早計ではありませんか。
>>267 いや......Content-Typeを吐かないと 例えば
#!/bin/sh
echo 'Status: 304 Not Modified
'
というので実験してみたところ
HTTP/1.1 304 Not Modified
Date: Fri, 14 Sep 2001 01:55:00 GMT
Server: Apache/1.3.20 (Unix) ApacheJserv/1.1.2 mod_gzip/1.3.19.1a mod_ssl/2.8.4 OpenSSL/0.9.6b
Connection: close
Content-Type: text/plain
となった Content-Typeを指定しておかないとDefaultTypeが返されてしまうようだ
276のどこで聞いてるんだ? 脳内妄想垂れ流すのもいい加減にしろ。
780 名前:夜勤 ★ 投稿日:01/09/14 00:29 ID:??? 一日の間にも、当然ピークがあり また、一週間の間にも波があり、、、 さらに、板によっても使われ方が違います。 転送量を観察するのには、少なくとも一週間は必要です。 出来れば、数週間欲しいところです。 誤解の無いように、 機能が増えて転送量に変化がなかった = 転送量を減らす効果があった と理解しています。 機能が増えて 機能が増えて 機能が増えて 機能が増えて 機能が増えて 機能が増えて 機能が増えて 機能が増えて 機能が増えて 機能が増えて
名前: や sageだけのメール欄(色変更だけにする) 削った場合ってなにか問題が起こるのでしょうか? あと、見た目悪いし、普段はIDまで見る必要はない人も多いと思うので、 強制IDの板でもID表示しない表示モードを作る事は実用的に可能ですか? (できれば1が表示をコントロール出来る様な物を、デフォルトのモードにするかは別問題として)
sageだけの場合メール欄のアンカーを表示しないのは 実装済みです(SAGE_IS_PLAIN)。 ただしアンカーの代わりに<font>が入るので、効果が 薄いです。 スレ立て時にID表示を選べるかどうかという話はスレ違い。
>>282 「名前:」は「:」にしていいと思いますー。
sage のみのメール欄は SAGE_IS_PLAIN として実装済ですが、
今まではリンクがあったものを色変更だけにすることが、2ちゃんねるの
楽しさを損なわないか(age や sage が一見分かりにくいとか、
sage だと思って見ると (゚д゚)ウマー だったりとか)、そうでなくても勝手に
機能を変えることには抵抗があるでしょうから、私はおすすめできません。
1がコントロールして ID 表示しない云々は、1のメール欄に noid とかがある場合に
"ID"以下を切り落とすなどの方法で可能です。将来的な需要はあるかもですから、
実装してみるのもいいかも。
>>284 IDを表示しない(というか出力しない)ようにするのは
bbs.cgiの領分ではないでしょうか。
もちろんdat直読みが禁止されれば理論的にはread.cgi
だけで対応も可能ですが…。
bbs と key のみの時に ls=50 するのであれば、「全部読む」用のオプションが ほしいです。st=1 がその働きをするのでも構いません。 あと、混雑時間帯以外は、冒頭に「レスを全部読む」がほしいです。 確か、夜勤さんが 5.20 を入れてくださったあと、そういう要望が出てそのように 実装され直したと思いますが、念のため。
424 名前: ◆WinMIRVY @マァヴ ★ 投稿日:01/09/09 18:14 ID:???
(中略)
>>423 どっちかっていうとIDを導入するかどうかの問題じゃないかな?(^_^;)それって
今のところIDは、板内での発言者の同一性を明かにするのが目的であって
その目的を否定するならID非導入ってことになるんじゃないかと・・・・。
んで、ID導入が2chとして妥当かどうかはおいらは関知しません。
あくまでID値の安全性についてだけね(^_^;)
>>285 本来はbbs.cgiの領分だとは思います。
「強制IDの板でID表示しない」とのことだったので、read.cgiが簡易にそういう
振る舞いをするのもありなのかなぁ、と思ったのです。
rawmode の際も dat から ID 部分を切り落とすのはさすがに問題でしょうから、
専用ツール読みが流行ることになるのかな。
まあ、運営の皆さんがそういう実装をほしがるようにはあまり思えませんね。
# なんて推測で書いてはいけないかな(汗
>それらに対しては導入されていないだけで、ちゃんと対応されている。 [一応わかりやすいように補完] それらに対しては「現時点では」導入されていないだけで、「修正中のプログラムでは」ちゃんと対応されている。
上下に配置するもののを決めるのに意見を出してくれるかと呼びこんでみたが、 掻き回すだけなのか。 未だに、どうするのがいいのか模索しているってことに気付きもしないとは。 これが必要で、これは要らないってのを決める役にたちやがれ。 CHUNK単位へリンクしないのなら、CHUNK表示は要らないと思いますがいかかでしょう。 いったん機能を固めて内部の安定化を図りたいのですが。 上:掲示板に戻る 全部 前の50 次の50 最新レス50 下:1- 次の50 最新レス50 混雑時 上:掲示板に戻る 1- 前の50 次の50 最新レス50
>>291 現状のchunkは 50レス単位となっているが、これでは多すぎると
感じていたんだが、これを少なくするとchunk一覧が大きくなるという
問題を感じて、こんなもんかと思っていた。
しかしchunkを一覧せず、前のXX / 次のXX とするなら、一括表示
単位を50より少なくしても何の問題もなくなるわけだね。この点で
この方式を推したい。
もちろんこの50という数字が多すぎると感じるかどうかは板の性質
によるだろうし、もともとconfigで仮にdefault定義されただけの値だと
いうことは分かるが。
ということでおおむねその形は良いと思う。
まあ、下には「新レス」も欲しいかな。別の機能ということで書かなかった
だけかもしれんが。
新レスはあってもいいけど名前は変えたほうがいいと思う。 未読とか新着とか。
>>292 「新レス」と「次の50」は機能的にほぼ同じです。
両方つけるのは無駄でしょう。
あと表現(表示文字)についても意見をお願いします。
>>294 ああ、なるほど。確かにほとんど一緒か。
表現は、非混雑事の「1-」は上にあるほうが良くないかな。
というより、どうせなら非混雑時は上下ともに
掲示板に戻る 全部 1- 前50 次50 最新50
みたいにするとか。非混雑時は利便性を落とすほどに帯域を
気にしなくて良いので。
最後まで表示した時は、「次の50」を「未読」にするってのも 読み終わったことが判っていいかな。
chunk表示はもともとキャッシュヒットさせやすくすることで 帯域削減効果を狙うものだった。 だがchunk一覧を表示してしまうことにより、最大メッセージ数が 変化すると、末尾chunkでなくともchunk一覧の表示が変化し、結局 cacheが無効になってしまうというジレンマがあったね。 前/次方式はその点でもキャッシュしやすくなるが、chunk sizeで 割り切れる位置(+1)からスタートする表示をしやすくすることで、 cache効果も狙えるようになるんではないかな。 たとえば、「前50 / 次50」ならば、現在の地点の前/次にある 50区切りのchunkを表示するようにするとか。 (半端な位置から呼び出した場合重複は起きるが、cacheが ある程度効くのであれば無視できる)
297とは別に、従来のchunk方式をcacheしやすく改善する 方向も考えてみる。 chunk一覧が変化することがcacheの妨げになるのであれば、 これをできるだけ変化しないようにすれば良いことになる。 そこで、chunk一覧は現在のchunk以前のみにし、後続する chunkについては「次chunk」「最終chunk」に変更する。 例: 300レスあるが、現在 101-150chunk を表示している場合の 一覧 1- 51- 次50 最終50 「最終chunk」は、最新レスから50個分さかのぼるのではなく、 最後の50区切り地点以降をあらわす。リンク自体も固定化しない とcacheされないため、実現にはcgiに新パラメータが必要になる。 こうすれば、最終よりも前のchunkについては、あぼーんなどが 発生しない限り不変となり、cacheが効果的に期待できるように なるのではないかと思う。
>>298 まあ、実際には前/次で十分なので、このようなアイデアは
混乱を呼ぶだけか。スマソ。
実際の操作を考えると、上に「最新レス50」がある必要って あまりないのではと思うのですが... 今までとの互換性もあるし、やはりあった方がいいのかな?
301 :
◆D69Zsbfg @夜勤 ★ :01/09/14 19:16
新スクリプト実験場も作ったので、 今夜あたり また新しい version の read.cgi を入れてみようかな? と考えています。 区切りが良かったら教えてください。 いつも お世話になっています。
上:掲示板に戻る 全部 1- 前50 次50 最新50 下:掲示板に戻る 全部 1- 前50 次50 最新50 混雑時 上:掲示板に戻る 1- 前50 次50 最新50 下:1- 次50 最新50 こんなもんで実装して試してもらいましょうか?
>>302 の機能ができあがりました。
PREV_NEXT_ANCHORとして付け加えました。
ソース的にはまだ不完全ですが、今の組み合わせなら大丈夫なはずです。
(他のconditionとの組み合わせの検証、"前""次"がread.c内に残っている等)
CHUNK_NUM=50,RES_NORMAL=100だと混雑時にちょっと不自然な感じがするような気がします。
誰か他の人がチェックしてOKだったら夜勤さんにお願いといきたいんですが、 他の開発者は今いるのか?
>>304 なんか、現在表示中の範囲内のレスへの >> も
新しいウィンドウとして単独表示しちゃってるね。
>>307 ってread2ch.hでCREATE_NAME_ANCHORがコメントアウトされてたからか。
と実験してるうちに23時過ぎてしまったので混雑時モードに変わった(笑)
時刻範囲もいじって両方確認中…
>>304 PATH形式じゃない、従来型で呼び出したときにも
">>"のリンクがPATH形式になっちゃってるね。
>>304 「最新50」した結果に出てくる前50/次50が表示してるレス番号と
全然違う値になってる。
>>307 NAME ANCHORを使うかどうかによるんだけど、
CHUNK_ANCHORとセットじゃないといまいちって話が出てたんです。
(
>>207 あたり)
NAME ANCHORを使って、表示内へは#で飛ばした方がいいんですかね。
それか、混雑時に内部リンクを切る機能があるはずだから平常でも使うように
するかですね。
上下の各アンカーは変な所はないですか?
>>311 > NAME ANCHORを使って、表示内へは#で飛ばした方がいいんですかね。
> それか、混雑時に内部リンクを切る機能があるはずだから平常でも使うように
> するかですね。
うん、NAME_ANCHOR未定義時は表示範囲内へはリンク切ったほうがいいかも。
> 上下の各アンカーは変な所はないですか?
>>310 がまずいかも。
>>309 えっ。逆じゃないですか?
まだPATHまで対応してません。
>>310 表示している最初のレス番と、前後のリンクの番号を教えてください。
>>313 たとえば
〜/test/read.cgi/tech/998845501/?ls=50
で表示されるヘッダが
次50が &st=100&to=150 になってます。
〜test/read.cgi/tech/998845501/read.cgi?bbs=tech&key=998845501&st=300&to=350
だと、本文中の >> が
〜/test/read.cgi/tech/998845501/299-299
の形式になってたりしてます。
>>314 〜/test/read.cgi/tech/998845501/?ls=50
のとき、手元のデータでは先頭が830になってます。
>>314 -315
全部PATH形式で呼び出された後の問題ですね。
確かに変だ。
さて、どうしたものか。
とりあえず、従来形式では大丈夫なのを確認してください。
>>を表示内はカットする
ここまででやっておいて、
夜勤さんが来る前に間に合えばPATHをなおす
ということでどうでしょうか。
>>314 -316
ああ、ls=とst=の両方が指定されたときの優先順問題でした。
path形式での出力をサポートすればOKかな。
>>316 > 全部PATH形式で呼び出された後の問題ですね。
あ、ほんとだ。
〜test/read.cgi/tech/998845501/read.cgi?bbs=tech&key=998845501&st=300&to=350
これ、path形式じゃないと思い込んでた。後半しか見てなかった。失礼しました。
319 :
デフォルトの名無しさん :01/09/14 23:43
個人的には50レスごとのリンクより「50戻る」の方が欲しいっす。
>>319 今試してる「前50」がそれに相当するかな。
NORMAL_TAGCUT として、常に表示内への>>リンクをカット。 ls=とst=が両方指定された時の問題を修正。 これで、PATH呼び出しでも気持ち悪いリンクだけど一応動作する。 これで、いつ夜勤さんがきても大丈夫かな。 じゃPATH形式の出力やってます。
どでしょ、入れてもいいかな?
>>323 いま、最新版をコミットしましたので、5分ほど待ってから
入れてください。
PREV_NEXT_ANCHORのpath形式出力をサポートした。 相対pathにした「掲示板に戻る」がpath形式の時に正しくなかった。
>>324 うむ? もういいのかな?
だめだったら、言ってください。あせっても、仕方ないので、ペース合わせます。
ちなみに、5分というのはコミットしてからWEBに反映されるまでの時間です。
じゃ いきまーす、 今日は、スクリプト実験場。 ex.2ch.net に入れますネ。
>>332 ご苦労様でした。
うーん。なんと実験に最適な環境なんだ。
mod_gzipが入っていれば完璧なんですけどねぇ。
>>332 夜勤さんいつもいろいろおつかれさまですー。
125さんもたくさんたくさんおつかれさまですー。
皆さんもおつかれさまですー。
でも<hr>に<dd>がかかってる。。。気持ち悪いよぉ(泣
# 機能にも転送量にも関係なくてごめん。
>>334 あっ。そ〜お〜いえば〜あ、そ〜いうのがあったなあ。
こめん忘れてた。
>>335 ぺこぺこ
「名前:」を「:」にするのは、夜勤さん&indexをいじれる人的にはどうなのでしょう。
なかなか大きいと思うのですが、index が先行してくれないと、やっちゃいけないのかな
という雰囲気があると思うです。
繁忙期を2時までにしてくるです。
pathの時に>>nnnがnofirst=trueになってないな。
read.cgi ver 5.21 入れたのと、ほぼ同時に、転送量が 3倍くらいに なったんですけど、、、 単に、人が増えただけですかねー?
>>340 gzipはちゃんとかかってるみたいだけどなあ。
前50 次50 方式は逆効果だった? (^^;
使いやすくなってサクサク開いちゃってるとか(笑)
皆様お疲れ様です. 実験場で,レス 1 と 204-252 が表示されている状態,10241 バイトなんですが, これに css を使う(<font color=green></font> を消す)と 670 バイト減らせます. こういうのって,すでに意味がなくなってるんでしたっけ?お邪魔だったらすみません.
>>340 人が増えて+ものめずらしさであっちこっちクリックして、じゃないかと。
cgiの変更で増える要因は「全部」だけのはずです。
落ち着けば、その分は他の機能が相殺してくれると踏んでるんですが。
転送量の評価には、ある程度安定したアクセスのサーバーじゃないと
無理でしょうね。
あそこは、復活して間も無いし。
全部 1- → 全 最初から読む こんな風に変更したら、「最初から読む」の方を使ってくれないかな。 途中まで読んで、もういいやってことも良くあるし。
定量的には css の宣言で +122 バイト <font...> で -25x(メール欄のない発言数)バイト です.
単に「全部読む」がクリックされまくっているのでは(index.htmlからも含)? 時間制限はずしてあったし。
下にある「掲示板に戻る」は便利過ぎるかも。 読み終わって、即戻れるとindex.htmlのアクセス数が増えそう。
ところで125さん、cvsにtag打っといてくれますか〜 YAKIN20010915かな。
>>352 あ、NULLだということは&修正は認識していたのですが、version違いを忘れてました(^^;
すいませんです。
下に便利さのための機能は、置かない方がいい気がしています。 本当にその機能を必要とする人は、上まで戻ってでも使うでしょう。 そうでない人には、余計な選択肢は出さない方がいいかと。 下に置くものは、「次50/未読」だけがいいんじゃないかな。 「最新50」で読みたい人でも手近に「未読」しかなければ、かなりの人が 未読でがまんしてくれると思います。
main()をちょっといじるだけで、他の部分へ影響しないようにできたので、
>>244 を実装してみた。
混雑時に>>nnをクリックした時に、FORM等が出なくなる。
圧縮すらしてない、ただのテキスト。
W3JlYWQyY2guaF0KLyogjayOR46eitSR0YLJgUE+Pm5ujGCOroLMg4qDk4NOgqmC545Rj8aC
s4Lqgr2P6o2HgskKICAgj2+XzWh0bWyCqYLnl12VqoLIg4qDk4NOk5mC8I/Igq0gKi8KLyoj
ZGVmaW5lCVJFRkVSRFJFU19TSU1QTEUqLwoKW3IyY2hodG1sLmhdClIyQ0hfSFRNTF9IRUFE
RVJfMSCCzI78ldMKI2RlZmluZSBSMkNIX1NJTVBMRV9IVE1MX0hFQURFUl8xKHRpdGxlKSBc
CgkiPGh0bWw+IiBcCgkiPGhlYWQ+IiBcCgkiPG1ldGEgaHR0cC1lcXVpdj1cIkNvbnRlbnQt
VHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U2hpZnRfSklTXCI+IiBcCgki
PHRpdGxlPiIgdGl0bGUgIiA8L3RpdGxlPiIgXAoJIjwvaGVhZD4iIFwKCSI8Ym9keSBiZ2Nv
bG9yPSNlZmVmZWYgdGV4dD1ibGFjayBsaW5rPWJsdWUgYWxpbms9cmVkIHZsaW5rPSM2NjAw
OTk+IgoKW3JlYWQuY10KbWFpbigpgsyBQWRhdF9yZWFkKCk7IILMgreCrozjgsmBQQojaWZk
ZWYJUkVGRVJEUkVTX1NJTVBMRQoJaWYgKGNhbl9zaW1wbGVodG1sKCkpIHsKCQlvdXRfc2lt
cGxlaHRtbCgpOwoJCXJldHVybiAwOwoJfQojZW5kaWYKCoLHgrGCqYLJCiNpZmRlZglSRUZF
UkRSRVNfU0lNUExFCmludCBjYW5fc2ltcGxlaHRtbCgpCnsKCWNoYXIgYnVmZlsxMDI0XTsK
CWNvbnN0IGNoYXIgKnA7Cgljb25zdCBjaGFyICpyZWY7CglzdGF0aWMgY29uc3QgY2hhciBj
Z2luYW1lW10gPSAiL3Rlc3QvIiBDR0lOQU1FICI/IjsKCXN0YXRpYyBjb25zdCBjaGFyIGlu
ZGV4bmFtZVtdID0gImluZGV4Lmh0bSI7CgkKCWlmICghaXNidXN5dGltZSkKCQlyZXR1cm4g
ZmFsc2U7CglpZiAoIW5uX3N0IHx8ICFubl90byB8fCBpc19pbW9kZSgpKQoJCXJldHVybiBm
YWxzZTsKCWlmIChubl9zdCA+IG5uX3RvIHx8IG5uX3RvID4gbGluZU1heCkKCQlyZXR1cm4g
ZmFsc2U7CgkvKiCCxoLogqCCpoK4gUGDioOTg06Q5oLMg4yDWIKqglCCwoLMj+qNh4K+gq8g
Ki8KCWlmIChubl9zdCAhPSBubl90byB8fCAhaXNfbm9maXJzdCgpKQoJCXJldHVybiBmYWxz
ZTsKCS8qaWYgKCEobm5fc3QgKyAxMCA8PSBubl90bykpCgkJcmV0dXJuIGZhbHNlOyAqLwoJ
cmVmID0gZ2V0ZW52KCJIVFRQX1JFRkVSRVIiKTsKCWlmICghcmVmIHx8ICEqcmVmKQoJCXJl
dHVybiBmYWxzZTsKCQoJc3ByaW50ZihidWZmLCAiLyUuNTBzLyIsIHp6X2JzKTsKCXAgPSBz
dHJzdHIocmVmLCBidWZmKTsKCWlmIChwKSB7CgkJaW50IG4gPSBzdHJsZW4oYnVmZik7CgkJ
aWYgKCoocCArIG4pID09ICdcMCcpCgkJCXJldHVybiB0cnVlOwoJCWlmIChzdHJuY21wKHAg
KyBuLCBpbmRleG5hbWUsIHNpemVvZihpbmRleG5hbWUpLTEpID09IDApCgkJCXJldHVybiB0
cnVlOwoJfQoJcCA9IHN0cnN0cihyZWYsIGNnaW5hbWUpOwoJaWYgKHApIHsKCQljaGFyIGJi
c1tzaXplb2YoenpfYnMpXTsKCQljaGFyIGtleVtzaXplb2Yoenpfa3kpXTsKCQljb25zdCBj
aGFyICp0bXAgPSB6el9xdWVyeV9zdHJpbmc7CgkJenpfcXVlcnlfc3RyaW5nID0gcCArIHNp
emVvZihjZ2luYW1lKS0xOwoJCXp6X0dldFN0cmluZyhiYnMsIHNpemVvZihiYnMpLCAiYmJz
Iik7CgkJenpfR2V0U3RyaW5nKGtleSwgc2l6ZW9mKGtleSksICJrZXkiKTsKCQl6el9xdWVy
eV9zdHJpbmcgPSB0bXA7CgkJcmV0dXJuIHN0cmNtcCh6el9icywgYmJzKSA9PSAwICYmIHN0
cmNtcCh6el9reSwga2V5KSA9PSAwOwoJfQojaWZkZWYJVVNFX1BBVEgKCXNwcmludGYoYnVm
ZiwgIi90ZXN0LyIgQ0dJTkFNRSAiLyUuNTBzLyUuNTBzLyIsIHp6X2JzLCB6el9reSk7Cglp
ZiAoc3Ryc3RyKHJlZiwgYnVmZikpCgkJcmV0dXJuIHRydWU7CiNlbmRpZgoJcmV0dXJuIGZh
bHNlOwp9CgppbnQgb3V0X3NpbXBsZWh0bWwoKQp7CgljaGFyICpzWzIwXTsKCWNoYXIgcFtT
SVpFX0JVRl07CglpbnQgbiA9IG5uX3N0OwoJCgkvKiBodG1sX2hlYWQoKSAqLwoJc3BsaXR0
aW5nX2NvcHkocywgcCwgQmlnTGluZVswXSwgc2l6ZW9mKHApIC0gMjAsIDApOwoJaWYgKCEq
cCkKCQlyZXR1cm4gMTsKCXBQcmludGYocFN0ZG91dCwgUjJDSF9TSU1QTEVfSFRNTF9IRUFE
RVJfMSgiJXMiKSwgc1s0XSk7CglwUHJpbnRmKHBTdGRvdXQsIFIyQ0hfSFRNTF9IRUFERVJf
Miwgc1s0XSk7CgkKCW91dF9yZXNOKys7CS8qIIN3g2KDX49vl82C8Jd9jn4gKi8KCWlmICgh
aXNfbm9maXJzdCgpKSB7CgkJb3V0X2h0bWwoMCwgMCwgMSk7CgkJaWYgKG4gPT0gMSkKCQkJ
bisrOwoJfQoJZm9yICggOyBuIDw9IG5uX3RvOyArK24pIHsKCQlvdXRfaHRtbCgwLCBuLTEs
IG4pOwoJfQoJCgkvKiBodG1sX2Zvb3QoKSAqLwoJcFByaW50ZihwU3Rkb3V0LCBSMkNIX0hU
TUxfRk9PVEVSKTsKCXJldHVybiAwOwp9CiNlbmRpZgkvKiBSRUZFUkRSRVNfU0lNUExFICov
Cg==
>>266 のサイズ出力を加えて、dat_out_raw()を整理したよ。
getlinelenは消していいね。
int dat_out_raw(void)
{
const char *begin = BigLine[0];
const char *end = BigLine[lineMax];
/* ・・・ */
if(raw_lastnum > 0
&& raw_lastsize >= 0
&& !(raw_lastnum <= lineMax
&& BigLine[raw_lastnum] - BigBuffer == raw_lastsize)) {
pPrintf(pStdout, "-INCR");
/* 全部を送信するように変更 */
} else {
pPrintf(pStdout, "+OK");
/* 差分送信用に先頭を設定 */
begin = BigLine[raw_lastnum];
}
pPrintf(pStdout, " %d\n", end - begin);
/* raw_lastnum から全部を送信する */
#ifdef ZLIB
if (gzip_flag)
gzwrite(pStdout, (const voidp)begin, end - begin);
else
#endif
fwrite(begin, 1, end - begin, pStdout);
return 1;
}
359 :
デフォルトの名無しさん :01/09/16 02:01
NORMAL_TAGCUTなんかいらねーよ。 通常時間帯の使い勝手を悪くするのは、ただの「改悪」だろ。 「レスを全部読む」の件をもう忘れたらしいな。
>>359 要らないかどうかを判断するのはお前ではない。ましてや開発者でもない。
このスレは与えられた命題に対する回答を提案するためのもので、実際に
導入するかどうかは運営側に委ねられている。
>>359 NORMAL_TAGCUTを見つけるぐらいちゃんと見てるわりに、ここの趣旨が
理解できてないな。
作って見る→あんまり良くない→OFF推奨でプログラムには残す。
一度作ったものは、そう簡単になくしはしない。
改悪にしか思えなくても転送量が減るなら試すのがここのやり方だ。
何のために簡単にON/OFFできるように作ってると思ってるんだ。
おまえが言うべき言葉は「NORMAL_TAGCUTはOFFにしとけ」だ。
否定的意見は歓迎するが、全否定は言うだけ無駄だぞ。
まあ、NORMAL_TAGCUTはOFFにしとくかな。
それと言い方変えると採用されやすいぞ(藁
「通常時間帯までTAGCUTしないでいいんじゃないの。」
「そうでした。じゃ、NORMAL_TAGCUTはoffにしておきます。」
それでも運営側がONにするかもしれんがな。
>>360 -362
どうやら、俺を誰か他の人間と勘違いしているらしいな。
一応俺もそれなりの量のコードは書いて、反映されているんだがな。
例えば
>>357 とか。
過去の要望や修正で忘れられているものを直しながら読み進め、
動作を確かめるのが遅れたから、今更言ったわけだが。
>>361 それには当然目を通しているが、俺の認識では
「全部読む」がなくなったのはCHUNK_ANCHORを優先させるために
ただ入れ忘れただけだと思っていたが。
もちろん、「混雑時なら」実験としても意味があると思うし、
そこには書いてないが、コピペしてst=やls=を外せばいいだけだから、
混雑時に(どうせ100しか読めない)「全部読む」が無くなっても
大きな問題だとは、俺も思わない。
>>362 例えば、
>>276 なども俺なのだが。
>要らないかどうかを判断するのはお前ではない。ましてや開発者でもない。
俺も開発者であり、利用者でもある。
>このスレは与えられた命題に
ピーク時の転送量削減と、負荷の低減が与えられた命題。
混雑時以外は、できるだけ要望に沿った機能にすべきだと思っている。
サイズが大きすぎになる前に警告を出すとか、ね。
>回答を提案するためのもので、
俺は、開発者の1人として、運営者に提案したくないと思ったから、
ああ書いた。俺以外が皆賛成なら、仕方ないが。
>実際に導入するかどうかは運営側に委ねられている。
だから、実際に本格導入される前に意見を述べている。
>>363 >NORMAL_TAGCUTを見つけるぐらいちゃんと見てるわりに、
ほぼ全て把握しているつもりだけど?
>ここの趣旨が理解できてないな。
それは申し訳なかったね。
>一度作ったものは、そう簡単になくしはしない。
INDEXはどうした?COOKIEは?
それに、「OFF推奨」が試験導入に際しては意味が無く、
read2ch.hでのdefineがそのまま残ることは、
今までの動きから明らかだろ。
それが本格導入ではないとしても、数日から数週間の間、
試験導入されたサーバーの住民から見れば、
「完全に変更された」ように見えるわけだ。
>おまえが言うべき言葉は「NORMAL_TAGCUTはOFFにしとけ」だ。
いや、違うね。
「ピーク時の転送量と負荷という主命題を忘れるな」だ。
「自己満足になってないか?」もね。
あらかじめ言っておくが、key=xxxxだけでls=50になるとかも、俺は反対だよ。
NORMAL_TAGCUTは要望もなく、同意も求めていないように見えたが。
俺は、「ピーク時」が全てだ今でも思っているからね。
>それと言い方変えると採用されやすいぞ(藁
そいつは悪かったな。
俺は2ちゃんの良さは、「発言者」「言葉遣い」ではなく、
「発言内容」のみで評価されることにあると思っていたからな。
言い方は、その時の気分で豹変しちゃうんだよ。
「丁寧な言葉遣いで煽り」より、
「乱暴な言葉遣いだが正論」な、
茶羽的な方針でいたいね。
ま、「丁寧な言葉遣いで正論」が一番だろうけどな。
さてと。
>>360 -362さんは著しく気分を害されたでしょうし、
俺も、世話になっている人達に文句を言うだけというのは
本意ではないので、
うざいでしょうけど、少々考えを述べたいと思います。
まず、俺を含んでCVSを触らない人間が
修正や変更をした部分をCVSに反映してくれている方々には、
本当に感謝しています。
(特に前スレの775さんには本当にお世話になりました)
ありがとうございます。
本来なら、自分でCVSに触れる方が他の人の手を煩わせずに済むのですが、
逆に自分で触れない場合は、必ず自分以外の誰かの評価(同意)の上で
修正が施されることになるわけで、
自分で見落としていた観点からの評価や、機能自身に対する評価等も
ある程度行われ、同時に不具合を発見してもらえる場合すらあります。
そんな事から、俺個人の意見としては、
「常に他の誰かにやってもらう」のは悪い事ではなく、
むしろ好ましいとさえ思うようになっています。
また、「誰でも簡単にできること」でも、思いつくまま
書きこむようにしていますが、これは邪魔でしょうか?
例えば報告された簡単な不具合の修正個所や、夜勤さんからの要望等でも、
だれも書きこんでいなければ書きこむようにしていますが、
これも、書き込む人と修正する人の2人が目を通すことで
「ちょっとしたミスを避けられれば」との考えからです。
修正する人が注意深く変更してくれるのなら
(不具合報告等の見落としがなければ)必要ないとも考えています。
ところで、「常に他の誰かにやってもらう」とした場合、
修正が数行で済む時はここに書きこむとして、ある程度変更点が大きい時は
CVSを触る人にとってどのようにすれば作業が楽になりますか?
考えつくのは、
・変更個所と変更・追加を示した部分を
ftp://210.170.xx.xx/incoming/に置く ・diffを取り、
ftp://210.170.xx.xx/incoming/に置く ぐらいですが(なんかまた変わったっぽい)。
こちらで可能な範囲で楽な方法にしたいと考えていますので、
(「自分でやれ」というのはナシで)
できれば希望する方法を書いてもらえると助かります。
(上のftpが使えない時は圧縮してBase64でエンコードして貼ればいいですか?)
最後にもうひとつ。
read.cgiに求められているのは、
「ピーク時の転送量と負荷の低減」でよろしいでしょうか?
現在はまだ実験中ということで、
いろいろ試したい機能もでてくるかと思います。
前スレの734あたりにちらっと書きましたが、実験の方針として、
「転送量削減が見こめるが、使い勝手を損なう可能性がある」
ものは、「試験的に混雑時のみ実施」、
「利便性を向上させるが、転送量を増大させる可能性がある」
ものは、「試験的に非混雑時のみ実施」
という形がbestではないかと思います。
そのために、不必要(かもしれない)な時間帯による場合分けや
外部ファイルによる設定変更等の追加が求められるとしても、
試行錯誤している段階では、できるだけそのようにコードを作るのが
理想ではないかと思っています。いかがでしょうか。
> CVSを触る人にとってどのようにすれば作業が楽になりますか? 私の場合、になりますが。 diff (ただし-c または -u付きで)を取ってもらうと patch → cvs ci だけで 作業が終わるので楽です。patch にすることで他人の修正内容が上書きされて消 される、という可能性もなくなりますし。 しかしながら、本当は cvs を使ってもらった方がいいのですけど。変な修正が 施されてもどうせ元に戻せるので...。 あ、あとどこかで「"新レスの表示"はどこ?」とか言われていましたね。私も ちょっと見てどれが「新レスの表示」なのか分からなかったのでできるだけ「未 読」は目立つように太字にするなりもうちょっと表現を改めるなりした方がい いかと思います。 # わざわざバイト数増やしてどうすんだという声もあるかもしれないけど見つけ # られずに使われないよりかはマシだと思う
>>363 -364
>「レスを全部読む」の件をもう忘れたらしいな。
これで、他の誰かと勘違いした。スマソ。
NORMAL_TAGCUTは、言われて見ればそのとおりかなと思ったが、
開発やめろとしか言わない誰かさんだと思ってああいう書き方をした。
ソースからなくすのは、ある程度の合意か、cvs触っているやつの独断が
必要だ。
(INDEXはまだ完全にはなくなってないよ。COOKIEは使用上の弊害が認め
られたので削除された。)
>>365 -366
変更部分を確認するなら手間が少ないんだが、確認しながら変更するのは
かなり手間がいる。
「動作するところまでは確認したから、変更部分に問題ないか確認して
commitしてね。」で、read.cそのものか、diffを渡すのが手間が少なく
ていいかな。
(個人的にはreac.cそのものがいいが)
>「ピーク時の転送量と負荷の低減」でよろしいでしょうか?
「ピーク時の」って所をすぐ忘れるんだよなあ。
>>367 表現の変更で転送量に望ましい選択をしてもらえるならいいんじゃない。
上に「次50」があるのはよくない気がしてきました。 「次、次、次、あっ、ここから読もう。」があまりにも便利。 ということで、再び、上下に置くものについてのご意見をお願いします。 ver5.21の現状 上:■掲示板に戻る■ 全部 1- 前50 次50 最新50 下:掲示板に戻る 全部 1- 前50 [次50/未読] 最新50 混雑時 上:■掲示板に戻る■ 1- 前50 次50 最新50 下:1- [次50/未読] 最新50 これを 上:■掲示板に戻る■ 全部 最初から 前50 次50 最新50 下:掲示板に戻る 全部 最初から 前50 [次50/<b>未読</b>] 最新50 混雑時 上:■掲示板に戻る■ 最初から 前50 最新50 下:[次50/<b>未読</b>] 最新50 こんな感じかな。 混雑時は、下の最新50も取って未読を最優先にしたい所。 #「前、前、前」ってパターンもあるな。 #それでも「全部読む」よりはましか。 #CHUNK_ANCHORがベストな気がしてきた。
>混雑時は、下の最新50も取って未読を最優先にしたい所。 これ賛成。 それと、5.20の「新レス」(「新着」「未読」かはともかく)の見かけは、 結構好評で、悪評は少なかったように思う。 そこで、平常時を2段式にして、下半分だけのイメージを書いてみる。 続きがのある/なしで最新50が上段/下段となるのが面倒くさいけど、 こんなイメージはどうかな?(表示される文字は適当) 平常時・続きあり ―――――――――――――――――――――――――――― 続きを読む 最新50 ―――――――――――――――――――――――――――― 掲示板に戻る 全部読む 1-50 ―――――――――――――――――――――――――――― 平常時・最後まで読んだ ―――――――――――――――――――――――――――― 追加レス ―――――――――――――――――――――――――――― 掲示板に戻る 全部読む 1-50 最新50 ―――――――――――――――――――――――――――― 混雑時・続きあり ―――――――――――――――――――――――――――― 続きを読む 最新50 ―――――――――――――――――――――――――――― 混雑時・最後まで読んだ ―――――――――――――――――――――――――――― 追加レス ――――――――――――――――――――――――――――
平常時の最新50をつける位置が逆だった。 続きがある時につけなくちゃだめだね。 両方につけてもいいけど。
いや、371が間違いだった。 ちゃんと最新50は上段についてる。 自分でも間違えるくらいだから、使いにくいか。
CHUNK方式が最も効率よさそうなんで、少し考えてみました。 混雑時の100レス制限との噛み合わせを考えて、CHUNKは100単位。 上:■掲示板に戻る■ 全部 CHUNK_ANCHOR 最新50 下:[続きを読む/新着レス]///掲示板に戻る 全部 前100 次100 最新50 混雑時 上:■掲示板に戻る■ CHUNK_ANCHOR 最新50 下:[続きを読む 最新50/新着レス] ※混雑時は表示内への>>リンクははずす。 ※続きを読む/新着レスは、最後まで一気読み。
意見くれage
>>373 -374
混雑時間帯には「続きを読む」に100レス制限つくんですよね?
平常時について「続きを読む」「次100」「最新50」がなんかかぶってるような気が
するんだけど、どれかをなくすとしっくりいかなく、迷っております。
混雑時間帯は
上:■掲示板に戻る■ CHUNK_ANCHOR 最新50
下:続きを読む 最新50
でOKだと思います。
>>375 混雑時100レス制限はそのままです。
平常時の「次100」は、見た目の都合ということで。
害はなさそうですから。
上下のアンカーは、nofirst=trueにしないでいいんですよね。
転送量的には、nofirst=trueですけど。
上に前/次よりもCHUNK_ANCHORを推奨ってことで実装してみます。
すみません >342=>345 は検討さえしていただけないのでしょうか…
>>379 失礼しました。見落としです。ぺこぺこ。
CSSによる軽量化ですね。
HTML文法にあるCSS宣言ならいいと思います。
# 意味不明かな...HTMLには無くてCSSにだけある定義使うとブラウザがまだ
# 対応し切れていないような気がしたので...ということ。
>380 ありがとうございます.WEB 制作板の方の話はすっかり止まってしまっているので こちらに直接書き込ませていただきました. 追加されるのは以下の文字列: </title> の直前に <meta http-equiv=Content-Style-Type content="text/css"> </script> の直後に </script><style type="text/css"><!--b{color:green}a b{color:blue}--></style> 削除するのは <font color=green> と,対の </font> です. >345 にも書きましたが +122-(25*age 発言) バイト減ります. 表示は NN4.78(Win) でも大丈夫なので,ほとんどのブラウザで大丈夫だと思います.
>>378 #define Katjusha_Beta_kisei と config.txt の書き換えはやりました。
>>378 >「名前:」も「:」だけにする
CUT_NAME_STRINGとして追加しときました。
>>378 > * [+OK zzz] の場合は差分のみを送信する。zzzは差分サイズ。
> * [-INCR] (Incorrect)の場合はすべてのデータを送信する。
INCRのときも、[-INCR zzz]という形になってるよ。サイズがついてる。
>>378 >HEADリクエストに対しては Last-Modified と Content-Length を吐くだけにする
>
>>219 >>226 これやってみた。
ZLIB時:
HEADに対してはヘッダのみ出力する。内部的には全部圧縮して、結果の
Content-Lengthも出力。
GZIP時:
本文も出力しているまま。
無圧縮時:
通常のヘッダ出力後即終了。Content-Lengthは従来同様出力していない。
PREV_NEXT_ANCHORと同時にCHUNK_ANCHOR/RELOADLINKを指定した時、 上:■掲示板に戻る■ 全部 CHUNK_ANCHOR 最新50 下:[続きを読む/新着レス]///掲示板に戻る 全部 前100 次100 最新50 混雑時 上:■掲示板に戻る■ CHUNK_ANCHOR 最新50 下:[次100 最新50/新着レス] の形にした。 config.txtの内容をチェックして、ダブりと現状に合っていないものを修正。 PREV_NEXT_ANCHORで使用している文字列をr2chhtml.hに追い出した。 >>のリンクがno_first=trueになっていなかった。
>>381 USE_CSSとして付けた。
一応ONにしておいた。
が、私は普段CSSはoffしてるので、ちょっとだけ悲しい。
#まずい、寝なきゃ。
>>387 内部的に圧縮を行ったりgzipを呼んだりしてしまうと負荷が
ほとんど下がらないのでContent-Lengthは出力しなくて
いいと思います。
>IEはヘッダにはAccept-Encoding: gzip, deflateと含めているにも
>関わらず、実際にdeflateでエンコードしたデータを喰わせても
>解釈できないです。
根拠はここ。
http://cvs.m17n.org/~akr/diary/d2001_01.html ちなみにこの日記自体がContent-Encoding: deflate
で圧縮されているので尋常な手段では読めません。
一言でまとめると、HTTP仕様はzlibフォーマットのdeflateを
要求しているにもかかわらず、IEやNetscape6はzlibヘッダ
の付いていない生のdeflateストリームでないとデコード
できません。
というわけで事実上Content-Encoding: deflateは使えないです。
cvsにChangeLogファイル作ってみたよ。 今までの変更のサマリーとtagごとの採用状況をざっと書いてみました。
395 :
369 ◆3XTuRnAc :01/09/17 23:30
396 :
369 ◆3XTuRnAc :01/09/17 23:44
あ、ちょうどいい機会なんで、dyndns取りました。
ftp://readcgi.dyndns.org/ ってことで。
あとはこれを自動更新(せめて一時間に一度程度の自動更新)
ができると良いんですが・・・。
なんとか、一日に一度はチェックするようにしたいと思います。
たびたびすみません(^^;;。 369ってのは、ここのスレッドの番号じゃなくて、以前の騒動の時の コテハンでして・・・。
>>397 実は
>>378 もそうなんだけど、リンクされているスレが3つとも、
前スレじゃなくて、このスレだったりして。
>>398 おひさしぶりです。
>>399 .....鬱氏(^^;
1000035521 -> 998997848
>>397 >/tech/998997848/817
>・URL記述に対するリンク設定も時間帯によらせる NO_LINK_URL_BUSY
やっときました。
ちょっと要望なんですが、 ■掲示板に戻る■ 1- 51- 101- 151- 201- 251- 301- 351- 401- 最新レス50 これ、上じゃなくて下においていただけないですかね。 特に「1- 51- ・・・」の部分。 いったん流し読みして、次を読むためにもう一度一番上までスクロールさせて・・・ ってのはちょっと面倒(^^;;。
>>403 下に 前100 次100 と付く予定ですが、それじゃ駄目ですか?
>>404 あ、そういう予定があるならそのほうがいいな。
この5.20の書式で行くのかなーと誤解してしまい。
申し訳ない。
mmap時のlockは どちらにしても読み出し側単独では不可能(というかナンセンス)で 書き込み側での対応が必要かと
んーっと、とりあえず、ETag実装してみた。
知識が足りないので、これでいいのかもよくわからない。
足りない点や見落としなど含め、意見求む。
大幅に書きなおしてくれる人も歓迎。
動作は、まず当初の目的を考えたので、
to=nnが指定されている時だけETagを出力するようにした。
main()の流れは、こんな感じ。
・・LastModifiedチェックの後、atexitを登録してから、
#ifdef PUT_ETAG
if (need_etag(st, to, ls)) {
char etag[60];
dat_read(fname, st, to, ls);
create_etag(etag);
if (match_etag(etag)) {
puts("Status: 304 Not Modified\n");
return 0;
}
printf("ETag: %s\n", etag);
}
#endif
出力部のチェックサムは、とりあえずcrc32を使い、
>>173 を参考に、dat_read()の先頭でBigBufferをチェックするようにした。
また、影響を少なくするため、NotModifiedを返すのは混雑時のみにした。
出力情報は、%x形式で、
ETag: "crc-全サイズ-全レス数-送信部サイズ-送信部レス数-flag"
flagは出力が混雑時のものか、等。
かなり冗長で使っていない情報も出力しているが、
必要最小限にすべきか?
もし、ツール等が使う可能性があるなら、
to=nn以外のリクエストにも必要があるかも。
今のままだと、st=1&to=150とした場合、
時間帯が異なると必ず更新扱いされてしまう。
リクエストのレス全てから算出した値と
実際に出力するレスから算出した値を両方求め、
それぞれと比較して一致したら304を返す方が望ましい?
動作確認は、apacheをいれてないので中途半端にしか出来ていない。
・ETag出力の確認
・match_etagがtrue/falseを返す時の出力をそれぞれ確認
・HTTP_IF_NONE_MATCHをputenvして、datに手動で行を追加して確認
等はしたものの、
IEのリクエストから動作を確認したわけではないので、
ONにする前に(可能な人に)動作確認をお願いしたい。
NotModifiedを返す条件も募集中(追加をお願い)。
ところで、昨日いろいろ調べて、ようやくcheckout出来た。 (今まで、sshでつまずいていた) WinCVSではなく、コマンドラインから動かしているけど、 updateは正常に動いているようなので、 commitも動作自体は大丈夫だと思う(これからテスト)。 よく見たら、改行コードが変換されている。 まあ、これはcommitする時に戻されるだろうからいいとして、 他に気になるのは漢字コードか。 コメントを書くのにEUCで保存できないエディタを使ったり、 間違えてSJISで保存したりすると、化けるんだろうな。 ということで、ETagの動作確認の他に、commitの動作確認もお願い。
ちゃんとできたみたい。 でも、read.c以外は触りたくないし、 細かい修正は今まで通りここに書きこむ方が気楽だ。
>>408 困ったことに(笑)
read.cとr2chhtml.hはSJISだけどread2ch.hやconfig.txtなどはEUCなんですよね。
文字コード自動判別&元の文字コードを維持してくれるエディタを使うようにしないと。
改行コードについてはWinCVSなんかはテキストとして扱うものは変換してくれますね。
バイナリファイルをaddするときはバイナリフラグをつける必要があります。
>>407 need_etagを呼ぶタイミングだけど、
gzip対応かどうかを判定する前にBaddAccess()を呼ぶのはまずいっす。
etag判定時と実処理時で結果が違ってしまう。
>>407 > to=nn以外のリクエストにも必要があるかも。
to以外もすべて、ツールに限らず必要だと思う。
「>」はタグの終了と紛らわしくない限り、「&gt;」と文字参照にする 必要はないことになっています。実際、IEやNetscapeでは 問題ありません。 文中の「&gt;」を「>」に置換すれば1つにつき3バイト節約できます。
>>414 「>」を>や「<」を<に変換するのは、本文中にタグを埋め込まれるのを
避ける意味もあるから、まずいことになりゃしないか?
あれ? &amp;gt; って書いたのに、「>」になっちゃった。 何で?前はこれで書けてたのに。 ってことで修正 >「>」を&gt;や「<」を&lt;に変換するのは、本文中にタグを埋め込まれるのを
さらに自己レス。かちゅ〜しゃの仕様ですね。 失礼しました。
>>414 >>で始まる他レス番号参照のところでのみ対応してみました。
あと、PATH_INFO時に他レスへのリンクが常に範囲指定になっていたのも
直しました。
>>415 タグが閉じるのが早くなるだけだから不正にタグを埋め込まれた
場合にはむしろ望ましいはずです。
&lt;の置き換えだとかなり問題ですが。
>>416 かちゅ〜しゃのバグです。せっかく開発してるのだからread.cgiで
見てみてください。ちゃんと書けてます。
417で自己レス入ってるのが見えなかった鬱打
#ifdef NN4_LM_WORKAROUND if (!memcmp(zz_http_user_agent, "Mozilla/", 8) && zz_http_user_agent[8] == '4' && zz_http_user_agent[10] >= '5' && !strstr(zz_http_user_agent, "compatible")) putchar('\n'); else #endif この対策が必要なのはNN4.xでも4.5以降だけなので(それ以前 はそもそもgzipに対応していない)もっと絞り込めるはず。 それともgzip非対応バージョンでもContent-Lengthがあると Last-Modifiedが無効になるのでしょうか。
こうしたほうがいいか。 #ifdef NN4_LM_WORKAROUND if (!memcmp(zz_http_user_agent, "Mozilla/4.", 10) && zz_http_user_agent[10] >= '5' && !strstr(zz_http_user_agent, "compatible")) putchar('\n'); else #endif
USE_CSSは ・メールリンクなしのfusianasanやトリップに色が付かない ・sageリンクをクリックしていても紫にならない ・名前のリンクを選択中でも赤くならない など、かなり見栄えへの副作用が大きいので、 とりあえずOFFを希望します。
あと、 ・CREATE_NAME_ANCHORが有効だとメールリンクなしの 名前まで青くなる というのもありました。
私の計算が間違っていなければ <a href="mailto:sage "></a>も <font color=#0000c0></font>も 同じバイト数で、SAGE_IS_PLAINはまったく意味がない ので廃止を提案してみます。
#ifdef ZLIB if ( is_head() || gzip_flag == compress_none ) #endif { /* HEADリクエストならここで終了 */ if ( is_head() ) { return 0; } } は不必要に冗長。 /* HEADリクエストならここで終了 */ if ( is_head() ) { return 0; } と論理的に等価。
PATH仕様で「ls=」を意味する文字を、「=」から「l」あたりに 変更することを提案します。 そうすると「"」を安全に省略できるので、リンク1つにつき さらに2バイトの節約になります。
>>428 ああ、それはHEADリクエストでも圧縮処理するように戻すことを考えて
残したんです。
>425-426 CSS の実装を提案した者です.ご意見ありがとうございます. >・メールリンクなしのfusianasanやトリップに色が付かない これは…トリップのところまで含めて </b> になってないのはなぜなんでしょう? また,そこが太字であったら(見栄え以外の)不都合はありますか? >・sageリンクをクリックしていても紫にならない >・名前のリンクを選択中でも赤くならない 今は名前のところが<a><b>...</b></a>になっていますが,これを <b><a>...</a></b> には できませんか?できるなら css 宣言の a b{color:blue} を外すだけで対応できます. #ところでこのあたりの色,うちの IE55 NN478 Moz094 だといずれも紫にも赤にもならないのですが? >・CREATE_NAME_ANCHORが有効だとメールリンクなしの名前まで青くなる これは<a name></a> を<b></b> の前に置くか,あるいは <b><a>...</a></b> にして css の a b{} を外すか. ということで,いずれも<a><b> の順番を変えるとかそういうことで対処できますが, 問題はそれをするのにどのくらい手間がかかるかということです. <font color=green> のところは確実に減るのでその減る分に見合うだけの作業になるか どうかですが,これは作業をしてくださる方の判断にお任せします.
>>424 ,431
大丈夫そうに見えるのでcommitした。(memcmpはやめてstrncmpにした)
要NN4.0xで検証
>>429 =をlにした。"は、まだ取っていない。
>>339 PATH_INFOで/の数が不正の時にエラーになるようにした。
USE_CSSはとりあえずOFFにした。
>これは…トリップのところまで含めて </b> になってないのはなぜなんでしょう? 名前欄に「</b>◆トリップ<b>」のように入るからです。 >また,そこが太字であったら(見栄え以外の)不都合はありますか? トリップは◆があるからまだいいのですがfusianasanは騙りと区別が 付かないというかなり強力な不都合があります。 見栄えも十分問題だと思いますが。 >今は名前のところが<a><b>...</b></a>になっていますが,これを <b><a>...</a></b> には そうすると今度はfusianasanしたとき<a>と<b>が互い違いに なるのでネスケで細字に見えないという不都合が発生します。 というかそれでわざわざ順番を変えてもらったのです。 >#ところでこのあたりの色,うちの IE55 NN478 Moz094 だといずれも紫にも赤にもならないのですが? うちのIE55では紫にも赤にもなるのですが。 NN478でもクリックした瞬間にはちゃんと赤になります。 >これは<a name></a> を<b></b> の前に置くか, すると今度はメールリンクしなくなります。<a>要素をname用と href用と2つ書いたらサイズが増えて本末転倒になりそうだし。 >あるいは <b><a>...</a></b> にして css の a b{} を外すか. すでに述べた通り却下です。 >ということで,いずれも<a><b> の順番を変えるとかそういうことで対処できますが, というわけでそうでもないです。あらためてUSE_CSSは オフにすることきぼん。
って書いてる間にOFFになってましたか。
>>435 名前の所を強烈にいじらないと問題ありそうだったからOFFにしました。
>>433 書き忘れ
>>427 <font color=#0000c0>を<font color=blue>に変えた。
これで一応意味はあるのかな。OFFだけど。
>434 なるほど.背景をきちんと理解せずに中途半端な提案をしていたようで,申し訳ありません. 以上のようなことがあるとすると,CSS を ON にするのは難しそうですね…. やはり,見栄えを変えずに CSS でサイズ削減ってのは(今回の場合には)無理そうですね.
まだちゃんと見てないんだけど、 PUT_ETAGがあるとdat_readを複数回呼ぶ場合があるんじゃない? サーバーの負荷の問題もあるので、Etag使用は本当に必要な場合のみに 抑えたいところ。
CSSの話は最初からボーっと眺めているだけで、 「IEとNNは大丈夫」を読んで、時代に逆行するけど 「それ以外に問題が発生したら、UserAgentからMozillaが含まる場合」などと、 昔よく行われていた(らしい)ことを考えていた。 もし、CSS使用時の他の問題が解決する目処が立ちそうなら、 UserAgentを判別してIEの場合だけCSSを使うとか、 NNの場合は<b>や<a>の順番を変える方法もありそうだね。 結構変更が大変そうだから、 転送量的に必要で、変更する手間があれば、だけど。
すんまへん、大嘘ついてました。NNのgzip対応は4.06からです。
GET
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1000035521&ls=100 HTTP/1.0
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.06 [ja] (WinNT; I)
Host: piza2.2ch.net
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: Shift_JIS,*,utf-8
で、NN4.05で試すとAccept-Encodingがないにも関わらず、
なぜかgzip圧縮された内容が返ってきて見事に文字化けしたのですが、
これってread.cgi 5.20の既知の不具合でしたっけ?
もちろんキャッシュは完全にクリアしてから試しています。
GET
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1000035521&ls=100 HTTP/1.0
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.05 [ja] (WinNT; I)
Host: piza2.2ch.net
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*
Accept-Language: en
Accept-Charset: Shift_JIS,*,utf-8
HTTP/1.0 200 OK
Proxy-Connection: Keep-Alive
Connection: Keep-Alive
Date: Tue, 18 Sep 2001 15:18:37 GMT
Server: Apache/1.3.6 (Unix) PHP/4.0.3pl1 mod_ssl/2.3.6 OpenSSL/0.9.3a
Content-Encoding: gzip
Last-Modified: Tue, 18 Sep 2001 14:22:56 GMT
Content-Length: 19216
Content-Type: text/html
んーNN4.06で見てみたけど今書き込んだ内容が反映されてない… 経路上のどこかにキャッシュでもあるんだろうか…。
Shift+リロードしたら圧縮されてない内容がちゃんと 返ってきました。やっぱりどこかでキャッシュされてたみたいです。 お騒がせしました。
>>441 -443
Proxy-Connection: Keep-Alive
↑
この辺か?
4.05以前の場合どのみち圧縮された内容は返されない (=Content-Lengthは出力されない)ので、そんなシビアに 取らなくてもいいと思われ #ifdef NN4_LM_WORKAROUND if (!strncmp(zz_http_user_agent, "Mozilla/4.", 10) && !strstr(zz_http_user_agent, "compatible")) putchar('\n'); else #endif
ん? 先祖がえりしてるような…。 #ifdef NN4_LM_WORKAROUND if (!memcmp(zz_http_user_agent, "Mozilla/", 8) && zz_http_user_agent[8] <= '4' && !strstr(zz_http_user_agent, "MSIE")) putchar('\n'); else #endif
みなさん、いつもありがとうございます。 新しいの入れようと思うのですが、、、 どれ(どこ)なのかな?
>>450 >>449 が最新です。
5.21の問題点
上に前、次があるのは転送量的に問題。
NORAML_TAGCUTは、要らなかった。
>>451 どーもです。
これから、choco に入れてみます。
Makefile:11: *** commands commence before first target. Stop. make ここて、止まっちゃいます。 なぜに?
>>453 なぜだかわかりませんが、SRCSからの3行を削ってみたらどうでしょう?
SRCSはcgiを作るのには関係ありませんから。
うっ こんどは、 Makefile:71: *** missing separator. Stop.
?? なんか、継続行を理解できないmakeな感じですね。 gmake 使えませんか?
gmake はいってないです。 GNU Make version 3.74, by Richard Stallman and Roland McGrath. Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 95 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. いままでの makefile で ok ですか? 5.21のやつ
>>457 はい、SRCSに一つ追加しただけですから。
なんか変ですね。改行コードがおかしいのかしら?
いままでの Makefile で、make しました。 choco に 5.22 入りました。
>>458 なんか そんな感じです。
ちゃんと追っていないので、断定はできませんが、、、
何かへんなコードが紛れ込んでいるのかしらん?
>>459 ご苦労さまでした。
しかし、Makefileのどこがまずいんだろう。
SRCSの最後にChangeLogを追加しただけなんですが。
#define R2CH_HTML_ERROR_5_TEMP \ "隊長! スレッド <font color=deeppink><b>%s.dat</b></font> は、html化されるのを待っているようです。<br>しばらく待つしかない。\n" 次期 ver では、にしていただけるとありがたいです。
う、imode時のPATH仕様対応をやってたんだが一足遅かったか。 [r2chhtml.h] /* tail: npath=生成するURLその1 nst=次のxxxレス lpath=生成するURLその2 ls=最新レスxxx */ #define R2CH_HTML_T_IMODE_TAIL(npath, nst, lpath, ls) \ " <a href=\"" npath "\">次の" nst "レス</a>" \ " <a href=\"" lpath "\">最新レス" ls "</a><br>\n" /* tail: PATHナシ %s=cgi %s=board %s=key %d=開始 %d=終了 %d=レス数 %s=cgi %s=board %s=key %d=レス数 %d=レス数 */ #define R2CH_HTML_IMODE_TAIL \ R2CH_HTML_T_IMODE_TAIL("%s?bbs=%s&key=%s&st=%d&to=%d&imode=true", "%d", \ "%s?bbs=%s&key=%s&ls=%d&imode=true" NO_FIRST, "%d") /* tail: PATH仕様 %d=開始 %d=終了 %d=レス数 %d=レス数 %d=レス数 */ #define R2CH_HTML_PATH_IMODE_TAIL \ R2CH_HTML_T_IMODE_TAIL("%d-%di", "%d", \ "l%di", "%d") /* i-Modeで見たとき: PATH仕様 %s=スレ名 %s=板 %d=一度に表示するレス数 %d=一度に表示するレス数 %d=一度に表示するレス数 */ /* </title>の前の空白は削除しないこと */ #define R2CH_HTML_PATH_IMODE_HEADER_1 \ "<html>" \ "<head>" \ "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">" \ "<title>%s </title>" \ "</head>" \ "<body bgcolor=#efefef text=black link=blue alink=red vlink=#660099>" \ "<a href=\"../../../../%s/i/\">■掲示板に戻る■</a>" \ " <a href=\"1-%di\">レスを最初から読む</a>" \ " <a href=\"l%di\">最新レス%d</a>" #define R2CH_HTML_PATH_RELOAD_I \ "<center><a href=\"%d-i\">新着レスの表\示</a></center><hr>" #define R2CH_HTML_FORM_IMODE(depth) \ "<form method=POST action=\"" depth "bbs.cgi\">\n" \ "<input type=submit value=\"かきこむ\" name=submit> " \ "NAME:<input name=FROM size=20 value=\"\">" \ "MAIL:<input name=mail size=20 value=\"\">" \ "<br>" \ "<input type=hidden name=bbs value=%s>" \ "<input type=hidden name=key value=%s>" \ "<input type=hidden name=time value=%ld>" \ "<textarea rows=5 cols=60 wrap=off name=MESSAGE></textarea>" \ "</form><br>"
机上デバッグしかやってないのでうまく通らないかも。 [read.c] out_html()に追加: #ifdef USE_PATH if (path_depth) pPrintf(pStdout, R2CH_HTML_PATH_IMODE_TAIL, lineNo, lineNo + RES_IMODE, RES_IMODE, RES_IMODE, RES_IMODE); else #endif html_head()に追加: #ifdef USE_PATH if (path_depth) pPrintf(pStdout, R2CH_HTML_PATH_IMODE_HEADER_1, title, zz_bs, RES_IMODE, RES_IMODE, RES_IMODE); else #endif html_reload()に追加: #ifdef USE_PATH if (path_depth) pPrintf(pStdout, R2CH_HTML_PATH_RELOAD_I, startline); else #endif html_foot_im()に追加・変更: #ifdef USE_PATH if (path_depth) pPrintf(pStdout, R2CH_HTML_FORM_IMODE("../../../"), zz_bs, zz_ky, currentTime); else #endif pPrintf(pStdout, R2CH_HTML_FORM_IMODE(""), zz_bs, zz_ky, currentTime);
>>462 done.
tag: YAKIN20010919を打った。
MakefileのSRCSを分割してみた。これでなんとかならないかな?
みなさんお疲れさまです。 5.22のユーザーインタフェース(?)すごく使いやすい。。。とてもお気に入りです。 使いやすすぎるのが転送量的に問題とならないことを祈ります。
ニュース速報が最新スクリプト5.22になっていた。
見栄えに副作用を与えないUSE_CSS案。のつもりだったんだが どういうわけかNN4だと名前が全部緑になりやがる。 マジで氏ね>ネスケ #ifdef USE_CSS #define R2CH_HTML_CSS_DEFINE \ "<style type=\"text/css\"><!--" \ "body{background:#eee;color:#000}" \ "a{color:green}" \ ":link{color:blue}" \ ":visited{color:#609}" \ ":hover{color:red}" \ "--></style>" #define R2CH_HTML_BODY_DEFINE "<body bgcolor=#efefef text=black link=blue alink=red vlink=#660099>" #else #define R2CH_HTML_CSS_DEFINE "" #define R2CH_HTML_BODY_DEFINE "<body>" #endif #define R2CH_SIMPLE_HTML_HEADER_1(title) \ "<html>" \ "<head>" \ "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">" \ "<title>" title " </title>" \ R2CH_HTML_COOKIE_SCRIPT \ R2CH_HTML_CSS_DEFINE \ "</head>" \ R2CH_HTML_BODY_DEFINE [CREATE_NAME_ANCHORがオフのほうを変更。オンのほうはそのままでいい] #ifdef USE_CSS #define R2CH_HTML_RES_NOMAIL(n, nm, d, t) \ "<dt>" n " " R2CH_HTML_NAME "<a><b>" nm " </b></a> " R2CH_HTML_DATE d "<dd>" t "<br><br>" #else
#if defined(LATEST_ANCHOR) && !defined(SEPARATE_CHUNK_ANCHOR) /* LATEST_ANCHORも常に生きにする */ どっちが正しいの?
#if 0 /* #ifdef USE_PATH */ ってやっぱ気持ち悪いから #ifdef USE_INDEX にしたいなあ。と言ってみる。
SAGE_IS_PLAINについて。 どうせ3バイトの節約にしかならないなら <font color=blue></font> より <a href=mailto:sage></a> のほうがCREATE_NAME_ANCHOR時に有利なぶんいいと思われ それにこれだと見栄えに影響を与えないからONにしても いいはず。
/* ここには、If-None-Matchを付加しないUAのリスト (又は付加するUAのリスト)を置き 無意味な場合にfalseを返すのが望ましい。 */ If-None-Matchが規定されたのはHTTP/1.1からだから HTTPバージョンを見るといいのではないかと。
rawmodeでERR_NOT_FOUNDのとき、 ・倉庫落ちかどうか判別できるようにする ・倉庫落ちで.datにアクセス可能ならそのURLを返す ことを提案。 倉庫にもないことがその場で分かればツールが無駄に もう一度アクセスする必要がなくなる。 過去ログURLの形式が変わるたびにツールのほうで 対応しなおす必要もなくなる。
rawmodeのとき、たとえば +OK 12345/512K のような形式で、ツールに限界サイズを知らせるようにすることを 提案。 dat直接アクセスが禁止されればツールも「大きすぎます」の 影響を受けるようになるのでこの情報が必要になるはず。
>>476 [r2chhtml.h]
#define ERRORMES_NOT_FOUND "そんな板orスレッドないです。"
#define ERRORMES_DAT_FOUND "過去ログ倉庫で発見 %s"
#define ERRORMES_TEMP_FOUND "html化待ち"
[read.c]
#ifdef RAWOUTの前に
*tmp = '\0';
strcpy(tmp, LastChar(zz_ky, '/'));
kako_dirname(zz_soko, tmp);
を移動。
#ifdef RAWOUT
if(rawmode) {
/* -ERR (message)はエラー。 */
if (errorcode == ERROR_NOT_FOUND) {
sprintf(doko, KAKO_DIR "%.50s/%.50s.dat",
zz_bs, zz_soko, tmp);
if (!stat(doko, &CountStat)) {
pPrintf(pStdout, "-ERR " ERRORMES_DAT_FOUND "\n", doko);
} else {
sprintf(doko, TEMP_DIR "%.50s.dat",
zz_bs, tmp);
if (!stat(doko, &CountStat)) {
pPrintf(pStdout, "-ERR %s\n", ERRORMES_TEMP_FOUND);
} else {
pPrintf(pStdout, "-ERR %s\n", mes);
}
}
} else
pPrintf(pStdout, "-ERR %s\n", mes);
exit(0);
}
#endif
>>476 ちょっと関連しますが、将来的には /kako/ 以下の .dat は rawmode で
あろうとなかろうと、read.cgi が扱った方が転送量減ると思うのですが、
予定としてはどうなのでしょう。。。
/kako/ 行きでも ls st to の指定ができるのは大きいと思いますので。
# 今でもブラウザでURL指定すればできますが、いちいちやってくれる人は
# 多くはないかと。結果、/kako/ 行きのものは html 全体が呼び出される、と。
>>479 ># 今でもブラウザでURL指定すればできますが、
これの意味が分からん。
>>473 >>478 > USE_INDEX用処理の一部が#if 0になっていたので#ifdef USE_INDEXに訂正。
> rawmodeリザルトで "-ERR 過去ログ倉庫で発見 %s" と "-ERR html待ち" 追加。
やったんだけどcvsにcommit挑戦してるんだが固まってる…
落ちてるのか? 単に重いのか?
>Secure connection to iwato.uryusoft.net refused. >cvs [commit aborted]: end of file from server (consult above messages if any) (´д`;)
ホスト名出したらまずくないか? CVSたててくれたけど、ログに残るの嫌がってたのに。
不具合は確認。 HTMLヘッダが最後についちゃってる。 これから原因調べます。
原因判明。 main()の最後で、 #ifdef REFERDRES_SIMPLE if (can_simplehtml()) out_simplehtml(); else #endif dat_out(0); これがあるので、RAWMODEの最後にゴミが付く。
>>488 >#ifdef USE_INDEX
> if (path_depth == 2) {
ここでelseのchainが切れてしまってるんだな。
> else if (path_depth == 2) {
とすれば直るはず。
>>489 いかん、else入れる場所違うな。
> } else
>#ifdef USE_INDEX
> if (path_depth == 2) {
こんなふうにしないと。
>>490 対策は、
#ifdef RAWOUT
if (rawmode)
dat_out_raw();
else
#endif
を
#ifdef REFERDRES_SIMPLE
の直前にもってくるか、
if (rawmode) {
dat_out_raw();
return 0;
}
とすれば楽なんじゃないかな?
ツール作者の方々、申し訳ありませんが、
Ver5.22がこの世の中から消滅するまでの間、
サイズを手がかりに切り捨てちゃってください。
お、CVS復活してる
ごめん。 YahooBB来たんでocnとマルチホームさせたり Nimda対策で壁の設定いじってたりして間欠的に落ちてました。 gedoh.orgのミラーが止まってるのは謎なので調べてみます。
cron埋まってた;)
おつかれさまですぅ いつもありがとうございますぅ
すみません、あんまりサイズが違うもんで、ちょっと不安になってしまいました。
>>500 5.22のバグで、後ろに余分なものがついてます。
+OKに書かれたサイズ分より後ろは無視してください。
それにしてもずいぶん差があるな…
ETag生成時、dat_read()が二回呼ばれることがあったが、1回のみにするようにした。
>>490 確かにreturn入れたほうがケアレスミス防げるね。ってことで入れた。
>dat_read()が二回 dat_read()の先頭で対策されている
ぬお、いつのまに。1.113で入ってたのか。 つーことで無駄な追加だったので消しました。 ChangeLogも適切な位置に移動。
げ、pathと旧形式の出力を統合してたんだが、 1.124と内容までコンフリクトしちまった。 形式気にしないで出力できるようにしたんだが、 さて、どうしよう。
んと、俺が考えていたのは、 あれから発展させて、r2chhtml.hを少しいじって pPrintfのフォーマット以外のパラメータを (特に#ifdef USE_PATHと#elseとで)統一しようかなと。 で、将来的に必要があれば 時間帯やUA,imode,PATH_INFO,SETTING_FILE等による 実行時の出力切替を容易にすることも可能だろうと。 struct { const char *head1; const char *head2; const char *res_mail; const char *res_nomail; ・・・ } zz_html = { R2CH_HTML_・・・ R2CH_HTML_・・・ }; こんな感じで、実行時にzz_html.head1等を書き換えて pPrintf(pStdout, zz_html.head1, ...); という形式にしたいなって。 (ただし、フォーマット間違いの警告が出なくなると思うけど)
>>507 URLの生成を関数に追い出して、文字列を共用できるようにしたんだが、
たとえば、こんな感じ。
pPrintf(pStdout, R2CH_HTML_CHUNK_ANCHOR("%s", "1"),
create_link(1,CHUNK_NUM,0,0,0) );
ついでに、path形式の時は"を取るなど。
やってることは大差ないんだが、機能がダブってるんでマージできないんだよね。 ちなみに、r2chhtml.hにPATHの文字は残っていない。
506の方法は美しそうだ。がんばれ(笑)
rewrite_hrefの方はconflictしてないだろうとして、 「掲示板に戻る」のリンク先かな? 可能なら、zz_board_nameから作成してもらったほうがいいけど、 だめなら、無視してくださいな。 html_head/html_footの内部の #ifdef USE_PATH #endif #ifdef CHECK_MOD_GZIP #endif #ifdef GZIP #else #endif が1つのpPrintfだけになっちゃったから、その辺がまずいかな。 あと、zz_server_softwareも、 「使わないから消した」だけだから、 必要ならもどしちゃってください。 将来formatの切替を考えるにしても、 パラメータが(関数としてでも)統一されさえすればよいので、 無理にzz_thread_nameにこだわるつもりはないです。
>>511 実は、rewrite_hrefから何からread.cgiを呼び出す奴は全ていじった。
掲示板に戻るも考え方は同じだが、違う実装をした。
他にも、細かい所を修正してあったので、悪いが1.124の変更はキャンセルして
commitしました。
途中のマージ忘れがないか、これからチェックします。
特に機能的に変更した内容はChangeLogにも書いて頂けますか?
>>513 機能的な変更は、ほとんどがバグ対応です。
マージミスの修正とコメントの追加が済んだら、一緒にコミットします。
>>472 ですが、
LATEST_ANCHORは常に生きにしたはずなのに
conditionが残ってるのはどうしてなんでしょうか?
(ALL_ANCHORのほうは残ってない)
>>514 コミットしました。
>>515 SEPARATE_CHUNK_ANCHORの時に出力する場所が違うせいで、
取りにくかったのが原因かな。
整理されてみると、first_line()やlast_line()が何回も呼ばれているのが気になってくる。
>>515 LATEST_ANCHORのcondition削除
ついでに、SEPARATE_CHUN_ANCHORがONの場合を調整
config.txtで、ALL_ANCHORも「採用決定のためcondition削除」 へ移動したほうがいいのではないかと。
#ifdef GZIP if (!gzip_flag) strcpy(p,"index.html"); else #endif strcpy(p,"index.htm"); これおかしくないですか? GZIPがオフならindex.htmlに 戻らなくてはならないはずですけど。 それと戻り先を /板名/ にすれば10バイト減らせます。 以上を考え合わせて #ifdef GZIP if (gzip_flag) strcpy(p,"index.htm"); #endif
非パス仕様のURLで呼ばれたときはBASEを出力して、
常にパス仕様でリンクを生成
[r2chhtml.h]
#ifdef ALWAYS_PATH
#define R2CH_HTML_HEADER_0 \
"<html>" \
"<head>" \
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">"
#define R2CH_HTML_BASE_DEFINE "<base href=\"
http://%s/test/ " CGINAME "/%s/%s/\">"
#endif
変更(<title>以前を削除):
#define R2CH_SIMPLE_HTML_HEADER_1(title, cookie_script) \
R2CH_HTML_CSS_TYPE \
"<title>" title " </title>" \
cookie_script \
R2CH_HTML_CSS_DEFINE \
"</head>" \
"<body bgcolor=#efefef text=black link=blue alink=red vlink=#660099>"
変更(<title>以前を削除):
#define R2CH_HTML_IMODE_HEADER_1(title, board, alllink) \
"<title>" title " </title>" \
"</head>" \
"<body bgcolor=#efefef text=black link=blue alink=red vlink=#660099>" \
"<a href=\"" board "\">■掲示板に戻る■</a>" \
" <a href=" alllink ">レスを最初から読む</a>"
[read.c]
#ifdef ALWAYS_PATH
char const *zz_server_name;
#endif
zz_GetEnv()に追加:
#ifdef ALWAYS_PATH
zz_server_name = getenv("SERVER_NAME");
#endif
html_head()内「if (!is_imode()) {」の直前に追加:
pPrintf(pStdout, R2CH_HTML_HEADER_0);
#ifdef ALWAYS_PATH
if (path_depth < 3 && zz_server_name) {
pPrintf(pStdout, R2CH_HTML_BASE_DEFINE, zz_server_name, zz_bs, zz_ky);
path_depth = 3;
}
#endif
>>520 最新版では合わせてあるはずだけど?
5.22のことを言ってるのかな。
>>522 過去の動作に合わせた。判定しないときはindex.htm推奨の名残。
いまさらindex.htmにする意味はないから、index.htmlでかまわないけど。
index.htmlを付けるかどうかは、バイト数削ることより
bbs.cgiも含めて統一することの方が大切。
2chの板じゃ回転速すぎて意味がない気もするが。
>>525 bbstableは /板名/ にリンクしてるからそのほうがいいかと
思った。リロードは常にindex.htmだし。
過去動作との互換は了解。
>判定しないときはindex.htm推奨の名残。
どこで推奨してたの?
PREV_NEXT_ANCHOR有効時はi-mode版もリンクを 「1-」「最新10」「次10」のように簡略化すること希望。
>>526 書き方が悪かったかな。
判定が入っていない時期に、2chで.htmの使用を推奨していたため。
現実には一度も実使用されてない部分だからindex.htmlでいいんだが。
>>527 1より前はありえないから「前100」は省略した。
最後は読んでるうちに増えるかもしれないので「次100」は残しておいた。
取った方がいいですか?
>最後は読んでるうちに増えるかもしれないので「次100」は残しておいた。 なるほど。
CHUNK_ANCHORの「1001-」もいらない気がする。 Over 1000 Threadを読むためだけに「1001-」を ほしがる人はいないでしょう。
どこかcurrentの動作テストを常にできるところってある?
196 名前:哀モですが 投稿日:01/09/20 22:04 ID:cr4UsmUk 哀モードからなんですけど、表示が10レスきざみですよね。 で、今の状態だと最初と最新の 10レスしか見れないじゃないですか。 >>も使えない板もあるし。 【前の10レスを見る】のようなんは導入されないのですか?
>>532 -533
スレストに失敗することもあったりするからなあ。
「1001-」は、気持ちよくないのは確かだね。
>>534 テスト公開してくれた所が一時期はあったようなんだけど、今は?
>>535 i-modeでどうなると嬉しいかを実感できないので不具合修正にとどめています。
具体的に要望を出す人もいなかったし。
次ぎの10レスでnofirst=trueの方がいいんじゃないか
とか思ってもいじってません。
>>528 みたいに具体的な要望をあげておくのがよろしいかと。
COOKIEの残骸を取った。
create_bbs_path()を作って、FORMの出力まわりも整理した。
なんかもっとましな方法がありそうだが、他との統一ということで。
>>524 相対パス対応が欲しいな。(/test/もはずしたい)
SCRIPT_NAMEあたりか?
HTTP_HOSTとSERVER_NAMEの扱いは?
>>537 HTTP_HOSTは「Host:」ヘッダがないと定義されないから
クライアントに依存しないSERVER_NAMEにした。
実際には「Host:」がないと「ブラウザ変ですよん」を喰らっ
たり鯖によっては見ることさえできないから気にし過ぎ
かもしれないけど。
相対パス対応(
>>524 と違うところのみ)
#define R2CH_HTML_BASE_DEFINE "<base href=\"
http://%s%s/%s/%s/\ ">"
#ifdef ALWAYS_PATH
char const *zz_server_name;
char const *zz_script_name;
#endif
if (path_depth < 3 && zz_server_name && zz_script_name) {
pPrintf(pStdout, R2CH_HTML_BASE_DEFINE, zz_server_name, zz_script_name, zz_bs, zz_ky);
path_depth = 3;
}
書き忘れ。 #ifdef ALWAYS_PATH zz_server_name = getenv("SERVER_NAME"); zz_script_name = getenv("SCRIPT_NAME"); #endif
おっと 現在は index.htm だの色々ありますが、完成形は 全部 .html だけの運用になりまする。(.htm は廃止の予定です) よろしくお願いいたします。
>>540 ,542
HTTP_HOSTが使える時はそちらを使うようにした。
掲示板に戻るは、できるだけ/板名/を使うようにした。
path形式で/iのバグ修正
ALL_ANCHORの記述移動
>>528 #ifdef PREV_NEXT_ANCHOR
#define R2CH_HTML_IMODE_TAIL(path, next) \
" <a href=" path ">次" next "</a>"
#define R2CH_HTML_IMODE_TAIL2(path, ls) \
" <a href=" path ">最新" ls "</a><br>\n"
#else
#define R2CH_HTML_IMODE_TAIL(path, next) \
" <a href=" path ">次の" next "レス</a>"
#define R2CH_HTML_IMODE_TAIL2(path, ls) \
" <a href=" path ">最新レス" ls "</a><br>\n"
#endif
#ifdef PREV_NEXT_ANCHOR
#define R2CH_HTML_IMODE_HEADER_1(title, board, alllink) \
"<title>" title " </title>" \
"</head>" \
"<body bgcolor=#efefef text=black link=blue alink=red vlink=#660099>" \
"<a href=\"" board "\">■掲示板に戻る■</a>" \
" <a href=" alllink ">1-</a>"
#define R2CH_HTML_IMODE_HEADER_2(latestlink, ls) \
" <a href=" latestlink ">最新" ls "</a>"
#else
#define R2CH_HTML_IMODE_HEADER_1(title, board, alllink) \
"<title>" title " </title>" \
"</head>" \
"<body bgcolor=#efefef text=black link=blue alink=red vlink=#660099>" \
"<a href=\"" board "\">■掲示板に戻る■</a>" \
" <a href=" alllink ">レスを最初から読む</a>"
#define R2CH_HTML_IMODE_HEADER_2(latestlink, ls) \
" <a href=" latestlink ">最新レス" ls "</a>"
#endif
i-mode版で不要な</dl>が出力されるバグの修正。 if (!is_imode()) を、dat_out()内の pPrintf(pStdout, R2CH_HTML_PREFOOTER); の前に付ける。 今はi-mode版ではcan_simplehtml()がfalseを返すから 関係ないけどout_simplehtml()も修正しておいたほうが 安全かも。
>>547 修正。
#define R2CH_HTML_ERROR_5_HTML \
"隊長! 過去ログ倉庫で、<a href=\"%s%s\">スレッド %s.html</a> を発見しました。\n"
#define R2CH_HTML_ERROR_5_DAT \
"隊長! 過去ログ倉庫で、<a href=\"%s%s\">スレッド %s.dat</a> を発見しました。<br>" \
"<b><font size=+1 color=red>が</font></b>、しかしまだ html化されていません。残念、待つしかない。\n"
#define R2CH_HTML_ERROR_5_NONE \
"<a href=\"%s" KAKO_DIR "\">過去ログ倉庫</a>にもありませんでした。<br>" \
"問い合わせても見つかる可能\性はほとんどありません。\n"
pPrintf(pStdout, R2CH_HTML_ERROR_5_HTML,
create_bbs_path(), doko, tmp);
pPrintf(pStdout, R2CH_HTML_ERROR_5_DAT,
create_bbs_path(), doko, tmp);
pPrintf(pStdout, R2CH_HTML_ERROR_5_NONE,
create_bbs_path(), zz_bs);
create_bbs_path()は関数名を変更したほうがいいかも。
>>477 dat_out_raw()を修正:
pPrintf(pStdout, " %d/%dK\n", end - begin, MAX_FILESIZE / 1024);
>>552 当てた。
あとcreate_parent_link()などを毎回呼ぶのをやめて
一回だけグローバル変数に作って使うようにした。
>>nnリンクを削除する場合に余分な"</a>"が残ってしまっていたバグ修正。
dat_out()とかのlevel引数って使ってないみたいだけど、 バッサリ消してもいいんでしょうか?
>>555 #ifdef USE_INDEXで囲むくらいにしておいたほうがいいかも。
関数の引数として渡されてる部分は難しいけど。
USE_INDEXってのは.idxファイルのサポート用で ダイジェスト表示とは直接関係ないんだっけ? だとすると #ifdef USE_INDEX は変だな。 やっぱりバッサリ逝くか?
>>557 #ifdef USE_INDEXで囲った。
USE_INDEXが有効ならダイジェストを呼び出すようになってたので。
sageのメールリンク最適化。 [r2chhtml.h] #ifdef CREATE_NAME_ANCHOR (中略) #ifdef SAGE_IS_PLAIN #define R2CH_HTML_RES_SAGE(n, l, nm, d, t) \ "<dt>" n " <a name=" l ">" R2CH_HTML_NAME "<font color=blue><b>" nm " </b></font></a> " R2CH_HTML_DATE d "<dd>" t "<br><br>" #else #define R2CH_HTML_RES_SAGE(n, l, nm, d, t) \ "<dt>" n " " R2CH_HTML_NAME "<a name=" l " href=mailto:sage><b>" nm " </b></a> " R2CH_HTML_DATE d "<dd>" t "<br><br>" #endif #else (中略) #ifdef SAGE_IS_PLAIN #define R2CH_HTML_RES_SAGE(n, l, nm, d, t) \ "<dt>" n " " R2CH_HTML_NAME "<font color=blue><b>" nm " </b></font> " R2CH_HTML_DATE d "<dd>" t "<br><br>" #else #define R2CH_HTML_RES_SAGE(n, l, nm, d, t) \ "<dt>" n " " R2CH_HTML_NAME "<a href=mailto:sage><b>" nm " </b></a> " R2CH_HTML_DATE d "<dd>" t "<br><br>" #endif #endif [read.c] #ifdef SAGE_IS_PLAIN (1箇所だけ)を削除 SAGE_IS_PLAINはいちおう残してみたけどオンにしたほうが とくなことって何もない気がする。
>>559 これってsageのために囲む " を取っただけ?
圧縮率にも、cgiのバイナリサイズにも逆効果な気がするなあ。
>>560 じゃあ危なそうな文字( " とか空白とか)を含んでない
ときはいつも " を削除するというのはどう?
あちこちにあるtarget="_blank" の「"」って消せるんでない?
_ は " で囲まなくても安全な文字じゃないんだけどすでに # とか囲まないで書きまくってるしいまさらそんなこと気にしても 確かに仕方ない
HTML 2.0/3.2の仕様上は、 " で囲まなくてもいい文字は 英数字と - と . だけ。 現実のブラウザはもっとはるかにルーズだけど。
HTML 4.0(とそれ以降)の仕様上は、 "" で囲まなくてもいい文字は 英数字と . と - と _ と : の四つ。 現実のブラウザは以下同じ。
>>553 >あとcreate_parent_link()などを毎回呼ぶのをやめて
最大2回しか呼ばないんだけど・・・。
使わないときは、初期化もしないんだけど・・・。
>>562 r2chhtml.hでTARGET_BLANK, TARGET_BODYにマクロ定義した上で
「"」を消してみた。
駄目ならこのマクロ定義直してくれ。
効率とはまったく関係ないけど REFERDRES_SIMPLE のスペルミスが気になる… ×REFERDRES_SIMPLE ○REFEREDRES_SIMPLE
開発中のみ、平常時間帯でも混雑時の出力をするquery、 Faketime=true(あえて大文字)を提案したいが、どうだろう? ローカルで確認する時もSETTING_FILEのLIMITを変更するのが面倒だし、 逆はともかく、制限が強くなるだけだから、 そのまま実験サーバーに上げられても不都合はないと思うので。 もしやるなら、zz_GetEnv()の最後でisbusytimeを設定した後に、 #ifndef NDEBUG { char fake[1024]; GetString(zz_query_string, fake, sizeof(fake), "Faketime"); if (*fake == 't') isbusytime = 1; } #endif (read2ch.hに記述するような内容ではないと思う)
それだと、すべてのリンクにFaketime=trueが付くようにしないと ちゃんと確認できないと思うが… REFERDRES_SIMPLEとか確認できなさそうだし。 常に混雑時間帯のCGIとか別ディレクトリに用意しておいたら?
いや、嫌なら別に無くてもかまわないけどね。 開発時に出力をCUT&TRYする時に確認を楽にしたいだけだから。 別CGI作って置いといても、read.cをいじっている最中には無意味だし。
「嫌なら」って言い方良くなかった。 「自分以外に需要がなければ」ってことです。 どうしても必要だと思ったら、同意など求めずに勝手にcommitしてますが、 自分の判断だけで決めるのは避けたいので。
>>572 HTTP_HOSTの最後が:80だったら混雑時にするってのでいかが。
http://localhost:80/ とかでアクセスすればいい。
int IsBusy2ch(void)
{
#if 1
if (zz_server_name && strstr(zz_server_name, ":80") ) return 1;
#endif
どうも、「別のディレクトリに」を勘違いして解釈していた気がする。
テスト用にLIMIT_AMやLIMIT_PMを変えた板を用意して、
bbs=techbusyのような形式でリクエストしてテストすれば、
read.cには手を加えずとも、出力確認程度なら
Faketimeとほぼ同様の効果が得られる、という気がしてきた。
ということで、この提案は取り下げます。
ところで、
>>475 のHTTP1.1判別なのだが、
もし、If-None-Matchを付加するのがHTTP1.1クライアントのみとしても、
クライアントがHTTPのVer1.0か1.1のどちらでGETしているかを
CGI側で判別することはできるのだろうか?
ちょっと調べた限りではみつからなかった。
>>574 IE5.5 : SERVER_PROTOCOL="HTTP/1.1"
NN4.78 : SERVER_PROTOCOL="HTTP/1.0"
telnetでGETのみ(HTTP指定なし) : SERVER_PROTOCOL="HTTP/0.9"
いや、ちょっといれ忘れたんだけど、0.9かよ。
無理に調べて対応する程のことってあったけ?
0.9は無視していいと思う。 せっかくタグ吐いてもApacheに全部捨てられちゃうだろうし。
知らんかった。 SERVER_PROTOCOLって、Apacheがレスポンスで返すバージョンのことだと思ってた。 どうもありがとう。
で、HTTP/の指定が無いと0.9扱いになると。
#define R2CH_HTML_CSS_TYPE "<meta http-equiv=Content-Style-Type content=\"text/css\">" インラインスタイルを使ってないからこれは不要。
READ_KAKOを追加 read.cgiで過去ログ、dat落ちを読む 指定方法 read.cgi/tech/kako/nnn/ または read.cgi?bbs=tech&key=kako/nnn read.cgi/tech/temp/nnn/ または read.cgi?bbs=tech&key=temp/nnn 現在はONにしてあるが、転送量が増加すると思うので 本番導入前に夜勤さん★に考えてもらうこと。 ChangeLog読んでから導入してもらいましょう。
以前は bbs=tech&key=../kako/nnn/nnnmmm で読めたものを 負荷の問題から止めてあるだけでしょ。 dat_readのhtml_error()を呼ぶ3つ目ifを削れば、 kakoのサブディレクトリまで指定しないといけないけど、 そのまま読めるはず。
READ_KAKO conditionを設けるのはいいと思うが、 理由があって読めなくしてあるのだから、 OFFにしておくべきだと思う。 PATH仕様への対応も、 「過去ログ読む程度にそこまでやる必要はあるの?」 という気がする。 でも、ディレクトリが移動して ../kako/でアクセス出来なくなる場合もあるから その場合に備えて対応はしておくのはいいかもね。
まあ、
>>206 >>237 みたいな話もあるし、
過去ログの指定先がどこになるかわかんないから、
kako/nnnで統一できた方がいいでしょ。
PATHで、../kako/を指定されるのは困るってのもある。
read.cgiが扱うなら、提供するかもしれない。
どれもこれも夜勤さん次第。
そういえば、st=などを「過去ログを発見しました」に透過的に渡して、 転送量を節約しようって話もあったね。
>>582 さん
ありがとうございます。
新バージョン導入待ちですね、、
FTP鯖内のpub/MP3ってなんだろうね?
だからOFFにしとけっての。
591 :
デフォルトの名無しさん :01/09/22 00:04
>PATHで、../kako/を指定されるのは困るってのもある。
>>585 はそこまでする必要があるのかって話でしょ。
>どれもこれも夜勤さん次第。
だから、今まで過去ログをあえて閲覧できないようにしていたんでしょ。
READ_KAKOは、必要があれば夜勤さんがONにすればよいだけなので、 現状に合わせてOFFにします。
>>587 READ_KAKO_THROUGHとして実装した。
>>591 やるからには、ちゃんとやる。
ALWAYS_PATHを採用し、全読み以外を提供するならやらない訳にいかない。
html化された過去ログには広告ついてるやん。どうすんだ。
594 :
デフォルトの名無しさん :01/09/22 01:52
意味がわかりません
>>594 わからないのは、↓のことかな。
>ALWAYS_PATHを採用し、全読み以外を提供するならやらない訳にいかない。
read.cgi?bbs=tech&key=../kako/999/999xxxで表示したときに
ALWAYS_PATHだと、中のリンクが使い物にならなくなるの。
全部読むことしか提供しなければ、リンクが機能しなくても
なんとかなるけど、範囲指定を提供するならリンクも機能して
欲しいよね。
以前、過去ログがread.cgiで読めた頃から >read.cgi?bbs=tech&key=../kako/999/999xxxで表示したときに >中のリンクが使い物にならなく なってたけど、 苦情は見たことなかったな。 html化した後のリンクの苦情はあったね。 アンカー振って欲しいって。 kakoが読めなくて苦情が出た事は知ってるけどさ。
こんなの作った。read2ch.hはいじってない。
△CUT_TAIL_BLANK
直前の文字がShift_JISの1バイト目であるかを厳密に判定する事により、
名前欄とメール欄の末尾の空白、及び<br>タグ直前の空白をほぼ消滅させる。
▲STRICT_ILLEGAL_CHECK
(意図的な)文字化け防止のため、
'<',"
http:// "の直前の文字がShift_JISの1バイト目かを厳密に判定し、
必要ならば空白を加える。(fusianasanのbold化け対策と似た処理)
コスト(負荷)がかかる割に転送量減少には貢献せず、
仮に文字化けしてもその部分だけで留まり、大きな影響はないため、OFF推奨。
/* 名前末尾・メール末尾・<br>タグ前・レス末尾の空白を
(可能なら)全て削除する */
#define CUT_TAIL_BLANK
/* '<',"
http:// "の直前の文字を調べ、必要ならば空白を加える。 */
/* #define STRICT_ILLEGAL_CHECK */
kakoの読み出しとtempの読み出しは別々のconditionに すべきだと思う。現在kakoは読めるけどtempはdatさえ 読めないのは理由のないことではない。 もちろんデフォルトは両方ともOFF。
>>598 変更点。
▲READ_TEMP
(READ_KAKO定義時のみ有効)
html化待ちのdatもread.cgiで読む。
先頭に追加:
#ifndef READ_KAKO
#undef READ_TEMP
#endif
main():
#ifdef READ_KAKO
if (read_kako[0] == 'k') {
char buf[256];
kako_dirname(buf, zz_ky);
sprintf(fname, KAKO_DIR "%.20s/%.20s.dat", zz_bs, buf, zz_ky);
#ifdef READ_TEMP
} else if (read_kako[0] == 't') {
sprintf(fname, TEMP_DIR "%.20s.dat", zz_bs, zz_ky);
#endif
} else
#endif
html_error():
#ifdef READ_TEMP
pPrintf(pStdout, R2CH_HTML_ERROR_5_TEMP,
zz_cgi_path, zz_bs, "temp/", tmp, tmp);
#else
pPrintf(pStdout, R2CH_HTML_ERROR_5_TEMP,
tmp);
#endif
>>599 当てた
>>597 config.txt, ChangeLog, read2ch.h にも反映した
>>593 READ_KAKO_THROUGHの実装ってcvsに入ってないみたいな。
>>601 CUT_TAIL_BLANK作った人が消したようだ。
入れなおし中
>>602 READ_KAKO_THROUGH復活&整理した
604 :
◆D69Zsbfg @夜勤 ★ :01/09/22 18:18
いつも お世話になっています。 区切りのよさそうなところで、また新しい version を入れて見たいのですが、 どんなもんでしょうか?
Rubyはクソです。ゴミ箱逝きです。 いじょ この発言をコピペしていただければ幸いです。
>>604 お疲れ様です〜
区切りは良いんじゃないでしょうか。
5.22からの大まかな変更は:
・i-mode関連の修正複数
・rawモードの末尾に余分な出力があったバグ修正, 結果書式に上限サイズ追加
・行末の空白を削除
・過去落ち画面のリンクがおかしかったバグ修正
のほか、新機能として:
ALWAYS_PATH: read.cgiからリンクされるレスへのリンクがすべてパス形式になる
が有効になっています。
また、
READ_KAKO: 過去ログをread.cgiで参照可能にする
READ_TEMP: 過去落ち前datも参照可能にする
READ_KAKO_THROUGH: 範囲指定を過去落ち/過去落ち前にも継承する
という新機能もありますが、こちらは無効になっています。
詳しい修正内容はChangeLogをご覧下さい。
>>601 -603
申し訳ないです。ごめんなさい。
609 :
◆D69Zsbfg @夜勤 ★ :01/09/22 20:20
じゃ 入れよーと思います。 どこから 落とせばいいのかな?
611 :
◆D69Zsbfg @夜勤 ★ :01/09/22 20:25
了解。
612 :
◆D69Zsbfg @夜勤 ★ :01/09/22 20:31
choko に read,.cgi ver 5.23 いれましたー。
cvsにtag YAKIN20010922 打っときました
615 :
◆D69Zsbfg @夜勤 ★ :01/09/22 20:37
>>613 うーむ、、、
なんせ 一秒間に数十回とか呼ばれる cgi なんで、極力ファイルの参照は
行いたくないというのが本音だったりします。
そのへんは、今後も考えなきゃならないところですが、、
なるほど… 次バージョンからはUSE_SETTING_FILEはデフォルトで オフにしておきましょうか…
>>613 -616
こんなもんでも作ってごく一部のみsettingを変えられるようにしましょう。
実況板といえども、FORCE_304_TIME=0はやめといた方がいいと思う。
[read2ch.h]
#define SPECIAL_SETTING \
{ "saku", "LINKTAGCUT=0" }, \
{ "dancesite", "FORCE_304_TIME=3" },
[read.c]
struct _setting {
char *board_name;
char *settings;
} special_setting[] = {
SPECIAL_SETTING
{ NULL, },
};
SETTINGFILEをOFFにすると、 メモリ参照が即値になり、ファイルを探さなくなるので 負荷は少し減りますね。 板別に設定が出来なくなってしまうので、 鯖別に設定を持つだけになってしまうのと、 状況をみて外から簡単に変更するというのが出来なくなるのがデメリットですか。 でも、ファイルの負荷を考えるなら、まず、mmapのパラメータ、 zz_mmap_size = zz_fileSize + 0x10000, PROT_READ | PROT_WRITE, MAP_PRIVATE, を変更するほうが先だと思います。
iモードの動作を何とかしてください。 機能をWEB版と同じにして欲しい。
板別の設定は
>>617 のような方法で何とか…
簡単に変更できなくなるのは同じですが今まで一度も
使われていないようですし。
>でも、ファイルの負荷を考えるなら、まず、mmapのパラメータ、
> zz_mmap_size = zz_fileSize + 0x10000,
> PROT_READ | PROT_WRITE,
> MAP_PRIVATE,
>を変更するほうが先だと思います。
どのように変更すればいいんでしょうか?
あとCSS版を早く入れて欲しいです。 ブラウザによってAAがズレると言ってました。
AAのズレとCSSは関係ないと思いますが…。 CSS使用はfusianasanや<a name>の対応に問題があって 無効にされています。過去ログ参照。
>>621 どの機能が欲しいんですか?
全機能だと画面につらいと思うんですが。
>>623 CSS版は問題があって無効にしてるんじゃなかったっけ。
CHUNK_ANCHORをi-modeでやったら「1- 11- (以下100個続く)」 ということになってほとんど不可能だと思われ RELOADLINKは実装済み。 したがってPREV_NEXT_ANCHORでは。
627 :
◆D69Zsbfg @夜勤 ★ :01/09/22 22:03
ひとつ 提案なんですが、英語版とか何とか語版とかつくれたらなー なんて考えています。 各文字列を #define とかしちゃって、 おひまな時でよいので、そんなのが実装できるように ちよっと考えてみてください。 で、 bbs.cgi で 二バイト系の文字はじけば、英語のみの板ができるのでは? と思っています。 英語でお祭り 2ちゃんねる vs Yahoo.com とか、
文字列はすでにほとんどr2chhtml.hに追い出されてるから あとは英語版を用意すればいいかな?
>>619 5.22でpath形式の時のバグです。
5.23では直っているはず。
>>622 間違いなく変更してよいのが、
zz_map_size = zz_fileSize,
PROT_READ,
の2つです。
(他のプロセスによって書きかえられなければ)オーバーランしないように
なっているし、書き換えもしていないはずです。
で、あぼーんとの関係で若干問題があるのが
MAP_SHARED
だけど、あぼーんとの関係で
・サイズが詰められたことで、行末の判定を誤る
・その結果、行末が見つからずにオーバーランする
という可能性が僅かにあるものの、
MAPしている間に書き換えが起こるのは滅多に無いと思うし、
それが起こる度合いを考えれば、
その時は素直に500エラーで良いのではと思います。
(実は、負荷的には、これが一番効果があると過去ログにあった気もします)
>>629 いや、そのバグはリンクは出るけど正しくリンクしていない
というものだったはず。
リンクそのものが出ないというのは別のバグでしょ。
gzip_flagが0の時は、setvbuf系を使って、 出力系のwrite回数を減らすのも手だね。 ZLIBではあまり効果がないかな。
>>633 -634
それは、st=1でnofirst=trueの時に1が表示されないのが原因
1-10が内部で2-10扱いになり、次10が出なくなっている。
&st=1&to=10&imode=true&nofirst=true
どこからか、↑みたいにリンクされてるの?
名無し娘。 ◆vP.bOZFQさん最近見かけないな… そろそろまとめをきぼーんしたいけど
639 :
イラストに騙された名無しさん :01/09/22 22:42
ところで順番は in でいいの? 5.22だと「&imode=true&nofirst=true」の順だったけど 5.23では「ni」になってる。 5.23はURLの生成を集中的に行ってるからたぶん一貫 していて問題ないとは思うけど
英語版は、まだ誰も作り始めてないだろうけど、 r2chhtml.hがこれ以上#ifdefになるのはちょっと嫌なので、 read.cで #ifdef ENGLISH #include "r2chhtml_en.h" #else #include "r2chhtml.h" #endif をきぼー。
>>637 -638
次10は、混雑時の100レス制限と同じ方式で出している。
表示した個数で出すか出さないかを決めているのだから、
nofirst=trueでは、1個減って出なくなる。
imode用には、終点を指定しない方がいいね。
/1-i とか /11-ni とかに。
でも、nofirst=trueを付けるのは誰?
read.cgiは最新とか新着にしか付けてないはずなんだけど。
imodeは1が長いと嫌なので、 スレへのリンクにnofirstをつけることは結構あるよ。
>>643 そこらにあるリンク(imode用indexとか)やスレへのリンク(ls=10扱い)、
cgiが出す次10では問題は出ないよ。
で、st=11&to=20などにnofirst=tureをわざわざ付けて、
次10が出ないというのは、バグではなくて要望でしょ。
そうか、だからi-modeでも同じに機能にしてって要望が来るのか。
>>644 それ、混雑時の次100じゃありません。
PREV_NEXT_ANCHORの次100です。
ようするにimodeでPREV_NEXT_ANCHORが付けば全て解決か。
バグだろ
どっちでもいいから出るようにしてほしい
以前はちゃんと出ていたものが出なくなったんだから。
「すぐ直せ」「誰のせいだ」と 責めているわけではないのに、 なんか、 「どこからもリンクされていないから」 「バグではなくて要望だ」 って、何なんだろ、一体。
>>636 御無沙汰してましてすいませんです。まとめまするー。
あんまり関係ないことで、うるさくしてスマソ。 「どこからもリンクされていないから」は、状況の把握。 そんなことはないはずと思っているのと違うから確認している。 「バグではなくて要望だ」は、プログラマとしてのプライド。 そんな改悪はしてないってこと認めて欲しいと思っている。 まあ、こっちは防衛本能と言われてもしかたがない。 「最初から読む」で出てなかったって責めないでね。 cvsに入ったときからそうなってたんだから。直したのも俺だし。 ほんじゃ、imode用のPREV_NEXT_ANCHORやっとくわ。
ついでに聞いとくけど、次10でnofirst=trueの方がいいのかな? その方がよさげなんだけど、要望として上がってるのを見たこと無いんだけど。 もう一つ、次10で読むとき前の最後のレスが次にも出てるんだけど 出さない方がいいかな?
>>653 >ついでに聞いとくけど、次10でnofirst=trueの方がいいのかな?
>その方がよさげなんだけど、要望として上がってるのを見たこと無いんだけど。
iモードの場合1が大きいと読めなくなって邪魔というのを
過去ログで見た気がする。
>もう一つ、次10で読むとき前の最後のレスが次にも出てるんだけど
>出さない方がいいかな?
ブラウザ版の仕様に合わせて、出さないようにしたほうが
いいと思う
>>655 ETagに関してはどっかにHTTPバージョンをどうやって
取得するの? って話がなかったっけ?
>>656 >>574 -579 あたりじゃまだ解決してないのかな。。。
それとは別の話だったりして(汗
>>657 案は出てますけどまだ実際のコードは入ってないみたいです。
need_etag()参照。
>>654 ブラウザ版で「出さなくなった」のはCHUNK_ANCHORに合わせるために
やむなくやったことなんだ。
前の一個が見えた方が俺には嬉しかったんだけど、文句出てないね。
imode使いの人に具体的な要望を出して欲しいんだよね。
次10だせやゴラァと、前10が欲しい以外で具体的なの見たことない。
俺が見逃してるだけかな?
box出して番号いれたらジャンプできるとimodeで便利かなとか思ったり
するんだけどね。
N210i使ってるけどi-mode契約してないから、実際の操作感が全然わからん。
>>658 フォローありがとうございます。
...ということで、ETag に関して
>>656 -658 もよろしくです>みなさま
前スレよりコピペ。iモード使いはnofirst=trueのほうが
ありがたいと思う確率が高いと思われ
123 :- :01/08/29 02:07 ID:lLO5yHHU
imode=true のとき、先頭に [最新レス10] が出るけど、ls=10 は不要。
その変わりに、nofirst=true が付いてたほうが使いやすいと思うのだけど
いかがですか?
125 :名無しさん@MZ-2000 ◆Ewz1Jtuw :01/08/29 02:13 ID:nZtnifzg
>>123 nofirst=true に激しく同意。
imode 時に 1 がデカイと後ろが見れなかったりするんで
1 いらないです。
>>661 抜き出しありがとう。
123は、最新レス10は/niにしなさいってことだな。
ほっとけば、ls=10だからl10は削れると。
imode用PREV_NEXT_ANCHORをcommitした。 つでに、1-100nでのnofirst=trueを無効にした。 /nだけ/2-になるが、まあいいか。(w imodeの現状は、 上:■掲示板に戻る■ 1- 最新10 下:次10 前10 最新10 imodeの人に意見求む。 最新10は上下に必要ですか? 次10 前10 最新10の順番はこれでいいですか?
>>641 ENGLISH が定義されていると r2chhtml_en.h をincludeし、
日本語リテラルで残ってたものを r2chhtml.hに移動した。
SJIS判定部分のような日本語処理部分がまだ残ってるけど。
あと、TZ環境変数の設定内容はread2ch.hに移動(CONFIG_TIMEZONE)。
>>664 please add HDRS r2chhtml_en.h in Makefile
please "cvs add r2chhtml_en.h" and commit
TZを下手にいじると混雑時の判定で困るかも。
あ、英語化はしてないのかな。 とりあえず、r2chhtml.hのコピーをcommitしておいた方がいいんじゃない?
コピーするのもまた、まだ定義増えたりするときに保守がややこしくなるので 実際に着手するまではコピーしないほうがいいと思って。 HDRSへの追加と、ダミーファイルの追加だけはやっときました。
>>665 混雑時の判定にもまぎらわしくないように、TZ定義はread2chhでLIMIT_PM/AMの
定義に並べて置いてます。
>>617 readSettingFileを以下のように修正:
if (fd >= 0) {
:
}
となってる部分を
if (fd < 0)
return;
:
に変更
char const *cptr;
char const *endp;
struct stat st;
を関数の先頭に移動
#ifdef USE_INTERNAL_SETTINGS
void *mmptr;
struct _setting setting;
for (setting = special_setting; setting->board_name; setting++) {
if (!strcmp(bbsname, setting->board_name))
break;
}
if (!setting->board_name)
return;
mmptr = setting->settings;
st.st_size = strlen(mmptr);
#else
char fname[1024];
:
st.st_size = read(fd, mmptr, 8192);
#endif /* USE_MMAP */
#endif /* USE_INTERNAL_SETTINGS */
関数末尾の#ifdef USE_MMAP〜#endifを
#ifndef USE_INTERNAL_SETTINGSで囲む。
注意点は、settingsの文字列は
>>617 そのままではなくて
最後に'\n'が必要なこと。
>>630 mmapの変更(サイズ, READONLY, SHARED)、
>>632 setvbufを一応、
>>574 -579
ETagでHTTP/1.1チェック、
>>669 USE_INTERNAL_SETTINGS
を組みこんだ。
結局単純に先頭3桁取ればいいのか? #ifdef NEW_KAKODIR #else void kako_dirname(char *buf, const char *key) { sprintf(buf, "%03d", tm); } #endif こんなconditionでも組み込んでとりあえずOFFに しておきましょうか。
某2chブラウザを作っているものですが、raw=0.0のCGIパラメータを渡して DATを取得すると、一番最後の部分に本来の(非rawの)モードで出力するHTMLの 内容が付加されてしまっているようです。 1行目に出力されるサイズを見て無視できないこともないのですが、 やはり余計なデータは転送しない方が良いと思います。 やっと全板にrawモード対応のread.cgiが入り、これから各2chブラウザの 対応も進むと思いますので、是非対応の方お願いします。
>>673 ver5.23では直ってるはず。過去ログ見れ。
500番あたりの発言ね。
>>672 いつ頃、どういう形で移行するかわからないので、両対応しておいた方がいいと思います。
ということで、過去ログ検索関数製作中。
>>673 本当に申し訳ありません。
ver5.22のバグで、ver5.23(chocoにインストール済み)では修正されています。
サイズを見て後ろは捨ててください。
詳しくは、
>>498 -502を見てください。
作ってcommitする寸前だったけど、どう? /* 旧形式 /bbs/kako/100/1000888777.htmlに対応。 dokoにpathを作成する .htmlだけで充分だとは思うが・・ */ static int find_old_kakodir(char *doko, const char *key, const char *ext) { struct stat CountStat; sprintf(doko, KAKO_DIR "%.3s/%.50s.%s", zz_bs, key, key, ext); return stat(doko, &CountStat) == 0; } html_error() if (!stat(doko, &CountStat)) { → if (!stat(doko, &CountStat) || find_old_kakodir(doko, tmp, "html")) {
>>677 READ_KAKOのfnameを作成してやらないといけないので、
datを発見した所をdokoに入れてくれる形のものも必要です。
あ、それで充分ですね。 if(!find_old_kakodir(fname, tmp, "dat")) 新形式fname作成 でOKかな。
>>674 >>676 すんません、思いっきりガイシュツでしたか。申し訳ないです。
ところでsubject.txtの圧縮転送もサポートしてもらえると、
スレ一覧更新時の転送量削減(ブラウザにとってはレスポンスup)が
見込めるのですが、どうでしょうか。
bbspinkだけはmod_gzipが使えるのですが、それ以外は相変わらず
無理みたいなので。
よければ、誰かcommitしちゃってください。
>>681 もうすぐcommitします。やっとテストが終わった。
rawモードのエラーでdokoを渡してますね。
そのままdokoを出してますが、最終的にはkako/nnnnnにすることに
なると思います。
read.cgiが過去ログ読みにならないと変えられないかな。
>>683 こうすればいいはず。
/* スレ一覧を取りに逝くモード */
if (1 <= path_depth && path_depth < 3
#ifndef USE_INDEX
&& rawmode
#endif
) {
sprintf(fname, "../%.256s/subject.txt", zz_bs);
zz_fileLastmod = getFileLastmod(fname);
}
686 :
◆YaKIN/eo @夜勤 ★ :01/09/24 04:02
ん? この状態は、切がいいのかな?
>>686 ご苦労様です。
一応、問題ないはずです。
主な変更点は、
・内部に板ごとの設定を指定できる。
・imodeで前10次10が付いた。
・現在の過去ログの場所に対応した。
入れるときに、read2ch.hのSPECIAL_SETTINGの内容を
ちょっと検討してみてください。
688 :
◆YaKIN/eo @夜勤 ★ :01/09/24 04:32
今日はもうおねむになったので 急いては事を仕損じるということで 明日の夜(つーか今晩か、もう)やりまーす。
>>685 あてた
しかしsubject.txtのときにはraw=パラメータは0.0に限定して使うように注意かな。
「2ちゃんiモード」にある 「頁BOTTOM」 (先頭にあり、末尾にある#BTMへ)と 「頁TOP」(末尾にあり、先頭にある#TOPへ)って iモードに限らず便利そうな気がするけどどう?
>>680 いまだに bbspink 以外で mod_gzip が使えないのはなんで?
批判要望板の案内では
>これら文字化けの不具合は、MOD_GZIPが導入されると同時に解消されます。
>※来週末になる見通しです。
って前から書いてるのに.
agew
>>1 -10
のような1を含む複数レスへのアンカーで1が消えてしまいます。
おそらく複数レスへのアンカーの際nが無条件に付加されてるのだと思いますが、
これは仕様でしょうか?
>>694 バグです。create_link()の
if (nf && (st!=to || ls)) /* 単点は'n'不要 */
を
if (nf && (st!=to && st > 1 || ls)) /* 単点または1を含むときは'n'不要 */
に変えればいいと思われ
329 :名無しさんの声 :01/09/24 22:03 ID:f9UAKBCQ
>>328 要望なんですけれども、長すぎるレスは自動的に
カットしていただきませんかね?
続きが読みたい場合は「クリック」みたいに
していただければ非常にうれしいのですが・・・
よろしくおねがいします
>>692 690はスレ違いじゃないぞ。
でも、下にアンカーを色々出しているから、なくても困らんと思うが。
混雑時はわざと不便にしてあるから、頁TOPつけると転送量増えるんじゃないかな。
>>694 -695
最新版では、1-10nでも1を表示するようになっています。
矛盾した指定を出すなって言われれば、そうではあるが。
697のリンクをクリックしたら簡易表示になったけど、 違うスレから呼ばれた時も簡易表示になるんでしたっけ?
>>698 1バイト減らせるし、矛盾した指定は出さないほうがいいと思う。
5.22では&nofirst=trueを出してなかったんだし。
702 :
◆YaKIN/eo @夜勤 ★ :01/09/24 22:48
投稿内容を改変するような仕組みは、あまりよくないと思います。 一律に長いのを省略する というのならば良いかも知れませんが、 今回の一連の改造には含めないことにしましょう。
>一律に長いのを省略する というのならば良いかも知れませんが、
ということは
>>696 はOK?
bbs.cgiでも
(省略されました・・全てを読むにはここを押してください)
はやってますし。下手に改造すると無限ループになりそうだけど。
>>699 の件
ref = getenv("HTTP_REFERER");
if (!ref || !*ref)
return false;
return true;
なんだこれ?
どういう理由でこんなふうにしたんだ?
他のスレへのリンクだったら、
その後に全部読んでみたい等に備えて
カットしないようになっていたはずなのに。
>>704 ゴミじゃないの? その後を無効にする意図があるなら
conditionになってるはず。削除しちゃっていいと思われ
あと
>>695 もcommitきぼん。
709 :
◆YaKIN/eo @夜勤 ★ :01/09/25 00:40
711 :
◆YaKIN/eo @夜勤 ★ :01/09/25 00:52
皆様 いつもありがとうございます。 read.cgi ver5.24 (01/09/25) が choco に入りましたー。 やったー。
・他スレ参照でも簡易表示になるのが直ってないような…
>>713 712のリンク先は簡易じゃないでしょ。
向こうからのリンクは、ver5.23が処理するから直ってません。
あ、そうか。スマソ
tag打ちたいんだけど、cvsサーバーが落ちてるっぽい。
>712のリンク先は簡易じゃないでしょ。 712のリンク先が簡易表示なのは俺だけ? Ver5.24でFORMが出ないんだけど。
結局どの程度速くなったの?
「簡易表示」時 <html><head><meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> が無くて、いきなり <title>からになってる・・・
理論的にはどれも必要ないけどね。 強いて言うなら文字コードの指定がないと文字化けする 危険があるくらいか。
えーん。ごめんなさい。 cvs鯖ディスクトラブルで落ちてます。 明日の夕方までには何とかがんばって直したいです... /bin/sh が read error (泣)
tag YAKIN20010925 打ちました
レス指定の >> が、&gt; じゃなくて > になってるんですが これは良いのでしょうか?
726 :
デフォルトの名無しさん :01/09/26 20:33
すいませんー。サーバーアドレス変わってます。 210.170.179.110 です。>ftp # DiCEでちゃんと定期的に監視する設定にしたと思ったのだけど・・・・。 # うーむ、設定ミスか・・・。 たびたび混乱させて申し訳ないです。
以前のまとめは
>>655 残ってるのは、英語版と
>>720 ぐらい?
imode回りはどうしましょうか。
<html><head></head></body></html> は全部省略でいいと思うんですがどうでしょうか。 HTML 2.0の時代から省略可能なことになってるので 省略したことによって誤動作するブラウザというのは 考えづらいです。もちろんIEもネスケも問題ありませ んし。
<html lang="ja"> とか入れとくといい、かも(IE5.5でこれを入れとくとAAのズレが 直る……とかいうのがあったような……かちゅ〜しゃだけか?)。後は全て省略で。
>>729 かちゅ〜しゃだけ。IEだとずれないのにかちゅ〜しゃだと
ずれるというのが直るに過ぎない。
IE5.5問題はフォントの設定をいじらないとダメ。
>>720 を修正した。
ついでに、can_simplehtml()のバグを見つけたので修正。
732 :
デフォルトの名無しさん :01/09/26 22:51
えっと、専用ブラウザ作者です 通信失敗したときのためにdat取得途中にもいったん保存したいと思ってるんですが、 datのサイズを計算するとき、\0も含めて\r\nまで数えれば計算合いますか?? それとも\r\nは含まず? モバイル時、rawモードで一気に900近いレスを取得するのは難しいので・・・
datの改行は\r\nじゃなくて\nです。 もし\r\nに見えてるとしたらお使いのライブラリか何かが 勝手に変換してるということなのでそのままでは絶対に 計算合いません。 それはそれとして、rawモードでも部分取得に対応したほうが いいのだろうか。こういう意見もあるし。 614 :作者 本日のレス :01/09/26 01:16 つまり、最新50とか、10-30までとかいった読み方は考えていないということか。
失礼、\r\nは単純にそう思っただけです(^^; 実際には\nでしか判定してません
5.24が各鯖にインストールされた模様。 SPECIAL_SETTINGが動作しているのを確認。 混雑時の設定は、22-03のようだから、 read2ch.hも合わせておいた方がいいかな。
>>730 Thanks.
やっぱりかちゅだけだったか……個人的には言語指定位入れといても
いいような気がするけど、まぁ全部省略だろうな、ここは(何)。
READ_KAKO/READ_TEMPには問題がいくつかある。 第一に、READ_KAKOがdefineされていないときには READ_TEMPをundefしているが、 これはプログラム上の都合であって、動作としては望ましくない。 実際には、kako/はhtmlを読めばよいので閲覧禁止にしてあっても、 datでしか読めないtemp/は(特にdat直読みが禁止されると) 閲覧を許可するという状況は十分に考えられる。 逆は考えにくいので、逆になっていればよかった。 次にREAD_KAKOをrawmodeでも一律に扱っているが、これはどうだろうか。 ツールを使っていても、倉庫送りにされたログを読む場合には 結局datに直にアクセスすることになる。 大半が取得済みのdatの場合は、圧縮をあきらめて差分取得する ことになってしまうし、 全体を新規取得する場合でも、圧縮はmod_gzipとその設定次第となる。 何より、直読み禁止になったらどうしようもない。 「rawmodeのみ過去ログ取得を許可する」conditionを設けるべきだと思う。 さらに細かい点を指摘すると、read.cgiで過去ログを読む事を前提とするなら 過去ログのdatがどこにあるかなど、ユーザーには関係ない。 kako/とtemp/でわけて指定させる必然性は全く無い。 もっとはっきり言えば、READ_KAKOが有効な場合には、 key=999999999を指定するだけで透過的に過去ログにアクセスできる方が はるかに望ましい動作といえる(もちろん、書きこみは不可にする)。 しかも、これならリンクのkako対応やpath_depth操作も不要になる。 (逆に、ツールに過去ログ化を知らせるためのサインが必要になる) 転送量を問題視するなら、混雑時間帯以外とRAWMODE時のみ 透過的アクセスとする手もあるだろう。 最後に、これが最も重要だが、過去ログの形式が一定ではないという点がある。 teri,cornなどは過去ログも全て"<>"区切りだが、 mentaiから始まりpiza,saki,...等の古いログは 全て","区切りのdatが保持されている。 最も早くログ変換が始まったpizaでも5月初めで、他のサーバーはもっと遅い。 mentaiなどは大半が旧形式であると言える。 現行のparseルーチンでは、動的なデリミタ変更には対応していないので、 全て「ここ壊れています」になるだろう。 (過去に2、3度、bbs.cgiのバージョンを間違えたために teriなのに数分間の投稿だけがsaki形式になっているdatもあるが、 これは「壊れたスレ修復」スレへ行けばよいかもしれない) 負荷との相談になるが、本気でちゃんと過去ログ読みに対応するのならば、 リンク先が無効になることより、こちらの方がずっと重要だと思うのだが。
で、READ_KAKO,READ_TEMPの優先順位を直し、
rawmode時に対応し、temp/を廃止して一律kako/に、
等をやってみようとしたのだが、面倒になってやめた。
代わりに、AUTO_KAKOを作った。
(変更は多くないので、新しく作る方が楽)
AUTO_KAKO_MODEを数値としてdefine(SETTING_FILE可)し、
0 = RAWモード時のみ、temp/,kako/どちらのdatも取得可能
1 = RAWモード以外は、temp/のみ閲覧可能
2 = RAWモード以外でも、temp/,kako/どちらも閲覧可能
とする。
過去ログに対しても全く同じようにkey=999999999の指定で
(スレスト扱いで)アクセスする。
ただし、今のところ、rawmode以外は(#if 1で)混雑時間帯外に制限してある。
READ_KAKOと排他ではないので、どちらも指定できる。
ログ形式の違いには対応していないが、
もし、READ_KAKOかAUTO_KAKO_MODE=2となることが想定されるなら、
#ifdef AUTO_LOGTYPE等として自動判別することも
そんなに難しくはないと思われる(負荷が少し大きくなる可能性あり)。
その他の変更点は、
・find_old_kakodirと同形式でfind_kakodirとfind_tempdirを作り、
html_errorをif-elseif-else で並べた(RAWOUTも)。
・mainでファイル名を作るところがごちゃごちゃしてきたので
create_fnameとして独立させた。
・他、細かい修正を少し。
それと、
>>671 の過去ログ探しが正常に動いているか確かめようと思ったら、
Ver5.23の「そんな板orスレッドないです」がでてきた。
キャッシュに残っていてNotModifiedが返ったからだが、
getFileLastmodが-1を返した(ファイルが見つからない)時は
LastModifiedを出力せず、304も返さないようにした。
そうだ、 スレッドストッパーの判別に 「移転したよ」 もあった方がいいかも。 (1に書いてあるので有効なのは移転直後だけだし、実際には書きこみ出来るが)
LIMIT_PMを22時にした。 "移転したよ"をストッパー判定に加えた。 AUTO_KAKO時に注意を表示するようにした。 AUTO_LOGTYPEを作った。 レス1に<>が含まれるかどうかで判定するので、 途中で一部変化しているものには対応できていない。
</title>の前に空白入れれ
>>741 それよりタイトル末尾の空白もCUT_TAIL_BLANKの
対象にしたほうがいいと思われ
>>742 splitting_copy(というかressplitter_split)が各フィールド切り出すときに
統一的に末尾空白カットと空白の追加やってるようだから
すでに大丈夫と思われ
745 :
デフォルトの名無しさん :01/09/28 00:21
おの〜最新レス50を押しても最新でないんですけど、 また最新50もなんかおかしい。 バグですか?
>745 おめーの環境が悪い。 買い替えろ
>>748 後ろに余分なものがついているときは旧形式で呼ばれたとき同様に
R2CH_HTML_BASE_DEFINEを出すとか…
750 :
◆YaKIN/eo @夜勤 ★ :01/09/28 14:44
いつも、ありがとうございます、 ところで、誰か core dump はくんですよ、read.cgi か bbs.cgi のどちらかだと 思うんですが、、、 時間あったら調べてみてください、
>>750 strings core | grep REQUEST
とかが可能でしたら、悪者が特定できてcore dumpの条件も判るのですが。
bbs.cgiってPerlではなかったでしたっけ? となるとcore吐くのは read.cgiじゃないかと思いますが gdbが使えれば $ gdb read.cgi core と打ち込んで (gdb) bt (gdb) q で出てくる結果から目星が付けられるかも知れません coreを吐くプログラム名自体は gdbを起動した時に Core was generated by `hoge.cgi'. のように表示されます
753 :
◆YaKIN/eo @夜勤 ★ :01/09/28 19:45
choco に strip してない read.cgi 入れたので、 core 吐かれたら 調べてみまーす。
getLineMax()がちと怪しいので、一応差し替えてみたけど、どうかなあ。
てゆーか、ミラーが死んでるから、変更点がわからないか。 do { ・・・ p = (char *)memchr(p, '\n', p1-p) + 1; } while(p != p1); が、途中であぼーんが入るとpが死ぬ可能性があるので、 do { ・・・ p = (char *)memchr(p, '\n', p1-p); if (p == NULL) break; ++p; } while (p < p1); に直した。
datの書き込み時にどういう処理をしているのかわからないけど もし open("hoge.dat", O_WRONLY|O_TRUNC) or fopen("hoge.dat", "w") に相当するようなやり方でオープンして書き込んでたりすると その書き込み中にread.cgiでBigBufferを参照すると ファイルの終端より後ろの領域を参照 -> SIGBUS or SIGSEGV ということもあり得るんだな...... 例のmmap時のlock問題
bbs.cgiに関してはそんな.dat消失の危険があることは やらんでしょう。普通はO_APPENDを使うと思われ 流出スクリプトもそうなってるし。 ただ削除系のスクリプトはぁゃιぃかも。
非常に簡単なテストプログラムを作ってみたのだが・・・ 255個の空白と改行を1行とし、 1)まず新規にファイルを16*4行分作成し、閉じる 2)次にファイルサイズ+10バイトをPROT_READ,MAP_SHAREDでmmapする 3)マップされた領域をスキャンし、行数と最初に'\0'が現れる位置を表示する 4)次に同じファイル名で(マップしたまま)16*1行分作成し、閉じる 5)3)を繰り返す この結果は3の時と5の時で異なり、 どちらも実際のファイルの行数(64と16)を報告し、 最初に'\0'が見つかったのは、ファイルサイズの次の位置だった。 どちらも実際のファイルサイズを超え、ページ境界をまたいでいるが、 coreは吐かなかった。 (ページ境界をまたがない時でも、 '\0'が最初に現れた位置はファイルが終わった位置だった) もしこれ(ファイルサイズ以上の領域には'\0'が入り、 マップされている間にサイズが小さくなっても'\0'が入る)が常に当てはまるなら、 map_sizeをほんの少し多めに取り、 BigBufferをスキャンしている最中に'\0'が現れた場合のみ、 オーバーしているかをチェックすればよいことになる。 とりあえず、これが成立するを仮定して、 dat_readとressplitter_splitを修正した。
ファイルを書きかえるプログラムとの協調ができない限り どうやろうが危険は残る。 ターゲットOSがいつまでも同じとは限らない。 未定義部分の振る舞いなんか利用したら、後で必ず痛い目にあう。 削除ツールとかを変更できるまでは、mmapの使用はあきらめた方がいいんじゃない。
振るまいが違ったらその時直せばいいじゃん。 納品して終りじゃないんだから。 それと「mmapの使用」と「MAP_SHAREDの使用」は等価ではないよ。
cvs鯖落ちてる?
762 :
◆YaKIN/eo @夜勤 ★ :01/09/29 14:37
umm choco にまだ、 core できてませんでした、 観察継続中。。。
763 :
デフォルトの名無しさん :01/09/29 15:54
がいしゅつです。
>>747 -749
で、
・エラーにする
・R2CH_HTML_BASE_DEFINEを出す
どちらにしましょうか。
>>732 -733にあるようなdatの部分取得と、
subject.txtの上位50件取得等に対応するために、
raw=0.0時のみ、
st,to,lsを参照して要求された部分のみを返すようにすることを考え、
RAWOUT_PARTIALとして試験的に加えてみた。
(nofirstは無視したので、ls=nn時にはレス1は送信されない)
ls=nnに対応するために、送信するレス番の範囲を教える必要があり、
是非次回は続きを差分取得して欲しいから、
dat全体の中でどの部分にあたるかの、位置と範囲も返したい。
となると、部分取得時は返信ヘッダがかなり窮屈になってしまう。
実行した場合のヘッダ("/512K"以後の区切りはTAB)。
/tech/?raw=0.0&to=50 #subject.txtの範囲指定にpathは使えない
+PARTIAL 2441/512K Range:0-2440/22735 Res:1-50/478
/tech/998845501/?raw=0.0 #今までと同じ
+OK 297551/512K
/tech/998845501/50-99?raw=0.0
+PARTIAL 11767/512K Range:12226-23992/297551 Res:50-99/883
/tech/998845501/l50?raw=0.0
+PARTIAL 27967/512K Range:269584-297550/297551 Res:834-883/883
/tech/998845501/l20000?raw=0.0 #強引に全部送信
+PARTIAL 297551/512K Range:0-297550/297551 Res:1-883/883
(本物のログとサイズが違うのは、手動でいじったからなので気にしない)
返信するステータス等を勝手に決めるのも心苦しいので、
返信コードやフォーマットなども含め、意見求む。
cvs使えないので、ここに書いて意見を聞く int dat_out_raw(void) { const char *begin = BigLine[0]; const char *end = BigLine[lineMax]; char statusline[512]; char *vp = statusline; #ifdef RAWOUT_PARTIAL int first = 0, last = 0; if (raw_lastnum == 0 && raw_lastsize == 0 && (nn_st || nn_to || nn_ls > 1)) { /* nn_xxはnofirstの関係等で変化しているかもしれないので再算出 */ int st = atoi(zz_st), to = atoi(zz_to), ls = atoi(zz_ls); first = 1, last = lineMax; if (ls == 1) /* for Ver5.22 bug */ ls = 0; if (ls) st = lineMax - ls + 1; if (0 < st && st <= lineMax) first = st; if (0 < to && to <= lineMax) last = to; if (first > last) last = first; begin = BigLine[first-1]; end = BigLine[last]; vp += sprintf(vp, "+PARTIAL"); } else #endif /* ・・・ */ if (・・・) { ・・・ } else { ・・・ } vp += sprintf(vp, " %d/%dK", end - begin, MAX_FILESIZE / 1024); #ifdef RAWOUT_PARTIAL if (first && last) { vp += sprintf(vp, "\t""Range:%u-%u/%u", begin - BigLine[0], end - BigLine[0] - 1, BigLine[lineMax] - BigLine[0]); vp += sprintf(vp, "\t""Res:%u-%u/%u", first, last, lineMax); } #endif
続き #ifdef AUTO_KAKO { static char *messages[] = { "", "\t""Status:Stopped", "\t""Location:temp/", "\t""Location:kako/", /* 正確な位置を知らせる必要はないはず */ }; int where = zz_dat_where; if (where || isthreadstopped()) where++; vp += sprintf(vp, "%s", messages[where]); } #endif pPrintf(pStdout, "%s\n", statusline); ・・・ }
subject.txtのraw=0.0時の出力内容は、意味的には1が最新だし、 途中からの受信はそれまでの取得済み内容の続きにできないので st, toは無視して、lsで先頭からの個数を指定するほうが より良いような気もする。
771 :
◆YaKIN/eo @夜勤 ★ :01/09/30 02:57
以下のサーバに mod_gzip が導入それました。 mentai , saki/corn , cheese/cocoa , teri/ton , kaba , bbspink2 www/salami , salad , yasai , natto , ebi/curry そこで yasai に read.cgi を /*#define GZIP*/ のようにコメントアウトして コンパイルしたものを上げました。 本当はどうすればいいのかな? 教えてください、おねがいします。
今、永らく読んでなかったかちゅスレ(18-19)を読んでます。 伸びが急激なので、まだ19の途中ですが。 proxyではなく、DLL対応とは結構驚きました。 で、できるだけ(他の人の同意があれば)対応する方向にしたいのですが、 現行のかちゅ〜しゃをサーバー側から見ると、2つ程欠点があります。 1つ目は、If-Modified-Sinceを付加していないこと 2つ目は、常に1バイト以上の送信をリクエストすること です。 どちらも本質は同じで、更新がなくてもファイルI/Oの負荷が発生するため、 必要以上にサーバーに負担をかけることになっています。 多分、かちゅ〜しゃのidxに保存されているのは サーバー側のLastModifiedではなく、ローカル側のGET日時だと思うので 難しいとは思いますが、可能ならば、If-Modified-Sinceをお願いしたいです。 実際の対応ですが、 まだwsockspyのソースもろくに読んでいないので 外れたことをいってるかもしれませんが、 その形式だと、最終の'\n'部をGETしないため、 リクエストのRangeが範囲を超える場合が頻発すると思います。 その場合、 ・Rangeの範囲がファイルサイズジャストの次からだった場合 →304 NotModifiedを返す としたいと思いますが、よいでしょうか? また、 ・Rangeの範囲が大きく超えた場合、及び、指定位置が行頭ではなかった場合 はどうしましょう? かちゅ〜しゃでは、 あぼーん等でRangeが範囲を超えていて全体が返された場合でも (ローカルあぽーん等の結果が無効となるため) それを利用してログを再構築する事はせず、 常に「ログが詰まった」を表示しているように思います。 ですので、この場合はエラーが起きたことだけを知らせ、 全体は返さないようにしたいと考えていますが、 それでよいでしょうか?
あと、「過去ログが取得できない」問題は、 read.cgi側でAUTO_KAKOをONにすれば即対応可能です。 夜勤さんにお願いするしかないですが。 こうなった場合、最初のGETで取得できなければ、 ../kako/や../dat2/をGETするのは完全に無駄なので DLL側で(302を返すよう)対処してもらえればと思います。 (-ERRの戻りが、「../kako/...で発見」の場合は非対応) もう1つ、他のツールの作者さんも読んでいると思うので。 この形式での対応は、 Accept-Encoding: gzip かつ、 User-Agent: Katjusha の場合だけにしたいと思います。 これは、同様のリクエストは(レス番号さえわかれば) RAWOUT_PARTIALで対応可能で、 そこで返されるRangeを見ればあぼーん等の検出も可能であり、 ツールの(ソースに触れる)作者から見れば あまり必要のない機能だと思うからです。 かちゅ〜しゃユーザーののgzip移行を促すためにも あえて厳しくしたいと思います。
あ、以上は
>>770 でした。
mod_gzip導入については、
特に何もしなくてもいいと思います。
(全鯖導入されたら、index.htm/index.htmlチェックが不要になるので消しますか)
GZIPは、ZLIBが定義されていると再defineされちゃいますし。
cvs復活してるね
776 :
デフォルトの名無しさん :01/09/30 08:50
>>772 -773
「Range:」ヘッダは削除して、?raw=nn.xxxxに変換しています。
>・Rangeの範囲がファイルサイズジャストの次からだった場合
>→304 NotModifiedを返す
>としたいと思いますが、よいでしょうか?
よって「+OK 12345/512K」みたいな1行だけが返ってくる
はずなのでとくに考慮は不要です。
内部的に、ファイルサイズジャストでも実際にファイルを読み込
んで処理しているとしたら、その内部処理だけを修正してインター
フェースは変えない(上記のヘッダ行を生成する)ようにしたほうが
いいのではないでしょうか。
>・Rangeの範囲が大きく超えた場合、及び、指定位置が行頭ではなかった場合
>はどうしましょう?
おっしゃる通り、エラーの通知のみでいいと思います。
>あと、「過去ログが取得できない」問題は、
>read.cgi側でAUTO_KAKOをONにすれば即対応可能です。
過去ログに関しては.datをmod_gzipの圧縮対象に指定するという
手もありますね(過去ログの差分取得はあまり行わないでしょう
から)。
>DLL側で(302を返すよう)対処してもらえればと思います。
今でも、「過去ログ倉庫で発見」以外のエラーのときは
無駄なリクエストが飛ばないように対処済みです。
ちなみに、BIG-serverではNot Foundだったとき404を返す
代わりに news.kakiko.com/mentai/ へ飛ばす(302を返す)
ようになっているので、302ではだめです。
Last-Modifiedについては、ファイルサイズジャストのとき 中身を読まないように修正すれば結局stat一回だけなので 対応不要だと思っているのですがどうでしょうか?
AUTO_KAKO関係、AUTO_LOGTYPE関係とその周辺を少し変えた。
rawmode時はget_title()等を呼ばないようにした。
subject.txt取得時と!busytime時はMAP_PRIVATEにした。
RAWOUT_PARTIALで、subject.txt取得時のみ、
lsがあってtoがなかったら、lsをto扱いするようにした。
Katjusha_DLL_REPLYを作った。
read.cにデバッグコードが残ってたらごめん。
>>778 LastModifiedの判定の他にサイズ判定をいれたので、要らなくなったです。
>「Range:」ヘッダは削除して、?raw=nn.xxxxに変換しています。
あ、そういう意味です。
>よって「+OK 12345/512K」みたいな1行だけが返ってくる
>はずなのでとくに考慮は不要です。
これは、read.cgi側の都合です。
+OKを返すときは、通常、HTTPヘッダを全て出力した後、
さらにdatを読みこんで(行数を数える等もして)からなので、
サイズだけでNotModifiedが返せた方が楽だからです。
サイズだけで判定して+OKを返しても大差ないといえばその通りなのですが。
>ちなみに、BIG-serverではNot Foundだったとき404を返す
>代わりに news.kakiko.com/mentai/ へ飛ばす(302を返す)
>ようになっているので、302ではだめです。
「302を返す」は、そのつもり(404の代わり)で書きました。
かちゅ〜しゃは302に反応すると思われるので、
見つからない時にはDLLで細工してかちゅ〜しゃに302を返すという意味です。
っていうか、cvs修正した直後に
>>777 (おめでとう)を読んだので、
サイズジャストは+OKではなく、NotModifiedのままです。
直しましょうか?
781 :
デフォルトの名無しさん :01/09/30 09:30
>+OKを返すときは、通常、HTTPヘッダを全て出力した後、 >さらにdatを読みこんで(行数を数える等もして)からなので、 >サイズだけでNotModifiedが返せた方が楽だからです。 なるほど。「+OK」を返してもらえると私(とかほかのツール 作者)が楽なので結局どちらが楽できるかの問題ですね。 >サイズジャストは+OKではなく、NotModifiedのままです。 >直しましょうか? 面倒でなければお願いします(^^;。
782も私です。 よく考えたらレス数を求めるには中身を読まなくてはならないから ほかのツールは関係ないですね。
仕様書き忘れてました。 今(304を返す仕様)のところ、 ・ファイルサイズと一致 304 Not Modified Content-Type: text/plain (ヘッダのみ) ・あぼーんされたっぽい(要求Rangeが大きすぎ) -ERR どこかであぼーんがあったみたいです。 (非圧縮・この時はLast-ModifiedやContent-Encodingを出力しない) ・あぼーんされたっぽい(要求Rangeが大きすぎ) -ERR どこかであぼーんがあったみたいです。 (ヘッダにLast-ModifiedとContent-Encodingが含まれる) ・続きあり +OK 27967/512K ・・・ wsockspyのソースを見て問題なさそうだったので、 サイズだけをみてあぼーんが判断できる場合は 非圧縮で返すようにしています。 あと、304を返す代わりに +OK 0/512K にする方向にしますね。
>・あぼーんされたっぽい(要求Rangeが大きすぎ) 2つありますけど下のは ・あぼーんされたっぽい(行頭ではない) ですね。
>>785 ごめんなさい。その通りです。
ところで、他のツールの場合は
必ずIf-Modified-Sinceをつけてくると思いこんでいたので、
「raw=x.xでファイルサイズジャストの場合」というのは
あまり想定していなかったんですが、
もしかしたら、
raw=x.xのリクエスト全てに対して、
「ファイルサイズジャストなら+OKの行のみを返す」
ことを考えた方がいいかもしれませんね。
その方向で考えます。
仕様が固まったらread2ch.hとconfig.txtの更新もよろしくー
>>786 の変更を加えた。
うーん、でもよく考えたら、If-Modified-Sinceには
「実況禁止」効果を見こんでいた部分があるので、
できれば何か対策が欲しいところでもある。
>>787 -788
これからやりまーす。
>>786 OKのみの行を返すときでもLast-Modifiedはあったほうがいいような。
サイズは一致していても変更があったかもしれないし(まれだろうけど)
read2ch.h,config.txt,ChangeLogを更新しました。 Last-Modifiedはどうしましょ? サイズを見てOKのみを返す場合は、 既にIf-Modified-Sinceのチェックをくぐってしまった時なので、 そういうUAにLastModifiedを返す必要があるかとか、考えたんですが。 まあ、出す分には全然かまわない気もします。 ただ、「偶然の一致」を減らすなら、レス数も数えた方がいいでしょうし。 あと、この場合にはContent-Lengthも返さないので それも問題ありかもしれません。
サイズを見て+OKのみを返す場合に、条件として 「If-Modified-Sinceがなかった場合」を加えてみた。
おお、mod_gzipはいったんだ。ご苦労様>>夜勤さん Trying 64.71.134.194... Connected to piza2.2ch.net. Escape character is '^]'. HEAD /tech/index.html HTTP/1.1 HOST: piza2.2ch.net Accept-encoding: gzip, inflate HTTP/1.1 200 OK Date: Sun, 30 Sep 2001 04:55:31 GMT Server: Apache/1.3.6 (Unix) PHP/4.0.3pl1 mod_gzip/1.3.19.1a mod_ssl/2.3.6 OpenSS L/0.9.3a Content-Type: text/html って 771みると piza2には前から入ってた?
対応したread.cgiが導入されるまでの間、 かちゅーしゃでの巡回は 今まで以上に無駄な負担を鯖に強いることになるわけか。 巡回が重くなったって言われるのもわかる気がする。 mod_gzipで重くなったってのもあるだろうけど。
Katjusha_DLL_REPLY時には、 getLineMaxで全体を走査する必要がない事に気付いたので、変えた。 そうすると、この形式は、他の?raw=x.xのリクエストに比較して、 (mmapが有効に使える点も含め)負荷的に有意ということになる。 ならば、UserAgentチェックも外して、 他のツールにも積極的に利用してもらうことも考えた方がいいかな? UserAgentチェックは、かちゅ〜しゃ利用者の(変更しての) 非rawモードでのread.cgi呼出を減らせるかも、と考えたからなんだけど。
>>747 -749,
>>763 -765
PATH形式での呼出時、解析された以降の文字列に'/'が含まれるとき、
BASE_DEFINEを出力するようにした。
rawモードでファイルサイズジャストの時にも Last-ModifiedとContent-Lengthを出すようにした。 raw=.nnn形式のUAチェックを外した。 というのをやったんだが、cvs鯖落ちてるっぽい。
今はcvs動いてるみたい
iモード時の要望です。 批判要望板のスクリプト関連要望統合スレッドにも 書き込んだのですが iモードでスレ巡回するときは 決まったスレを見ることが多いので 1-10よりも最新-5レス前 とか5レス前-10レス前とか 今見てるとこから数レス前とかの方が便利です。 現在iモードから見る際 ログが流れると1-10を開いてブックマークしてから 編集して見たいレス番号に書き換えて移動って 手順で見ているので何かと不便で博打性も強いです。 手間がかかるかも知れませんが検討をお願いしたいと思います。
「大きすぎます」対策として、ファイルサイズが MAX_FILESIZE - 4255バイトを超えたら フォームを消すようにできませんか?
CGI自身にgzip圧縮の機能がなくても、その先のmod_gzip が圧縮してくれるかもしれないので、BadAccess中での gzip_flagの判定とかNN4_LM_WORKAROUNDの処理とか Katjusha_DLL_REPLYの判定とかはしたいのですが、 これらをGZIPのconditionから外に出せませんか?
>>804 mod_gzipに圧縮をまかせたら、NN4_LM_WORKAROUNDは役にたたないよ。
bbs.cgiがパス対応になったので、USE_PATHとALWAYS_PATHは オン固定にしましょう。
>>805 mod_gzipが勝手に付けちゃうの?
そうだとしても後2つのこともあるし。
むー、なんか俺には意味が完全には把握できない話が続いている気がする。
>>801 の件は、
>>802 の言うように
「最新10」「前10」「次10」があった気がするのだが。
もう一回確かめて、なければ作る。
上部に欲しいということかな?
もしかしたら、呼出形式によっては表示されないかもしれないので、
・どういう形式のリンクだと不足があるのか(実例を出してもらえるとうれしい)
・その時に、現状のほかにどんなリンク先が欲しいか
を書いてもらえると助かる。
>>803 の件は4255というのが「1レスの最大バイト数」なのかもしれないが、
これは>>nnのリンクや改行の数によって左右されないのかな?
よくわからないので、
#define WRITESTOP_FILESIZE 5 として、
MAX_FILESIZE - WRITESTOP_FILESIZE*1024 を超えたら、
スレッドストップ扱いにしてみた。
>>806 USE_PATHとALWAYS_PATHはON固定で良さそうなので、そうした。
RAWOUTも外せない機能ではあるが、
こちらは、「RAWモード専用CGI」の可能性があるので、残しておく。
>>804 の意図が一番わからないのだが、
>CGI自身にgzip圧縮の機能がなくても、その先のmod_gzip
>が圧縮してくれるかもしれないので、
これは、mod_gzipがcgi出力も圧縮するという意味だろうけど、
>BadAccess中でのgzip_flagの判定とか
>NN4_LM_WORKAROUNDの処理とか
>Katjusha_DLL_REPLYの判定とかはしたいのですが、
>これらをGZIPのconditionから外に出せませんか?
「これら」というのが何を指しているのかが不明なので、よく理解できない。
「Accept-Encodingを見てgzip_flagを設定すること」を言っているのか、
「rawmode時等に圧縮非対応のリクエストは受け付けない」を言っているのか、
「NN4リクエスト時にContent-Lengthを出力しない」を言っているのか、
「rawmode以外はKatjushaのリクエストを受け付けない」を言っているのか。
出力の圧縮を完全にmod_gzipに任せることになった場合、
#define GZIP/ZLIBを外す事になり、
そのことにより、いくつかのリクエストがBadAccessで弾けなくなり、
特にrawmode関係のリクエストが受け付けられてしまうのがまずいということかな?
それなら、その通りだとも思うけど。
ただ、出力の圧縮を全てmod_gzipに任せる可能性はあるかな?
というか、既に、
http://piza2.2ch.net/test/check.cgiの出力なんかは圧縮されて返ってくるから 、
どちらかというと、
・CHECK_MOD_GZIPで、mod_gzipが導入されていれば、圧縮しないで出力する
・BadAccessで、圧縮を受け付けないrawモードのリクエストは弾く
ぐらいでもいいかもしれない。
負荷的にも、mod_gzipに任せた方がいいかもしれないし。
ただ、NN4時にもContent-Lengthを付けてしまう(おそらく)のが欠点か。
>802>808 確認しました。付いておりました。 多謝です。お騒がせして申し訳ありません。
>>809 mod_gzipが入ってるならGZIP/ZLIBとも外したほうが
オブジェクトサイズの節約になるのでは。
とくにZLIBはスタティックリンクされてますし。
で、現状ではGZIP/ZLIBを外してしまうと、たとえば
rawモードの取得をgzip対応クライアント以外に認め
ない機能も消えてしまうと言いたかったわけです。
了解。 ZLIB/GZIPはOFFにする方向で、 なおかつrawモード時のAccept-Encodingチェックは行うにする、と。 かちゅチェックは、rawモードに含まれるのでそのままでもよさそう。 NN問題はとりあえずあきらめて、 圧縮をmod_gzipに任せ、cgiサイズ(と負荷)が小さくなるようにする。 この方向でよい?
read.cgiが生成するURLは常にパス仕様になりましたから、 create_link()の旧形式を生成してる部分はバッサリ削除 できます。
>>812 かちゅチェックは
main()の
#if defined(GZIP) && defined(RAWOUT) && defined(Katjusha_DLL_REPLY)
を
#if defined(RAWOUT) && defined(Katjusha_DLL_REPLY)
にしてくださいと言いたかったのでした。
あとはよいと思われ
>>813 #ifndef ALWAYS_PATHに相当する部分なので消してもよいかと思ったが、
一応#ifdef CREATE_OLD_LINKで囲むだけにした。
>>814 read2ch.hは変えなかったが、
GZIP/ZLIBがなくてもAccept-Encodingをチェックするようにした。
たまたまrawモードをブラウザで叩いてみたんですけど、 >>[レス番号] にアンカー入ってるんですけど…こういう仕様ですか?
>>816 bbs.cgiが.datに書き込んでるので仕様です。
read.cgiは仕方ないので指す先を捨ててURLを再生成してます。
819 :
林檎おいしいよ。 :01/10/02 16:30
どうやらmod_gzipがまだ入っていない板でもindex.htmが 廃止されたみたいなので判定のロジックはばっさり 捨て去ったほうがよさそう
821 :
◆YaKIN/eo @夜勤 ★ :01/10/02 21:00
お世話になってま〜す。 負荷がばかにならないくらいあがっています。 なにやら かちゅーしゃとかが新しくなったとか。。。(詳しく知りません) で提案なんですが、ご検討していただけないでしょうか? ------------------------------------------------------------- 大きな流れとしては、各ツールの要求に答えていくことなんだけど、、、 うーん 転送量の次は負荷が、 dat を細切れにして、さらに圧縮をかけて転送量を削る方向に 向かっているから、これをやめるのが吉か? ルールが必要か? 1.dat 読みのときは、一気に全部読む。 2.read.cgi はあらかじめ作ってある xxxxxxxxxxxx.dat.gz を返す。 まずは、プログラム板で聞いてこよう。
差分はdat経由で読むようにしましょうか? とりあえず現在開発中のバージョン入れてKatjusha_DLL_REPLY が使えるようになると負荷が多少は減ると思います。
夜勤さん、かちゅ"〜"しゃです。。。 それとかちゅ用のwsock32.dll作ってる人に聞くと仕様わかるっすよ。
( ̄□ ̄;)!! のんびりし過ぎた!!
プロセス起動数の増加による負荷を下げるなら、 rawモードをさらに拡張して複数dat同時転送とかできませんかね。
read.cgiをApacheモジュールにしちゃえば軽くなるんだろうけど mod_gzipの導入でもいろいろ交渉したりしなきゃならなかったみたいだから 大変なのかな......CGIプロセス起動しない分軽くなるのは確実だけど
みんな速くなってますます巡回しまくっちゃったりして…
read.cgiが自分でgzipを使うかを動的に選択できるのなら、 raw差分転送である程度以下のサイズのものは圧縮しないようにするとか。
それはmod_gzipがすでにやってたりして… そういう意味でもmod_gzip任せにしたほうがいいのかも。
>>827 一応一度巡回すると5分間巡回できない制限ありますので、
レス取得の速さは特に大きな問題ではないです。
ん? 今のread.cgiで使ってるのはgzipじゃなくてzlibでわ? mod_gzipにやらせるのと負荷的にはあまり変わらないと思うけど...... それにmod_gzipにやらせた場合NN4_LM_WORKAROUNDに相当する処理が 可能かどうかも問題だけど
巡回がとんでもなく無用な負荷をかけてるってことでしょ。
同じようなことするバイナリはCGI側に持たせなければ CGIは軽くなるよ。多少は。
勘違い 無視してちょ 氏ぬわ
>>835 cgiのロードタイムは短縮できるだろうけど
fastcgiにするならグローバル変数バシバシなのは一旦見直さないとまずい?
あと、ロードタイムがどれだけ負担になってるのかってのも分からないと…(^^;
夜勤さん召喚しますか?
うん、一度これをいれて様子をみてもらったらいいと思う。 (あまり変わらないかもしれないけど) mod_gzipが導入されている鯖はZLIB/GZIPの#defineを外してもらって。
840 :
◆YaKIN/eo @夜勤 ★ :01/10/02 22:09
過去ログ(もうほ更新されない dat)の読み込みが とてつもなく沢山リクエストが来ているようです。 kako/xxx/xxxxxxxx.dat は、あらかじめ xxxxxxxx.dat.gz にしておいて read.cgi が呼ばれたとき、そのまま返すとかにしたいなぁ
>>840 .dat.gzを用意しておいてmod_gzipでdatを処理対象に加える
だけで解決します。
842 :
◆YaKIN/eo @夜勤 ★ :01/10/02 22:14
今、 salad//anime/kako で実験しています。 .htaccess に dat も gz 読めよって書けばいいのかな? (こっそり、書式教えてくだせ〜)
mod_gzip_item_include file \.dat$ です。
844 :
◆YaKIN/eo @夜勤 ★ :01/10/02 22:21
う〜ん、よく考えたら、 xxx.dat.gz だけ置きたいんだなぁ。 anime/kako/xxx/xxxxxxxxxx.dat.gz だけってことです。 dat の本体は、見えないところで管理ということなんです。 ということは、kako を見る場合はツールが直接 .dat.gz を 取り込めばいいのかな? anime/kako/xxx/xxxxxxxxxx.html anime/kako/xxx/xxxxxxxxxx.html.gz anime/kako/xxx/xxxxxxxxxx.dat.gz の三つを可視にすると、
サフィックスに関わりなくテキストを圧縮するということなら mod_gzip_item_include mime "text/.*" でいいと思うけど......しかしNN4_LM_WORKAROUNDを .htaccessでどうやって実現できるのかが難儀......
>>844 確かに非圧縮版のdatを置いておく意味はあまりありませんね。
>>845 mod_gzipのデフォルト設定でtext/.*は圧縮対象に含まれてる
はずなんですけど.datはなぜか指定してやらないと圧縮対象
にならないみたいなんです。
hoge.datのリクエストにhoge.dat.gzを返すということなら mod_gzip_can_negotiate Yes かな?
>>848 index.html.gzで負荷が減ったそうなのでそれはすでに
オンになってるはず。
850 :
◆YaKIN/eo @夜勤 ★ :01/10/02 22:29
ツールさんたちは、直接 .dat.gz を読むということで、いかがでしょうか? というか、そうしたいです。 kako の中の話です。 anime/kako/xxx/xxxxxxxxxx.html anime/kako/xxx/xxxxxxxxxx.html.gz anime/kako/xxx/xxxxxxxxxx.dat.gz の三つを可視にするという仕様です。 ほとんどの場合 kako 下のファイルは、できあがったら そのままで変更はかからないので、あまり細工は必要ないと思います。
異議ありません。
>>847 ん? オレのとこで実験すると mod_gzip_item_include を何も指定しないと
*.txtも圧縮しないで返ってくるし 逆に mime "text/.*" を指定すると
*.datでも圧縮されて返ってくるけど?
mod_gzipに任せちゃった方がCPU負荷は減るはず。 lawモードはほとんど何もする必要がない(.datを更新分だけ 出力してくれればいい)のだから、別cgiにすることでオーバー ヘッドを減らせないだろうか。
>>850 それで良いと思います。2chあってのツールですし、
作者さん達にも納得してもらえると思いますです。
855 :
◆YaKIN/eo @夜勤 ★ :01/10/02 22:35
あっ 今日の話は、過去ログ(dat落ちして、html化されたスレッド)の話ですので、 ライブなスレッドとか、html化待ちしているやつは、また別の話ですよ。
>>852 bbspinkはsubject.txtは圧縮されるけど.datは圧縮されないから
そうなのかと思った。
単に.txtが圧縮対象になってるだけか。
■掲示板に戻る■のリンク、index.htmlにならないかな bbstableとかと統一されてないので、分かりづらいです
bbstableのリンクは /板名/ で、統一されてると思いますが… newsで index.htm になってる件なら激しくがいしゅつです。
J-PHONE対策で、末尾に余分な'/'が含まれるpath形式で呼ばれた時、 リンク先の末尾にも'/'を付加してみた(imode時のみ)。 本当は、呼出形式からではなく、UserAgentで判断したいが。 ※/accuse/1000645308/i/という形式で呼ばれる時に リンク先(POST先含む)がおかしくなる点は既に修正済み。
なんか不要な修正だった気がしてきた。消すかも。 JPHONEがbase hrefに対応していないとかが原因かもしれん。 話の流れをもう少し見守ってみよう。
というわけで、元に戻した。
read.cgi側の問題じゃなかったようですね。 お騒がせしてごめん、特に860さん。
BASEの位置がBODYタグ内にあったため端末が正しく解釈できなかったという原因らしい。 bbs.cgiですでに対処済みの模様。
なんじゃそりゃ。。。
かなりがいしゅつですが■▲▼がまともに機能しなくなります
そっか、逆に今#がついてるのが全部無効になるのか。 気付かんかった。読み流しちゃってたらしい。ごめん。
USER_AGENTかなんか見ることで携帯かどうか判別して 勝手にimode=trueになるようにできんかな?
saladで過去ログあってもrawモード時のエラーが 「そんな板orスレッドないです」になる
.datだけではなく、.dat.gzも探すように直さないとね。
>>876 それはread.cgiの管轄じゃないような(^^;
>>877 pageview.cgi は廃止されてしまったので
read.cgi でやってもらうしかないのです。
>>878 リンク元がpageview.cgiという名前で飛ばしてるのに
read.cgi側では何もできない。
リンク元が変更できるとしても、pageview.cgiと同じものを
read.cgiとは別に作るほうが合理的。やることまるで違うし。
となると結局read.cgiの話ではない。
>read.cgiとは別に作るほうが合理的。 rawモード全てにあてはまるね。
881 :
名無しさん :01/10/07 17:06
というかimodeでpageviewを使ってるのに勝手に廃止って言うのが なんか場当たり的でみっともないなあ。1chのことを馬鹿に出来ないような。
882 :
デフォルトの名無しさん :01/10/07 21:47
ver5.24 で902以降のレスの 次100 の範囲が 1001 を 越えるのはこれでいいんだっけ? 外出だったらすまん.
>>880 確かにrawモードも別にしたほうが綺麗だね。
ただ読む対象が同じなのでread.cgiでもまあいいんでないかな。
884 :
デフォルトの名無しさん :01/10/08 16:15
dat_out_raw()の && !(raw_lastnum <= lineMax と、getLineMax()の if (line > RES_RED) break; の合わせ技で-INCRになってると思われ read.cgi経由ではrawモードでも1000超えのレスの取得は 認めない(+OK 0/512Kを返す)という方針でどうでしょうか。
1001レスオーバーのdatがあってもそこでファイルが終了したものと見なすようにした。 どうかな。
そろそろ夜勤さんの降臨きぼーんだけど ラウンジの圧縮が滞ってたりするとこ見ると 最近いないんだろうか
ところで、わざわざdatディレクトリ見に行かなくても、 ブラウザで見た時にdatのファイルサイズがわかるように、 一番下のread.cgiのバージョンの横に、 そのスレのdatファイルのサイズ表示しません? モナー板とかでは、ファイルサイズが重要なので +10バイトくらい転送量が増えるけど、許容範囲なんじゃないかな?
892 :
◆YaKIN/eo @夜勤 ★ :01/10/11 00:41
きょうは、ひさびさに います。
894 :
◆YaKIN/eo @夜勤 ★ :01/10/11 03:36
下の方には、read.cやread2ch.h等が入っているので、 展開されたファイルを上書きしちゃってください。
ん? 帰ったかな? 重要な注意ですが、今回からmod_gzip未導入の鯖に入れるときは #define GZIP #define ZLIB を忘れないでください。さもないといきなり転送量が跳ね上がると 思われ…
897 :
デフォルトの名無しさん :01/10/11 14:35
read.5.24.2.tgzってcvsの内容と違うね。
>>897 ってcvsのほう最新見てなかった。一致してたよ。スマソ
900 :
ヒロユキ@ギコナビ :01/10/11 21:53
こんにちは。ギコナビ作っている人です。 rawモードで取得するときは、「If-Modified-Since」は付けたほうがいいですか? 先日から実験しているのですが、2〜3日くらい前から上記ヘッダを付加 し、未更新のスレを取得しようとすると、5秒くらい後に304が返ってきます。 前は、GET投げるとすぐに304帰ってきたんだけど。。。実況対策の為かな? また、1レス程度更新されていても、304が帰ってくる場合もありました。 これって、仕様でしょうか?
>>900 まさに実況対策のためです。
Katjusha_DLL_REPLY機能のついたread.cgiが投入されたら
そっちを使ったほうが更新があってもなくても負荷は
低くなります。
現状では、If-Modified-Sinceは付けてもらわないと困るくらいです。 +OK 0/512K だけの行が返るのは、全く無意味な負荷になっています。 Katjusha_DLL_REPLY形式のリクエスト(?raw=.nnnn)であっても、 If-Modified-Sinceがあれば、 サイズをチェックする前にLastModifiedをチェックするので、 同じく304が返ります。 また、If-Modified-Sinceだと実況対策の304の効果も期待できるので、 できれば付加するようお願いします。 ただ、rawモードだと.datをGETするのに比べて cgiプロセス起動の分だけ同じ304でも負荷が余分にかかり、 鯖の重さの影響をもろに受けます。 それが時間がかかる原因かもしれません。
>>845 をもう一度お願いしてみたんですけど
今は鯖増設の作業のほうが優先みたいですね…
904 :
◆YaKIN/eo @夜勤 ★ :01/10/12 00:19
新しいの入れましょー
お疲れ様です。
今gameとnewsはmod_gzip入ってないんでしたっけ?
>>896 参照。
909 :
◆YaKIN/eo @夜勤 ★ :01/10/12 00:29
まずは、choco にいれますー
どきどき
911 :
◆YaKIN/eo @夜勤 ★ :01/10/12 00:34
#define GZIP #define ZLIB choco は、mod_gzip 入ってないから、read2ch.h のこれらは #define したままでいいんですよね?
お、変わってる >read.cgi ver5.25 (01/10/12)
916 :
◆YaKIN/eo @夜勤 ★ :01/10/12 00:40
tag YAKIN20011012打ちましたー
Katjusha_DLL_REPLY使ってみたいな…(ボソ
920 :
◆YaKIN/eo @夜勤 ★ :01/10/12 00:44
>>920 いまchoco鯖に入ったread.cgiではすでに使えるのですが、
負荷が上がるんじゃないかと心配してるのです。
転送量は下がります。
今現在はどちらが優先でしょうか?
923 :
◆YaKIN/eo @夜勤 ★ :01/10/12 00:49
うーん、微妙。。。 今現在は、負荷下げかな(サーバ増設も含めて)
じゃ、とりあえず見送ることにします。
つーか負荷優先なら
>>845 やってほしい…
choco、なんかgzip圧縮が効いてないみたいです。
telnetで叩いてみた結果
ちょっとやばいかも…
GET /test/read.cgi/dancesite/1002815310/?raw=.0 HTTP/1.0
Host: choco.2ch.net
Accept-Encoding: gzip
HTTP/1.1 200 OK
Date: Thu, 11 Oct 2001 16:01:40 GMT
Server: Apache/1.3.6 (Unix) PHP/4.0.3pl1 mod_gzip/1.3.19.1a mod_ssl/2.3.6 OpenSS
L/0.9.3a
Last-Modified: Thu, 11 Oct 2001 16:01:56 GMT
Connection: close
Content-Type: text/plain
+OK 2467/512K
KINTAMA<><>01/10/12 00:48<> ナインティナインの@llnightnippon
.com <br> 1:00〜3:00 <br> <br> ホームページ <br>
http://www.allnightnippon.com/ (以下省略、生のまま)
mod_gzipが入ってるので、read.cgiでは圧縮やってないんですね。 しかしmod_gzip側もまた圧縮してくれてない。
つーこって
>>845 が必要ってかんじですかね?
929 :
◆YaKIN/eo @夜勤 ★ :01/10/12 01:06
うっ まずい? choco は、 GZIP はいってません。 で、どうすれば?
>>929 >Server: Apache/1.3.6 (Unix) PHP/4.0.3pl1 mod_gzip/1.3.19.1a mod_ssl/2.3.6 OpenSSL/0.9.3a
mod_gzip入っているようにしか見えませんが(^^;
>>929 ↓これ見る限りmod_gzipは入ってるようですので
Server: Apache/1.3.6 (Unix) PHP/4.0.3pl1 mod_gzip/1.3.19.1a mod_ssl/2.3.6 OpenSS
L/0.9.3a
>>845 をお願いします。
それで圧縮されるようになるはずです。
932 :
◆YaKIN/eo @夜勤 ★ :01/10/12 01:10
あれっいつのまに。。。 (勘違いしてたかな?) mod_gzip_item_include mime "text/.*" を .htaccess に入れるといいのですね、
>>932 はい、そうです。よろしくお願いします。
934 :
◆YaKIN/eo @夜勤 ★ :01/10/12 01:12
いれましたー。
うまくいってませんね。
変化ないですね… 実際にはmod_gzipが入ってないのに表示だけ変わってる?
read2ch.hの #define CHECK_MOD_GZIP をコメントアウトするしかないかな? (^^;
938 :
◆YaKIN/eo @夜勤 ★ :01/10/12 01:16
うーん、mod_gzip がちゃんとインストールできていないようです。 natto サーバに、read.cgi ver5.25 いれましたー
>>938 nattoはちゃんと圧縮できているようです。
nattoはちゃんと圧縮されてますね。一安心。
>>929 割り込んですみません。
ホットゾヌユーザですが、chocoでスレ一覧出すときに問題が出てます。
スレッド一覧取得エラー
http://choco.2ch.net/tv/ This is not gzip!
nattoは入れ替え後も問題ありません。
状況はわかりましたので、気長にまってます。よろしくお願いします>夜勤さん
943 :
◆YaKIN/eo @夜勤 ★ :01/10/12 01:23
>>939 を choco でやってみました。
mod_gzip の入っているサーバ > choco 版
mod_gzip の入っていないサーバ > natto 版
を入れると良いのかな?
逆のような
>>943 逆では?
mod_gzip の入っているサーバ > natto 版
mod_gzip の入っていないサーバ > choco 版
choco圧縮されるようになりました。
947 :
◆YaKIN/eo @夜勤 ★ :01/10/12 01:26
ありゃ 逆でした。
テレホタイム以外の間だけ、html化待ちのスレッドをread.cgiで 読めるようにするのは駄目ですか? もし、軽めの鯖(そんなの鯖はないか)だけでも許可してもらえるなら、 #define AUTO_KAKO #define AUTO_KAKO_MODE 1 をお願いします。 …でも、そうするとツールからは常時に全部のdatが読めてしまうので、 それも禁止するなら、面倒ですけど、 read.cの2194行目から("everywhere"を検索してみつかったところ)の if (rawmode) mode = 2; /* everywhere */ を if (rawmode) mode = 0; /* everywhere */ にしてからお願いします。
>>948 うわ、0とか2ってなんだ(笑)
意味分からん
choco読めるようになりました。ありがとうございました。
>>950 0 dat/のみ許可
1 temp/も許可
2 kako/も許可
です。
953 :
◆YaKIN/eo @夜勤 ★ :01/10/12 01:31
>>949 なにがどう違うのか、解説して欲しかったりして、
すみませんが。
>>953 .datの直読みが圧縮できるようになるので、
転送量を増やさずに負荷を下げられます。
config.txtより >AUTO_KAKO_MODE >AUTO_KAKOで過去ログを取得/閲覧できる制限を設定する(0〜2) > 通常読み出し RAWモード > temp/ kako/ temp/ kako/ > 0 = × × ○ ○ > 1 = ○ × ○ ○ > 2 = ○ ○ ○ ○ > 凡例) ○は閲覧可能 ×は閲覧禁止 これか。 ていうかマジックナンバーをソースに埋めるのやめようよ(´д`;) せめて書き換えるなら mode = 0; /* dat/ only */ のようにコメントも…
957 :
◆YaKIN/eo @夜勤 ★ :01/10/12 01:37
>>954 それは mod_gzip が入っているサーバだけですよね?
>>957 あ、そうです。
mod_gzipが入ってない鯖でやるとInternal Server Errorに
なっちゃいます。
<IfModule "mod_gzip.c">
</IfModule>
で囲めば大丈夫かな?
mod_gzipの入ってない鯖ではread.cgi経由にすればいいから 最悪でも現状維持です。
teriが圧縮されなくなってますね。
うへえ、piza2も!
>>960-961 ちゃんと圧縮されてるよ。
300バイト以下とか、圧縮してかえってサイズが大きくなりそう
だったり負荷の割にサイズの節約にならなさそうなとき
圧縮しないのはmod_gzipの仕様。
>>962 あ、そうか。ホットゾヌがgzip決め打ちで駄目になってるだけなのか。
964 :
◆YaKIN/eo @夜勤 ★ :01/10/12 01:58
mod_gzip が導入されていないサーバ
choco , news , game
>>937 ○
>>845 ×
mod_gzip が導入されているサーバ
その他全部
>>937 ×
>>845 ○
となりました。
ところでそろそろ1000が近いんですけど…
967 :
◆YaKIN/eo @夜勤 ★ :01/10/12 02:04
natto を
>>843 にしてみた。
mod_gzip_item_include file \.dat$
>>967 nattoの.datが圧縮されるようになりました。
mod_gzipの入ってる鯖は
>>843 でお願いします。
969 :
◆YaKIN/eo @夜勤 ★ :01/10/12 02:12
りょうかいー
新スレ立ててきます。
1000