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

read.cgi改良スレッド 2

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("&quot;")は、
'"'で囲まれた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 は &ltとか出てきてやばい

176 :166 :01/09/11 16:41
すんません、ど素人で。
mimencodeってWin上でどうやったらできます?
何のソフトで変換すればいいんだろう・・・

177 :166 :01/09/11 16:43
すみません、とりあえずgoogle行きます

178 :|  - -) :01/09/11 16:44
>>176
むー。Windowsか。メールソフトで
メールを作成→添付ファイル→送信せず保存→(メールの)ソースを見る
とかやればできないこともないけど...

diffがあるということはcygwin使っているのかな...?

179 :166 :01/09/11 16:48
>cygwin
そうです。かなり古いバージョンだと思うけど。

180 :- :01/09/11 16:58
ttp://www.cc.rim.or.jp/~ikuta/mime_pls/

mime_plsをとってきて、中に入ってる(はず)のwbodyってスクリプトで
MIMEに変換できた・・・はず。

181 :デフォルトの名無しさん :01/09/11 17:05
MIMEってBASE64 encodingのことかな。
これだと確かに[A-Za-z0-9+/]しか使わないから化ける危険少ないかな。
分量増えるからencodeかけるまえに圧縮してくれるといいかも?

182 :166 :01/09/11 17:12
皆さん、どうもです。
いろいろやってみます。
(メーラー添付はタブが残ってたので)
次からの事もあるので、何とかそれなりに簡単で安全な方法を探します。
(とりあえず>>180を落としてみた)

CVSの更新は続けちゃってください。
変更点は自分ではわかっているので、
安定していそうな頃を見計らってdiff -cした結果をどっかに貼ります。

183 :166 :01/09/11 17:37
何とか出来たかも。
前スレ944と951(difs.txt.gz)で
動いてくれることを祈ってみたり。
(-DSEPARATE_CHUNK_ANCHOR)

うまくいってたら、皆さんに大感謝。

184 :デフォルトの名無しさん :01/09/11 17:50
>>183
diffの出力をgzipしてmime encodeしたんですね。
diffの改行コードがCRLFなのに最初ひっかかったYO(笑)
とりあえず手元では当たった。

185 :|  - -) :01/09/11 17:53
>>183
done. あと CGIVER がいつまでたってもver14なのは変なので変更。
こんなの作ってみた→ http://piza2.2ch.net/test/read.cgi/tech/984182993/488

186 :デフォルトの名無しさん :01/09/11 17:57
first_line()とlast_line()を
#ifdef SEPARATE_CHUNK_ANCHOR
で囲まないとwarningが出るね。使ってないって。

187 :|  - -) :01/09/11 18:02
>>186 done.

188 :166 :01/09/11 18:17
125さん、|  - -) さん、180さん、181さん、
本当にお手数おかけしました。
ありがとうございました。
今後、大きい変更があったら、7行スレのを使わせてもらいます。

189 :デフォルトの名無しさん :01/09/11 18:22
今回の変更の説明をconfig.txtに記入キボー

?SEPARATE_CHUNK_ANCHOR
※CHUNK_ANCHORが必要
内容の説明キボー

?CHUNKED_ANCHOR_WITH_FORM
※CHUNK_ANCHOR定義時にのみ有効
select form形式で CHUNKED_ANCHORを表示する
「掲示板に戻る」「レスを全部」「最新レス」との統一が取れていない

190 :デフォルトの名無しさん :01/09/11 18:36
>>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化されるのを待っているようです。
しばらく待つしかないようです。』

ご検討のほど、よろしくお願いいたします。

192 : ◆D69Zsbfg @夜勤 ★ :01/09/11 18:39
× kako以下のフォルダの生成は
○ kako以下のフォルダ名の生成は

193 :125 :01/09/11 19:02
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
です。

195 :153 :01/09/11 20:33
おお、夜勤さん自ら要望に来てる

196 :デフォルトの名無しさん :01/09/11 20:47
/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"
って感じ?

197 :デフォルトの名無しさん :01/09/11 20:48
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));

198 :デフォルトの名無しさん :01/09/11 20:50
html_error()の後半は、
→ sprintf(doko, "../%.50s/" TEMP_DIRNAME KAKO_DIRNAME "%.50s" DAT_EXTNAME,
   zz_bs, tmp);
だった。

199 :デフォルトの名無しさん :01/09/11 20:53
いや、これも違う。
もう一度よく考える。
→ sprintf(doko, "../%.50s/" TEMP_DIRNAME KAKO_DIRNAME "%.50s/%.50s" DAT_EXTNAME,
   zz_bs, zz_soko, tmp);

200 :デフォルトの名無しさん :01/09/11 20:55
>>196

/tech/dat/1000035521.dat

/tech/temp/1000035521.dat

/tech/kako/1000/1000035521.dat(.html)

ではないかと思われ。
それにこのほうが #define いじりやすそう。

201 :デフォルトの名無しさん :01/09/11 21:03
俺もそう思って書きなおしてた>>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));

202 :201 :01/09/11 21:08
まーた間違えた。
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);

203 :デフォルトの名無しさん :01/09/11 21:20
もしかしたら、read.cgiでtempだけでも読めるように
規制を緩める可能性もあるのかな?

だとすると、あらかじめ dat_out()に
if (isdigit(*zz_ky)) {
 threadStopped = 1;
 /* 過去ログはFORMもRELOADLINKも非表示にするため */
}
を入れておいたほうがいいかもしれない。

204 :203 :01/09/11 21:22
if (!isdigit())

326KB
新着レスの表示

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

0ch BBS 2004-10-30