read.cgi再開発スレ Part2
■ このスレッドは過去ログ倉庫に格納されています
◆cZfSunOs.Uさん作成のmod_cgidsoにより、大きな負荷軽減が図られたread.cgi。
このスレでは、そんなread.cgiの(再)開発・実装すべき機能について取り扱います。
前スレより:
574 名前:FOX ★[sage] 投稿日:05/01/05 15:54:28 ID:???
全てのサーバ cobra/toger/banana で read.cgi の dso化が完了。
これから href の置き換え ime.nu 対応を行い
それが終了したら第一ステップは完。
第2ステップは
2-1) bug つぶし
2-2) 仕様の変なところは変更
2-3) 時代背景にあわせたデコレーション
こんなとこかと、
前スレ:
read.cgi再開発スレ
http://qb5.2ch.net/test/read.cgi/operate/1087199303/ >>318
うちの環境では、そのスレはime.nuついてるけど。 <dt>と<dl>にid付けて<dt id="dtレス番">、<dl id="dlレス番">みたいにして
例 <dt id="dt3">3 :<font color=green><b>名無し </b></font>:2005/08/06(土) 16:15:20 <dd id ="dd3"> ・・・・・・
IEで見たときにも>>レス番のポップアップするようにしてみたんだけどどうかな?
// レスポップアップ
function popAnchor() {
var evt = window.event.srcElement;
if ((evt.tagName == 'A') && (evt.title == "")) {
if (evt.innerText.search(/^>>(\d+)\-?(\d*)/) !=-1) { // ハイパーリンクなら
var st = RegExp.$1;
var ed = RegExp.$2;
if ((st > ed) || (ed == "")) {ed = st;} // 変なリンクチェック
if ((ed - st) > 5) {ed = eval(st) + 5;} // 5レス以上は5に
while (st <= ed) {
evt.title += document.getElementById('dt'+st).innerText + "\n" + document.getElementById('dd'+st).innerText + "\n\n"; // レス内容獲得
st ++;
}
}
}
}
document.onmouseover = popAnchor; // マウス監視
if ((evt.tagName == 'A') ← これかわいい(´∀`*) >1にレスアンカーのあるスレをトラックバックするとタグが表示される件について トラックバック先が連投規制で書き込みが反映されなかったときに
エラーメッセージが出ない件について
多分落ちてるスレに対してトラックバックかけても同様だと思う 【トラックバック来たよ】 (ver. 0.11)
[タイトル] スレッド作成法とスレ立て相談の資料・研究
[発ブログ] 2ちゃんねる資料編纂室@2ch掲示板
http://that3.2ch.net/test/read.cgi/dataroom/1104683767/l50
[=要約=]
立て相 http://ttsearch.net/s.cgi?k=%97%A7%82%C4%91%8A&o=r
一般的なスレ立ての案内フロー他 <a href="../test/read.cgi/dataroom/1104683767/2-50" target="_blank">>>2-50</a>
>>327
トンクス
そのうえ、レスアンカーにこのスレのリンク貼られてるし
でも、スレ違いじゃない? いや
「>1にレスアンカーのあるスレをトラックバックするとタグが表示される」
ということが言いたくてトラックバックの内容自体はどうでも良いんだと思うが >>329
read.cgiはdatを読んでhtmlにしてるだけだからスレ違い
bbs.cgiかトラックバック関連のスレッドのがいいと思う 運用のトラックバックスレは検索では見つからないけどどっかにあんの >>319
補足すると「2ちゃんねるが外部サイト扱いになっている」
これもスレ違いだと思うけど一応
容量オーバーに関して、何の予告もでず、
容量オーバーになっても、投稿するまでそれがわからないのは不便です。
改善の余地はないでしょうか?
よろしく、お願いいたします。
たとえば、これなんかは容量オーバーになっていますが、みためにはわかりません。
http://life7.2ch.net/test/read.cgi/psy/1122591224/l50
E-mail (省略可):←これウザい
Mail:だけでいいよ。 「ウザい」なんて、心の中で思ってればいいこと
お前は客か? >>334
見た目で判るようになっているかと♪
501 KB [ 2ちゃんねるが使っている 完全帯域保証 レンタルサーバー ]
↑↑↑ >>339
Jane系はステータスにスレ容量を表示してる筈 ってか専用ブラウザの事までなんでread.cgiスレで言ってるんだろう・・・
自分が使ってる専ブラが対応していないなら
対応しているブラウザーに乗り換えるのもいいだろうし、
作者に問い合わせてみたりすればいいだろうし。
どちらにしてもスレ違い いやあの普通にread.cgiが吐き出していると思いますけれども、、、
501 KB [ 2ちゃんねるが使っている 完全帯域保証 レンタルサーバー ]
↑↑↑ 容量オーバーの容量ってhtmlファイルの容量なの?
datじゃなくて >343
htmlなら512KB
datなら500KB 多分、334が言いたいのは容量表示のことじゃなくて、
容量がオーバーしてますのでもう書けません、みたいな表示が欲しいってことじゃないん?
容量制限知らない人もいるだろうし。
たとえばレスが950超えると赤反転で注意文が出てますよね。
あれと同じ様なことを期待してるのではなかろうか。
あ、当然専ブラは関係無い話です。 >>347
read.cgi ver7.20p (04/01/07)
の時だと、バックグランドが赤で、白抜きで
上の方にこんな表示がでていたんですよ。
容量オーバーになっても、予告と同じ表示のままでしたけど。
■掲示板に戻る■ 関連ページ 全部 1- 101- 201- 301- 401- 501- 601- 701- 最新50
サイズが496KBを超えています。512KBを超えると表示できなくなるよ。
【xxxxx】zzzzzzzz【hhhhh】
そういえば以前はそんな感じだったね
たしか昔はレス全部表示が出来なかった気が 転送量が厳しい時 → こまごまと読んでもらいたい
サーバ負荷が厳しいとき → 一気によんでちょ わーちょろさんだーw
今は負荷が厳しいということ? ex11.ex10.news19.live20.live21のread.cgiを常時止めておけばいいんじゃね?
鯖にやさしい このスレかどうか知らんけど
鯖移転したあとに残ってる旧アドレスのスレの書き込みエラー
「ユーザー設定が消失しています」じゃわかりにくいんでは ユーザー設定が消失しています
は
SETTING.TXTがありません
という意味だったような・・・? いずれread.cgiが無くなるってのはどうですか
せんぶら普及andどっかでみたインスタント2chビューアーみたいなのを個人が作るとかで >>361
広告はどこに出せばいいの?
(2chの収入源を排除するの?) >>363
真面レスなんだが結構よくない?
ただread.cgiがかなり重くなるかな...?
もしくはスレ作成時にスレ毎に特定の広告を決めるようにしとけば、
(決めかたが難しいけど)スレの1行目(カウンタの次ぐらい)に
広告を出すことはできる...read.cgiも既存のままでいいし。。 Googleっぽく、関連がありそうなスレに関連がありそうな広告を出すのが
宣伝効果も高くていいような
ただ、今の現状ではアダルト広告ばかりになりそうな気もするけど 2ちゃんねるはアダルトは全面禁止
PINKちゃんねる行き ■
スレの頭に総レス数書いてあるとheadlineとかから開いた時便利
昔は700-とかがあったからどれくらい進んでるか目安に出来たけど ■
スレスト処理済のスレの書き込み欄が表示されてる→表示させないように
(以前は書き込み欄自体が消えていた) http://qb5.2ch.net/test/read.cgi/operate/1129726127/79-80n
これは LANG=ja_JP.SJIS で -c オプションを有効にした際の bbsd による
html 生成では対応してますが,read.cgi でも同様の対応をすればいいのかな.
まぁ少々面倒ではありますが. ドttp://
ドttps://
てtp://
ドttp://
ドttps://
てtp:// read.cgi ver 05.0.1.2 2005/10/29
#ifdef notdef
ap_rprintf(r," <a href=\"http://info.2ch.net/test/tb.cgi?__mode=list&tb_id=%s\">関連ページ</a>\n",url) ;
#endif >>383
もしまだ変わってないサーバがあったら、知らせてくださいです。 >>385
それは、管理人に直していただくということで。 │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ ├─┤ ├─┤ │ ↑↑↑↑
│ ├─┤ ├─┤ ││││
│ │ │ ├─┤ ││││
│ ├─┤ ├─┤ ││││
├─┤ ├─┤ └─┘│││
│ ├─┤ └────┘││
│ │ └───────┘│
↓ └──────────┘
∩∧ ∧ おらっしゃあぁぁ!!!
ヽ( ゚Д゚)
\⊂\
O-、 )〜
∪ スレッド表示の下部、
「掲示板に戻る」のリンクと「書き込む」ボタンの位置が近すぎて、
間違えて押しそうになります。
「書き込む」ボタンを違う場所に移動した方が良いのではないでしょうか? FireFoxだと特に近いです。
時々、コメントのない書き込みを見かけますが、
これが原因じゃないでしょうか。 >395
空欄のコメントにも、意味がある場合もある。
一番典型的なのは、メール欄で会話するスレかな。
もちろん、ただのスレ潰しの場合もあるが。 >>396,397
FireFoxだと、E-mail欄の「sage」が記憶されているので
コメントが空欄でも、
間違って「書き込む」を押すと書き込まれてしまいます。 e-mail欄が入ってても、本文が空白なら書き込まれないよ。 400ゲトついでに改善要望(定期)
■定期>>373
スレスト処理済のスレの書き込み欄が表示されてる→表示させないように
(以前は書き込み欄自体が消えていた)
■定期>>372
容量で埋まったスレのエラーメッセージがない
http://qb5.2ch.net/test/read.cgi/operate/1128074121/
>>399
ほんとだ。じゃ、名前欄に名前が残ってたばあいは? >>396,399
どうやら本文が空欄だと書き込めないようですね。
スレ汚し失礼しました。 あえて言うなら、コメントを途中まで書いて、
やっぱりやめようと「掲示板に戻る」を押そうとして
間違えて「書き込む」を押しちゃった場合は書き込まれてしまいますね。
レアケースですけど。 ここの管轄か知らんけど
■http://qb5.2ch.net/operate/kako/
過去ログ倉庫クリックした時にsubbackのほうの窓じゃなくてスレの窓のほうを書き換えるの
やめて >405をクリックした時は新しく窓が開くからややこしい ここの管轄か知らんけど
■http://news18.2ch.net/mnewsplus/1000.txt
実際にはいるのは普通1001(かそれ以降)じゃないの ■ime.nu判定
2chのスレにbbspinkのスレを貼った時、以前はJumpページ
(ime.nu経由?)になったと思うんだけど、今は直で飛べるみたい。
http://qb5.2ch.net/test/read.cgi/saku2ch/1131265364/793
BBSPINKは21禁の別サイトのはずなので、
間にJumpが挟まってた方がいいのでは。 それだったらむしろime.st行く前に
「ジャンプ先にアダルト広告(画像つき)があります ジャンプしますか?(y/n)」
が必要なんでは >>410
なおたとおもう。
(memoriesに収容したので、read.cgiバイナリをi386→amd64に変更(配布しなおし)) >>287 をやろうと思って、read.cgi のソースを眺め始めたりして。
今のread.cgiを見てみると、
if(!lookfor(ch2,r)) return 3001 ;
ってやって、まずdatがあるかどうか調べて、lookforの中で、
if(!apr_stat(&CountStat,ch2->zz_fName,APR_FINFO_MIN,r->pool)) /* found */
{
ch2->zz_filesize = CountStat.size ;
ch2->zz_mtime = CountStat.mtime ;
ch2->where = W_LIVE ;
return 1 ;
}
ってやって、datのサイズとmtimeを読んで、その次に、
if(apr_file_open(&in,ch2->zz_fName,APR_READ,APR_OS_DEFAULT,r->pool)) {return 3011;}
apr_file_read(in, ch2->BigBuffer, &ch2->zz_filesize);
apr_file_close(in) ;
とやって、datをバッファに読み込んでいると。
ここに >>287 相当品を組み込めばよさげなわけですが、さて、どうすればいいのかと。
たぶん、HEADしてGETするとか、そういう感じなのかしら。 >>411
てか板トップから表示されてるスレの外部リンクは全部ime.st抜けてるよ まず,Apache 2.0 → 2.2 移行に関して......おおかたの API は
ソースレベルの互換性は維持されているので,mod_cgidso やそれ用の
プログラム (read.cgi 等) はソースの手直しは不要だと思います.
ただ,バイナリレベルの互換性はないのでリコンパイルは必要です.
しかし,>>287 のは正攻法ではなくトリッキーな方法を用いているため,
2.2 対応には若干の手直しが必要となります(下記のソースでは
その点も含め対応し,2.0 / 2.2 両対応となっています).
まぁこれは,正攻法でやろうとすると別途フィルタモジュールを
作らなければならなくなるので...... >>415 乙です.
>たぶん、HEADしてGETするとか、そういう感じなのかしら。
そのように2回サブリクエストを実行する形だと非効率になりそうなので,
雪だるま版では lookfor() で内容取得まで一緒にやってしまった方が良さそうな気もします.
その代わり,dat ファイルを読み込んでる部分をスキップすると.
----[この関数を定義しておく]------------------------------------------
#ifdef SNOWMAN
static apr_status_t rdat_filter(ap_filter_t *f, apr_bucket_brigade *b)
{
return ap_save_brigade(f, (apr_bucket_brigade **)&f->ctx, &b, f->r->pool);
}
#endif
----[lookfor() の中]--------------------------------------------------
#ifdef SNOWMAN
int rv;
#if defined(AP_SERVER_MINORVERSION_NUMBER) && AP_SERVER_MINORVERSION_NUMBER >= 2
ap_filter_rec_t frec = {"READDAT", {rdat_filter}, NULL, AP_FTYPE_RESOURCE, NULL, NULL, 0, 0};
#else
ap_filter_rec_t frec = {"READDAT", {rdat_filter}, NULL, AP_FTYPE_RESOURCE, NULL};
#endif
ap_filter_t f = {&frec, NULL, NULL, r, r->connection};
char *uri = apr_pstrcat(r->pool, "/", ch2->zz_bbs, "/dat/", ch2->zz_key, ".dat", NULL);
request_rec *rdat = ap_sub_req_lookup_uri(uri, r, &f);
if (!(rv = rdat->status == HTTP_OK ? ap_run_sub_req(rdat) : rdat->status)) {
apr_brigade_pflatten(f.ctx, &ch2->BigBuffer, &ch2->zz_filesize, r->pool);
apr_brigade_destroy(f.ctx);
ch2->zz_mtime = rdat->mtime ? rdat->mtime
: apr_date_parse_http(apr_table_get(rdat->headers_out, "Last-Modified"));
}
ap_destroy_sub_req(rdat);
if (!rv) {
ch2->where = W_LIVE;
return 1;
}
#else
if(!apr_stat(&CountStat,ch2->zz_fName,APR_FINFO_MIN,r->pool)) /* found */
{
ch2->zz_filesize = CountStat.size ;
ch2->zz_mtime = CountStat.mtime ;
ch2->where = W_LIVE ;
return 1 ;
}
#endif
----[BigBuffer アロケート / dat 読み込みの部分はスキップ]-------------
#ifndef SNOWMAN
ch2->BigBuffer = apr_palloc(r->pool, ch2->zz_filesize); /* ←多分こんな形で BigBuffer 領域を確保してますよね? */
if (apr_file_open(&in,ch2->zz_fName,APR_READ,APR_OS_DEFAULT,r->pool)) {return 3011;}
apr_file_read(in, ch2->BigBuffer, &ch2->zz_filesize);
apr_file_close(in) ;
#endif
---------------------------------------------------------------------- ■ このスレッドは過去ログ倉庫に格納されています