■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 最新50
read.cgi改良スレッド 2
- 77 : ◆D69Zsbfg @夜勤 ★ :01/09/10 03:53
- どもです。
削除依頼板は、>>xx が効かないと、効率が悪いらしいです。
とりあえず、今日は >>73 をやりました。
- 78 :デフォルトの名無しさん :01/09/10 04:29
- 批判要望よりコピペ
697 名前:名無しさんの声 投稿日:01/09/10 04:20 ID:mhbyzSZQ
「新レスの表示」の
nofirst=true
は無いほうがいいな
- 79 :デフォルトの名無しさん :01/09/10 08:59
- ブランチは作らないの?
- 80 :デフォルトの名無しさん :01/09/10 09:52
- 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>
が削れる分 トータルでは節約になると思いますが
- 81 :デフォルトの名無しさん :01/09/10 09:59
- >>80
スレ違いです
- 82 :デフォルトの名無しさん :01/09/10 10:05
- rawmodeのときは、圧縮に対応していないクライアントは
弾くようにしませんか?
rawmodeで非圧縮のデータを返すメリットってほとんど
ないように思うのですが…。
- 83 :デフォルトの名無しさん :01/09/10 10:30
- 全レス表示規制中に「次の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
- read.cgi 5.20でも
http://piza2.2ch.net/test/read.cgi/mona/
で[ここ壊れてます]が連打する現象が解消されていません。
http://piza2.2ch.net/test/read.cgi/mona/?raw=0.0
とするとわかりますが、どうもsubject.txtを無理やり分解して
表示しようとしている模様。
- 85 :デフォルトの名無しさん :01/09/10 11:07
- >>84
#ifdef USE_PATH
/* スレ一覧を取りに逝くモード */
if (1 <= path_depth && path_depth < 3) {
sprintf(fname, "../%.256s/subject.txt", zz_bs);
zz_fileLastmod = getFileLastmod(fname);
}
#endif
こんなコードが入ってる割にこれ解析してないようだな。
これが原因か。
- 86 :デフォルトの名無しさん :01/09/10 11:20
- ↓こういうのって
<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を入れておくと
- 87 :デフォルトの名無しさん :01/09/10 11:26
- 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のような工夫がしづらくなる。
- 88 :デフォルトの名無しさん :01/09/10 11:38
- >>82の修正
BadAccessの最初に
if (rawmode && !gzip_flag)
return 1;
を追加。
- 89 :デフォルトの名無しさん :01/09/10 11:41
- >>88
if (rawmode)
return !gzip_flag;
のほうがよくないかな?
- 90 :88 :01/09/10 11:45
- あ、
#ifdef GZIP
#endif
で囲む必要があるか。
- 91 :88 :01/09/10 11:47
- >>89
>>62の修正も合わせてるわけね。納得。
- 92 :デフォルトの名無しさん :01/09/10 12:08
- >>85
・・・USE_PATHをundefすれば根本解決しそうな、、、
- 93 :デフォルトの名無しさん :01/09/10 12:18
- >>85 と >>89 あてた(85は#if 0にしただけ, 89はRAWOUTでも囲んだ)
- 94 :デフォルトの名無しさん :01/09/10 12:24
- >>92
USE_PATHしたときだけこんな処理が入るほうが変だと思うけど…
そもそもこのコードいつ誰がどういう目的で追加したの?
- 95 :デフォルトの名無しさん :01/09/10 12:28
- >>94
そのコードの下のほうでインデックス処理とかがあるようだけど
そっちは#if 0 /* #ifdef USE_PATH */で無効化されてたのに、
そのためにsubject.txtを読むように準備する部分が生き残ってたようだ。
- 96 :デフォルトの名無しさん :01/09/10 12:32
- こっちだけ殺して>>85は殺してなかったわけね
#if 0/* #ifdef USE_PATH */
else if (path_depth == 2) {
if (zz_ky[0] == '-')
dat_out_subback();/* スレ一覧 */
else
dat_out_index();/* 板ダイジェスト */
}
#endif
- 97 :デフォルトの名無しさん :01/09/10 12:39
- 板ダイジェストにcondition付けませんか?
#if 0で無効にしてるのって気持ち悪い
- 98 :デフォルトの名無しさん :01/09/10 12:41
- >>97
いらんだろ、
もともと余計な機能だったんじゃないか?
- 99 :デフォルトの名無しさん :01/09/10 12:52
- 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)
- 100 :デフォルトの名無しさん :01/09/10 12:54
- >>98
そうだね。じゃあ
#if 0 /* #ifdef USE_PATH */
となってるconditionはバッサリ削除
digest.c digest.hも削除。Makefileからも取り除く
ということで。
- 101 :デフォルトの名無しさん :01/09/10 12:57
- >>99-100
すでにMakefileのOBJSにはdigest.oは入ってなかったみたいだ。
従ってこのままではたとえconditionにしても使えん。
- 102 :デフォルトの名無しさん :01/09/10 13:01
- 本当だ。SRCSには残ってるのに。
じゃあやっぱりバッサリ削りましょう。
- 103 :デフォルトの名無しさん :01/09/10 13:02
- >>94
cvs見ると、6411さんが8/30に作ったようだが
- 104 :デフォルトの名無しさん :01/09/10 13:07
- >>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';
の方が良いだろう。
- 105 :デフォルトの名無しさん :01/09/10 13:07
- 前スレですでにこういう話が出てた。
850 名前:デフォルトの名無しさん 投稿日:01/09/09 03:27
>♯6411氏
digest.[ch]いらなくなったのなら、MakefileのSRCSから消してちょうだい。
あと、datindex.cの中身全部を#ifdef USE_INDEXで括っておくように。(w
- 106 :デフォルトの名無しさん :01/09/10 13:10
- >>104
> >>85は、#if 0で囲うと、初期化されていないメモリを参照して、どうなるかわからない。
これはどういうこと?
fnameもzz_fileLastModもその前後で設定されているが。
- 107 :デフォルトの名無しさん :01/09/10 13:12
- ダイジェクト削除するならr2chhtml.h後半の
/* スレダイジェスト用HTML */
/* スレインデクス用HTML */
も不要。
- 108 :デフォルトの名無しさん :01/09/10 13:14
- >>106
失礼。その通りだった。
後でエラーになるね。
- 109 :デフォルトの名無しさん :01/09/10 13:22
- >>52修正
#ifdef CAUTION_FILESIZE 直後の行を変更
if (zz_fileSize > MAX_FILESIZE - CAUTION_FILESIZE * 1024) {
↓
else if (zz_fileSize > MAX_FILESIZE - CAUTION_FILESIZE * 1024) {
- 110 :デフォルトの名無しさん :01/09/10 13:26
- >>109
あてといた
- 111 :デフォルトの名無しさん :01/09/10 13:37
- >>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
- 112 :デフォルトの名無しさん :01/09/10 13:39
- >>109より、
>>61の後半の形式の方がいいと思う。
>>109だと、レスが930まで来た時に突然読めなくなる可能性あり。
- 113 :デフォルトの名無しさん :01/09/10 13:40
- >>111
expires_strの宣言とともに削除した
- 114 :デフォルトの名無しさん :01/09/10 13:43
- >>112
賛成。
- 115 :110 :01/09/10 13:50
- >>112
そのようにあてた
- 116 :デフォルトの名無しさん :01/09/10 14:11
- >>104の最後の修正も当てたほうがいいと思うんだけどどう?
当てるなら、get_path_infoの最後のほうの
/* nofirstの仕様をごまかすためのkludge XXX */
if (!zz_nf[0])
strcpy(zz_nf,
(atoi(zz_st) == 1
? "false"
: "true"));
こっちは不要になる。
- 117 :116 :01/09/10 14:15
- いやごめん、やっぱり必要。
- 118 :デフォルトの名無しさん :01/09/10 14:22
- r2chhtml.hで
./%s? (←%sにはCGINAMEが入る)
となってる箇所がいくつかあるけど、「./」は不要。
消せば多少は転送量の節約になる。
- 119 :デフォルトの名無しさん :01/09/10 14:34
- >>118
細かいな(笑)
当てた
- 120 :デフォルトの名無しさん :01/09/10 16:28
- 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に変更
・・・
}
- 121 :デフォルトの名無しさん :01/09/10 16:33
- コメント違ってたー
×非1が返るのは
○非0が返るのは
コメントの間違いといえば、
isurltailのstrncmp(""")は、
'"'で囲まれたURLの末尾判定だと後で気がついた。
恥ずかしいので修正してもらえるとうれしかったり。
- 122 :120,121 :01/09/10 16:36
- isurltail
→geturltaillen
だし。逝ってきます。
- 123 :デフォルトの名無しさん :01/09/10 17:05
- >>120-122
当てた
一時2800行あったread.cは、現在2166行。だんだん減ってるな(笑)
- 124 :デフォルトの名無しさん :01/09/10 17:33
- #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
頭切れの報告がないのでそろそろ削除しても大丈夫だと思われ
- 125 :デフォルトの名無しさん :01/09/10 17:51
- 今の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していいかな。
.や=について意見求む。
- 126 :名無し娘。 ◆vP.bOZFQ :01/09/10 18:01
- 細かいことひとつだけ。
<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
の前あたりにもってきた方がすっきりしますが、どちらがいいかはおまかせします。
- 127 :名無し娘。 ◆vP.bOZFQ :01/09/10 18:15
- もちょっと。
>>77
同感です。あと、>>xx でchunk単位で50表示されるのは、若干のキャッシュ効果が
あるのかもしれませんが、それでも邪魔な気がします。
>>78
なにかと nofirst=true になっているのだけど、ない方がいいような気がしますね。
# 1も表示してくれた方がうれしいということです。
# スレ違い抑制のためにも役立ちますし。
>>83
賛成。
- 128 :名無し娘。 ◆vP.bOZFQ :01/09/10 18:26
- もいっこ。
target="_blank" 消えちゃってますね。すごく不便(^^;
- 129 :デフォルトの名無しさん :01/09/10 18:29
- >>125
/=10 でls=10扱いってのはいいね。
でも . とか i ってのは保留にしたいところ?
- 130 :125 :01/09/10 18:41
- >>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にしたいから変になってるなあ。
- 131 :デフォルトの名無しさん :01/09/10 19:17
- >>124
これ当てた(削除した)
- 132 :(゚Д゚)ハァ?スレ発起人 :01/09/10 20:16
- また,スレタイトルの末尾の空白を取ったようですが...
http://saki.2ch.net/test/read.cgi?bbs=entrance&key=1000120416
- 133 :(゚Д゚)ハァ?スレ発起人 :01/09/10 20:23
- リモホばっちり出てた(;´Д`)
- 134 :デフォルトの名無しさん :01/09/10 22:36
- >>67-68に対応してみた。
批判要望板のレスも読んで、
テレホ外は「レスを全部読む」を入れた。
最新レスnnも入れ、その分CHUNK_ANCHORの数を減らした。
>>86も試験的にコードにしてみたが、
「レスを全部読む」等との統一感がないのでOFFにしてある。
(つーか、俺HTML知らないし。)
変更が大きいのでコンパイルが通るかだけでも確認できる人、
大変だけど、お願いできるかな?
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=998997848&st=944&nofirst=true
- 135 :デフォルトの名無しさん :01/09/10 22:39
- それと、>>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
とかだね。
直せる人が見ればすぐ直せると思う。
- 136 :| - -) :01/09/10 23:37
- >>135
done.
- 137 :デフォルトの名無しさん :01/09/11 00:04
- CHUNKしてあっても、関係ない後半部分に追加レスがあるだけで、
If-Modified-Sinceが成立してキャッシュが無視される問題、
ETagを吐くことで対処できないかな。
昔調べたら、ネスケ4.70には無視されたけど、
IE5.01は次回にIf-Modified-SinceとIf-None-Matchを両方つけてきたと思った。
- 138 :デフォルトの名無しさん :01/09/11 01:22
- rawモードでサイズを指定する意味って何なんでしょう?
無条件に指定レスのdat行を返してくれたほうがよっぽど便利だとおもうのですが。
rawモードのおかげでdatサイズの管理が不要になるかとおもいきや、そうはなりません。
唯一の意味は、上流でのあぼーんを検出できることですが、あぼーんの検出が
ユーザーにとってメリットであるかは微妙なところです。
また、検出したからといって、全てのdatを読み直すのは無駄のように思います。
- 139 :デフォルトの名無しさん :01/09/11 01:22
- >>137
やっぱり投稿日フィールドデコードしちゃうべき?
秒が入ってないのが痛いけど…
デコードしてその一番後ろのレスの日時をLast-Modifiedに出せば
かなりいい動きしそうな気がするんだけど。
1分以内の複数の発言は仕方ないからひとつあたり1秒後ってことにして。(笑)
- 140 :デフォルトの名無しさん :01/09/11 01:23
- >>138
途中があぼーんされたことをサイズの違いから判別するためです。
- 141 :140 :01/09/11 01:25
- >>140
脊髄反射で書いてしまった…(鬱
>>138
>また、検出したからといって、全てのdatを読み直すのは無駄のように思います。
適切に同期を取る手段がない以上、仕方ないんじゃないでしょうか。
bbs.cgiにも手を入れられて、ファイルフォーマットなども変更できるのであれば
話は簡単になるんですが…
- 142 :デフォルトの名無しさん :01/09/11 02:17
- cvs鯖ディスクフル起こしてません?
- 143 :デフォルトの名無しさん :01/09/11 02:24
- 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をハッシュ値で実装するメリットがあるとすれば 日付のパースだけでは
検出できないあぼーんがわかるということか
- 144 :デフォルトの名無しさん :01/09/11 02:37
- >>134誰か確認した?
- 145 :デフォルトの名無しさん :01/09/11 03:14
- CUT_DATE_STRINGはON固定でいいと思う。
つーかR2CH_HTML_DATEの定義を変えるだけのcondition
なんて必要ないでしょ。
- 146 :125 :01/09/11 04:04
- >>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でも同様の問題)
- 147 :デフォルトの名無しさん :01/09/11 04:08
- i-modeのときは
read.cgi/i/板名/キー/
ということにしてはいかが?
/i/の位置はここじゃなくてもいいけど
- 148 :125 :01/09/11 04:20
- >>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
というような形式にそれぞれやらないといけない。
- 149 :デフォルトの名無しさん :01/09/11 04:29
- 批判要望で出ていた意見。俺も「新レスの表示」はわかりにくいと
思ってた。
166 名前:名無しさんの声 本日のレス 投稿日:01/09/11 04:25 ID:07YBBjEM
>>161
なるほど、未読レスの表示ね。
だったらそう書けっての。
新レスの表示なんて分りづらいことこの上なし。
- 150 :125 :01/09/11 04:42
- >>149
妙に省略した言葉にするからわかりずらいんだよね。
いっそ、最後の番号からってことだから、
149-
とかにしてしまえばいいのでは。文字数減るし。
- 151 :デフォルトの名無しさん :01/09/11 04:54
- >>146
透明あぼーんのときはどうするの?
つーか、rawモード転送に、rsync的な手法は使えないかな?
- 152 :デフォルトの名無しさん :01/09/11 04:59
- あぼーん検出を無効にしたということなんだから
当然透明も、だと思われ
- 153 :デフォルトの名無しさん :01/09/11 05:23
- 過去ログdatやhtmlの位置を#defineで変更できるように
しておきませんか?
read.cgi 5.20が導入されてる鯖で、倉庫落ちしてhtml化
待ちしているスレが削除されたと勘違いしているカキコを
要望板でときどき見ます。
- 154 :125 :01/09/11 05:42
- >>151
だから、sizeを積極的に使えと。
sizeを使わないツールは、削除があった時に正しいデータを取得できない。
そこんとこよーく考えてツールを作りなさい。
今までのツールだって、ファイルのサイズかなんかを使ってサイズ管理
してたんでしょ。
ツール作成を楽にするために付けたんではなく、部分転送もgzip化して
転送量削減のために付けた機能なんだから。
- 155 :125 :01/09/11 06:03
- >>151
rsyncってCRCかなんかで、既存部分の同一性チェックしてるんじゃなかったかな。
sizeじゃなくてCRCにしますか?
nnn.sizeがnnn.CRCになった方がいいですか?
あぼーん検出の確実性は増えますが、サーバーの負荷も増えるし、
ツールのプログラム量も増えますが。
- 156 :名無し娘。 ◆vP.bOZFQ :01/09/11 06:47
- >>146 >>154-155
話を蒸し返すようですが、あぼーん時はどんなツールに対しても強制的に
あぼーん済ファイルを全部転送しなすほうがよいと思うのですが。
あぼーん時に「正しいデータ」を取得させるべき動機は、読み手の利益のためというよりも、
2ちゃんねる本体で削除されたものはツール側でも削除されるべきであるという
ポリシーによると思うからです。透明あぼーんは例外的だし。
.dat直読み/直アクセスが不可になることも視野に入っているので、read.cgiが
あぼーんに敏感であることは、専用ツールに対してあぼーん強制をする最良の
手段となります。
- 157 :デフォルトの名無しさん :01/09/11 06:56
- >>156
同意。sizeを使わない機能は無効にするかせめて
conditonで括るに一票。
- 158 :125 :01/09/11 07:02
- >>156
うっ、本当にCRCにしたくなる話だ。
強制にもどすのは、&& raw_lastsize > 0を取るだけなんで一瞬です。
とりあえず、説明つきでコメントにしておきましょう。
ソースに運用ポリシー書いとかないと、理由を忘れていじっちゃいますから。
- 159 :デフォルトの名無しさん :01/09/11 07:10
- >>134のcommitきぼーん。
>>83への対応にもなると思われ
- 160 :デフォルトの名無しさん :01/09/11 07:12
- >>158 でもCRC実装したら それETagに流用できそうだね
っていうか もしそうなら専用ツールでもETag使ってもらうようにすればいいのか...
- 161 :名無し娘。 ◆vP.bOZFQ :01/09/11 07:23
- >>126-128 宣伝しとこ(笑 特に >>128。
>>158
お疲れさまです。
4bit CRCくらいで試用してみるのもよさそうですね。
# 1bit でもいいか?(笑
- 162 :125 :01/09/11 07:34
- >>161
CRC32なら、手持ちのソースがあるんですぐなんですけど〜。
算出可能にしておいて、どう使うかを後回しにしておきますか。
>>158 ちょっと手間取り中
ついでに書式ミス等の時に+OKを返してしまうのを修正している。
- 163 :名無し娘。 ◆vP.bOZFQ :01/09/11 07:45
- >>162
32bitはちと重たいかと。。。
- 164 :125 :01/09/11 07:57
- rawoutの修正終了。
>>163
CRC = (CRC>>8) ^ crc32_table[(CRC&0xFF) ^ *data++];
ループ内はこんなコードなので、bit数が増えたからといって
そんなに重くはないと思いますが。
tableは最初に初期化してますが、データにしちゃえばいいし。
減らすなら8bitかな。16bitは効率悪そう。
- 165 :125 :01/09/11 09:10
- crc32算出は、zlibにいた。(w
>>161
表示外に跳ぶ時にtarget="_blank"を付けた。
condition USE_CHUNK_LINK を追加し、
CHUNKへのリンクと従来方式を選択可能にした。
とりあえず、従来方式ってことで。
今日はここまで。
- 166 :134,135,137他 :01/09/11 09:36
- う、一晩たったのに相手してもらってない。ちょと悲しい。
動作確認はかなり厳密にやったし、
自分でコピペをCVSのソースに反映させても動くことを確認したのに。
(WinCVSの使い方をよく知らない俺が悪いんだけど)
それと、テレホタイムに&ls=101をつけると、
>>120と同じ現象が起こることを確認。
>>120と同じ対処でもいいけど、
表示レス数が限界に達した時に、out_html()内でレス表示後に
(最終レスかを調べずに)「これ以上表示できません」と表示するのが問題なので、
レスを表示する前に判定し、オーバーしてたら注意だけ表示して戻る等、
呼出側(dat_out)とあわせて、もっとうまく解決したほうがいいかも。
- 167 :デフォルトの名無しさん :01/09/11 09:36
- 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;
}
- 168 :167 :01/09/11 09:41
- >>166 とりあえず>>137はcrc32/adler32等によるチェックサムを実装することに
なれば そのスキームとしてETagを使うことが考えられるね
- 169 :166 :01/09/11 10:07
- 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自体が賛否両論な気がするし。
- 170 :名無し娘。 ◆vP.bOZFQ :01/09/11 10:11
- >>164
何bitにせよ.datの頭から積算するんだから、確かにあまり変わらないかもですね。
でもなんか、もったいない気がしちゃって(笑
>>165
ありがとうございます。
>>166 >>168
>>135 も | - -) さんがやってくださったようですよ(^^
>>134 方向性は賛成です。余力がなくお役に立てないですいません。
- 171 :名無し娘。 ◆vP.bOZFQ :01/09/11 10:18
- >>169
>それに、いろいろ見ると、CHUNK_ANCHOR自体が賛否両論な気がするし。
CHUNK単位にあまりこだわらない方がいいように思います。
あくまでユーザーインタフェースとして、50なり100なりで区切ったリンクを
提供するにとどめた方がよいかと。
# その意味では、冒頭のCHUNK単位のリンクも target="_blank" で提供した方が
# よいのかもしれません。「前のxxレス」「次のxxレス」というのは、ページを
# 捲っていく感覚だけれども、CHUNK単位の参照は >>xxx のリンクを参照する
# ときの感覚に近いような気がする。
- 172 :125 :01/09/11 13:05
- >>166
申し訳ない。
だが、あれだけの分量を検証しながらマージするのは正直言って面倒。
ここにソースを書きこむんじゃなくて、どこかにアップしてくれ。
ftp://210.170.170.118/incoming/ は...使えない?IP変わったのかな。
あと不具合修正は構わんが、機能的な変更(50- 100-の所)は、選択可能に
作って欲しい。
うーん、眠い〜。
- 173 :167 :01/09/11 13:21
- >>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%
- 174 :166 :01/09/11 16:19
- 本当、申し訳ない。書きこむ前にftp://210.170.170.118/incoming/
をチェックしたんだけど、使えなくて。
変更は、かぶらない限り全然後でもかまわないし、
他にやっていることがあるなら、是非そちらを優先して。
で、不具合(「全部読む」が出ないとか)と、
#ifdef SEPARATE_CHUNK_ANCHOR
化をして、
read.c 11-Sep-2001 09:05 52k
に対してdiff取ったんだけど、
169d168
< #ifdefLATEST_ANCHOR
こんな形式のヤツでいいのかな?
インデントがつぶれるのも不安だし。
もし、それでよければ、そいつ(190行程)をコピペして
前スレに貼るけど。
前スレの944の追加と合わせれば、
ちゃんと動くと思う。
って、もう寝てるか。
それと、CRCの計算等には、全然ついて行けないので、ごめんなさい。
さらに、timeの出力の意味すらしらない。
- 175 :| - -) :01/09/11 16:37
- diff があるなら -c or -u オプションつきでとってください... patch 当てやすいので。
あと、できるなら mimencode してくれるといいです。
# そのまま貼り付けはインデント崩れるしuuencode は <とか出てきてやばい
- 176 :166 :01/09/11 16:41
- すんません、ど素人で。
mimencodeってWin上でどうやったらできます?
何のソフトで変換すればいいんだろう・・・
326KB
新着レスの表示
スレッドリストへ戻る 全部 前100 次100 最新50
0ch BBS 2004-10-30