作者Dopin (ats.twbbs.org)
看板PttSuggest
標題Re: [建議] 優文恢復+新優文系統
時間Fri Dec 4 11:54:21 2009
※ 引述《wa007123456 (大笨羊)》之銘言:
: 小弟我相信優文可以是好文章的來源:)
: 每個版都會有一個評鑑的新選項
: 如果通過評鑑
評鑑本身就隱含許多問題 Q_Q
: 才可以在那個版申請優文
: 同時會檢查 每個帳號第一推 算一推
這種問題被提過許多次 主要還是怕灌水問題 或是鄉民情結
然而給板主個人裁定 板主主觀認定不見得公平 也是問題多多
: 但是完全不知道BBS的原理
http://OpenSVN.csie.org/pttbbs/trunk/pttbbs
懂 C 家族的話抓回去啃應該很快就可以摸懂
: 我猜每一個版是一個結構體
每個板只是一個(或數個 分散式擺放)目錄 一個/幾個 索引
每個看板資料單位如下 (下面的 fileheader 也是同理 反正這個 pttstruct.h
啃過了大概就知道可能怎麼運作看板與文件 :p
http://opensvn.csie.org/pttbbs/trunk/pttbbs/include/pttstruct.h
typedef struct boardheader_t { /* 256 bytes */
char brdname[IDLEN + 1]; /* bid */
char title[BTLEN + 1];
char BM[IDLEN * 3 + 3]; /* BMs' userid, token '/' */
char pad1[3];
uint32_t brdattr; /* board的屬性 */
char chesscountry; /* 棋國 */
uint8_t vote_limit_posts; /* 連署 : 文章篇數下限 */
uint8_t vote_limit_logins; /* 連署 : 登入次數下限 */
uint8_t vote_limit_regtime; /* 連署 : 註冊時間限制 */
time4_t bupdate; /* note update time */
uint8_t post_limit_posts; /* 發表文章 : 文章篇數下限 */
uint8_t post_limit_logins; /* 發表文章 : 登入次數下限 */
uint8_t post_limit_regtime; /* 發表文章 : 註冊時間限制 */
uint8_t bvote; /* 正舉辦 Vote 數 */
time4_t vtime; /* Vote close time */
uint32_t level; /* 可以看此板的權限 */
time4_t perm_reload; /* 最後設定看板的時間 */
int32_t gid; /* 看板所屬的類別 ID */
int32_t next[2]; /* 在同一個gid下一個看板 動態產生*/
int32_t firstchild[2]; /* 屬於這個看板的第一個子看板 */
int32_t parent; /* 這個看板的 parent 看板 bid */
int32_t childcount; /* 有多少個child */
int32_t nuser; /* 多少人在這板 */
int32_t postexpire; /* postexpire */
time4_t endgamble;
char posttype[33];
char posttype_f;
uint8_t fastrecommend_pause; /* 快速連推間隔 */
uint8_t vote_limit_badpost; /* 連署 : 劣文上限 */
uint8_t post_limit_badpost; /* 發表文章 : 劣文上限 */
char pad3[3];
time4_t SRexpire; /* SR Records expire time */
char pad4[40];
} PACKSTRUCT boardheader_t;
: 然後每一個文章新增後
: 會有一個List儲存推文資料
那個 list 也是索引 每個文件單位資料如下
http://opensvn.csie.org/pttbbs/trunk/pttbbs/include/pttstruct.h
typedef struct fileheader_t { /* 128 bytes */
char filename[FNLEN]; /* M.1120582370.A.1EA [19+1], create
time */
time4_t modified; /* last modified time */
char pad; /* padding, not used */
char recommend; /* important level */
char owner[IDLEN + 2]; /* uid[.] */
char date[6]; /* [02/02] or space(5) */
char title[TTLEN + 1];
/* TODO this multi is a mess now. */
char pad2;
union {
/* TODO: MOVE money to outside multi!!!!!! */
int money;
int anon_uid;
/* different order to match alignment */
struct {
unsigned char posts;
unsigned char logins;
unsigned char regtime;
unsigned char badpost;
} vote_limits;
struct {
/* is this ordering correct? */
unsigned int ref:31;
unsigned int flag:1;
} refer;
} multi; /* rocker: if bit32 on ==> reference */
/* XXX dirty, split into flag and money if money of each file is less
than 16bit? */
unsigned char filemode; /* must be last field @ boards.c */
char pad3[3];
} PACKSTRUCT fileheader_t;
: 利用foreach() //我知道C應該沒有這個功能
基本上目前台灣現存的 BBS Dist. 大多是 base C :) 而且也用不到這玩意兒
BBS 都有自身的工具程式(針對 所有/特定 使用者/看板/外部呼叫 等) 跟線上修改
資料的專用函式 所以 "應該" 也用不到這種沒有 "特殊化" 的函式呼叫
: 這樣可以嗎^^"
詳讀 Code 以後 你就會發現絕大部份的文字 BBS "沒有" 外部資料庫 也 "幾乎沒有"
C++ Code 大概找不到 C# --> 包的越多的東西效能往往沒有增益
而 PTT 系統是針對大量使用者與資料特化的 BBS 所以許多可能造成人力作業負擔的
都有必需考量其實用性 當然造成系統負擔的優先會被排除掉
最後 優文系統本身在 Ptt 的實用性如何就不是我的討論範圍 (逃) 程式面很好達到
就是 但我想考量的不是程式面 :p
--
SOB Pack 已於日前 Release 出 gcc 3.x 版, 歡迎還活在 Maple 2.36 SOB Version
回憶中的朋友們一起來討論下列相關 :
1.
maple 2.36 2.
SOB 3.
Atlantis Version
telnet to bbs.bsd.com.tw Boardname : ATSVersion
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.70.65.28