5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

プログラマが2chを救う!?

1 :デフォルトの名無しさん:2001/08/25(土) 19:48
結局のところ資金面の調達が不可能なのなら、ここ(技術板)が
動かないと2ch縮小・停止の情勢・・・。

具体的には・・・
・P2Pシステムが代替案としては妥当なのか否か
・他の優良アイデアはあるのか
・言語は何を選ぶのか
・根本的な問題として、2ch(ひろゆき等々)を救う必要があるのか

を話し合っていただきたいと思います。
では、どうぞ・・・・

921 :デフォルトの名無しさん:01/08/27 04:01 ID:vN9r/JlA
実況防止機能(素早い reload を無視)
http://cocoa.2ch.net/test/read.cgi?bbs=unix&key=998764722&st=490

922 :らいがー。:01/08/27 04:30 ID:R/rjVC1g
あなた達かっこいいよ・・・。

923 :デフォルトの名無しさん:01/08/27 23:40 ID:bJ23bC3M
/* <ctype.h>等とかぶってたら、要置換 */
#define false (0)
#define true (!false)
#define _C_ (1<<0) /* datチェック用区切り文字等 */
#define _U_ (1<<1) /* URLに使う文字 */
#define _S_ (1<<2) /* SJIS1バイト目=<br>タグ直前の空白が削除可かを適当に判定 */

//#define isCheck(c) (flagtable[(unsigned char)(c)] & _C_)
#define isCheck(c) (flagtable[/*(unsigned char)*/(c)] & _C_)
#define isSJIS1(c) (flagtable[(unsigned char)(c)] & _S_)
#define hrefStop(c) (!(flagtable[(unsigned char)(c)] & _U_))

#define _0____ (1<<0)
#define __1___ (1<<1)
#define ___2__ (1<<2)
#define ____3_ (1<<3)
#define _____4 (1<<4)

#define ______ (0)
#define _01___ (_0____|__1___|0)
#define __1_3_ (__1___|____3_|0)
#define ___23_ (___2__|____3_|0)
#define _0_23_ (_0____|___2__|____3_|0)


char flagtable[256] = {
_0____,______,______,______,______,______,______,______, // 00-07
______,______,______,______,______,______,______,______, // 08-0F
______,______,______,______,______,______,______,______, // 10-17
______,______,______,______,______,______,______,______, // 18-1F
_0____,__1___,______,__1___,__1___,__1___,_01___,______, // 20-27 !"#$%&'
______,______,__1___,__1___,_01___,__1___,__1___,__1___, // 28-2F ()*+,-./
__1___,__1___,__1___,__1___,__1___,__1___,__1___,__1___, // 30-37 01234567
__1___,__1___,__1___,__1___,_0____,__1___,______,__1___, // 38-3F 89:;<=>?
__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_, // 40-47 @ABCDEFG
__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_, // 48-4F HIJKLMNO
__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_, // 50-57 PQRSTUVW
__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_, // 58-5F XYZ[\]^_
__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_, // 60-67 `abcdefg
__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_, // 68-6F hijklmno
__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_, // 70-77 pqrstuvw
__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,__1_3_,______, // 78-7F xyz{|}~
____3_,_0_23_,___23_,___23_,___23_,___23_,___23_,___23_, // 80-87
___23_,___23_,___23_,___23_,___23_,___23_,___23_,___23_, // 88-8F
___23_,___23_,___23_,___23_,___23_,___23_,___23_,___23_, // 90-97
___23_,___23_,___23_,___23_,___23_,___23_,___23_,___23_, // 98-9F
____3_,____3_,____3_,____3_,____3_,____3_,____3_,____3_, // A0-A7
____3_,____3_,____3_,____3_,____3_,____3_,____3_,____3_, // A8-AF
____3_,____3_,____3_,____3_,____3_,____3_,____3_,____3_, // B0-B7
____3_,____3_,____3_,____3_,____3_,____3_,____3_,____3_, // B8-BF
____3_,____3_,____3_,____3_,____3_,____3_,____3_,____3_, // C0-C7
____3_,____3_,____3_,____3_,____3_,____3_,____3_,____3_, // C8-CF
____3_,____3_,____3_,____3_,____3_,____3_,____3_,____3_, // D0-D7
____3_,____3_,____3_,____3_,____3_,____3_,____3_,____3_, // D8-DF
____3_,___23_,___23_,___23_,___23_,___23_,___23_,___23_, // E0-E7
___23_,___23_,___23_,___23_,___23_,___23_,___23_,___23_, // E8-EF
___23_,___23_,___23_,___23_,___23_,___23_,___23_,___23_, // F0-F7
___23_,___23_,___23_,___23_,___23_,______,______,______, // F8-FF
};

924 :デフォルトの名無しさん:01/08/27 23:41 ID:bJ23bC3M
typedef struct { // class...
char **buffers; //csvの要素
int rest; //残りのバッファサイズ・・厳密には判定してないので、数バイトは余裕が欲しい
int isTeri; //
} ressplitter;

/*
初期化
toparray ポインタ配列のアドレス
buff コピー先のバッファの先頭
bufsize 厳密には判定してないので、数バイトは余裕が欲しい
*/
void ressplitter_init(ressplitter *This, char **toparray, char *buff, int bufsize/*, bool isteri*/)
{
This->buffers = toparray;
This->rest = bufsize;
This->isTeri = true; //レス1をstrstr("<>")した結果を設定すべき
*This->buffers = buff;
}

/*
findSplitterの代わり
レスを全走査するが、コピーと変換(と削除)を同時に行う
p コピー前のレス(BigBuffer内の1レス)
istagcut <a href=...>と</a>をcutするか
Return 次のpの先頭
non-TYPE_TERIなdatには,"<>"は含まれないはずなので、#ifdef TYPE_TERI は略
*/
const char *ressplitter_split(ressplitter *This, const char *p, int istagcut)
{
char *bufp = *This->buffers;
int bufrest = This->rest;
while (--bufrest > 0) {
int ch = *(unsigned char *)p;
if (isCheck(ch)) {
switch (ch) {
case ' ':
//無意味な空白は1つだけにする
while (*(p+1) == ' ')
p++;
if (*(p+1) != '<')
break;
if (*(p+2) == '>') {
if (bufp == *This->buffers) //名前欄が半角空白の場合
*bufp++ = ' ';
p += 3;
goto Teri_Break;
}

if (memcmp(p, " <br> ", 6) == 0) {
if (bufp != *This->buffers && isSJIS1(*(bufp-1))) {
*bufp++ = ' ';
}
memcpy(bufp, "<br>", 4);
p += 6;
bufp += 4;
continue;
}
break;

925 :デフォルトの名無しさん:01/08/27 23:42 ID:bJ23bC3M
case '<': // 醜いが
if (*(p+1) == '>') {
//This->isTeri = true;
p += 2;
goto Teri_Break;
}
if (istagcut) {
//if (*(p+1) != 'b' || *(p+2) != 'r') {
if ((*(p+1) == 'a' && *(p+2) == ' ') || (*(p+1) == '/' && *(p+2) == 'a')) {
while (*p != '>') { //strchr(p, '>')
if (*p == '\0')
goto Break;
++p;
}
++p;
continue;
}
}
break;
case '&':
if (memcmp(p, "&", 4) == 0) {
if (*(p + 4) != ';')
p += 4 - 1;
}
break;
#ifndef TYPE_TERI
case 0x81: // *"@"
//if (!This->isTeri) {
if (memcmp(p, "@`", 4) == 0) {
ch = ',';
p += 4 - 1;
}
//}
break;
case ',':
//if (!This->isTeri) {
p++;
goto Break;
//}
//break;
#endif
case '\0':
goto Break;
//break;
default:
break;
}
}
*bufp++ = ch;
p++;
}

926 :デフォルトの名無しさん:01/08/27 23:43 ID:bJ23bC3M
Teri_Break:
//名前欄に','が入っている時にsplitをミスるので、見誤る可能性があるので、
//This->isTeri = true;
Break:
*bufp++ = '\0';
This->rest -= bufp - *This->buffers;
*++This->buffers = bufp;

//区切り末の空白を削除
if (*p == ' ')
++p;
return p;
}

void splitting_copy(char **s, char *bufp, const char *p, int size)
{
ressplitter res;
ressplitter_init(&res, s, bufp, size);

p = ressplitter_split(&res, p, false); //name
p = ressplitter_split(&res, p, false); //mail
p = ressplitter_split(&res, p, false); //date
p = ressplitter_split(&res, p, LINKTAGCUT && IsBusy2ch()); //text
p = ressplitter_split(&res, p, false); //title
//IsBusy2ch()を何度も呼ぶのは大きな無駄
}

927 :デフォルトの名無しさん:01/08/27 23:43 ID:bJ23bC3M
その他に直す部分は、
先頭のほうに、
#define false (0)
#define true (!false)
#define LINKTAGCUT true

out_html1()(369-)
- strncpy(p, BigLine[0], 1024);
- p[1024 - 1] = '\0';
- if (!*p)
- return 1;
- res_split(s, p);
+ splitting_copy(s, p, BigLine[0], sizeof(p) - 20);
+ if (!*p)
+ return 1;

out_html()(404-)
- strncpy(p, BigLine[0], 1024);
- p[1024 - 1] = '\0';
- if (!*p)
- return 1;
- res_split(s, p);
+ splitting_copy(s, p, BigLine[0], sizeof(p) - 20);
+ if (!*p)
+ return 1;

out_html()(421-)
- strncpy(p, BigLine[line], 1024);
- p[1024 - 1] = '\0';
- if (!*p)
- return 1;
- res_split(s, p);
+ splitting_copy(s, p, BigLine[line], sizeof(p) - 20);
+ if (!*p)
+ return 1;

hrefStop()
マクロで定義しなおしているので、
#if 0
#endif
ででもはさんでくれ(コンパイルエラーが出る)。
res_split()とfindSplitter()も必要なくなるが、エラーにはならないので。

928 :デフォルトの名無しさん:01/08/28 00:19 ID:gWXKzR9.
わかると思うけど、
>>925
 case '&':
の下は、当然、
  if (memcmp(p, "&amp", 4) == 0) {
ね。

929 :デフォルトの名無しさん:01/08/29 22:04 ID:eQiT7HbI
BadAccessってさ、なんでif文を切ってるの?
コンパイルした時にダイナミックステップが多くなるじゃん。
caseにしろよ。その方が高速化するぞ。

930 :デフォルトの名無しさん:01/08/29 22:38 ID:6wtO5bLA
>>929
文字列比較にcase?

243 KB
■ このスレッドは過去ログ倉庫に格納されています

>>1000 /test/read.cgi/tech/998736516/">★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)