2025/08/31

你需要無聊 Arthur Brooks

 https://www.youtube.com/watch?v=orQKfIXMiA8


在這個資訊爆炸的時代,我們似乎比任何一個世代都更「不允許自己無聊」。等紅綠燈滑手機、健身要聽 Podcast、吃飯要看影片,彷彿一分鐘的空白都不能忍受。

但哈佛教授 Arthur Brooks 提醒我們:你需要無聊。 如果從來不讓自己無聊,人生會更空洞、更焦慮、更容易陷入憂鬱。


為什麼無聊這麼重要?


1. 無聊能打開「預設模式網路」


大腦有一個系統叫 Default Mode Network (DMN),當我們沒有專注在任何任務時,它就會啟動。

  • 這時腦袋會開始「亂想」:人生意義、目標、價值感。

  • 雖然會帶來一點不舒服(存在焦慮),卻正是找到 人生意義與方向 的關鍵。


2. 為什麼我們抗拒?

  • 因為無聊時會想起不安的問題:「我的人生有什麼意義?」

  • 手機則提供了即時逃避:一滑就能關掉這種不安。

  • 但長期下來,這會形成「意義的惡性循環」──越逃避、越難找到人生的目的感,導致焦慮與空虛感上升。


無聊的好處

  1. 創意與靈感:許多人在無聊時會蹦出最有趣的想法,例如運動、通勤時不聽東西。

  2. 提升專注力:當你練習忍受無聊,日常工作、人際關係也會變得比較不「無聊」。

  3. 更接近人生核心問題:勇敢面對意義、價值感,才是避免憂鬱與焦慮的長期解方。


怎麼練習「刻意無聊」?


日常小挑戰

  • 運動不帶手機:試著健身或跑步時什麼都不聽,單純和自己相處。

  • 無聲通勤:上班路上不開廣播、不看螢幕,讓腦袋自由遊走。

  • 15 分鐘挑戰:每天安排一段「無刺激時間」,不滑手機、不做事,單純發呆。


Brooks 的實踐方法

  1. 晚上 7 點後不用手機:讓大腦從數位刺激抽離。

  2. 不把手機帶進臥室:避免睡前、起床就被訊息牽著走。

  3. 用餐時間禁止裝置:專注在家人或朋友身上。

  4. 定期「數位斷食」:幾小時或一天不碰社交媒體。剛開始會像「小孩尖叫般渴望手機」,但很快會平靜下來。


打破「害怕錯過」的藉口


很多人不敢放下手機,因為怕錯過重要訊息。

  • 事實上,你可以設定 僅限一兩個緊急聯絡人能打擾,其餘的都能等。

  • 記住:刷 Twitter 不是緊急事件。新聞晚幾個小時看,完全不會影響你的人生。


結語:擁抱無聊,找回意義


Arthur Brooks 的提醒很直白:


放下手機,你需要更多無聊。


因為只有在無聊的時候,你才會開始追問:

  • 我的生活有什麼目的?

  • 我想成為什麼樣的人?

  • 我是否正在浪費時間在不重要的事上?


答案雖然不一定立刻浮現,但無聊,正是找到它的入口。

如何隔音任何一扇門(2025完整指南:從低成本 DIY 到專業方案)

 https://www.youtube.com/watch?v=2MD8aDfWgck


想讓房間安靜下來?多數人第一個想到的就是「把門隔音」。然而網路上充斥著各種偏方與誤解,有些方法幾乎沒效果,卻浪費了時間與金錢。這篇文章整理了 最新實測結果,從租屋族的臨時方案,到自宅裝修的永久升級,給你完整的隔音門解決方案。


❌ 先說什麼方法沒用(避免踩雷)

  1. 在門上貼吸音棉/吸音泡棉

    • 這些材料設計來「吸音」而不是「隔音」,主要改善室內回音,對阻擋外部聲音幾乎沒效果。

  2. 隨便掛上薄布簾或毛毯

    • 如果沒有完全密封,薄材質會漏音,效果有限。

  3. 直接換門

    • 換成實心門確實比空心門好,但如果四周縫隙沒封,聲音依然會漏進來。單純換門並不是第一步。


💡 有效的低成本 DIY 方法(租屋族友善)


1. 封住門框縫隙

  • 工具:自黏式防風條(泡棉或橡膠)。

  • 作法:貼在門框四周,讓門關上時能緊密貼合。

  • 效果:減少聲音與空氣從縫隙滲透。

  • 成本:NT$200–400。


2. 解決門底大縫隙

  • 工具:U 型可拆式門底擋條。

  • 作法:直接套在門底,雙面貼地密封。

  • 優點:無須螺絲固定,可隨時拆下,避免影響房間通風。

  • 成本:NT$300–500。


3. 增加厚重遮擋

  • 工具:移動毯、厚重窗簾、地毯。

  • 作法:用伸縮桿、掛勾或魔鬼氈,將厚布完整覆蓋門面,避免邊緣漏縫。

  • 效果:降低人聲與中高頻雜音。

  • 成本:NT$500–1500。


4. 自製隔音門板

  • 工具:玻璃纖維 + 加重隔音毯 (MLV) + 厚布封裝。

  • 作法:做成一塊厚重板,背面黏魔鬼氈掛在門上。

  • 效果:阻隔效果顯著,接近專業隔音。

  • 成本:NT$3000–5000。


🔧 永久性升級(自宅裝修適用)


1. 換成實心門 & 正確吊掛

  • 作法:選用 MDF 或標準實心木門(60–80 磅)。

  • 注意:確保門與框密合,鉸鏈牢固。

  • 成本:NT$6000–12000。


2. 安裝全框密封條 (Perimeter Gasket)

  • 工具:金屬壓條 + 矽膠/橡膠密封。

  • 作法:三邊鎖上螺絲,門關上時自動壓緊密封。

  • 效果:聲音大幅降低,尤其是人聲。

  • 成本:NT$1500–2500。


3. 升級門底密封

  • 選項 A:螺絲固定式橡膠門底條(便宜實用)。

  • 選項 B:自動升降式密封條(專業等級,開門時自動抬起)。

  • 成本:NT$800–3000。


⚠️ 常見錯誤與注意事項

  1. 忽略其他聲音路徑:天花板、地板或冷氣通風口可能也是聲音來源。

  2. 沒先測試來源:建議先用毛巾或布料暫時封住,確認聲音確實是從門進來。

  3. 忽略通風:完全密封可能讓房間悶熱,建議保留可拆式擋條。


🎯 結論

  • 租屋族 / 低預算:防風條 + 可拆式門底擋條 + 厚重窗簾 → NT$1000 內搞定。

  • 進階 DIY:加裝自製隔音板 → 約 NT$3000–5000。

  • 永久方案:更換實心門 + 全框密封 + 專業門底條 → NT$6000–15000。


聲音要被「阻擋」必須靠 重量 + 密封。只要記住這兩大原則,就能依照預算選擇合適的方案,讓你的房間安靜許多。

攝護腺保養建議之實證檢驗

https://www.youtube.com/watch?v=KtGbKIfvHy0 


以下是依據實驗與醫學文獻所提供的證據,檢視並驗證該影片中提倡的生活改善建議對前列腺健康的幫助:


1. 壓力與前列腺發炎

  • 動物實驗:慢性壓力可在大鼠前列腺中誘導組織炎症反應,顯示壓力可能對前列腺造成直接傷害。 

  • 人體研究與推論:慢性壓力透過活化 HPA 軸,導致持續分泌皮質醇(cortisol),進而干擾免疫調控、誘發全身慢性發炎。 

  • 基因層面:情緒壓力可改變前列腺組織的基因表現,可能影響細胞功能,增加癌變風險。 


→ 支持影片建議:控制壓力、改善睡眠與情緒管理,確實有助於降低前列腺發炎與相關症狀。


2. 保持水分、減少夜間脫水、尿液濃縮

  • 流體攝取與下泌尿道症狀:研究指出,限制夜間飲水、減少咖啡因與酒精攝取、培養固定排尿習慣,有助於改善下泌尿道症狀。 

  • 膀胱與尿液刺激:適量補水可稀釋尿液,減少濃縮尿對膀胱黏膜的刺激,降低感染與結石風險。 


→ 支持影片建議:持續小量飲水以保持尿液淡黃清澈,確實有助於減少膀胱與前列腺刺激,緩解頻尿等症狀。


3. 運動、避免久坐、增加活動量

  • 慢性疾病風險因子:肥胖和缺乏運動都被列為良性前列腺增生(BPH)的危險因子。  

  • BPH 的生活干預建議:醫學指南建議增加體力活動、減少咖啡因攝入、進行訓練排尿行為等,可緩解下泌尿道症狀。 

  • 坐姿排尿的影響:對於有症狀的老年男性,坐姿排尿能有效降低排尿後殘留,提高流速,縮短排尿時間。 


→ 支持影片建議:採用「每 30 分鐘起身活動」「坐姿排尿」等簡易習慣轉變,對血液循環與排尿效率都有具體益處。


4. 飲食調整:減少紅肉、加工食品、多攝蔬果與Omega-3

  • 肥胖與 BPH:肥胖及高 BMI 是 BPH 的已知風險因子。 

  • 生活方式建議:醫學上建議減少夜間飲酒與咖啡因,並透過飲食與運動來自我管理症狀。 

  • 抗氧化飲食證據(補充方面):雖影片提到番茄補充劑的試驗結果,該補劑在兩個月內可改善約 80% BPH 患者症狀,但這屬於初步小規模試驗,尚須更大規模研究驗證。 


→ 部分支持:雖然缺乏直接臨床試驗證明「減少紅肉/加工食品」能改善 BPH,仍與肥胖、炎症與荷爾蒙失衡理論相符,值得推崇;番茄補充劑效果值得關注但需謹慎。


5. 戒菸與避免二手煙

  • 危險因子:吸菸累計 50 包年以上的患者與嚴重下泌尿道症狀相關。 


→ 支持影片建議:戒菸與遠離煙霧環境確實有助於降低前列腺問題風險並改善症狀。


總結與綜合評價

項目

證據支持

關鍵結論

控制壓力

動物與生理研究均支持,壓力與前列腺發炎有關

多喝水、少夜間脫水

中等

減少膀胱刺激與夜尿症狀

運動/避免久坐

中等

體重控制與活動改善排尿症狀

飲食調整

理論支持/初步證據

飲食健康對整體有益,番茄素補充具潛力

戒菸

中等

吸菸與嚴重症狀相關,戒菸明顯有益

設立排尿習慣(微運動、排尿位置)

中等

建議已納入臨床指南

整體而言,影片提及的多數建議都有一定科學依據支持,特別是在壓力管理、水分補充、戒菸,以及生活方式改變 (如增加活動量) 方面。雖然某些建議(如飲食詳節)尚缺乏大規模臨床證據,但基本理論與相關風險因素一致,值得推廣。


攝護腺肥大(BPH)× 飲食 / 減重


快速結論

  • 多蔬菜、少紅肉與較低總脂肪的飲食型態,與「較低的症狀性 BPH風險」有關(大型前瞻隊列)。 

  • 高蔬菜(尤其富含維生素 C、葉黃素/玉米黃素、β-胡蘿蔔素)的攝取,與較低的 BPH 風險/症狀相關(大型前瞻隊列)。 

  • Omega-3:作為藥物的加成(搭配坦索羅辛+非那雄胺)的小型隨機試驗有正向訊號,但大型前瞻性資料對長鏈 n-3 PUFA(EPA/DHA)與 BPH 的關係不一致;目前不建議僅為 BPH 而額外補充高劑量魚油。  

  • 減重:單靠生活型態減重的 RCT 尚未證實能改善 LUTS/BPH(部分試驗減重幅度不足);代謝手術在重度肥胖男性的多項前瞻研究中可持續改善 LUTS。  


關鍵研究(摘要)

  • PCPT 前瞻隊列(n≈4,770;7 年追蹤):最高 vs 最低五分位,總脂肪多元不飽和脂肪風險 ↑(HR 約 1.31、1.27);蛋白質蔬菜攝取較高者風險 ↓;每日吃紅肉者風險 ↑38%。結論:低脂肪、少紅肉、高蛋白與多蔬菜可能降低症狀性 BPH 風險。 

  • HPFS 前瞻隊列(n≈18,000):蔬菜攝取與 BPH 反向相關(最高 vs 最低五分位 OR 0.89;p 趨勢 0.03);富含維生素 C、β-胡蘿蔔素、葉黃素/玉米黃素之蔬果與較低風險相關。 

  • HPFS(營養素分析):總脂肪與 BPH無關,但總能量、蛋白質、EPA/DHA/花生四烯酸攝取與 BPH 正相關(幅度溫和);提示氧化壓力機轉可能參與。 

  • 地中海型/整體飲食模式(回顧):傾向支持「多蔬果、堅果、豆類、魚、較少紅肉」的飲食,可能透過抗發炎與平滑肌張力調節,間接有利 BPH 與 LUTS;仍需更嚴謹試驗。 

  • 番茄紅素(lycopene)

    • 隨機臨床試驗:15 mg/日、6 個月,可能抑制 BPH 進展並改善症狀;PSA 有下降訊號。 

    • 其他臨床與轉譯研究亦報告 PSA 降低與抗氧化效應,但在 BPH 的臨床終點仍屬輔助證據。 

  • Omega-3(魚油)

    • 加成式 RCT:EPA/DHA(300 mg tid)+坦索羅辛+非那雄胺 vs 單用藥物,症狀/指標改善較多(小型、單中心)。  

    • 前瞻營養流行病學:長鏈 n-3 PUFA 與 BPH 關聯不一,有研究見到風險↑的訊號;不支持僅為 BPH 常規補充高劑量魚油。 

  • 體重 / 減重

    • RCT(生活型態減重 vs 對照)未證實能改善 LUTS(可能因減重幅度不足)。 

    • 前瞻手術隊列減重手術後男性 LUTS(IPSS、QoL)中長期顯著改善(3–5 年資料)。 

    • 觀察研究輕度體重變化對 LUTS 的影響不明顯。 


「紅肉攝取」× 前列腺炎(慢性前列腺炎 / 慢性骨盆痛,CP/CPPS)


快速結論

  • 目前缺乏針對「紅肉攝取→前列腺炎」的直接臨床試驗或高品質前瞻研究

  • 症狀觸發的證據主要來自問卷/橫斷面辛辣食物、咖啡因、酒精最常被回報會加重症狀;水分、草本茶、洋車前子等有助緩解。 

  • 專業機構指引/衛教也建議減少咖啡因、酒精、酸/辣刺激物並足量飲水;未特別點名紅肉。  


關鍵研究(摘要)

  • Herati 等(Urology, 2013;問卷 n=95):47% 病人回報食物/飲品會誘發症狀;最常見加重因子辣食、咖啡、酒精、茶、辣椒緩解=水、草本茶、洋車前子/聚卡波非。 

  • AUA 男性慢性骨盆痛指引:認可部分病人對飲食刺激物敏感;建議個別化排除法飲食。 

  • NIDDK 衛教:建議增加飲水、減少酒精/咖啡因/酸辣,作為症狀管理的一環。 


實務小結(可直接轉成門診建議)

  • BPH/體重:若 BMI 偏高,以地中海型飲食+活動量提升為主;若為重度肥胖且 LUTS 明顯,手術級減重對 LUTS 有較一致的改善證據。  

  • 飲食

    • 少紅肉/加工肉、少總脂肪多蔬菜(尤其深綠色與柑橘、豆類、十字花科)—與較低 BPH 風險/症狀相關。  

    • 番茄紅素:可優先從熟番茄製品獲得;補充品在 BPH 的證據屬輔助(小型 RCT 有利,但非一線)。 

    • Omega-3:以每週 1–2 次魚類為宜;不建議僅為 BPH 而自行高劑量補充魚油。 

  • 前列腺炎/CPPS:與其糾結紅肉,更實用的是先排除:咖啡因、酒精、辣/酸刺激;同時做症狀-飲食日記找個人誘發因子。  


2025/08/26

Wroking with AI/automation managers

 Turning work into structured “footprints” + letting systems track leading indicators and nudge us is where modern knowledge work is headed. Here’s an evidence-backed playbook you can use right away.

What the research says (and what to do)

  1. Set clear goals, then let the system track them.
    Specific, challenging goals reliably boost performance (large effects across meta-analyses). Use OKRs for ambition + transparency and translate strategy into a few measurable outcomes. Stanford MedicineReworkHarvard Business Review

  2. Record decisions as lightweight Decision Logs (ADRs).
    Capture time, context, options, trade-offs, stakeholders, expected impact. ADRs are a well-accepted practice for scaling alignment and auditability. martinfowler.comAWS Documentation

  3. Track a tiny set of leading (predictive) and lagging (outcome) metrics.
    Safety and operations guidance is clear: use leading indicators to drive change; lagging indicators to verify results. Keep it to 3–5 leading metrics on a dashboard. OSHAPMC

  4. Use reminders and nudges—without creating notification noise.
    RCTs show that simple message reminders meaningfully improve adherence to intended behaviors; batching notifications a few times per day reduces stress and improves attention. Also, frequent interruptions increase speed and stress. So tie prompts to workflow checkpoints and deliver in batches. JAMA NetworkSquarespaceBren School of ICS

  5. Improve via small, trustworthy experiments.
    Follow A/B-testing rules of thumb from the big experiment platforms (design, guardrails, power, SRM checks). Treat each change as a test with a success metric. Cambridge University Press & AssessmentExP Platform

  6. Limit Work-in-Progress (WIP) and visualize flow.
    Kanban + WIP limits shorten cycle times and surface bottlenecks; case studies show measurable improvements when teams reduce WIP and shorten cycles. Use Little’s Law to size WIP against throughput. Queen's University BelfastSixSigma.us

  7. Schedule 10–15 minutes of daily reflection.
    Lab + field experiments (including a large training program) found that short, structured reflection significantly improves later performance—partly by boosting self-efficacy. Put it on the calendar. Larry Ferlazzo's Websites of the Day...Harvard Business School Library

  8. Use AI to shrink “work about work”—but stay on the right side of the frontier.
    Controlled studies show sizable productivity/quality gains from gen-AI on writing and coding; benefits are task-dependent and best with guidance. Feed AI with clean, linked artifacts (tickets, docs, ADRs) and clear permissions. SciencearXivHarvard Business School

Don’t turn datafication into surveillance. Meta-analyses show electronic performance monitoring doesn’t improve performance and does raise stress; if monitoring is required, keep it minimal, transparent, and worker-benefiting. Wiley Online LibraryAmerican Psychological Association


Your “work-footprint” template (copy/paste into your tool)

  • Timestamp: YYYY-MM-DD HH:mm

  • Task / Context:

  • Decision / Hypothesis (options & trade-offs):

  • Stakeholders & contacts: @Name (role)

  • Risks / Constraints:

  • Action taken:

  • Metrics: Leading … / Lagging … (with targets)

  • Result / Evidence:

  • Links: Ticket / Doc / PR / Meeting notes

  • Reflection (<5 lines): what worked, what didn’t, next step


One-week rollout (individual edition)

  • Today: Rewrite one goal as an OKR (1 Objective, 2–3 Key Results) and add the footprint template as a quick-add form in your system. Rework

  • This week: Stand up a simple Kanban with WIP limit (e.g., “In Progress ≤ 3”); pick 3 leading indicators for your personal dashboard. Queen's University BelfastOSHA

  • Daily: Batch notifications into two windows; schedule a 10-minute reflection at day’s end. SquarespaceHarvard Business School Library

  • This month: Run one small experiment (e.g., new handoff checklist): define success metric → A/B (or pre/post) → keep the winner. ExP Platform

2025/08/13

教學指南:高齡者的 AI 科技獨居生活

 教學指南:高齡者的 AI 科技獨居生活


以下以 96 歲美國德州長者蘿拉(Laurel)的日常為例,整理成可操作的教學步驟,讓高齡者與家屬參考,學會善用 AI 工具與生活輔助設備,提升獨居生活的安全與便利性。


一、居家環境規劃

  1. 選擇銀髮友善社區

    • 單層住宅、平坦無障礙設計

    • 房屋間距合理,兼顧隱私與鄰里互助

    • 社區配備緊急通報系統與管理人員

  2. 動線與設備安全

    • 保留寬敞走道,方便助行器通行

    • 廚房、浴室、臥室配置防滑地墊與良好照明

    • 家電按鈕加貼高對比色標籤(如橘色代表洗衣、紅色代表烘乾)


二、智慧語音助理(以 Amazon Echo 為例)

  1. 基本安裝與連線

    • 將 Echo 連接 Wi-Fi

    • 下載手機 App 綁定帳號

  2. 日常指令範例

    • 查詢時間與天氣:「Echo,現在幾點?」、「Echo,今天天氣如何?」

    • 建立採買清單:「Echo,幫我買蛋、牛奶、青菜和衛生紙」

    • 播放音樂或新聞:「Echo,播放馬友友的大提琴」、「大聲一點」、「停止播放音樂」

  3. 遠端家屬通知

    • 家屬可即時接收長者的口頭需求

    • 減少手機操作門檻,直接用語音互動


三、日常生活輔助設備

  1. 緊急通報器

    • 隨身佩戴按鈕式警報器

    • 可即時通知社區管理員與家人

  2. 視力輔助設備

    • 放大閱讀機:可將雜誌、書籍放大顯示

    • 朗讀功能:將文字轉換成語音播放

  3. 家電使用簡化

    • 洗衣機、烘乾機加貼色彩標示方便辨識

    • 洗碗機按日常習慣操作即可


四、家屬關懷模式

  1. 輪流問候制度

    • 安排家人與孫子女輪流每天打電話

    • 保持通話時間適中,尊重彼此生活節奏

  2. 鼓勵長者自主生活

    • 在安全範圍內維持煮飯、洗衣等日常

    • 讓長者感受「自己是家裡的主人」


五、關鍵觀念

  • AI 並非只屬於年輕世代

    智慧助理與輔助設備能有效彌補視力、行動力等限制。

  • 科技+關懷=有尊嚴的獨居老年

    硬體與軟體結合,讓高齡者安全、自在、快樂地生活。



2025/08/08

Python | 調整 dropbox中 obsidian & logseq共用journal folder中 檔名規則出入

 #!/usr/bin/env python3

# -*- coding: utf-8 -*-


import re

import sys

import argparse

from pathlib import Path

from datetime import date


# ===== 工具:月份與序數 =====

MONTHS_FULL = [

    "January","February","March","April","May","June",

    "July","August","September","October","November","December"

]

MONTHS_ABBR = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]

MONTH_TO_NUM = {m:i+1 for i,m in enumerate(MONTHS_FULL)}

ABBR_TO_NUM  = {m:i+1 for i,m in enumerate(MONTHS_ABBR)}

NUM_TO_MONTH = {i+1:m for i,m in enumerate(MONTHS_FULL)}


def ordinal(n: int) -> str:

    if 11 <= (n % 100) <= 13:

        suffix = "th"

    else:

        suffix = {1:"st",2:"nd",3:"rd"}.get(n % 10, "th")

    return f"{n}{suffix}"


def canonical_stem(d: date) -> str:

    # 目標:MMMM do, yyyy(注意 do 小寫)

    return f"{NUM_TO_MONTH[d.month]} {ordinal(d.day)}, {d.year}"


# ===== 解析各種日期字串(給 [[...]] 正規化用) =====

def parse_date_token(s: str):

    s = s.strip()


    m = re.match(rf"^\s*({'|'.join(MONTHS_FULL)})\s+(\d{{1,2}})(?:st|nd|rd|th)?,\s*(\d{{4}})\s*$", s, flags=re.IGNORECASE)

    if m:

        month = MONTH_TO_NUM[m.group(1).capitalize()]

        day = int(m.group(2)); year = int(m.group(3))

        try: return date(year, month, day)

        except ValueError: return None


    m = re.match(rf"^\s*({'|'.join(MONTHS_ABBR)})\.?\s+(\d{{1,2}})(?:st|nd|rd|th)?,\s*(\d{{4}})\s*$", s, flags=re.IGNORECASE)

    if m:

        month = ABBR_TO_NUM[m.group(1).capitalize()]

        day = int(m.group(2)); year = int(m.group(3))

        try: return date(year, month, day)

        except ValueError: return None


    m = re.match(r"^\s*(\d{4})[._/\-](\d{1,2})[._/\-](\d{1,2})\s*$", s)

    if m:

        y, mo, d = map(int, m.groups())

        try: return date(y, mo, d)

        except ValueError: return None


    return None


# ===== 連結正規化 [[日期]] → [[MMMM do, yyyy]] =====

REF_PATTERN = re.compile(r"\[\[\s*([^\]\|#]+?)\s*\]\]")


def rewrite_date_page_refs(text: str):

    replaced = 0

    def _repl(m):

        nonlocal replaced

        inner = m.group(1)

        d = parse_date_token(inner)

        if d:

            replaced += 1

            return f"[[{canonical_stem(d)}]]"

        return m.group(0)

    new_text = REF_PATTERN.sub(_repl, text)

    return new_text, replaced


# ===== 安全重新命名(加 merged 前綴時避免撞名) =====

def prefixed_unique_path(p: Path, prefix="merged ") -> Path:

    target = p.with_name(prefix + p.name)

    if not target.exists():

        return target

    stem, suf = target.stem, target.suffix

    i = 1

    while True:

        c = target.with_name(f"{stem} ({i}){suf}")

        if not c.exists():

            return c

        i += 1


# ===== 解析檔名取得日期 =====

def parse_date_from_stem(stem: str):

    s = stem.strip()


    m = re.match(rf"^({'|'.join(MONTHS_FULL)})\s+(\d{{1,2}})(?:st|nd|rd|th)?,\s*(\d{{4}})$", s)

    if m:

        month = MONTH_TO_NUM[m.group(1)]

        day = int(m.group(2)); year = int(m.group(3))

        try:

            d = date(year, month, day)

            style = "canonical" if re.search(r"(st|nd|rd|th),", s) else "long_month"

            return d, style

        except ValueError:

            return None


    m = re.match(rf"^({'|'.join(MONTHS_ABBR)})\.?\s+(\d{{1,2}})(?:st|nd|rd|th)?,\s*(\d{{4}})$", s, flags=re.IGNORECASE)

    if m:

        month = ABBR_TO_NUM[m.group(1).capitalize()]

        day = int(m.group(2)); year = int(m.group(3))

        try: return date(year, month, day), "abbr_month"

        except ValueError: return None


    m = re.match(r"^(\d{4})[._-](\d{1,2})[._-](\d{1,2})$", s)

    if m:

        y, mo, d = map(int, m.groups())

        try: return date(y, mo, d), "iso"

        except ValueError: return None


    return None


# ===== 檔案讀寫 =====

def read_text(path: Path) -> str:

    return path.read_text(encoding="utf-8", errors="ignore")


def write_text(path: Path, text: str):

    path.write_text(text, encoding="utf-8")


def append_transformed(src: Path, dest: Path) -> tuple[int,int]:

    raw = read_text(src)

    fixed, replaced = rewrite_date_page_refs(raw)

    with dest.open("a", encoding="utf-8") as f:

        if dest.exists() and dest.stat().st_size > 0:

            f.write("\n")

        f.write(fixed)

        if not fixed.endswith("\n"):

            f.write("\n")

    return len(fixed), replaced


def rewrite_links_in_file(path: Path) -> int:

    raw = read_text(path)

    fixed, replaced = rewrite_date_page_refs(raw)

    if replaced > 0:

        write_text(path, fixed)

    return replaced


# ===== 掃描候選 =====

def find_candidates(root: Path):

    """

    掃描 root 下的 .md(不遞迴,跳過 'merged ' 開頭)

    回傳 { date: { 'canonical': Path|None, 'sources': [Path,...] } }

    """

    mapping = {}

    for p in root.glob("*.md"):

        if p.name.lower().startswith("merged "):

            continue

        parsed = parse_date_from_stem(p.stem)

        if not parsed:

            continue

        d, style = parsed

        bucket = mapping.setdefault(d, {"canonical": None, "sources": []})

        if style == "canonical":

            bucket["canonical"] = p

        else:

            bucket["sources"].append(p)

    # 保留所有有關聯的日期(包含只有 canonical 的,稍後用邏輯過濾「不需處理」的)

    return mapping


def process_dates(root: Path, mapping: dict, limit: int, dry_run: bool):

    if not mapping:

        print("沒有可處理的日期檔。")

        return


    dates_sorted = sorted(mapping.keys(), reverse=True)


    # 僅選擇「需要處理」的日期:

    # - 有 sources(需要合併),或

    # - 沒有 canonical(只有 1 個或多個來源 → 需要改名或合併)

    # 會跳過:已是 canonical 且沒有 sources(代表已正確,屬 no-op)

    work_dates = [d for d in dates_sorted if not (mapping[d]["canonical"] and not mapping[d]["sources"])]


    if not work_dates:

        print("找不到需要處理的日期(最新的都已是 MMMM do, yyyy 且無重複)。")

        return


    selected = work_dates[:limit]


    print("日期狀態(由新到舊):")

    for d in dates_sorted:

        info = mapping[d]

        if info["canonical"] and not info["sources"]:

            status = "OK 已是 MMMM do, yyyy(跳過)"

        elif info["canonical"] and info["sources"]:

            status = f"合併 {len(info['sources'])} 來源"

        elif not info["canonical"] and len(info["sources"]) == 1:

            status = "改名為 MMMM do, yyyy"

        else:

            status = f"合併 {len(info['sources'])} 來源(並建立目標)"

        tag = " ← 將處理" if d in selected else ""

        print(f"- {d.isoformat()}:{status}{tag}")


    for d in selected:

        info = mapping[d]

        target = info["canonical"] if info["canonical"] else root / f"{canonical_stem(d)}.md"

        will_create = (info["canonical"] is None) and (not target.exists())

        sources_sorted = sorted(info["sources"], key=lambda p: p.name.lower())


        print(f"\n=== {d.isoformat()} ===")


        # 單一來源且尚未存在目標 → 直接改名(不加 merged)

        if info["canonical"] is None and len(sources_sorted) == 1 and will_create:

            src = sources_sorted[0]

            print(f"[SINGLE] 僅有來源:{src.name}")

            if dry_run:

                print(f"  [REWRITE] 將在檔內正規化 [[日期]] → [[{canonical_stem(d)}]]")

                print(f"  [RENAME]  '{src.name}'  →  '{target.name}'")

            else:

                replaced = rewrite_links_in_file(src)

                if replaced:

                    print(f"  [REWRITE] 已正規化 {replaced} 處 [[日期]]")

                src.rename(target)

                print(f"  [RENAMED] '{src.name}'  →  '{target.name}'")

                # 保險:對新檔再跑一次正規化

                replaced_t = rewrite_links_in_file(target)

                if replaced_t:

                    print(f"  [TARGET REWRITE] {target.name} 內正規化 {replaced_t} 處 [[日期]]")

            continue


        # 其他情境:存在目標或有多來源 → 合併 + 來源加 merged 前綴

        if will_create:

            print(f"[TARGET] {target.name}(將建立)")

        else:

            print(f"[TARGET] {target.name}")


        planned = []

        for src in sources_sorted:

            new_path = prefixed_unique_path(src)  # merged ...

            planned.append((src, new_path))


        if dry_run:

            print(f"  [TARGET REWRITE] 將正規化 {target.name} 內的 [[日期]](若存在)")

            for src, new_path in planned:

                print(f"  [COPY]   '{src.name}'  →  '{target.name}'(先正規化連結)")

                print(f"  [RENAME] '{src.name}'  →  '{new_path.name}'")

            continue


        if will_create:

            target.write_text("", encoding="utf-8")

            print(f"[CREATE TARGET] 已建立:{target.name}")


        replaced_t = rewrite_links_in_file(target)

        if replaced_t:

            print(f"  [TARGET REWRITE] {target.name} 內正規化 {replaced_t} 處 [[日期]]")


        total_chars = 0

        total_refs  = 0

        for src, new_path in planned:

            appended_len, replaced_refs = append_transformed(src, target)

            total_chars += appended_len

            total_refs  += replaced_refs

            print(f"  [COPIED]  '{src.name}'  →  '{target.name}'  (+{appended_len} chars, fixed {replaced_refs} refs)")

            src.rename(new_path)

            print(f"  [RENAMED] '{src.name}'  →  '{new_path.name}'")


        print(f"[SUMMARY] 合併 {len(planned)} 個來源,總附加 ~{total_chars} 字元、正規化 {total_refs} 個 [[日期]] → {target.name}")


    print(f"\n完成!此次處理日期數量:{len(selected)}。")


def main():

    ap = argparse.ArgumentParser(description="合併/正規化日記到 MMMM do, yyyy;跳過已是正確格式且無重複的最新日期。")

    ap.add_argument("root", nargs="?", default=".", help="要處理的資料夾(預設:目前資料夾)")

    ap.add_argument("-n","--limit", type=int, default=1000, help="一次處理的『日期數量』(預設:1;可改 10 或 1000)")

    ap.add_argument("--dry-run", action="store_true", help="僅列出將進行的動作,不修改檔案")

    args = ap.parse_args()


    root = Path(args.root).expanduser().resolve()

    if not root.exists():

        print(f"找不到資料夾:{root}")

        sys.exit(1)


    mapping = find_candidates(root)

    process_dates(root, mapping, limit=args.limit, dry_run=args.dry_run)


if __name__ == "__main__":

    main()


2025/08/04

如何同時使用 Logseq 與 Obsidian?

🎯 核心觀念

先釐清你的需求

在開始使用 Logseq 或 Obsidian 前,應先問自己:「我到底想用這些工具達成什麼目標?」
如果還沒釐清需求,很可能會陷入「有了解決方案,卻沒找到問題」的情境。

🔄 可以雙軌並行,互補使用

你可以根據各自的優勢與不足來決定使用場景:

  • 主觀使用法:用你喜歡的那一套工具去做那件事。

  • 客觀使用法:用一個工具來補足另一個的不足之處。


💡 使用情境與分工建議

使用工具 建議用途
Logseq 區塊式筆記、任務管理、每日筆記、間隔重複學習、Zotero / PDF 整合、以 Journal 為主導的「每日輸入流」
Obsidian 跨檔案筆記整理、大型專案或研究、視覺化連結地圖、更強大的自訂排版與插件、Readwise 整合、跨平台同步

⚠️ 注意事項:兩者之間的相容性

Logseq 與 Obsidian 都使用 Markdown,但:

  • Markdown 格式略有差異,某些語法、屬性或資料夾結構在兩邊可能顯示不一樣。

  • 使用相同資料夾時,可能導致顯示異常或格式錯亂

  • 解法:依照規範進行設定與資料夾規劃


🔧 讓 Obsidian 和 Logseq 協同工作的建議設定

📁 檔案與資料夾結構建議

功能 建議設定
筆記存放位置 /pages 資料夾(兩邊通用)
附件存放位置 /assets 資料夾
每日筆記格式 Logseq 和 Obsidian 都設定為 MMMM do, YYYY(如:August 4th, 2025)
每日筆記位置 /journals 資料夾
連結格式 在 Obsidian 中:關閉 Wikilinks、使用相對路徑
任務管理 建立一頁 [[logseq tasks]],可用查詢語法過濾 DOING 等狀態

🔌 推薦插件(Obsidian 專用)

插件 功能
obsidian-plugin-logseq 讓 Obsidian 更好地預覽 Logseq 的 Markdown
obsseq 協助從 Logseq 遷移至 Obsidian
obsidian-logseq-compat 增進 Obsidian 與 Logseq 的視覺相容性
Template.Obs 一個模板庫,適合整合兩者使用

✅ 實作技巧與小撇步

  • /assets 建立附件資料夾,快速儲存與引用圖片和檔案

  • 在 Obsidian 中使用「Outliner」、「Zoom」等插件強化大綱結構(但手機版可能需停用)

  • 用相同資料夾作為 Obsidian Vault 與 Logseq 的工作空間,便於雙向同步


🎓 結論建議

  • 雙軌並行是可行的,但你需要設定好一致的命名規則與檔案結構。

  • 開始使用後,實際操作比看影片或建議更能幫你釐清偏好。

  • 最終選擇不在於哪個工具比較好,而是你在哪個環境中思考與寫作最順手。


如何從 Roam Research 轉換到 Logseq

如何從 Roam Research 轉換到 Logseq

作者:Haikal Kushahrin
閱讀時間:約 8 分鐘

自從 Roam Research 推廣了「網絡式思維」之後,市面上出現了幾個替代品,其中 Logseq 就是一款強調本地優先、純文字、以區塊為單位的筆記工具。儘管受到 Roam 啟發,Logseq 並不是單純的 Roam 複製品,而是擁有獨特功能的思考工具。如果你考慮從 Roam 轉換到 Logseq,請閱讀以下內容,了解轉換過程中的關鍵考量與步驟。


為什麼你可能會想從 Roam 轉向 Logseq?

儘管看起來相似,Roam 與 Logseq 在本質上有幾個關鍵差異,可能會讓你決定轉換。

1. 開源軟體

Logseq 是開源的,而 Roam 不是。現今軟體公司可能會突然倒閉,導致你無法再使用其服務。使用開源的 Logseq,即使開發團隊停止更新,你仍然能夠存取筆記——你的筆記不會隨公司一起消失。

2. 內建功能強大

Logseq 具備 Roam 所沒有的一些內建功能,例如:

  • 間隔重複系統:加上 #card 標籤即可將區塊變成抽認卡。輸入 /cloze 可建立遮蔽測驗(cloze)型抽認卡。只需點擊左側欄位中的 Flashcards 即可複習。

  • 進階任務管理:除了基本的待辦事項清單,Logseq 還支援多種任務狀態、優先順序、截止日、排程及任務所花時間的追蹤。

  • 內建 PDF 標註工具:將 PDF 拖入 Logseq,即可進行高亮標註並轉為區塊引用。結合 Zotero 插件,更適合學術研究者。

這些功能在 Roam 雖可透過插件或外掛實現,但 Logseq 全部都是內建的。

3. 純文字筆記

Logseq 使用純文字檔(Markdown),方便與其他應用程式互通。它也保留了 Roam 的區塊結構,確保筆記能在不同平台上被存取且長久保存。

4. 資料安全性

Logseq 的筆記儲存在你的電腦上,只有你能存取,無需擔心資料外洩。如果需要同步功能,可以自行選擇雲端服務如 Google Drive 或 Dropbox。


為什麼你可能會想繼續使用 Roam?

儘管 Logseq 有許多優點,但如果以下幾點對你來說很重要,那麼 Roam 仍然可能是更好的選擇:

  • 多人協作功能:Roam 是雲端託管,方便與他人分享與共同編輯資料庫;Logseq 則較適合個人使用或建構個人知識庫。

  • 內建同步:Roam 支援跨裝置自動同步,而 Logseq 需要手動設定雲端同步。

  • 看板、番茄鐘與表格:Roam 對這些功能支援較完整,若你筆記中大量使用這些功能,轉移到 Logseq 可能會帶來困擾。

換工具會消耗時間與精力,除非你真的需要,不必為了新鮮感而轉換工具。


三步驟將 Roam 筆記遷移到 Logseq

如果你決定轉換,可以依照以下步驟進行:

步驟一:從 Roam 匯出資料

  1. 開啟 Roam 資料庫

  2. 點選右上角三個點的圖示,選擇「Export All」

  3. 格式選擇 JSON

  4. 匯出後會得到一個壓縮檔,解壓後會看到 JSON 檔案

步驟二:設定 Logseq

  1. 下載 Logseq 桌面應用程式,或使用網頁版

  2. 建立或選擇一個資料夾,Logseq 將會在此儲存你的 Markdown 筆記

步驟三:匯入 Roam 筆記到 Logseq

  1. 開啟 Logseq,點選右上角三個點,選擇「Import」

  2. 選擇「Import JSON」並上傳剛剛的 Roam 檔案

  3. 根據資料庫大小,可能需要一些時間匯入


適應 Logseq 的使用方式

轉換完成後,你可能會發現一些與 Roam 不同的小差異:

  • 每日筆記頁 vs Journals:Roam 的 Daily Notes 等同於 Logseq 的 Journals,功能相同。

  • 大小寫敏感:Roam 中 [[Productivity]] 與 [[productivity]] 是不同頁面;Logseq 中則被視為相同頁面。

  • 查詢語法不同:Logseq 有自己的查詢語法,需花時間學習。

  • 別名功能(Aliases):在 [[coffee]] 頁的第一行輸入 alias:: latte, espresso,搜尋 [[latte]] 就會導向 coffee 頁。

  • Readwise 整合:Logseq 尚未支援 Readwise,可透過 Obsidian 間接同步(使用同一個資料夾)。

  • 未連結參考:Roam 可直接點選連結,Logseq 需手動加入雙中括號 [[...]]


無論你選擇 Roam 還是 Logseq,重點不在於工具本身,而在於你如何利用它來強化思維與創造力。

2025/08/03

「財富加速度指標」是什麼?

 

「財富加速度指標」是什麼?


想像全世界的財富在比賽跑步。

  • 頂尖 100 位富豪=最會衝刺的選手。

  • **全球經濟(GDP)**=整隊人馬的平均速度。

  • **通膨(CPI)**=地面在後退,代表東西越來越貴。


指標怎麼算?

  1. 先算富豪們一年跑多快

    \text{富豪年增速} = \frac{\text{今年富豪財富}}{\text{去年富豪財富}} - 1

  2. 再算全球經濟一年跑多快(同樣公式,用全球 GDP)

  3. 把兩者相減

    \text{速度差} = \text{富豪年增速} - \text{全球 GDP 年增速}


  • 如果 速度差 > 0:富豪跑得比世界平均快 → 他們切走的蛋糕份額變大。

  • 如果 速度差 < 0:富豪跑得慢 → 份額縮小。


能拿來推估什麼?


看看 2001→2024 的數據

  • 世界 GDP 速度 ≈ 4.5 %/年

  • 富豪財富速度 ≈ 8.6 %/年


→ 富豪平均每年多跑 4.1 個百分點,20 年累積就「切」走更大的餅。


國中生可以用它思考的問題

想一想

為什麼有趣?

1. 我的零用錢或存款成長有多快?

如果你的存錢速度 < 4 %/年,代表連世界經濟都追不上,更別說富豪。

2. 物價漲 3 %,但我存款利息只有 1 %,結果會怎樣?

指標提醒:地面在後退(通膨),存款其實被「吃掉」。

3. 為何股市大漲時富豪財富飆升,但大多數人感受不到?

因為富豪擁有大量股票,他們跟著股市一起「加速」。

4. 災難年(如 2008、2020)大家都變窮嗎?

指標顯示:有些年富豪財富也會大減,但之後回彈更快。為什麼?可以觀察政府救市、科技反彈。

5. 如果未來 AI 讓少數公司很賺錢,世界會更不平等嗎?

可以預測:頂尖富豪多持股這些公司→速度差可能拉得更大。


簡單結論

  • 這個指標像速度計:告訴你誰跑得最快。

  • 它讓我們看到:為何「有錢人越來越有錢」不只是感覺,而是可量化的事實。

  • 對學生的意義:了解金錢、通膨和經濟增長的關係,提早學會為自己的存錢與投資「加速」,至少要跑贏通膨和 GDP!

Tracking Billionaire Wealth: Long-Term Projects & Datasets

 

Tracking Billionaire Wealth: Long-Term Projects & Datasets


World Inequality Database (WID.world)


The World Inequality Database (WID) is a globally recognized academic project tracking income and wealth distribution. It provides open-access data and interactive tools for comparing wealth across populations. WID incorporates billionaire wealth into its analyses to illuminate extreme wealth inequality. Notably, the World Inequality Report 2022highlighted that billionaire fortunes have grown much faster than average wealth: “The wealth of the richest individuals on earth has grown at 6–9% per year since 1995, whereas average wealth has grown at 3.2% per year. Since 1995, the share of global wealth possessed by billionaires has risen from 1% to over 3%.” This increase accelerated during the COVID-19 pandemic, which saw the largest recorded jump in billionaire wealth share .

  • Data & Coverage: WID offers data on wealth distribution for most countries, covering the entire spectrum from the bottom 50% to the top 0.001% (billionaires). In a recent methodology update, WID researchers compiled a country-by-country dataset of billionaire wealth (number of billionaires and their total net worth per country, 1995–2023) by harmonizing Forbes rich-list data . This ensures the top tail of wealth is captured in WID’s open data.

  • Interactive Tools: WID’s online platform includes a Wealth Comparator that lets individuals see where they rank in the wealth distribution. While primarily focused on percentiles, this tool implicitly benchmarks users against top wealth holders. WID’s data can be downloaded or accessed via an API, enabling reproducible research. All methodologies and assumptions are published transparently , addressing concerns that commercial billionaire rankings (Forbes, Bloomberg, etc.) lack full transparency .

  • Key Metrics: Users can explore metrics like the top 1% or top 0.01% wealth shares over time, the aggregate wealth of billionaires as a fraction of national or global wealth, and wealth growth rates by segment. For example, WID data shows how billionaire wealth grew ~2× faster than average wealth over the past ~25 years, contributing to the top 1% capturing ~38% of global wealth growth since 1995 .


Gapminder “Billionaires” Open Dataset


The Gapminder Foundation (a reputable NGO known for its data visualizations) maintains an open-source Billionaires Dataset that tracks billionaire net worth over time. This project is actively maintained and freely available on GitHub . Gapminder created it to provide a fact-based view of wealth extremes and to integrate billionaires into its famous “income mountain” charts of global income distribution.

  • Data Sources & Methodology: Gapminder scraped data from Forbes’ “World’s Billionaires” lists and the Hurun Global Rich List, then merged them into a single dataset . Each billionaire is assigned a unique ID, and duplicate entries (appearing in both Forbes and Hurun) were reconciled by keeping Forbes as primary . The dataset includes each billionaire’s name, age, country, source of wealth, and net worth as reported. All net worth figures from various years are normalized to constant 2011 USD for comparability . Notably, Gapminder also calculates a “daily income” from net worth by assuming a 3% annual return on assets – offering a tangible metric of how much income a fortune of that size could theoretically generate.

  • Coverage: The dataset currently covers 2002 through 2022 on an annual basis . It tracks the entry and exit of individual billionaires each year, allowing analysis of wealth trajectories over two decades. (For example, one can see how many billionaires existed in 2002 versus 2022, or how individual fortunes grew.)

  • Utility for Benchmarking: By including billionaires in its income distribution “mountain” charts, Gapminder helps ordinary individuals visualize where the wealthiest stand relative to everyone else. The data can be used to compare an average person’s income or wealth growth to the “billionaire index” – e.g. one could ask, “If my savings grew 5% a year, how does that compare to the 6–9% annual growth of billionaire wealth observed globally?” Gapminder’s open dataset and visualizations thus serve as a comparative tool, illustrating the gap between typical financial trajectories and the extreme top end. The data and code are openly accessible for anyone looking to reproduce or extend the analysis .


Forbes “World’s Billionaires” Lists (Annual & Real-Time)


Forbes magazine’s World’s Billionaires list is a well-known, long-running index of billionaire wealth. It is published annually (since 1987) and has become a de-facto data source for researchers and NGOs examining wealth inequality. In addition, Forbes runs a Real-Time Billionaires tracker online, updated daily, which monitors day-to-day net worth changes of the top several hundred richest individuals.

  • Trust & Popularity: Forbes’ billionaire data is widely cited in academic studies, NGO reports, and media articles. For example, Oxfam and the World Inequality Lab both utilize Forbes figures to highlight trends (with appropriate caveats on methodology). The Forbes list is considered long-term and continuously maintained – now in its 39th year, it recorded an all-time high of 3,028 billionaires in 2025 with a combined wealth of $16.1 trillion . These figures are often used as headline metrics for global wealth concentration.

  • Data & Methodology: Forbes employs researchers to value individuals’ assets (public holdings marked to market, private businesses estimated via revenue multiples, plus real estate, art, etc., minus debt) . The annual list provides each billionaire’s net worth snapshot (in USD) as of a certain date, along with age, nationality, and source of wealth. Forbes’ historical data allows tracking of wealth over decades – e.g. comparing the number of billionaires and total billionaire wealth now versus 10 or 20 years ago. (In 2001 there were under 600 billionaires; by 2025, over 3,000.) The criteria exclude royal families and heads of state where wealth is tied to position for consistency.

  • Key Metrics: Every annual release reports the total count of billionaires and aggregate net worth, plus year-over-year changes. For instance, the 2024 list identified 2,781 billionaires worth $14.2 trillion, up $2 trillion from the prior year . Forbes often highlights the biggest gainers or losers, new entrants, and the cutoff net worth for entry. This provides a benchmark against which one might compare broader economic trends (e.g., global GDP growth vs. billionaire wealth growth). While the raw Forbes data isn’t open-source, it is publicly reported and has been compiled into accessible formats by third parties (including Wikipedia tables and Kaggle datasets).


Bloomberg Billionaires Index


The Bloomberg Billionaires Index is another highly regarded tracker, maintained by Bloomberg News. Launched in 2012, it is an interactive daily ranking of the world’s 500 richest people. Bloomberg’s index is updated at the close of each trading day, reflecting stock price movements and other wealth events in near-real-time .

  • Features: The Bloomberg index provides a profile for each of the top 500 billionaires, including current net worth, one-day and year-to-date changes, source of wealth, and other details. Uniquely, it offers a comparison tool so users can select multiple billionaires and visualize their fortune sizes and changes side by side . This can serve as a benchmarking tool for curiosity (“How do two different tech moguls’ net worths compare over time?”) if not for personal finances directly. It is nonetheless a dramatic illustration of wealth velocity at the top.

  • Data Updates: Because it updates daily on trading days , the Bloomberg index effectively captures the volatility and momentum of billionaire wealth. For example, if tech stocks rally and add tens of billions to certain fortunes in a week, the index records that immediate surge. The index’s methodology draws from Bloomberg’s financial data terminals, estimating private asset values and using market prices for public holdings. It is maintained by a team of analysts, ensuring credibility.

  • Key Metrics: Bloomberg’s dashboard highlights metrics like each billionaire’s net worth (in USD), daily change (in dollars and percent), and rank. Aggregate statistics are also notable: as of late 2024, the total net worth of the Bloomberg Top 500 was about $9.8 trillion . Users can observe how much wealth is concentrated in just a few hundred individuals and how quickly it shifts. For instance, in 2021–2022, rapid market changes saw some top billionaires’ fortunes swing by tens of billions in months – an indicator of “wealth velocity” at the pinnacle.


Open Data Projects on GitHub & Kaggle


A number of open-source projects and community-contributed datasets have sprung up to facilitate analysis of billionaire wealth. These leverage publicly reported data (primarily Forbes) and often extend it or visualize it in novel ways. Such projects are valuable for researchers or individuals who want to reproduce analyses or benchmark their own wealth trajectory against billionaires over time.

  • Kaggle Datasets: On the data science platform Kaggle, users have compiled historical billionaire data. One example is “The World’s Billionaires Dataset 1987–2022”, which contains information on billionaires over 35 years. According to its documentation, this dataset includes each billionaire’s name, age, nationality, net worth, source of wealth, the year, and their ranking on the list . Another Kaggle dataset provides the Forbes 2024 list of 2,780+ billionaires in CSV form (with fields like country, industry, etc.). These datasets are not official but are openly shared and often updated when new Forbes lists come out . They enable anyone to perform exploratory analysis – for example, plotting the growth of total billionaire wealth vs. global median wealth, or examining turnover (how many new billionaires appear each year).

  • GitHub Projects: Developers and researchers have also created GitHub repositories analyzing wealth concentration. For instance, some projects focus on wealth distribution among billionaires (using code to parse Forbes data each year) and apply machine learning to find patterns in how billionaire fortunes grow. An example repository (RemleyGHooker/Wealth-Distribution-Among-Billionaires-Project) uses an “annually updated dataset on billionaires” to study statistical patterns and factors like age, self-made vs. inherited, etc., publishing the code and findings openly.

  • Reproducibility: Because these community datasets are accessible, they allow for transparent, reproducible analysis. Students, journalists, or curious individuals can use them to benchmark personal financial scenarios in context. For instance, one could calculate: “If I started with $10,000 in 2000 and grew my net worth by 5% yearly, I’d have ~$X today – whereas the average billionaire’s net worth grew much faster.” By drawing directly on the billionaire data, such comparisons become concrete. Tools like Jupyter notebooks (often shared on Kaggle/GitHub) show step-by-step how to make these calculations, fostering public understanding of wealth dynamics.


NGO & Advocacy Research (Oxfam, Inequality.org)


Global NGOs and inequality research groups actively track billionaire wealth as a bellwether of economic inequality, often releasing ongoing reports and interactive updates. While not always “datasets” in the open-data sense, these projects compile credible data (typically from Forbes or similar) into accessible indices and narratives that help the public benchmark their own situation against the ultrarich.

  • Oxfam’s Inequality Reports: Oxfam, an international NGO, publishes high-profile reports (often timed with the World Economic Forum at Davos) that use billionaire wealth as an inequality indicator. These reports are widely cited for statistics like the acceleration of billionaire wealth vs. stagnant poverty reduction. In 2024, Oxfam reported that the number of billionaires grew to 2,769 (from 2,565 in 2023), and their combined wealth surged from $13 trillion to $15 trillion in one year . They highlighted that the world’s ten richest men were gaining about $100 million a day on average during that period . Oxfam makes its methodology public (often a methodology note accompanies the report ), so others can see how the figures were derived (usually drawing on Forbes data and comparing it to broader economic data like World Bank poverty stats ).

  • Institute for Policy Studies (Inequality.org): In the U.S., the Institute for Policy Studies runs Inequality.org, which has an interactive billionaire wealth tracker updated periodically. They particularly track U.S. billionaire fortunes and their changes since the start of the COVID-19 pandemic. For example, IPS reported that from March 2020 to March 2024, the total wealth of U.S. billionaires jumped +87.6% (an increase of $2.58 trillion) – from roughly $2.95 trillion to $5.53 trillion . They provide running commentary and charts on how many new billionaires emerged and how concentrated wealth has become (e.g., the number of “centi-billionaires” worth over $100B). Such trackers help ordinary citizens put their own pandemic experience in perspective: while many struggled, the billionaire class saw enormous gains, quantifiable through these tools.

  • Purpose and Accessibility: These NGO-led projects use billionaire wealth as a comparative index to advocate for policy change. By showing, for instance, that billionaires’ wealth grew three times faster than the average in the past year , they enable readers to benchmark macro trends against their own stagnating wages or savings. Data transparency varies: some, like Inequality.org, directly cite sources and even link to Forbes’ real-time data , ensuring credibility. While the focus is on storytelling and advocacy, the underlying data is often available or reproducible from public sources, aligning with the goal of transparency and fact-based debate.


Sources

  1. World Inequality Report 2022 – World Inequality Lab (Chapter 4: “Global wealth inequality: the rise of multimillionaires”) 

  2. WID.world Technical Note 2025-01 – World Inequality Lab (integration of Forbes billionaire data, 1995–2023) 

  3. Gapminder Billionaires Dataset Documentation – Gapminder.org

  4. Forbes “The World’s Billionaires” 2024/2025 – Wikipedia summary of Forbes data

  5. Bloomberg Billionaires Index – Wikipedia (overview and methodology) 

  6. Kaggle “World’s Billionaires Dataset 1987–2022” – LinkedIn article by dataset author

  7. Oxfam Press Release (2024) – Oxfam International

  8. “Billionaire Wealth: Pandemic Surge” – Inequality.org (Institute for Policy Studies)

「全球財富速度年報」on GitHub

 絕對同意!把整套指標做成 GitHub 專案(而不是單篇報告)有 3 大好處:

  1. 可 fork/pull request:任何人都能改進抓資料腳本、加新圖表、翻譯 README。

  2. 版本化資料:每年 freeze 的 CSV 直接放在 repo,過往版本一鍵回溯。

  3. 自動化 CI:用 GitHub Actions 定期拉 API、產生最新圖表,首頁 README 立即顯示。


建議的 Repo 架構

wealth-velocity/
├─ data/
│  ├─ raw/               # 原始檔 (Forbes CSV, WEO Excel)
│  ├─ freeze/
│  │   ├─ 2025.csv       # 年度鎖檔:year,top10,top100,all,gdp,cpi
│  │   └─ 2024.csv
│  └─ processed.parquet  # 由腳本自動生成供 Notebook 使用
├─ scripts/
│  ├─ fetch_forbes.py    # 下載年榜並計算 top10/top100/all
│  ├─ fetch_worldbank.py # 抓 GDP
│  ├─ fetch_imf.py       # 抓 CPI
│  └─ build_dataset.py   # 整合以上 → data/processed
├─ notebooks/
│  ├─ 01_basic_analysis.ipynb  # 畫 YoY、Spread、份額線
│  └─ 02_personal_wvl_template.ipynb
├─ docs/
│  └─ index.md           # GitHub Pages 的說明網站
├─ .github/
│  ├─ workflows/
│  │   └─ ci.yml         # 每年 3/15 自動跑腳本並開 PR
│  └─ ISSUE_TEMPLATE.md
├─ LICENSE               # CC-BY 4.0 或 MIT(程式碼)
├─ README.md             # 專案簡介、快速開始
└─ CONTRIBUTING.md       # PR 流程、程式碼風格、資料來源守則


關鍵檔案要點


README.md

  • What & Why:一句話說明「追蹤全球頂層財富與 GDP/CPI 的超額增速」。

  • Quick startpip install -r requirements.txt → python scripts/build_dataset.py

  • Data policy:所有數據來自公開 API;Forbes 資料只存計算後的 aggregates,避免版權疑慮。


CONTRIBUTING.md

  1. 提 PR 流程

    • 新國家 GDP?→ 新增 isoMap、附源。

    • 修正數據?→ 必須在 data/raw 提供來源檔或連結。

  2. 程式碼規範:PEP 8、black、isort;Notebook 需 nbstripout 清空 output。


CI (ci.yml)

name: update-dataset
on:
  schedule:
    - cron: '0 8 15 3 *'     # 每年 3/15 08:00 UTC 跑
  workflow_dispatch:
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up Python
        uses: actions/setup-python@v5
        with: {python-version: '3.11'}
      - run: pip install -r requirements.txt
      - run: python scripts/build_dataset.py --auto-freeze
      - name: Commit & PR
        uses: peter-evans/create-pull-request@v6
        with:
          commit-message: 'chore(data): annual freeze $(date +%Y)'
          title: 'Annual data freeze $(date +%Y)'
這樣每年 Forbes 年榜一出(3/4 左右),CI 會自動下載新榜單、World Bank 與 IMF 資料,產生 data/freeze/2026.csv 並開 Pull Request,maintainer 確認後合併。


怎麼讓一般人也玩得起?

  • notebooks/02_personal_wvl_template.ipynb

    • 讀 data/processed.parquet

    • 讓使用者輸入自己近 5 年淨資產列表 → 自動算個人 YoY 與 WVL 等級

    • 產生雷達圖或階梯圖

    • 使用者可「在 Colab 開」,不必本地安裝 Python。


授權建議

資料

建議 License

說明

腳本/程式碼

MIT

允許商用與改作

年度 Freeze CSV

CC-BY 4.0

只要標註來源即可再散布

README 圖表

同 CC-BY

方便媒體引用


提升曝光與共創

  1. GitHub Topicseconomicswealth-inequalityopen-data

  2. GitHub Pages:用 docs/ 產生靜態網站,首頁即時呈現最新折線圖。

  3. Open Data Portals:將 data/freeze/*.csv 同步到 Kaggle Dataset,提高搜尋能見度。

  4. Issues 標籤good first issue 引導新手做小任務(翻譯 README、加單國 GDP 解析度)。


結語


轉成 GitHub 專案後,你將獲得:

  • 長期維護:CI 定時更新,資料永不落後。

  • 社群貢獻:任何人可 fork、修 bug、加功能。

  • 公信透明:資料、程式碼、生成流程一覽無遺,可複製可驗證。



Buy me a coffee