看板 PttSuggest 關於我們 聯絡資訊
※ 引述《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