台灣 MUD 人數資料:怎麼量的
這頁說明「台灣 MUD 即時列表」的每一個數字是怎麼來的:量測方法、更新頻率、已知的限制,以及我們用什麼機制確認自己沒有抓錯。所有原始資料都可以完整取走。
☘ 怎麼量的 ☘
每 20 分鐘一輪,對清單上的每一站建立一條 telnet 連線,讀取對方送過來的歡迎畫面,再用該站專屬的一條規則從畫面上把線上人數的數字取出來。我們不登入、不送遊戲指令,也不做任何會改變對方世界的事 —— 量到的就是那一站自己印在歡迎畫面上、任何人連上去都看得到的那個數字。
- 連線成功才算「在線」。連線逾時本身不是活著的證據,不會被記成在線。
- 沒有 telnet 連接埠的站(只能用瀏覽器玩的那幾個)改成檢查它的首頁還回不回得出東西,每 6 小時一次,在開放資料裡標記為
probe: "http"。⭐ 另外還有一種probe: "archived":已經結束、我們不再探測的站。⚠ 它們多半留著當年的位址與連接埠,但我們刻意不去連 —— 一個結束多年的位址很可能已經是別人的服務,連過去拿到的畫面會被誤當成這個站的歷史。那一筆會有archived(典藏日期、原因、資料來源)而永遠沒有verified:我們沒有親自量到過它,就不假裝有。⭐⭐ 典藏有兩種來源,資料裡分得出來(archived.by):人看過之後下的結論(那裡寫的是帳號),或程式依規則下的判定(寫的是auto)。自動那一種的規則只有一條:我們自己連續探測滿一個月、每一輪都連不上 —— ⚠ 判準刻意不是「它上次連上是多久以前」:那個時間戳我們自己就有一批是錯的(2026-08-25 之前,連線逾時會被誤記成連上),⭐ 而「檔案上寫著一個月前」與「我們連續看了一個月」是兩件事。所以自動典藏那一筆的archived.source會寫出從哪一天起算、期間真的探測了幾輪。
⚠ 而它是可以被推翻的。典藏之後我們就不再連它,萬一它其實只是搬家了,那個判斷會把自己鎖死 —— 所以自動典藏的站仍然留在我們內部的「該去找誰」清單上,⭐ 機器可以下判斷,但那個判斷要留在人看得到的地方。你如果知道它搬去哪了,說一聲,我們會把它接回來。
⭐ 接回來的條件是它真的又在運作了(我們連得上,或你告訴我們新位址)。⚠ 而如果接回來之後它又關了,一個月後它會再變回典藏 —— 那不是我們固執,那是同一條規則:沒在運作的站台就是典藏的目標,不設例外。⚠ 「回得出東西」不等於「還活著」—— 網域到期的停放頁也是 200,所以我們同時記下首頁的內容指紋(抹掉會自己變的數字之後),⭐ 內容變了會被標出來讓人看一眼,但判斷那代表什麼是人的工作。 - ⭐ 有網站連結的站我們都會檢查(不只純網頁版)——那是清單裡唯一把訪客送到站外的欄位,而一個死連結對訪客的傷害,不亞於一個錯的人數。⚠ 檢查時我們不跟隨換了網域的轉址:那通常代表那個站搬家了,值得記下來讓人看,而不是默默跟過去。
- 各站的中文編碼不同(多為 Big5),抓到的畫面會先轉成 UTF-8 再處理;少數站的人數是用中文數字寫的,會另外轉換 —— 但只有確認抓到的真的是數字表達才轉,否則寧可記成「沒量到」。
- ⚠ 有一種情況我們會回話:對方先問我們編碼要用 Big5 還是 GB、或要求「按 ENTER 繼續」的時候,程式會照答 —— 不然畫面根本不會送過來。那是回答問題,不是操作它;而且到目前為止,台灣這份清單上沒有任何一站問過。
- 每一站只開一條連線、逾時 20 秒、不重試。抓不到就記成抓不到,等下一輪 —— 反覆重連對對方沒有好處。
☘ 數字沒有的時候,我們說出為什麼 ☘
這是這份資料最重要的一條規則:「量不到人數」永遠不會被寫成 0。0 是一個合法的人數(真的沒有人在線),把探測失敗也填 0,兩件完全不同的事就再也分不開了 —— 而一個站被長期記成「在線 0 人」,對它是實質的傷害。
所以人數欄位只有兩種可能:一個數字(含 0,表示真的量到),或是空的。而空的時候,我們一定附上原因:
| 原因 | 意思 | 是誰的問題 |
|---|---|---|
offline | 這一輪連不上這個站 | 對方的狀態,我們無能為力 |
archived | 這個站已經結束了,我們把它留在清單裡典藏,不再探測 | 已成定局 —— 這一筆的資料來源寫在 archived.source |
not_published | 對方的歡迎畫面根本沒有公布人數 | 對方的選擇,改善不了,是事實 |
upstream_unreliable | 對方有公布,但那個數字明顯是壞的 | 對方的問題 —— 我們刻意不採信 |
not_measured | 我們還沒有設定要抓這一站的人數 | 我們自己沒做,不是抓壞了 |
miss | 拿到歡迎畫面了,但規則對不上 | 我們的問題 —— 對方可能改版了,規則要修 |
silent | 連得上,但對方從頭到尾沒吐出任何東西 | 要先送點什麼才有回應,或我們等得不夠久 |
implausible | 抓到數字了,但那個數字不可能是真的 | 兩種都可能 —— 對方畫面壞了,或我們抓到了別的東西 |
⚠ not_published、upstream_unreliable 與 not_measured 看起來很像,但意義完全不同:前兩個是對方那邊的事實,最後一個是我們還沒做的事。把它們混成同一個值,讀的人就分不出「這份資料還能變好」與「這件事就是這樣」 —— ⭐ 而這三種在機器眼裡完全一樣(都是「沒有設定規則」),所以是人看過歡迎畫面之後標註的,標註連同理由一起寫在開放資料裡。
⭐ miss 與 silent 看起來都是「抓不到」,但修法完全不同:前者要改規則,後者改再多次規則也沒用。我們自己就把這兩件事混過一次 —— 監測面板說 5 個站連續 100% 抓不到、診斷工具卻說沒有任何一站的規則失效,兩邊互相矛盾,查下去才發現那 5 站根本沒吐過畫面。把「我們測不到」與「我們抓壞了」混為一談,正是一份列表會壞掉四年沒人發現的形狀。
☘ 我們怎麼知道自己抓壞了 ☘
一份人數列表最危險的失敗方式,是安靜地失敗:規則失效之後,那一站的人數就變成 0 或空白,而在數字上,它跟「這站真的沒人」長得一模一樣。沒有任何機制在區分這兩者的話,錯誤可以維持很多年而不被任何人發現。
- ⭐ 加入清單的那一刻就要證明一次(入列驗證)。這一道排在最前面是有原因的:後面那些機制都在問「最近表現如何」,只有它能抓到從第一天就抓錯的那一種 —— 那種錯的「連續抓不到次數」從第一天就是滿的,在數字上與「這站一直沒人」一模一樣,唯一的分辨方式就是入列時有沒有驗證過。
- 每一輪都記錄「有沒有抓到」,而不只是記錄結果。判準是:這一站活著、我們也設定了要抓、但就是沒抓到 —— 只有這種情況才算我們有嫌疑。
- 看的是連續次數,不是單次。一次抓不到是常態波動(歡迎畫面偶爾會慢、會被公告擠掉);連續三小時算「注意」,連續超過一天幾乎確定是對方改版導致規則失效。
- 歡迎畫面會存檔(去重後保留),所以規則對不上的時候,我們可以直接拿當時的畫面回頭比對,而不是靠猜。
- 這些判定的結果原樣寫進開放資料,不做美化 —— 包括「我們沒設定要抓」這種承認自己沒做的欄位。
☘ 這份資料的限制 ☘
寫在前面:以下每一條都是這份資料現在真的做不到的事。
- 我們量的是對方自己宣告的數字。如果某站的歡迎畫面把人數算錯了,或它顯示的是「今日曾上線人數」而不是「此刻在線」,我們會照著錯。⭐ 這不是假設 —— 台灣現在就有一個站的歡迎畫面印著 21 億人(它的計數器整數溢位了,畫面上還自己寫著「本 MUD 爆炸中」)。我們對它的處置是不採信、並公開說明原因,而不是把那個數字端出去。另外也設了一道上限:抓到的人數超過一萬就一律不採用 —— ⚠ 那是防呆不是精確判準(全台單站歷史最高是 501 人),它只攔明顯不可能的。
- 不是即時。20 分鐘一輪,你看到的是最近一次量測的結果,每一站的時間戳記都附在資料裡。
- 探測失敗是常態。每一輪都有幾站量不到,那不代表它們沒人 —— 某站曾經在我們這裡顯示為空白,而它其實有 500 多人在線。
- ⚠ 比較不同時間的「全台總人數」之前必須先取樣本交集。每一輪成功量到的站不是同一批,直接把總數相加再比大小會得到不可比的數字。歷史檔完整保留了每一輪的站台名單,就是為了讓這件事做得到。
- ⚠ 「入列驗證」是 2026-08-25 才開始的。從那天起,一個站要加進清單,必須當場連上去證明我們的規則真的抓得到它的人數,通過才准加入 —— 而且會留下紀錄(開放資料裡的
verified,連當時抓到的是哪一行都在)。而在那之前就已經在清單裡的站是事後補驗的:2026-08-25 當天對全部 telnet 站重跑了一次驗證,通過的都留下了紀錄(現在有幾站,看開放資料meta.verified_count)。⚠ 其餘的站verified是null,而null的意思是「還沒補驗證」,不是「驗證失敗」 —— 多半是那時連不上(離線),或我們本來就沒設定要抓它的人數。⭐ 補驗之前,那些站的「這個站一直沒人」與「我們從第一天就抓錯」是分不開的,那正是原始物語被某份列表記成 0 人四年、而沒有任何人發現的原因。 - ⚠⚠ 「離線」不等於「這個站關了」。它其實有兩種,而在資料上長得一模一樣:站真的收了,或者站搬家了而我們不知道。⭐ 2026-08-26 我們把一批長期離線的站重新搜尋一次,其中一站只是換了位址 —— 連進去有 205 人在線,佔當時全台總數的 11%。換句話說在那之前,我們公布的總人數少算了超過一成,而那個缺口不是量測誤差,是一個活得好好的站被我們記成死的。
⭐ 現在每一次「我們去找過了」都會記進開放資料的revisited欄位(含日期與當時看到什麼)—— ⚠ 因為「查過了找不到」與「根本沒查」如果長得一樣,那份資料就沒有在說話。 - 清單本身不完整。台灣還在運作的 MUD 不見得都在這份名單上;有些站我們也還沒設定要抓人數。
☘ 這些內容不是我們的 ☘
列表上的每一個 MUD、它們的歡迎畫面、其中的 ASCII/ANSI 圖與站名,權利都屬於原站與它們的作者。我們做的是把公開可見的東西蒐集、保存、陳列下來,並註明來源與連線方式 —— ⭐ 不希望自己的內容出現在這裡,說一聲就撤下,不需要理由,也不會問為什麼(怎麼說見本節最後)。
列表上每一站的畫面,是我們的採集程式連上去之後對方主動送過來的那一連串 —— 跟你自己用 telnet 連上去看到的第一屏是同一個東西。我們把它原樣保留(含顏色與版面),再重新畫成向量圖 —— 那不是截圖,是把每一個字元照它在終端上的位置重畫一次,所以放大到多大都不會糊,而整張圖只有幾 KB。
⚠ 那是各站自己的創作。ASCII 圖、標語、配色都是站方排出來的,我們只是把它呈現出來並註明來源與連線方式。⭐ 之所以值得做,是因為網路上沒有別的地方看得到 —— 那些畫面必須真的 telnet 連上去才會出現。
- 畫面標的是擷取時間,不是此刻。離線的站也可能有畫面(它還活著的時候抓的),那張圖旁邊會寫清楚是什麼時候的。
- ⚠ 畫面到哪裡為止是有規則的:從連上的那一刻算起,直到對方安靜一秒為止;之後才送過來的東西不算。有些站會把遊戲內的廣播(「自動儲存完畢」、NPC 的對話)也送給還沒登入的連線 —— 那是我們連上去的那一刻剛好發生的事,不是這個站的門面。⭐ 沒有這條規則的話,同一張畫面會因為尾巴接了一句隨機訊息而被當成「另一款」。
- 有些站的畫面不只一款。它們每次連線會隨機送出不同的版本 —— 我們把看過的都留著,所以那是一份只有長期採集才拿得到的紀錄:一次性截圖的人只會看到其中一款,而且不知道還有別款。(有一個站甚至會自己報號碼:「第 7 張畫面,共 14 張」。)
- 怎麼算「同一款」:比對之前會先把會自己變的東西抹掉:在線人數、已執行了多久、在線玩家的英文 ID 名單,以及色碼的寫法(有些站每次連線的上色方式不同,但畫出來一模一樣)。⭐ 判準是「那份東西會不會自己變」,不是「它看起來像不像資料」 —— 站務與巫師的中文名單就不抹:它是靜態的,哪天真的變了,那是這個站真的改了什麼,值得記下來。
- 純網頁版的站沒有 telnet 畫面,如果有封面,那是人工放上去的截圖,一樣標擷取日期。
- 畫面裡偶爾有幾個位元組我們解不開(編碼問題)。那些位置留白而不是填一個問號 —— ⭐ 問號是我們造出來的符號,不是站方畫的東西,畫上去等於改了別人的作品。
⭐⭐ 不希望自己的畫面出現在這裡?寄信給 dontpkme 或到 Discord 說一聲,我們會關掉,不需要理由、也不會問為什麼。關掉之後那一站在開放資料裡會標成「未展示」並附上原因,⚠ 因為沒有說明的空白,跟「這個站沒有畫面」分不出來 —— 那是兩件事。
☘ 早期的數字:從遊戲紀錄重建的那一段 ☘
清單上只有原始物語一站有 2026-08-25 之前的人數 —— 因為我們是那個站的站長,拿得到它自己的遊戲紀錄。其餘每一站的資料都從 2026-08-25 探測開始的那一刻起算,沒有例外。
那一段是重建出來的,不是量到的:遊戲紀錄裡有「誰在什麼時候連線進入」與「誰在什麼時候離開」,把它們還原成每個時刻的在線名單,名單上有幾個人就是那個時刻的人數。重開機會把名單清空(遊戲關機時會替每一個在線的人留下一行離線紀錄,所以那一刻的人數是直接讀到的,不是算的)。
- 只回溯到 2022-10。更早的紀錄裡找不到任何一次「全員離線」的痕跡,沒有那個錨點,誤差就會一路累積而沒有人擔保 —— 所以更早的那兩年整段不採用。
- 兩種來源分開存放,每一個資料點都標著自己是哪裡來的(歷史檔裡的
source欄位:probe= 我們觀測到的、log= 重建的)。⚠ 它們不可以被接成同一條線。 - 誤差:兩種來源重疊的那幾天可以互相對照,兩邊重疊的 213 輪裡平均差 0.7 人。⚠ 但那個重疊只有幾天,而早期的紀錄比較不完整 —— 所以那一段適合看長期趨勢,不適合追究某一刻的確切人數。
⚠⚠ 這份重建曾經是錯的,而且錯得很嚴重。2026-08-30 之前的版本用的是一個計數器(有人進來就加一、有人離開就減一)—— 但遊戲紀錄裡約有五分之一的連線沒有留下離開的紀錄(掛機、多開、斷線都會這樣),而每一筆漏掉的離開都會讓那個計數器永久多算一個人。它算出來的其實是「上次重開機以來累積的人次殘差」,不是同時在線人數:2022 年一度給出 1545 人,而那一刻真正在線的是 10 人。
發現的方式很簡單 —— 站長看了一眼就說「這個站不可能超過 60 人」。⭐ 修正的方式是改成前面說的在線名單(同一個人重複登入只算一個),並拿「關機那一刻的真實人數」與「我們自己觀測到的數字」兩個來源分別對帳—— 六年來真正的同時在線最高是 32 人。
⭐ 為什麼把這件事寫在這裡:一份資料的可信度不來自「從來沒錯過」,而來自錯了會說、而且說得出怎麼發現的。上一份公開列表把某個站記成 0 人掛了四年 —— 問題從來不是它錯了,是沒有任何機制會讓那個錯誤被說出來。
☘ 今天有幾個「不同的人」上過線 ☘
「同時在線人數」其實是個很差的統計單位 —— 它只是某一個瞬間的切片,20 分鐘量一次的話,尖峰與離峰都會被抹平。真正想知道的是「今天有多少個不同的人上過線」,而那需要知道是「誰」。
大多數站做不到,但有兩個站把在線玩家的名單直接印在歡迎畫面上(任何人 telnet 連上去都看得到)。對這兩站,我們多記兩個欄位:
roster_n— 那一輪的名單上真的有幾個名字。⚠ 它與同一畫面上站方自己寫的「共有 N 人」不一定相等,⭐ 而那個落差本身就是資訊:它告訴你名單被截斷了。unique_today— 今天(台北時間)出現過的不重複人數。同一個人一天上線五次只算一個。
⚠⚠ 隱私:我們不保存玩家名單。那些 ID 本來就印在公開的歡迎畫面上,但「印在別人的畫面上」與「被我們收進一份可查詢的歷史資料庫」是兩件完全不同的事。⭐ 去重只需要回答「這兩筆是不是同一個人」—— 那不需要知道他是誰。所以我們存的是加了鹽的雜湊值,而且那個鹽不在任何一份對外或異地的備份裡:就算整份資料外流,也還原不出任何一個 ID。公開的歷史檔裡只有數字,沒有雜湊值。
⚠ 這兩個數字天生會低估,而我們寧可你知道:
- 名單會被截斷。有的站人一多就整段不印(實測有一站超過 50 人就不印了)—— 那一輪的名單是空的,而在線的人其實最多。⭐ 也就是說最熱鬧的時段最容易漏掉,這個偏差不是隨機的。
- 只涵蓋兩個站,而且只從 2026-08-29 開始。其餘的站沒有名單可讀,那兩欄就整個不存在(不是 0)。
- 我們 20 分鐘才看一次 —— 兩次之間來去的人看不到。所以它是「今天至少有這麼多不同的人」,不是確切人數。
☘ 開放資料 ☘
所有資料都可以完整取走,不需要申請、不需要金鑰,跨網域直接讀取。
/library/mudlist/data.json— 目前狀態(含每一站的量測規則,以及「為什麼沒有數字」)/library/mudlist/history— 歷史快照索引,每個月一個 NDJSON 檔(一行一次量測)。⭐ 有名單的那兩站另有roster_n與unique_today(見上一節 —— ⚠ 它們會低估,別當成精確人數用)/library/mudlist/screen/<站台>.ans— 那個站最新一款的原始 ANSI(含色碼與控制碼)。⭐ 想自己渲染的人拿這份 —— 它比從我們畫好的圖裡挖乾淨得多。/library/mudlist/screen/<站台>.svg— 我們畫好的向量圖/library/mudlist/screen/<站台>/list.json— 那個站目前收到幾款畫面,各自第一次與最後一次出現的時間/library/mudlist/<站台>.json— 那一站的統計摘要:一週 168 個時段各自的中位數與取樣次數、四個時段(深夜/早上/下午/晚間)的輪廓、長期趨勢、近 24 小時。⭐ 在此之前這些數字只存在於網頁上那幾張圖的幾何裡 —— 想拿的人得去逆推 SVG。⚠ 每一格的median是null就代表我們還沒看過那個時段,不是「那個時段沒有人」。
「站台」是它的永久代號(例如 a-primitive-story-6789),寫在 data.json 每一筆的 id 欄位裡,不用自己拼。⭐ 那個代號不會因為站台搬家而改變 —— 位址是會變的東西,拿它當識別的話,一次搬家就會讓那個站的歷史斷成兩截。⚠ 要求不展示畫面的站,這幾個端點一律回 410,不是回一張空圖。
授權為 CC BY 4.0:可自由使用、修改、再散布,包括商業用途,註明來源即可(建議寫「原始物語 A Primitive Story,psmud.net」並附上本頁連結)。
⭐ 為什麼要開放:個人維護的網站終有一天會停。如果那一天資料只存在我們的伺服器上,它就跟著一起消失了 —— 而我們今天之所以能接手這件事,正是因為前一份列表當初是公開的。資料在別人手上,才是真正的備援。
⚠ 這份人數歷史從 2026-08-25 開始累積(原始物語一站例外,見上一節),而且目前是唯一的一份:上一份公開列表的自動更新停在 2021 年,而它的程式每跑一次就把上一次的數字覆蓋掉。如果你打算長期研究台灣 MUD 的人口變化,建議自己也存一份。
☘ 發現錯誤,或想加入清單 ☘
某一站的人數看起來不對、站台資訊過期、或你的站想加進來(或想移除),寄信給 dontpkme,或到 Discord 說一聲。新增站台需要的資訊:站名、位址、連接埠、編碼,以及歡迎畫面上顯示線上人數的那一行長什麼樣子。
⭐⭐ 如果你知道某個站搬到哪裡去了,也請告訴我們。站台換位址不一定會公告 —— 每個站都有自己的社群,本來就不需要透過公眾平台。但那表示我們可能把一個活得好好的站標成「離線」很久,而常去玩的人是最早知道新位址的那一群。你不需要是站長,也不需要證明什麼 —— 說一聲位址,我們自己連上去驗證。
如果你發現我們把某一站的人數抓錯了,請務必告訴我們 —— 那正是這頁存在的理由。
最後更新: